Update services layer
Clean code
This commit is contained in:
parent
80887fea4c
commit
7c74c553af
@ -283,6 +283,15 @@
|
||||
<version>${commons-io.version}</version>
|
||||
</dependency>
|
||||
<!-- End Lukman -->
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>${project.lombok.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
<organization>
|
||||
<name>Jasa Medika</name>
|
||||
|
||||
@ -1,40 +0,0 @@
|
||||
/*package com.jasamedika.medifirst2000.chace;
|
||||
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
||||
import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
|
||||
|
||||
|
||||
@Configuration
|
||||
@EnableCaching
|
||||
@ComponentScan({ "com.jasamedika.*" })
|
||||
public class ChaceConfig {
|
||||
|
||||
@Bean
|
||||
public CacheManager cacheManager() {
|
||||
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Bean
|
||||
public EhCacheManagerFactoryBean ehCacheCacheManager() {
|
||||
EhCacheManagerFactoryBean cmfb = new EhCacheManagerFactoryBean();
|
||||
cmfb.setConfigLocation(new ClassPathResource("ehcache.xml"));
|
||||
cmfb.setShared(true);
|
||||
|
||||
return cmfb;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CacheManager defaultCacheManager() {
|
||||
return new ConcurrentMapCacheManager("books");
|
||||
}
|
||||
|
||||
}*/
|
||||
@ -1,9 +1,9 @@
|
||||
package com.jasamedika.medifirst2000.converter.base;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Base Converter Class between V and VO
|
||||
*
|
||||
@ -14,28 +14,19 @@ public interface BaseVoConverter<V, T extends BaseModel> {
|
||||
/**
|
||||
* transfer value from vo object to domain object for enum value, please do
|
||||
* manually using Enum.values()[ordinal]
|
||||
*
|
||||
* @param vo
|
||||
* @param model
|
||||
* @return
|
||||
*/
|
||||
public T transferVOToModel(V vo, T model);
|
||||
*
|
||||
*/
|
||||
T transferVOToModel(V vo, T model);
|
||||
|
||||
/**
|
||||
* transfer value from list of domain object to list of vo object
|
||||
*
|
||||
* @param models
|
||||
* @param vos
|
||||
* @return
|
||||
*/
|
||||
public List<V> transferListOfModelToListOfVO(List<T> models, List<V> vos);
|
||||
*
|
||||
*/
|
||||
List<V> transferListOfModelToListOfVO(List<T> models, List<V> vos);
|
||||
|
||||
/**
|
||||
* transfer value from domain object to vo object
|
||||
*
|
||||
* @param model
|
||||
* @param vo
|
||||
* @return
|
||||
*/
|
||||
public V transferModelToVO(T model, V vo);
|
||||
*
|
||||
*/
|
||||
V transferModelToVO(T model, V vo);
|
||||
}
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
package com.jasamedika.medifirst2000.dao.custom.base;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.PaginationResult;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.QueryOrder;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* A data access object (DAO) providing persistence and search support for the
|
||||
* entities. Transaction control of the insert(), update() and remove()
|
||||
* operations can directly support Spring container-managed transactions or they
|
||||
* operations can directly support Spring container-managed transactions, or they
|
||||
* can be augmented to handle user-managed Spring transactions. Each of these
|
||||
* methods provides additional information for how to configure it for the
|
||||
* desired type of transaction control.
|
||||
@ -67,9 +67,9 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* null if not using.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. <br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results. <br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.
|
||||
* @return A pagination result
|
||||
*/
|
||||
@ -92,15 +92,15 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* The list of property name and sorting direction pairs. Set to
|
||||
* null, if not using.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return PagintationResult<T>
|
||||
*
|
||||
*/
|
||||
PaginationResult<T> paginateByMapOfProperties(
|
||||
Map<String, ? extends Object> propertiesMap,
|
||||
Map<String, ?> propertiesMap,
|
||||
List<String> leftJoinFetchColumns, List<QueryOrder> orders,
|
||||
final int... rowStartIdxAndCount);
|
||||
|
||||
@ -119,21 +119,21 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* Sorting orders. Set to null if not using.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. <br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results. <br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
PaginationResult<T> paginateLikeMapOfProperties(
|
||||
Map<String, ? extends Object> propertiesMap,
|
||||
Map<String, ?> propertiesMap,
|
||||
List<String> leftJoinFetchColumns, List<QueryOrder> orders,
|
||||
final int... rowStartIdxAndCount);
|
||||
|
||||
/**
|
||||
* Filters finding and counting instances by several criteria <br>
|
||||
* Finds instances using different criteria for different properties. All
|
||||
* criteria are stored in a list and they will all be added up to the query
|
||||
* criteria are stored in a list, and they will all be added up to the query
|
||||
* with <em>AND</em> relationship. Note that this is not an <em>OR</em>
|
||||
* filter.
|
||||
*
|
||||
@ -145,7 +145,7 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* <code>PropCriteriaAndValue</code> elements, which is a set of
|
||||
* three elements typically composed of the name of the property,
|
||||
* the criteria used to compare and the value to which that
|
||||
* property should be compared. However there are some criteria
|
||||
* property should be compared. However, there are some criteria
|
||||
* in which value should be null, or in which the value should be
|
||||
* a collection of values. <br>
|
||||
* Follows a list of the supported queryComparators for criteria
|
||||
@ -164,7 +164,7 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* <li>Property is compared with value which is a List or
|
||||
* Collection:
|
||||
* <ul>
|
||||
* <li>BEETWEEN List is advisable as it it ordered, although
|
||||
* <li>BEETWEEN List is advisable as it is ordered, although
|
||||
* collection is supported
|
||||
* <li>IN
|
||||
* </ul>
|
||||
@ -186,9 +186,9 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* Sorting orders. Set to null if not using.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. <br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results. <br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.
|
||||
* @return PaginationResult<T>
|
||||
* @see com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue
|
||||
@ -201,13 +201,13 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* Finds and counts all elements of the table in order.
|
||||
*
|
||||
* @param leftJoinFetchColumns
|
||||
* List of left join fetch property name..
|
||||
* List of left join fetch property name.
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return PaginationResult<T>
|
||||
*/
|
||||
@ -228,9 +228,9 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return PaginationResult<T>
|
||||
*/
|
||||
@ -256,7 +256,7 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* do "OR" Expression (Disjunction). The method will ignore the third and
|
||||
* successive parameters in case we have them, such as
|
||||
* removeBulkUsingFilter(filter, true, true, true, false), this would just
|
||||
* consider the first one (will be consider as "AND" Expression).
|
||||
* consider the first one (will be considered as "AND" Expression).
|
||||
*
|
||||
* @param filter
|
||||
* the list of <code>PropCriteriaAndValue</code> filter.
|
||||
@ -264,7 +264,7 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
* Comparison expression either is conjunction ("AND") or
|
||||
* disjunction ("OR"). Put <code>null</code> will make the
|
||||
* expression is ("AND") by default. "false, true, true" will be
|
||||
* consider as "OR", "true, false, true" will be consider as
|
||||
* considered as "OR", "true, false, true" will be considered as
|
||||
* "AND" only take first element, and ignore the rest.
|
||||
*
|
||||
* @return true, if successful {@inheritDoc}
|
||||
@ -274,9 +274,8 @@ public interface CoreDao<T extends BaseModel> extends FindLayerDao<T> {
|
||||
|
||||
/**
|
||||
* Remove object from session cache.
|
||||
*
|
||||
* @param coreDomain
|
||||
*/
|
||||
*
|
||||
*/
|
||||
void evict(BaseModel coreDomain);
|
||||
|
||||
}
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package com.jasamedika.medifirst2000.dao.custom.base;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Roberto
|
||||
*
|
||||
@ -30,7 +30,7 @@ public interface CountLayerDao<T extends BaseModel> extends KernelDao<T> {
|
||||
* searched values, supports <code>null</code>
|
||||
* @return List<T>
|
||||
*/
|
||||
Integer countByMapOfProperties(Map<String, ? extends Object> propertiesMap);
|
||||
Integer countByMapOfProperties(Map<String, ?> propertiesMap);
|
||||
|
||||
/**
|
||||
* Performs the count operation equivalent to the
|
||||
@ -55,7 +55,7 @@ public interface CountLayerDao<T extends BaseModel> extends KernelDao<T> {
|
||||
* searched values, supports <code>null</code>
|
||||
* @return Integer
|
||||
*/
|
||||
Integer countLikeMapOfProperties(Map<String, ? extends Object> propertiesMap);
|
||||
Integer countLikeMapOfProperties(Map<String, ?> propertiesMap);
|
||||
|
||||
/**
|
||||
* Performs the count operation equivalent to the
|
||||
@ -72,7 +72,7 @@ public interface CountLayerDao<T extends BaseModel> extends KernelDao<T> {
|
||||
/**
|
||||
* Counts filtered instances by several criteria <br>
|
||||
* Finds instances using different criteria for different properties. All
|
||||
* criteria are stored in a list and they will all be added up to the query
|
||||
* criteria are stored in a list, and they will all be added up to the query
|
||||
* with <em>AND</em> relationship. Note that this is not an <em>OR</em>
|
||||
* filter.
|
||||
*
|
||||
@ -81,7 +81,7 @@ public interface CountLayerDao<T extends BaseModel> extends KernelDao<T> {
|
||||
* <code>PropCriteriaAndValue</code> elements, which is a set of
|
||||
* three elements typically composed of the name of the property,
|
||||
* the criteria used for comparation and the value to which that
|
||||
* property should be compared. However there are some criteria
|
||||
* property should be compared. However, there are some criteria
|
||||
* in which value should be null, or in which the value should be
|
||||
* a collection of values. <br>
|
||||
* Follows a list of the supported queryComparators for criteria
|
||||
@ -100,7 +100,7 @@ public interface CountLayerDao<T extends BaseModel> extends KernelDao<T> {
|
||||
* <li>Property is compared with value which is a List or
|
||||
* Collection:
|
||||
* <ul>
|
||||
* <li>BEETWEEN List is mandatory as it it ordered
|
||||
* <li>BEETWEEN List is mandatory as it is ordered
|
||||
* <li>IN
|
||||
* </ul>
|
||||
* <li>Property is checked against criteria regardless value
|
||||
|
||||
@ -1,13 +1,12 @@
|
||||
package com.jasamedika.medifirst2000.dao.custom.base;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.hibernate.NonUniqueResultException;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue;
|
||||
import com.jasamedika.medifirst2000.dao.custom.base.util.QueryOrder;
|
||||
import org.hibernate.NonUniqueResultException;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Roberto
|
||||
@ -16,7 +15,7 @@ import com.jasamedika.medifirst2000.dao.custom.base.util.QueryOrder;
|
||||
public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
|
||||
/**
|
||||
* Finds an instance by its Id.
|
||||
* Finds an instance by its ID.
|
||||
*
|
||||
* @param id
|
||||
* the id
|
||||
@ -26,7 +25,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
T findById(Integer id);
|
||||
|
||||
/**
|
||||
* Finds an instance by its Id, eagerly fetching specific child objects.
|
||||
* Finds an instance by its ID, eagerly fetching specific child objects.
|
||||
*
|
||||
* @param id
|
||||
* The id to look up for
|
||||
@ -41,9 +40,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* Finds all elements of the table.
|
||||
*
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -53,13 +52,13 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* Finds all elements of the table in order.
|
||||
*
|
||||
* @param leftJoinFetchColumns
|
||||
* List of left join fetch property name..
|
||||
* List of left join fetch property name.
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -75,9 +74,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param value
|
||||
* The value of the property.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -111,9 +110,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* The list of property name and sorting direction pairs.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -134,9 +133,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* The list of property name and sorting direction pairs.
|
||||
*
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -154,9 +153,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param value
|
||||
* the value
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -175,9 +174,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* The order clause.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -198,9 +197,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
@ -211,7 +210,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
/**
|
||||
* Filters instances by several criteria <br>
|
||||
* Finds instances using different criteria for different properties. All
|
||||
* criteria are stored in a list and they will all be added up to the query
|
||||
* criteria are stored in a list, and they will all be added up to the query
|
||||
* with <em>AND</em> relationship. Note that this is not an <em>OR</em>
|
||||
* filter.
|
||||
*
|
||||
@ -220,7 +219,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <code>PropCriteriaAndValue</code> elements, which is a set of
|
||||
* three elements typically composed of the name of the property,
|
||||
* the criteria used to compare and the value to which that
|
||||
* property should be compared. However there are some criteria
|
||||
* property should be compared. However, there are some criteria
|
||||
* in which value should be null, or in which the value should be
|
||||
* a collection of values. <br>
|
||||
* Follows a list of the supported queryComparators for criteria
|
||||
@ -239,7 +238,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <li>Property is compared with value which is a List or
|
||||
* Collection:
|
||||
* <ul>
|
||||
* <li>BEETWEEN List is advisable as it it ordered, although
|
||||
* <li>BEETWEEN List is advisable as it is ordered, although
|
||||
* collection is supported
|
||||
* <li>IN
|
||||
* </ul>
|
||||
@ -258,9 +257,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* </ul>
|
||||
* See <code>PropCriteriaAndValue</code> for more details.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
* @see com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue
|
||||
@ -271,7 +270,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
/**
|
||||
* Filters instances by several criteria <br>
|
||||
* Finds instances using different criteria for different properties. All
|
||||
* criteria are stored in a list and they will all be added up to the query
|
||||
* criteria are stored in a list, and they will all be added up to the query
|
||||
* with <em>AND</em> relationship. Note that this is not an <em>OR</em>
|
||||
* filter.
|
||||
*
|
||||
@ -280,7 +279,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <code>PropCriteriaAndValue</code> elements, which is a set of
|
||||
* three elements typically composed of the name of the property,
|
||||
* the criteria used to compare and the value to which that
|
||||
* property should be compared. However there are some criteria
|
||||
* property should be compared. However, there are some criteria
|
||||
* in which value should be null, or in which the value should be
|
||||
* a collection of values. <br>
|
||||
* Follows a list of the supported queryComparators for criteria
|
||||
@ -299,7 +298,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <li>Property is compared with value which is a List or
|
||||
* Collection:
|
||||
* <ul>
|
||||
* <li>BEETWEEN List is advisable as it it ordered, although
|
||||
* <li>BEETWEEN List is advisable as it is ordered, although
|
||||
* collection is supported
|
||||
* <li>IN
|
||||
* </ul>
|
||||
@ -321,9 +320,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* Sorting orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. <br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results. <br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.
|
||||
* @return List<T>
|
||||
* @see com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue
|
||||
@ -334,7 +333,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
/**
|
||||
* Filters instances by several criteria <br>
|
||||
* Finds instances using different criteria for different properties. All
|
||||
* criteria are stored in a list and they will all be added up to the query
|
||||
* criteria are stored in a list, and they will all be added up to the query
|
||||
* with <em>AND</em> relationship. Note that this is not an <em>OR</em>
|
||||
* filter.
|
||||
*
|
||||
@ -345,7 +344,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <code>PropCriteriaAndValue</code> elements, which is a set of
|
||||
* three elements typically composed of the name of the property,
|
||||
* the criteria used to compare and the value to which that
|
||||
* property should be compared. However there are some criteria
|
||||
* property should be compared. However, there are some criteria
|
||||
* in which value should be null, or in which the value should be
|
||||
* a collection of values. <br>
|
||||
* Follows a list of the supported queryComparators for criteria
|
||||
@ -364,7 +363,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* <li>Property is compared with value which is a List or
|
||||
* Collection:
|
||||
* <ul>
|
||||
* <li>BEETWEEN List is advisable as it it ordered, although
|
||||
* <li>BEETWEEN List is advisable as it is ordered, although
|
||||
* collection is supported
|
||||
* <li>IN
|
||||
* </ul>
|
||||
@ -386,9 +385,9 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* Sorting orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. <br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results. <br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.
|
||||
* @return List<T>
|
||||
* @see com.jasamedika.medifirst2000.dao.custom.base.util.PropCriteriaAndValue
|
||||
@ -398,7 +397,7 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
final int... rowStartIdxAndCount);
|
||||
|
||||
/**
|
||||
* Finds instances by a map of properties in an specific order. All
|
||||
* Finds instances by a map of properties in a specific order. All
|
||||
* properties should be members of the entity. For foreign members do your
|
||||
* own custom query. In case that one of the properties value is null it
|
||||
* performs the IS NULL operation for that parameter.
|
||||
@ -409,13 +408,13 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* The list of property name and sorting direction pairs.
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
List<T> findByMapOfProperties(Map<String, ? extends Object> propertiesMap,
|
||||
List<T> findByMapOfProperties(Map<String, ?> propertiesMap,
|
||||
List<QueryOrder> orders, final int... rowStartIdxAndCount);
|
||||
|
||||
/**
|
||||
@ -433,13 +432,13 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* The list of property name and sorting direction pairs.
|
||||
*
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
List<T> findByMapOfProperties(Map<String, ? extends Object> propertiesMap,
|
||||
List<T> findByMapOfProperties(Map<String, ?> propertiesMap,
|
||||
List<String> leftJoinFetchColumns, List<QueryOrder> orders,
|
||||
final int... rowStartIdxAndCount);
|
||||
|
||||
@ -453,14 +452,14 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* A map containing the properties we're looking up for and their
|
||||
* searched values, supports <code>null</code>
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
List<T> findLikeMapOfProperties(
|
||||
Map<String, ? extends Object> propertiesMap,
|
||||
Map<String, ?> propertiesMap,
|
||||
final int... rowStartIdxAndCount);
|
||||
|
||||
/**
|
||||
@ -475,14 +474,14 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
List<T> findLikeMapOfProperties(
|
||||
Map<String, ? extends Object> propertiesMap,
|
||||
Map<String, ?> propertiesMap,
|
||||
List<QueryOrder> orders, final int... rowStartIdxAndCount);
|
||||
|
||||
/**
|
||||
@ -499,14 +498,14 @@ public interface FindLayerDao<T extends BaseModel> extends CountLayerDao<T> {
|
||||
* @param orders
|
||||
* the orders
|
||||
* @param rowStartIdxAndCount
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the the
|
||||
* Optional int varargs. rowStartIdxAndCount[0] specifies the
|
||||
* row index in the query result-set to begin collecting the
|
||||
* results. rowStartIdxAndCount[1] specifies the the maximum
|
||||
* results. rowStartIdxAndCount[1] specifies the maximum
|
||||
* number of results to return.
|
||||
* @return List<T>
|
||||
*/
|
||||
List<T> findLikeMapOfProperties(
|
||||
Map<String, ? extends Object> propertiesMap,
|
||||
Map<String, ?> propertiesMap,
|
||||
List<String> leftJoinFetchColumns, List<QueryOrder> orders,
|
||||
final int... rowStartIdxAndCount);
|
||||
}
|
||||
|
||||
@ -1,10 +1,9 @@
|
||||
package com.jasamedika.medifirst2000.dao.custom.base;
|
||||
|
||||
import java.util.List;
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
|
||||
import javax.persistence.Query;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* The Interface KernelDao
|
||||
@ -13,72 +12,53 @@ import com.jasamedika.medifirst2000.base.BaseModel;
|
||||
*/
|
||||
public interface KernelDao<T extends BaseModel> {
|
||||
|
||||
/** The Constant UNCHECKED. */
|
||||
String UNCHECKED = "unchecked";
|
||||
|
||||
/** The Constant I18N_INSTANCE. */
|
||||
String I18N_INSTANCE = " instance";
|
||||
|
||||
/** The Constant I18N_INSERT. */
|
||||
String I18N_INSERT = "insert ";
|
||||
|
||||
/** The Constant I18N_UPDATE. */
|
||||
String I18N_UPDATE = "update ";
|
||||
|
||||
/** The Constant I18N_REMOVE. */
|
||||
String I18N_REMOVE = "remove ";
|
||||
|
||||
/** The Constant I18N_FIND. */
|
||||
String I18N_FIND = "find ";
|
||||
|
||||
/** The Constant I18N_COUNT. */
|
||||
String I18N_COUNT = "count ";
|
||||
|
||||
/** The Constant I18N_FAILED. */
|
||||
String I18N_FAILED = " failed";
|
||||
|
||||
/** The Constant I18N_SUCCEED. */
|
||||
String I18N_SUCCEED = " succesfull";
|
||||
|
||||
/** The Constant I18N_INSTANCE_WITH_PROPERTY. */
|
||||
String I18N_INSTANCE_WITH_PROPERTY = " " + I18N_INSTANCE
|
||||
+ " with property: ";
|
||||
String I18N_INSTANCE_WITH_PROPERTY = " " + I18N_INSTANCE + " with property: ";
|
||||
|
||||
/** The Constant I18N_VALUE. */
|
||||
String I18N_VALUE = " value: ";
|
||||
|
||||
/** The Constant AS_MODEL */
|
||||
String AS_MODEL = " AS model ";
|
||||
|
||||
/** The Constant WHERE */
|
||||
String WHERE = " WHERE ";
|
||||
|
||||
/** The Constant AND */
|
||||
String AND = " AND ";
|
||||
|
||||
/** The Constant AND */
|
||||
String OR = " OR ";
|
||||
|
||||
/** The Constant I18N_REMOVE_BULK. */
|
||||
String I18N_REMOVE_BULK = "remove bulk on ";
|
||||
|
||||
/** The Constant JOIN_TEXT_ESTIMATED_LENGTH */
|
||||
int JOIN_TEXT_ESTIMATED_LENGTH = 32;
|
||||
|
||||
/** The Constant JOIN_FETCH_TEXT_ESTIMATED_LENGTH */
|
||||
int ORDER_BY_TEXT_ESTIMATED_LENGTH = 32;
|
||||
|
||||
/**
|
||||
* Method that performs the, optionally paginated, query. It saves
|
||||
* Method that performs the optionally paginated, query. It saves
|
||||
* duplicating code lines.
|
||||
*
|
||||
* @param query
|
||||
* Already well formed query with all parameters passed
|
||||
* Already well-formed query with all parameters passed
|
||||
* @param rowStartIdxAndCount
|
||||
* rowStartIdxAndCount Optional int varargs.<br>
|
||||
* rowStartIdxAndCount[0] specifies the the row index in the
|
||||
* rowStartIdxAndCount[0] specifies the row index in the
|
||||
* query result-set to begin collecting the results.<br>
|
||||
* rowStartIdxAndCount[1] specifies the the maximum number of
|
||||
* rowStartIdxAndCount[1] specifies the maximum number of
|
||||
* results to return.<br>
|
||||
* @return The resulting list of the query
|
||||
* @author Roberto
|
||||
|
||||
@ -1,18 +1,14 @@
|
||||
package com.jasamedika.medifirst2000.exception;
|
||||
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* ServiceVOException is class for containing exception that throw in service layer
|
||||
*
|
||||
* @author Roberto
|
||||
*/
|
||||
@NoArgsConstructor
|
||||
public class ServiceVOException extends RuntimeException {
|
||||
/**
|
||||
* serialVersionUID
|
||||
*/
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public ServiceVOException() {
|
||||
}
|
||||
|
||||
public ServiceVOException(String s) {
|
||||
super(s);
|
||||
|
||||
@ -1,81 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.logging;
|
||||
|
||||
import org.aspectj.lang.JoinPoint;
|
||||
import org.aspectj.lang.annotation.AfterReturning;
|
||||
import org.aspectj.lang.annotation.Aspect;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import com.jasamedika.medifirst2000.base.BaseMaster;
|
||||
import com.jasamedika.medifirst2000.base.BaseTransaction;
|
||||
import com.jasamedika.medifirst2000.dao.ActivityLogRepository;
|
||||
import com.jasamedika.medifirst2000.entities.ActivityLog;
|
||||
import com.jasamedika.medifirst2000.entities.LoginUser;
|
||||
import com.jasamedika.medifirst2000.service.LoginUserService;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Hutagalung
|
||||
*/
|
||||
@Aspect
|
||||
public class LoggingAdvise {
|
||||
|
||||
private final Logger LOG = LoggerFactory.getLogger(LoggingAdvise.class);
|
||||
|
||||
@Autowired
|
||||
private ActivityLogRepository activityLogRepository;
|
||||
|
||||
@Autowired
|
||||
private LoginUserService loginUserService;
|
||||
|
||||
private StringBuffer buffer, detail;
|
||||
|
||||
/*@AfterReturning("execution(* com.jasamedika.medifirst2000.service.*.add(*)) && args(object)")
|
||||
public void logAddAction(JoinPoint jp, Object object) throws Throwable {
|
||||
logActivity(" creates new data: ", object);
|
||||
}*/
|
||||
|
||||
@AfterReturning("execution(* com.jasamedika.medifirst2000.dao.*.save(*)) && args(object)")
|
||||
public void logUpdateAction(JoinPoint jp, Object object) throws Throwable {
|
||||
logActivity(object);
|
||||
}
|
||||
|
||||
private void logActivity(Object object) {
|
||||
// get current user
|
||||
LoginUser currentUser = loginUserService.getLoginUser();
|
||||
|
||||
buffer = new StringBuffer();
|
||||
buffer.append(currentUser.getNamaUser());
|
||||
|
||||
// checking action
|
||||
if (object instanceof BaseMaster) {/*
|
||||
if (((BaseMaster) object).getId() == null) {
|
||||
buffer.append(" inserts master record ");
|
||||
} else {
|
||||
buffer.append(" updates master record ");
|
||||
}
|
||||
*/} else if (object instanceof BaseTransaction) {
|
||||
if (((BaseTransaction) object).getNoRec().isEmpty()) {
|
||||
buffer.append(" insert transaction record ");
|
||||
} else {
|
||||
buffer.append(" updates transactionr record ");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
detail = new StringBuffer();
|
||||
try {
|
||||
detail.append(ObjectUtil.getColumnNamesAndValues(object));
|
||||
} catch(IllegalAccessException | IllegalArgumentException e) {
|
||||
LOG.error("LogActivity exception: {}", e.getMessage());
|
||||
}
|
||||
|
||||
ActivityLog activityLog = new ActivityLog();
|
||||
activityLog.setAction(buffer.toString());
|
||||
activityLog.setDetail(detail.toString());
|
||||
activityLogRepository.save(activityLog);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -1,47 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.logging;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.support.ClassPathXmlApplicationContext;
|
||||
|
||||
import com.jasamedika.medifirst2000.logging.dao.LoggingJdbcDaoImpl;
|
||||
import com.jasamedika.medifirst2000.logging.entities.Logging;
|
||||
|
||||
/**
|
||||
* Kelas Test
|
||||
*
|
||||
* @author Roberto
|
||||
*/
|
||||
public class MainLoggingApp {
|
||||
public static void main(String[] args) {
|
||||
ApplicationContext context = new ClassPathXmlApplicationContext(
|
||||
"classpath*:com/jasamedika/**/applicationContext.xml");
|
||||
|
||||
LoggingJdbcDaoImpl loggingJDBCTemplate = (LoggingJdbcDaoImpl) context
|
||||
.getBean("loggingJdbcDaoImpl");
|
||||
|
||||
System.out.println("------Records Creation--------");
|
||||
loggingJDBCTemplate.create("Nama 1", "Desc 1");
|
||||
loggingJDBCTemplate.create("Nama 2", "Desc 2");
|
||||
loggingJDBCTemplate.create("Nama 3", "Desc 3");
|
||||
|
||||
System.out.println("------Listing Multiple Records--------");
|
||||
List<Logging> loggings = loggingJDBCTemplate.listLoggings();
|
||||
for (Logging record : loggings) {
|
||||
System.out.print("ID : " + record.getId());
|
||||
System.out.print(", Nama : " + record.getNama());
|
||||
System.out.println(", Deskripsi : " + record.getDeskripsi());
|
||||
}
|
||||
|
||||
System.out.println("----Updating Record with ID = 2 -----");
|
||||
loggingJDBCTemplate.update(2, "Updated Nama 2", "Updated Desc");
|
||||
|
||||
System.out.println("----Listing Record with ID = 2 -----");
|
||||
Logging logging = loggingJDBCTemplate.getLogging(2);
|
||||
System.out.print("ID : " + logging.getId());
|
||||
System.out.print(", Nama : " + logging.getNama());
|
||||
System.out.println(", Deskripsi : " + logging.getDeskripsi());
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,25 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.logging;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ObjectUtil {
|
||||
|
||||
private ObjectUtil() {}
|
||||
|
||||
public static Map<String, Object> getColumnNamesAndValues(final Object object)
|
||||
throws IllegalArgumentException, IllegalAccessException {
|
||||
Class<? extends Object> c = object.getClass();
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
for (Field field : c.getDeclaredFields()) {
|
||||
field.setAccessible(true);
|
||||
String name = field.getName();
|
||||
Object value = field.get(object);
|
||||
map.put(name, value);
|
||||
}
|
||||
return map;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,37 +1,18 @@
|
||||
package com.jasamedika.medifirst2000.logging.entities;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* Entiti class for Logging, contoh saja
|
||||
* Entity class for Logging
|
||||
*
|
||||
* @author Roberto
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class Logging {
|
||||
|
||||
private String deskripsi;
|
||||
private String nama;
|
||||
private Integer id;
|
||||
|
||||
public String getDeskripsi() {
|
||||
return deskripsi;
|
||||
}
|
||||
|
||||
public void setDeskripsi(String deskripsi) {
|
||||
this.deskripsi = deskripsi;
|
||||
}
|
||||
|
||||
public String getNama() {
|
||||
return nama;
|
||||
}
|
||||
|
||||
public void setNama(String nama) {
|
||||
this.nama = nama;
|
||||
}
|
||||
|
||||
public Integer getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Integer id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,18 +1,18 @@
|
||||
package com.jasamedika.medifirst2000.logging.entities.wrapper;
|
||||
|
||||
import com.jasamedika.medifirst2000.logging.entities.Logging;
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
|
||||
import org.springframework.jdbc.core.RowMapper;
|
||||
|
||||
import com.jasamedika.medifirst2000.logging.entities.Logging;
|
||||
|
||||
/**
|
||||
* Mapper class for Logging, contoh saja
|
||||
* Mapper class for Logging
|
||||
*
|
||||
* @author Roberto
|
||||
*/
|
||||
public class LoggingMapper implements RowMapper<Logging> {
|
||||
|
||||
public Logging mapRow(ResultSet rs, int rowNum) throws SQLException {
|
||||
Logging student = new Logging();
|
||||
student.setId(rs.getInt("id"));
|
||||
|
||||
@ -1,16 +1,17 @@
|
||||
package com.jasamedika.medifirst2000.logging.hibernate.async;
|
||||
|
||||
/**
|
||||
* @author Syamsu
|
||||
*/
|
||||
public class Constants {
|
||||
|
||||
public static final class HttpHeader {
|
||||
public static final String SUPERVISING = "Supervising";
|
||||
public static final String MODULE = "Module";
|
||||
public static final String FORM = "Form";
|
||||
public static final String ACTION = "Action";
|
||||
|
||||
public static final String URL_FORM = "AlamatUrlForm"; // syamsu
|
||||
public static final String KD_RUANGAN = "KdRuangan"; // syamsu
|
||||
public static final String KD_USER = "KdUser"; // syamsu
|
||||
|
||||
|
||||
public static final String URL_FORM = "AlamatUrlForm";
|
||||
public static final String KD_RUANGAN = "KdRuangan";
|
||||
public static final String KD_USER = "KdUser";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,23 +1,9 @@
|
||||
package com.jasamedika.medifirst2000.logging.hibernate.async;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Table;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.hibernate.type.Type;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
@ -26,6 +12,17 @@ import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Table;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.sql.DataSource;
|
||||
import java.io.Serializable;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.*;
|
||||
|
||||
import static com.jasamedika.medifirst2000.logging.hibernate.async.Constants.HttpHeader.SUPERVISING;
|
||||
import static org.slf4j.LoggerFactory.getLogger;
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
@ -35,7 +32,7 @@ import org.springframework.stereotype.Component;
|
||||
@Component
|
||||
public class LoggingSystemAsynchronous {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingSystemAsynchronous.class);
|
||||
private static final Logger LOGGER = getLogger(LoggingSystemAsynchronous.class);
|
||||
|
||||
@Autowired
|
||||
DataSource dataSource;
|
||||
@ -43,25 +40,21 @@ public class LoggingSystemAsynchronous {
|
||||
@Autowired
|
||||
HttpServletRequest request;
|
||||
|
||||
Map<String, Holder> commit = new HashMap<String, Holder>();
|
||||
Map<String, Holder> commit = new HashMap<>();
|
||||
|
||||
Object entity;
|
||||
|
||||
private static class Holder {
|
||||
String userName;
|
||||
String superVisor;
|
||||
|
||||
String host;
|
||||
|
||||
String noRecP;
|
||||
String detilCrud;
|
||||
String jSonObject;
|
||||
String method;
|
||||
String object;
|
||||
int kdHistoryLogin;
|
||||
|
||||
Date crudIn = new Date();
|
||||
|
||||
Object entity;
|
||||
Serializable id;
|
||||
Object[] currentState;
|
||||
@ -74,14 +67,10 @@ public class LoggingSystemAsynchronous {
|
||||
final Object o = new Object();
|
||||
|
||||
public void saveSignOutLog(String userName, int IdPegawai) {
|
||||
|
||||
JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource);
|
||||
|
||||
asynchMethodtoLogSign(0, 0, userName, IdPegawai, jdbcTemplateObject, false);
|
||||
}
|
||||
|
||||
/// SignIn Log
|
||||
|
||||
public void saveSignInLog(int modulaplikasiId, int ruanganId, String userName, int idPegawai) {
|
||||
String currentPrincipalName = "";
|
||||
if (userName == null) {
|
||||
@ -117,26 +106,21 @@ public class LoggingSystemAsynchronous {
|
||||
+ "nextval('historyloginmodulaplikasi_m_id_seq'), ?, ?, "
|
||||
+ "?, ?, ?, "
|
||||
+ "?, ?)";
|
||||
|
||||
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
|
||||
|
||||
String host = request.getRemoteHost();
|
||||
// String KdRuangan = request.getHeader(Constants.HttpHeader.KD_RUANGAN) == null ? "0"
|
||||
// : request.getHeader(Constants.HttpHeader.KD_RUANGAN);
|
||||
|
||||
try {
|
||||
jdbcTemplateObject
|
||||
.update("INSERT INTO modulaplikasi_s (id, kdprofile, statusenabled, norec, kdmodulaplikasi, modulaplikasi) "
|
||||
+ "VALUES (0, 0, true, '0000', '0', 'Belum Pilih Modul')");
|
||||
|
||||
jdbcTemplateObject.update("UPDATE modulaplikasi_s SET kdprofile = 0 WHERE id = 0");
|
||||
} catch (Throwable t) {
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try{
|
||||
jdbcTemplateObject.update("UPDATE modulaplikasi_s SET kdprofile = 0 WHERE id = 0");
|
||||
}catch(Throwable t){
|
||||
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
@ -144,12 +128,13 @@ public class LoggingSystemAsynchronous {
|
||||
.update("INSERT INTO modulaplikasi_m (id, kdprofile, statusenabled, norec, kdmodulaplikasi, modulaplikasi) "
|
||||
+ "VALUES (0, 0, true, '0000', '0', 'Belum Pilih Modul')");
|
||||
} catch (Throwable t) {
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try{
|
||||
jdbcTemplateObject.update("UPDATE modulaplikasi_m SET kdprofile = 0 WHERE id = 0");
|
||||
}catch(Throwable t){
|
||||
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
@ -158,75 +143,56 @@ public class LoggingSystemAsynchronous {
|
||||
.update("INSERT INTO ruangan_m (id, kdprofile, statusenabled, norec, kdruangan, namaruangan, qruangan) "
|
||||
+ "VALUES (0, 0, true, '0000', '0', 'Belum Pilih Ruangan', 0)");
|
||||
} catch (Throwable t) {
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try{
|
||||
jdbcTemplateObject.update("UPDATE ruangan_m SET kdprofile = 0 WHERE id = 0");
|
||||
}catch(Throwable t){
|
||||
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
try {
|
||||
jdbcTemplateObject.update(SQL, 0, "0", "", uuid, "", UserName, idPegawai, modulaplikasiId, host,
|
||||
ruanganId, (signin)?new Date():null, (signin)?null:new Date());
|
||||
} catch (Throwable t) {
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
|
||||
// nextval('historyloginmodulaplikasi_m_id_seq')
|
||||
}
|
||||
|
||||
/// SignIn Log
|
||||
|
||||
/// Operation Log //
|
||||
|
||||
public void pushData(Object entity, Serializable id, Object[] currentState, Object[] previousState,
|
||||
String[] propertyNames, Type[] types) {
|
||||
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken)) {
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken))
|
||||
return;
|
||||
}
|
||||
|
||||
String currentPrincipalName = authentication.getName();
|
||||
if ("anonymousUser".equals(currentPrincipalName)) {
|
||||
if ("anonymousUser".equals(currentPrincipalName))
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (o) {
|
||||
this.entity = entity;
|
||||
|
||||
Holder h = new Holder();
|
||||
h.userName = currentPrincipalName;
|
||||
|
||||
h.entity = entity;
|
||||
h.id = id;
|
||||
h.currentState = currentState;
|
||||
h.previousState = previousState;
|
||||
h.propertyNames = propertyNames;
|
||||
h.types = types;
|
||||
|
||||
commit.put(h.entity.getClass().getName() + "." + currentPrincipalName, h);
|
||||
}
|
||||
}
|
||||
|
||||
public void insertData(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
|
||||
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken)) {
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken))
|
||||
return;
|
||||
}
|
||||
|
||||
String currentPrincipalName = authentication.getName();
|
||||
if ("anonymousUser".equals(currentPrincipalName)) {
|
||||
if ("anonymousUser".equals(currentPrincipalName))
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (o) {
|
||||
this.entity = entity;
|
||||
|
||||
Holder h = new Holder();
|
||||
h.userName = currentPrincipalName;
|
||||
|
||||
h.entity = entity;
|
||||
h.id = id;
|
||||
h.state = state;
|
||||
@ -234,30 +200,22 @@ public class LoggingSystemAsynchronous {
|
||||
h.types = types;
|
||||
h.previousState = new Object[state.length];
|
||||
h.currentState = state;
|
||||
|
||||
commit.put(h.entity.getClass().getName() + "." + currentPrincipalName, h);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void deleteData(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken)) {
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken))
|
||||
return;
|
||||
}
|
||||
|
||||
String currentPrincipalName = authentication.getName();
|
||||
if ("anonymousUser".equals(currentPrincipalName)) {
|
||||
if ("anonymousUser".equals(currentPrincipalName))
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (o) {
|
||||
this.entity = entity;
|
||||
|
||||
Holder h = new Holder();
|
||||
h.userName = currentPrincipalName;
|
||||
|
||||
h.entity = entity;
|
||||
h.id = id;
|
||||
h.state = state;
|
||||
@ -265,26 +223,18 @@ public class LoggingSystemAsynchronous {
|
||||
h.types = types;
|
||||
h.previousState = state;
|
||||
h.currentState = new Object[state.length];
|
||||
|
||||
commit.put(h.entity.getClass().getName() + "." + currentPrincipalName, h);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void saveOperationLog(String sql) {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken)) {
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken))
|
||||
return;
|
||||
}
|
||||
|
||||
String currentPrincipalName = authentication.getName();
|
||||
if ("anonymousUser".equals(currentPrincipalName)) {
|
||||
if ("anonymousUser".equals(currentPrincipalName))
|
||||
return;
|
||||
}
|
||||
|
||||
JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource);
|
||||
|
||||
asynchMethodtoCreatedLog(sql, currentPrincipalName, jdbcTemplateObject, request);
|
||||
}
|
||||
|
||||
@ -292,7 +242,7 @@ public class LoggingSystemAsynchronous {
|
||||
try{
|
||||
jObject.put(key, value);
|
||||
}catch(Exception e){
|
||||
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -300,7 +250,7 @@ public class LoggingSystemAsynchronous {
|
||||
try{
|
||||
jObject.put(key, value);
|
||||
}catch(Exception e){
|
||||
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -308,7 +258,7 @@ public class LoggingSystemAsynchronous {
|
||||
try{
|
||||
jObject.put(key, value);
|
||||
}catch(Exception e){
|
||||
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -316,34 +266,25 @@ public class LoggingSystemAsynchronous {
|
||||
try{
|
||||
jArray.put(value);
|
||||
}catch(Exception e){
|
||||
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Async
|
||||
public void asynchMethodtoCreatedLog(String sql, String UserName, JdbcTemplate jdbcTemplateObject,
|
||||
HttpServletRequest request) {
|
||||
|
||||
if (entity != null) {
|
||||
Holder h = commit.get(entity.getClass().getName() + "." + UserName);
|
||||
destroy();
|
||||
if (h != null) {
|
||||
String method = "X";
|
||||
String object = "";
|
||||
|
||||
StringBuilder infoBuilder = new StringBuilder();
|
||||
StringBuilder jSonObject = new StringBuilder();
|
||||
|
||||
JSONObject jObject = new JSONObject();
|
||||
|
||||
|
||||
jSonObject.append("{\n");
|
||||
|
||||
String host = request.getRemoteHost();
|
||||
|
||||
|
||||
String infoOperasi = "Pengambilan";
|
||||
|
||||
if (sql.toUpperCase().contains("INSERT ")) {
|
||||
method = "I";
|
||||
infoBuilder.append("INSERT METOD").append("\n");
|
||||
@ -363,88 +304,58 @@ public class LoggingSystemAsynchronous {
|
||||
putStringToJSONObject(jObject, "m", "D");
|
||||
infoOperasi = "Penghapusan data";
|
||||
}
|
||||
|
||||
// String AlamatUrlForm =
|
||||
// request.getHeader(Constants.HttpHeader.URL_FORM) == null ? ""
|
||||
// : request.getHeader(Constants.HttpHeader.URL_FORM);
|
||||
// String KdRuangan =
|
||||
// request.getHeader(Constants.HttpHeader.KD_RUANGAN) == null ?
|
||||
// "0" : request.getHeader(Constants.HttpHeader.KD_RUANGAN);
|
||||
|
||||
Boolean isSupervising = (request.getHeader(Constants.HttpHeader.SUPERVISING) != null)
|
||||
&& ("true".equals(request.getHeader(Constants.HttpHeader.SUPERVISING))) ? true : false;
|
||||
|
||||
boolean isSupervising = (request.getHeader(SUPERVISING) != null)
|
||||
&& ("true".equals(request.getHeader(SUPERVISING)));
|
||||
String SQL = "SELECT id FROM HistoryLoginModulAplikasi_S WHERE Kduser = ? AND TglLogin IS NOT NULL ORDER BY id DESC, TglLogin DESC LIMIT 1";
|
||||
int kdHistoryLogin = 1;
|
||||
|
||||
if (isSupervising) {
|
||||
try {
|
||||
String Username = request.getHeader(Constants.HttpHeader.KD_USER) == null ? ""
|
||||
: request.getHeader(Constants.HttpHeader.KD_USER);
|
||||
kdHistoryLogin = jdbcTemplateObject.queryForObject(SQL, new Object[] { Username },
|
||||
Integer.class);
|
||||
|
||||
|
||||
infoBuilder.append(infoOperasi + " oleh '" + Username + "'").append("\n");
|
||||
infoBuilder.append("Supervisor " + UserName).append("\n");
|
||||
|
||||
jSonObject.append("'user':'" + Username + "',\n");
|
||||
jSonObject.append("'supervisor':'" + UserName + "',\n");
|
||||
|
||||
infoBuilder.append(infoOperasi).append(" oleh '").append(Username).append("'").append("\n");
|
||||
infoBuilder.append("Supervisor ").append(UserName).append("\n");
|
||||
jSonObject.append("'user':'").append(Username).append("',\n");
|
||||
jSonObject.append("'supervisor':'").append(UserName).append("',\n");
|
||||
putStringToJSONObject(jObject, "user", Username);
|
||||
putStringToJSONObject(jObject, "supervisor", UserName);
|
||||
|
||||
} catch (Throwable t) {
|
||||
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
|
||||
kdHistoryLogin = jdbcTemplateObject.queryForObject(SQL, new Object[] { UserName },
|
||||
Integer.class);
|
||||
infoBuilder.append(infoOperasi + " oleh '" + UserName + "'").append("\n");
|
||||
jSonObject.append("'user':'" + UserName + "',\n");
|
||||
infoBuilder.append(infoOperasi).append(" oleh '").append(UserName).append("'").append("\n");
|
||||
jSonObject.append("'user':'").append(UserName).append("',\n");
|
||||
jSonObject.append("'supervisor':'-',\n");
|
||||
|
||||
putStringToJSONObject(jObject, "user", UserName);
|
||||
|
||||
} catch (Throwable t) {
|
||||
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
Table table = h.entity.getClass().getAnnotation(Table.class);
|
||||
|
||||
if ("ActivityPegawai".equals(h.entity.getClass().getSimpleName())) {
|
||||
if ("ActivityPegawai".equals(h.entity.getClass().getSimpleName()))
|
||||
return;
|
||||
}
|
||||
|
||||
String className = h.entity.getClass().getName();
|
||||
object = className;
|
||||
|
||||
infoBuilder.append("Di class '" + className);
|
||||
infoBuilder.append("' atau entity '" + h.entity.getClass().getSimpleName());
|
||||
infoBuilder.append("' pada table '" + table.name() + "'.").append("\n");
|
||||
infoBuilder.append("Di class '").append(className);
|
||||
infoBuilder.append("' atau entity '").append(h.entity.getClass().getSimpleName());
|
||||
infoBuilder.append("' pada table '").append(table.name()).append("'.").append("\n");
|
||||
infoBuilder.append("Yang berubah : ").append("\n");
|
||||
|
||||
jSonObject.append("'class':'" + className + "', \n");
|
||||
jSonObject.append("'entity':'" + h.entity.getClass().getSimpleName() + "', \n");
|
||||
jSonObject.append("'table':'" + table.name() + "', \n");
|
||||
|
||||
jSonObject.append("'class':'").append(className).append("', \n");
|
||||
jSonObject.append("'entity':'").append(h.entity.getClass().getSimpleName()).append("', \n");
|
||||
jSonObject.append("'table':'").append(table.name()).append("', \n");
|
||||
putStringToJSONObject(jObject, "class", className);
|
||||
putStringToJSONObject(jObject, "entity", h.entity.getClass().getSimpleName());
|
||||
putStringToJSONObject(jObject, "table", table.name());
|
||||
|
||||
String noRecP = "";
|
||||
int idP = 0;
|
||||
JSONArray jArray = new JSONArray();
|
||||
|
||||
jSonObject.append("'property' : [");
|
||||
|
||||
putJSONArrayToJSONObject(jObject,"property", jArray);
|
||||
|
||||
for (int i = 0; i < h.propertyNames.length; i++) {
|
||||
|
||||
if ("norec".equalsIgnoreCase(h.propertyNames[i].trim())) {
|
||||
if (h.previousState[i] != null) {
|
||||
noRecP = String.valueOf(h.previousState[i]);
|
||||
@ -454,7 +365,6 @@ public class LoggingSystemAsynchronous {
|
||||
noRecP = "null";
|
||||
}
|
||||
}
|
||||
|
||||
if ("id".equalsIgnoreCase(h.propertyNames[i].trim())) {
|
||||
if (h.previousState[i] != null) {
|
||||
idP = (Integer) h.previousState[i];
|
||||
@ -464,10 +374,9 @@ public class LoggingSystemAsynchronous {
|
||||
idP = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (h.previousState.length > i && h.currentState.length > i) {
|
||||
String columName = "";
|
||||
Class<? extends Object> cl = h.entity.getClass();
|
||||
Class<?> cl = h.entity.getClass();
|
||||
for (;;) {
|
||||
try {
|
||||
Field field = cl.getDeclaredField(h.propertyNames[i]);
|
||||
@ -494,26 +403,18 @@ public class LoggingSystemAsynchronous {
|
||||
addObject = showPrevNotNull(pObject, infoBuilder, jSonObject, columName, h.propertyNames[i], h.previousState[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
if (addObject){
|
||||
if (addObject)
|
||||
putJSONObjectToJSONArray(jArray, pObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
jSonObject.append("{}],\n");
|
||||
jSonObject.append("'id' : '").append(idP).append("',\n");
|
||||
|
||||
putIntToJSONObject(jObject, "id", idP);
|
||||
|
||||
jSonObject.append("'noRecP' : '").append(noRecP).append("'");
|
||||
putStringToJSONObject(jObject, "noRecP", noRecP);
|
||||
|
||||
infoBuilder.append("Dengan id : " + idP + " dan noRecP : " + noRecP);
|
||||
infoBuilder.append(" dari host : " + host + ".").append("\n");
|
||||
|
||||
infoBuilder.append("Dengan id : ").append(idP).append(" dan noRecP : ").append(noRecP);
|
||||
infoBuilder.append(" dari host : ").append(host).append(".").append("\n");
|
||||
jSonObject.append("\n}\n");
|
||||
|
||||
|
||||
h.host = host;
|
||||
h.detilCrud = infoBuilder.toString();
|
||||
h.noRecP = noRecP;
|
||||
@ -521,42 +422,31 @@ public class LoggingSystemAsynchronous {
|
||||
h.method = method;
|
||||
h.object = object;
|
||||
h.kdHistoryLogin = kdHistoryLogin;
|
||||
|
||||
commit.put(className, h);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void save(Iterator entities) {
|
||||
public void save(Iterator<?> entities) {
|
||||
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken)) {
|
||||
if (authentication == null || (authentication instanceof AnonymousAuthenticationToken))
|
||||
return;
|
||||
}
|
||||
|
||||
String currentPrincipalName = authentication.getName();
|
||||
if ("anonymousUser".equals(currentPrincipalName)) {
|
||||
if ("anonymousUser".equals(currentPrincipalName))
|
||||
return;
|
||||
}
|
||||
|
||||
JdbcTemplate jdbcTemplateObject = new JdbcTemplate(dataSource);
|
||||
AsynchMethodSave(entities, jdbcTemplateObject, currentPrincipalName);
|
||||
}
|
||||
|
||||
@Async
|
||||
public void AsynchMethodSave(Iterator entities, JdbcTemplate jdbcTemplateObject, String currentPrincipalName) {
|
||||
public void AsynchMethodSave(Iterator<?> entities, JdbcTemplate jdbcTemplateObject, String currentPrincipalName) {
|
||||
while (entities.hasNext()) {
|
||||
String keyName = entities.next().getClass().getName() + "." + currentPrincipalName;
|
||||
Holder h = commit.get(keyName);
|
||||
|
||||
if (h != null) {
|
||||
|
||||
// LOGGER.info("\n" + h.detilCrud);
|
||||
// LOGGER.info("\n" + h.jSonObject);
|
||||
|
||||
addLogData(jdbcTemplateObject, h.noRecP, h.jSonObject, h.method, h.object, h.kdHistoryLogin, h.crudIn);
|
||||
commit.put(keyName, null);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -567,24 +457,16 @@ public class LoggingSystemAsynchronous {
|
||||
+ "NoRecord, TglCrudIn, TglCrudOut) " + "VALUES "
|
||||
+ "( nextval('historyloginuser_m_id_seq'), ?, true, ?, ?," + "?, ?, " + "?, " + "?, ?, ?, "
|
||||
+ "?, ?, ?)";
|
||||
|
||||
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
|
||||
|
||||
try {
|
||||
jdbcTemplateObject.update(SQL, 0, "0", "", uuid, "",
|
||||
jSonObject.replaceAll("\n", "").replaceAll("\t", ""), kdHistoryLogin, method,
|
||||
object, NoRecP, crudIn, new Date());
|
||||
} catch (Throwable t) {
|
||||
// try{
|
||||
// LOGGER.warn("operasi 'LogData' gagal di log karena " + t.getMessage());
|
||||
// }catch(Exception e){
|
||||
//
|
||||
// }
|
||||
LOGGER.error(t.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
////// private method
|
||||
|
||||
private void destroy() {
|
||||
synchronized (o) {
|
||||
this.entity = null;
|
||||
@ -593,50 +475,40 @@ public class LoggingSystemAsynchronous {
|
||||
|
||||
private boolean showObj(JSONObject pObject, StringBuilder infoBuilder, StringBuilder jSonObject, String columName, String property,
|
||||
Object prev, Object curr) {
|
||||
|
||||
jSonObject.append("{\n");
|
||||
jSonObject.append("\t'name' : '" + property + "', \n");
|
||||
jSonObject.append("\t'column' : '" + columName + "', \n");
|
||||
jSonObject.append("\t'oldData' : '" + prev + "', \n");
|
||||
jSonObject.append("\t'newData' : '" + curr + "', \n");
|
||||
jSonObject.append("\t'name' : '").append(property).append("', \n");
|
||||
jSonObject.append("\t'column' : '").append(columName).append("', \n");
|
||||
jSonObject.append("\t'oldData' : '").append(prev).append("', \n");
|
||||
jSonObject.append("\t'newData' : '").append(curr).append("', \n");
|
||||
jSonObject.append("},\n");
|
||||
|
||||
putStringToJSONObject(pObject, "name", property);
|
||||
putStringToJSONObject(pObject, "column", columName);
|
||||
putStringToJSONObject(pObject, "oldData", String.valueOf(prev));
|
||||
putStringToJSONObject(pObject, "newData", String.valueOf(curr));
|
||||
|
||||
infoBuilder.append(property + " : Sebelumnya " + prev + " menjadi " + curr).append("\n");
|
||||
|
||||
infoBuilder.append(property).append(" : Sebelumnya ").append(prev).append(" menjadi ").append(curr).append("\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean showDate(JSONObject pObject, StringBuilder infoBuilder, StringBuilder jSonObject, String columName, String property,
|
||||
Date prev, Date curr) {
|
||||
|
||||
if (prev.compareTo(curr) != 0) {
|
||||
infoBuilder.append(property + " : Sebelumnya " + prev + " menjadi " + curr).append("\n");
|
||||
|
||||
infoBuilder.append(property).append(" : Sebelumnya ").append(prev).append(" menjadi ").append(curr).append("\n");
|
||||
jSonObject.append("{\n");
|
||||
jSonObject.append("\t'name' : '" + property + "', \n");
|
||||
jSonObject.append("\t'column' : '" + columName + "', \n");
|
||||
jSonObject.append("\t'oldData' : '" + prev + "', \n");
|
||||
jSonObject.append("\t'newData' : '" + curr + "', \n");
|
||||
jSonObject.append("\t'name' : '").append(property).append("', \n");
|
||||
jSonObject.append("\t'column' : '").append(columName).append("', \n");
|
||||
jSonObject.append("\t'oldData' : '").append(prev).append("', \n");
|
||||
jSonObject.append("\t'newData' : '").append(curr).append("', \n");
|
||||
jSonObject.append("},\n");
|
||||
|
||||
putStringToJSONObject(pObject, "name", property);
|
||||
putStringToJSONObject(pObject, "column", columName);
|
||||
putStringToJSONObject(pObject, "oldData", String.valueOf(prev));
|
||||
putStringToJSONObject(pObject, "newData", String.valueOf(curr));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private int whoIsNull(Object o1, Object o2) {
|
||||
|
||||
if (o1 == null && o2 == null) {
|
||||
return 3;
|
||||
} else if (o1 == null) {
|
||||
@ -646,106 +518,84 @@ public class LoggingSystemAsynchronous {
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private boolean showPrevNotNull(JSONObject pObject, StringBuilder infoBuilder, StringBuilder jSonObject, String columName, String property,
|
||||
Object prev) {
|
||||
if (!property.endsWith("Id")) {
|
||||
jSonObject.append("{\n");
|
||||
jSonObject.append("\t'name' : '" + property + "', \n");
|
||||
jSonObject.append("\t'column' : '" + columName + "', \n");
|
||||
jSonObject.append("\t'oldData' : '" + prev + "', \n");
|
||||
jSonObject.append("\t'name' : '").append(property).append("', \n");
|
||||
jSonObject.append("\t'column' : '").append(columName).append("', \n");
|
||||
jSonObject.append("\t'oldData' : '").append(prev).append("', \n");
|
||||
jSonObject.append("\t'newData' : 'null', \n");
|
||||
jSonObject.append("},\n");
|
||||
|
||||
putStringToJSONObject(pObject, "name", property);
|
||||
putStringToJSONObject(pObject, "column", columName);
|
||||
putStringToJSONObject(pObject, "oldData", String.valueOf(prev));
|
||||
putStringToJSONObject(pObject, "newData", "null");
|
||||
|
||||
infoBuilder.append("Property : " + property + ", column name : " + columName + ", Sebelumnya " + prev
|
||||
+ " menjadi null ").append("\n");
|
||||
|
||||
infoBuilder.append("Property : ").append(property).append(", column name : ").append(columName).append(", Sebelumnya ").append(prev).append(" menjadi null ").append("\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean showCurNotNull(JSONObject pObject, StringBuilder infoBuilder, StringBuilder jSonObject, String columName, String property,
|
||||
Object curr) {
|
||||
jSonObject.append("{\n");
|
||||
jSonObject.append("\t'name' : '" + property + "', \n");
|
||||
jSonObject.append("\t'column' : '" + columName + "', \n");
|
||||
jSonObject.append("\t'name' : '").append(property).append("', \n");
|
||||
jSonObject.append("\t'column' : '").append(columName).append("', \n");
|
||||
jSonObject.append("\t'oldData' : 'null', \n");
|
||||
jSonObject.append("\t'newData' : '" + curr + "', \n");
|
||||
jSonObject.append("\t'newData' : '").append(curr).append("', \n");
|
||||
jSonObject.append("},\n");
|
||||
|
||||
putStringToJSONObject(pObject, "name", property);
|
||||
putStringToJSONObject(pObject, "column", columName);
|
||||
putStringToJSONObject(pObject, "oldData", "null");
|
||||
putStringToJSONObject(pObject, "newData", String.valueOf(curr));
|
||||
|
||||
infoBuilder.append("Property : " + property + ", column name " + columName + ", Sebelumnya null menjadi " + curr)
|
||||
infoBuilder.append("Property : ").append(property).append(", column name ").append(columName).append(", Sebelumnya null menjadi ").append(curr)
|
||||
.append("\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean showNotAllNull(JSONObject pObject, StringBuilder infoBuilder, StringBuilder jSonObject, String columName, String property,
|
||||
Object prev, Object curr) {
|
||||
|
||||
if (prev instanceof String || curr instanceof Character) {
|
||||
if (!(String.valueOf(prev)).equals(String.valueOf(curr))) {
|
||||
jSonObject.append("{\n");
|
||||
jSonObject.append("\t'name' : '" + property + "', \n");
|
||||
jSonObject.append("\t'column' : '" + columName + "', \n");
|
||||
jSonObject.append("\t'oldData' : '" + prev + "', \n");
|
||||
jSonObject.append("\t'newData' : '" + curr + "', \n");
|
||||
jSonObject.append("\t'name' : '").append(property).append("', \n");
|
||||
jSonObject.append("\t'column' : '").append(columName).append("', \n");
|
||||
jSonObject.append("\t'oldData' : '").append(prev).append("', \n");
|
||||
jSonObject.append("\t'newData' : '").append(curr).append("', \n");
|
||||
jSonObject.append("},\n");
|
||||
|
||||
putStringToJSONObject(pObject, "name", property);
|
||||
putStringToJSONObject(pObject, "column", columName);
|
||||
putStringToJSONObject(pObject, "oldData", String.valueOf(prev));
|
||||
putStringToJSONObject(pObject, "newData", String.valueOf(curr));
|
||||
|
||||
infoBuilder.append("Property : " + property + ", column name " + columName + ", Sebelumnya " + prev
|
||||
+ " menjadi " + curr).append("\n");
|
||||
|
||||
infoBuilder.append("Property : ").append(property).append(", column name ").append(columName).append(", Sebelumnya ").append(prev).append(" menjadi ").append(curr).append("\n");
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (prev instanceof Byte || curr instanceof Byte) {
|
||||
if (Byte.compare((byte) prev, (byte) curr) != 0) {
|
||||
if ((byte) prev != (byte) curr)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Short || curr instanceof Short) {
|
||||
if (Short.compare((short) prev, (short) curr) != 0) {
|
||||
if ((short) prev != (short) curr)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Integer || curr instanceof Integer) {
|
||||
if (Integer.compare((int) prev, (int) curr) != 0) {
|
||||
if ((int) prev != (int) curr)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Long || curr instanceof Long) {
|
||||
if (Long.compare((long) prev, (long) curr) != 0) {
|
||||
if ((long) prev != (long) curr)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Float || curr instanceof Float) {
|
||||
if (Float.compare((float) prev, (float) curr) != 0) {
|
||||
if (Float.compare((float) prev, (float) curr) != 0)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Double || curr instanceof Double) {
|
||||
if (Double.compare((double) prev, (double) curr) != 0) {
|
||||
if (Double.compare((double) prev, (double) curr) != 0)
|
||||
return showObj(pObject, infoBuilder, jSonObject, columName, property, prev, curr);
|
||||
}
|
||||
} else if (prev instanceof Date || curr instanceof Date) {
|
||||
return showDate(pObject, infoBuilder, jSonObject, columName, property, (Date) prev, (Date) curr);
|
||||
} else if (prev instanceof Date && curr instanceof Date) {
|
||||
return showDate(pObject, infoBuilder, jSonObject, columName, property, (Date) prev, (Date) curr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@ import com.jasamedika.medifirst2000.logging.hibernate.async.LoggingSystemAsynchr
|
||||
*
|
||||
* @author Syamsu
|
||||
*/
|
||||
|
||||
@Component
|
||||
public class HibernateInterceptorBeansHolder {
|
||||
|
||||
@ -18,6 +17,5 @@ public class HibernateInterceptorBeansHolder {
|
||||
@Autowired
|
||||
public void setLoggingSystemAsynchronous(LoggingSystemAsynchronous logging) {
|
||||
HibernateInterceptorBeansHolder.loggingSystemAsynchronous = logging;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import java.io.Serializable;
|
||||
* @author Syamsu
|
||||
*/
|
||||
public class HibernateInterceptor extends EmptyInterceptor {
|
||||
|
||||
private static final long serialVersionUID = 5478574918838397131L;
|
||||
|
||||
@Override
|
||||
@ -42,14 +43,4 @@ public class HibernateInterceptor extends EmptyInterceptor {
|
||||
HibernateInterceptorBeansHolder.loggingSystemAsynchronous.saveOperationLog(sql);
|
||||
return sql;
|
||||
}
|
||||
|
||||
/*
|
||||
* Commented by Salman 2024/01/30
|
||||
*
|
||||
* @Desc: Logging sudah tidak dipakai, migrasi ke laravel
|
||||
*/
|
||||
// @Override
|
||||
// public void postFlush(Iterator entities) throws CallbackException {
|
||||
// HibernateInterceptorBeansHolder.loggingSystemAsynchronous.save(entities);
|
||||
// }
|
||||
}
|
||||
|
||||
@ -1,27 +1,27 @@
|
||||
package com.jasamedika.medifirst2000.notification;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.jasamedika.medifirst2000.entities.Pegawai;
|
||||
import com.jasamedika.medifirst2000.entities.Ruangan;
|
||||
import com.jasamedika.medifirst2000.service.NotifikasiMessageObjekModulService;
|
||||
import com.jasamedika.medifirst2000.vo.NotifikasiMessageObjekModulVO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface MessagePublisher<T, V> {
|
||||
public String GetSettingDataFixed(String prefix);
|
||||
public void sendDirectNotification(final Map<T,V> data);
|
||||
|
||||
public RabbitHole getRabbitHole();
|
||||
|
||||
public static interface RabbitHole {
|
||||
public void connect(String host, String userName, String password, String routingKeyAndQueueName) throws Exception;
|
||||
public void sendRabbitMQNotification(String pesan) throws Exception;
|
||||
public void close() throws Exception;
|
||||
public void sendNotif(MessagePublisher.RabbitHole rabbitHole, Ruangan dariRuangan, Pegawai pegawai,
|
||||
NotifikasiMessageObjekModulService<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulService,
|
||||
Integer notifMessagingId, List<Integer> ruanganTujuansId) throws Exception;
|
||||
public interface MessagePublisher<T, V> {
|
||||
|
||||
interface RabbitHole {
|
||||
void connect(String host, String userName, String password, String routingKeyAndQueueName) throws Exception;
|
||||
void sendRabbitMQNotification(String pesan) throws Exception;
|
||||
void close() throws Exception;
|
||||
void sendNotif(MessagePublisher.RabbitHole rabbitHole, Ruangan dariRuangan, Pegawai pegawai,
|
||||
NotifikasiMessageObjekModulService<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulService,
|
||||
Integer notifMessagingId, List<Integer> ruanganTujuansId) throws Exception;
|
||||
}
|
||||
|
||||
|
||||
RabbitHole getRabbitHole();
|
||||
|
||||
String getSettingDataFixed(String prefix);
|
||||
|
||||
void sendDirectNotification(final Map<T, V> data);
|
||||
}
|
||||
|
||||
@ -3,8 +3,9 @@ package com.jasamedika.medifirst2000.notification;
|
||||
import com.rabbitmq.client.Consumer;
|
||||
|
||||
public interface MessageSubscriber {
|
||||
public void startRabbitMQNotification(String host, String routingKeyAndQueueName) throws Exception;
|
||||
public void listenRabbitMQNotification(String routingKeyAndQueueName, Consumer consumer, boolean autoAck) throws Exception;
|
||||
public void stopRabbitMQNotification() throws Exception;
|
||||
public Consumer getDefaultConsumer();
|
||||
|
||||
void startRabbitMQNotification(String host, String routingKeyAndQueueName) throws Exception;
|
||||
void listenRabbitMQNotification(String routingKeyAndQueueName, Consumer consumer, boolean autoAck) throws Exception;
|
||||
void stopRabbitMQNotification() throws Exception;
|
||||
Consumer getDefaultConsumer();
|
||||
}
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.notification;
|
||||
|
||||
//@Configuration
|
||||
//@EnableRabbit
|
||||
public class RabbitMQConfiguration {
|
||||
|
||||
public final static String TOPIC_EXCHANGE_NAME = "jasamedika-medifirst-exchange";
|
||||
public final static String QUEUE_NAME = "internal-queu";
|
||||
public final static String ROUTING_KEY = "ruanganId.*";
|
||||
|
||||
// @Bean
|
||||
// public ConnectionFactory connectionFactory() {
|
||||
// CachingConnectionFactory connectionFactory = new CachingConnectionFactory("localhost");
|
||||
// connectionFactory.setUsername("guest");
|
||||
// connectionFactory.setPassword("guest");
|
||||
// return connectionFactory;
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public RabbitTemplate getRabbitTemplate(){
|
||||
// RabbitTemplate rabbit = new RabbitTemplate(connectionFactory());
|
||||
// rabbit.setExchange(TOPIC_EXCHANGE_NAME);
|
||||
// rabbit.setRoutingKey(ROUTING_KEY);
|
||||
// return rabbit;
|
||||
// }
|
||||
//
|
||||
//
|
||||
// @Bean
|
||||
// public Queue getQueue() {
|
||||
// return new Queue(QUEUE_NAME, true);
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public TopicExchange getTopicExchange() {
|
||||
// return new TopicExchange(TOPIC_EXCHANGE_NAME);
|
||||
// }
|
||||
//
|
||||
// @Bean
|
||||
// public SimpleRabbitListenerContainerFactory myRabbitListenerContainerFactory() {
|
||||
// SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
|
||||
// factory.setConnectionFactory(connectionFactory());
|
||||
// factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);
|
||||
//
|
||||
// return factory;
|
||||
// }
|
||||
//
|
||||
// // ini ibarat jalan tolnya.. :P
|
||||
// @Bean
|
||||
// public Binding binding(Queue queue, TopicExchange exchange) {
|
||||
// return BindingBuilder.bind(queue).to(exchange).with(ROUTING_KEY);
|
||||
// }
|
||||
}
|
||||
|
||||
@ -1,252 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.notification.antrian;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
public class BackEndAntrian {
|
||||
|
||||
// static boolean listener = false;
|
||||
//
|
||||
// @PostConstruct
|
||||
// public void init() {
|
||||
// if (!listener) {
|
||||
// listener = true;
|
||||
//
|
||||
// this.host = "192.168.12.2";
|
||||
// this.user = "rsab";
|
||||
// this.pass = "rsab";
|
||||
//
|
||||
// this.topikUtama = "antrian";
|
||||
// this.targetLoket = "loket";
|
||||
// this.targetLayar = "layar-utama";
|
||||
// this.sumberLoket = "group-loket";
|
||||
//
|
||||
// if (!Thread.currentThread().isInterrupted()) {
|
||||
// new Thread() {
|
||||
// public void run() {
|
||||
// try {
|
||||
// dengarkanPesanMasuk();
|
||||
// } catch (Exception e) {
|
||||
//
|
||||
// }
|
||||
// }
|
||||
// }.start();
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @Autowired
|
||||
// private RegistrasiPelayananPasienService registrasiPelayananPasienService;
|
||||
//
|
||||
// Map<Integer, String> daftarLoket = new HashMap<>();
|
||||
//
|
||||
// //Integer antrian = 1;
|
||||
//
|
||||
// String host;
|
||||
// String user;
|
||||
// String pass;
|
||||
//
|
||||
// String topikUtama;
|
||||
// String targetLoket;
|
||||
// String targetLayar;
|
||||
// String sumberLoket;
|
||||
//
|
||||
// int totalLayar;
|
||||
//
|
||||
// AntrianPasien antrianPasienDTO;
|
||||
//
|
||||
// ///////////////////////
|
||||
// // Fokus di sini saja
|
||||
// ///////////////////////
|
||||
// Integer ambilAntrian(String jenis) {
|
||||
//
|
||||
// antrianPasienDTO = registrasiPelayananPasienService.getNomorUrutPasienbyJenis(jenis);
|
||||
//
|
||||
// return antrianPasienDTO.getNoUrut();
|
||||
// }
|
||||
//
|
||||
// void lanjutAntrian(Integer noAntrian, String jenis) {
|
||||
// registrasiPelayananPasienService.updateNomorUrutPasienbyJenis(noAntrian, jenis);
|
||||
// }
|
||||
//
|
||||
// /////////////////////////
|
||||
// /// START BAGIAN PESAN
|
||||
// ////////////////////////
|
||||
// public void olahPesan(Envelope envelope, byte[] body) {
|
||||
//
|
||||
// try {
|
||||
// JSONObject oPesan = new JSONObject(new String(body));
|
||||
// Integer urutanLoket = oPesan.optInt("urutanLoket", 0);
|
||||
// String tipeLoket = oPesan.optString("tipeLoket", "");
|
||||
// String titleLoket = oPesan.optString("titleLoket", "Loket");
|
||||
// boolean awal = oPesan.optBoolean("awal", false);
|
||||
// boolean lanjut = oPesan.optBoolean("lanjut", false);
|
||||
// boolean ulang = oPesan.optBoolean("ulang", false);
|
||||
//
|
||||
// String pesan = "{}";
|
||||
// if (awal) {
|
||||
// JSONObject kirim = new JSONObject();
|
||||
//
|
||||
// kirim.put("noAntrian", 0);
|
||||
// kirim.put("urutanLoket", urutanLoket);
|
||||
// kirim.put("tipeLoket", tipeLoket);
|
||||
// kirim.put("titleLoket", titleLoket);
|
||||
//
|
||||
// pesan = kirim.toString();
|
||||
// daftarLoket.put(urutanLoket, pesan);
|
||||
//
|
||||
// } else if (lanjut) {
|
||||
// Integer lAntrian = ambilAntrian(tipeLoket);
|
||||
// if (lAntrian == null) {
|
||||
// return;
|
||||
// }
|
||||
// JSONObject kirim = new JSONObject();
|
||||
//
|
||||
// kirim.put("noAntrian", lAntrian.intValue());
|
||||
// kirim.put("urutanLoket", urutanLoket);
|
||||
// kirim.put("tipeLoket", tipeLoket);
|
||||
// kirim.put("titleLoket", titleLoket);
|
||||
//
|
||||
// lanjutAntrian(lAntrian, tipeLoket);
|
||||
//
|
||||
// pesan = kirim.toString();
|
||||
// daftarLoket.put(urutanLoket, pesan);
|
||||
//
|
||||
// } else if (ulang) {
|
||||
// pesan = daftarLoket.get(urutanLoket);
|
||||
// } else {
|
||||
// JSONObject kirim = new JSONObject();
|
||||
//
|
||||
// kirim.put("noAntrian", -1);
|
||||
// kirim.put("urutanLoket", urutanLoket);
|
||||
// kirim.put("tipeLoket", tipeLoket);
|
||||
// kirim.put("titleLoket", titleLoket);
|
||||
//
|
||||
// pesan = kirim.toString();
|
||||
// daftarLoket.put(urutanLoket, pesan);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// kirimAntrian(pesan, urutanLoket);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// ///////////////////////////////////
|
||||
// // START BAGIAN PENGIRIMAN
|
||||
// ///////////////////////////////////
|
||||
// void kirimAntrian(String pesan, Integer urutanLoket) throws Exception {
|
||||
//
|
||||
// System.out.println(".. KIRIM PENGUMUMAN ANTRIAN ...");
|
||||
// kirimKeLayarBesar(pesan);
|
||||
// kirimKeTomboldanLayarKecil(pesan, urutanLoket);
|
||||
// }
|
||||
//
|
||||
// void kirimKeTomboldanLayarKecil(String pesan, Integer urutanLoket) throws Exception {
|
||||
//
|
||||
// System.out.println("Kirim antrian ke tombol dan layar kecil");
|
||||
//
|
||||
// ConnectionFactory factory = new ConnectionFactory();
|
||||
// factory.setHost(host);
|
||||
// factory.setUsername(user);
|
||||
// factory.setPassword(pass);
|
||||
//
|
||||
// Connection connection = factory.newConnection();
|
||||
// Channel channel = connection.createChannel();
|
||||
//
|
||||
// AMQP.BasicProperties mProp = MessageProperties.PERSISTENT_TEXT_PLAIN;
|
||||
//
|
||||
// channel.exchangeDeclare(topikUtama, "topic");
|
||||
// channel.basicPublish(topikUtama, targetLoket + "." + urutanLoket, mProp, pesan.getBytes());
|
||||
// channel.basicPublish(topikUtama, targetLayar + "." + urutanLoket, mProp, pesan.getBytes());
|
||||
//
|
||||
// channel.close();
|
||||
// connection.close();
|
||||
// }
|
||||
//
|
||||
// void kirimKeLayarBesar(String pesan) throws Exception {
|
||||
//
|
||||
// System.out.println("Kirim antrian ke layar besar");
|
||||
//
|
||||
// ConnectionFactory factory = new ConnectionFactory();
|
||||
// factory.setHost(host);
|
||||
// factory.setUsername(user);
|
||||
// factory.setPassword(pass);
|
||||
//
|
||||
// Connection connection = factory.newConnection();
|
||||
// Channel channel = connection.createChannel();
|
||||
//
|
||||
// AMQP.BasicProperties mProp = MessageProperties.PERSISTENT_TEXT_PLAIN;
|
||||
//
|
||||
// channel.exchangeDeclare(targetLayar, "fanout");
|
||||
// channel.basicPublish(targetLayar, "", mProp, pesan.getBytes());
|
||||
//
|
||||
// channel.close();
|
||||
// connection.close();
|
||||
// }
|
||||
//
|
||||
// //////////////////////////
|
||||
// // START BAGIAN PENERIMAAN
|
||||
// //////////////////////////
|
||||
// Connection connectionP;
|
||||
// Channel channelP;
|
||||
// AMQP.Queue.DeclareOk Queue;
|
||||
//
|
||||
// void dengarkanPesanMasuk() throws Exception {
|
||||
//
|
||||
// ConnectionFactory factory = new ConnectionFactory();
|
||||
// factory.setHost(host);
|
||||
// factory.setUsername(user);
|
||||
// factory.setPassword(pass);
|
||||
//
|
||||
// connectionP = factory.newConnection();
|
||||
// channelP = connectionP.createChannel();
|
||||
// channelP.basicQos(1);
|
||||
// Queue = channelP.queueDeclare(sumberLoket, true, false, false, null);
|
||||
//
|
||||
// consume();
|
||||
//
|
||||
// }
|
||||
//
|
||||
// void consume() {
|
||||
// final Consumer consumer = new DefaultConsumer(channelP) {
|
||||
// @Override
|
||||
// public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
|
||||
// byte[] body) throws IOException {
|
||||
// String message = new String(body, "UTF-8");
|
||||
// System.out.println("Back End : '" + envelope.getRoutingKey() + "':'" + message + "'");
|
||||
// getChannel().basicAck(envelope.getDeliveryTag(), false);
|
||||
// olahPesan(envelope, body);
|
||||
// try {
|
||||
// tutupConnection();
|
||||
// dengarkanPesanMasuk();
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// };
|
||||
// new Thread() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// try {
|
||||
// System.out.println("Back End - " + topikUtama + " : dengarkan pesan masuk");
|
||||
// System.out.println("Queue.getMessageCount() : " + Queue.getMessageCount());
|
||||
// channelP.basicConsume(sumberLoket, true, consumer);
|
||||
// } catch (Exception e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// }
|
||||
// }.start();
|
||||
// }
|
||||
//
|
||||
// void tutupConnection() {
|
||||
// try {
|
||||
// if (connectionP != null) {
|
||||
// connectionP.close();
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@ -1,72 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.notification.antrian;
|
||||
|
||||
import org.json.JSONObject;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.rabbitmq.client.AMQP;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import com.rabbitmq.client.Connection;
|
||||
import com.rabbitmq.client.ConnectionFactory;
|
||||
import com.rabbitmq.client.MessageProperties;
|
||||
|
||||
@Component
|
||||
public class InfoTambahanAntrian {
|
||||
|
||||
String host;
|
||||
String user;
|
||||
String pass;
|
||||
|
||||
String topikUtama;
|
||||
String targetLoket;
|
||||
String targetLayar;
|
||||
String sumberLoket;
|
||||
|
||||
public void kirimKeLayarBesar(String pesan, String targetLayar) throws Exception {
|
||||
|
||||
System.out.println("Kirim antrian ke layar besar");
|
||||
|
||||
ConnectionFactory factory = new ConnectionFactory();
|
||||
factory.setHost(host);
|
||||
factory.setUsername(user);
|
||||
factory.setPassword(pass);
|
||||
|
||||
Connection connection = factory.newConnection();
|
||||
Channel channel = connection.createChannel();
|
||||
|
||||
AMQP.BasicProperties mProp = MessageProperties.PERSISTENT_TEXT_PLAIN;
|
||||
|
||||
channel.exchangeDeclare(targetLayar, "fanout");
|
||||
channel.basicPublish(targetLayar, "", mProp, pesan.getBytes());
|
||||
|
||||
channel.close();
|
||||
connection.close();
|
||||
}
|
||||
|
||||
public void kirimPesan(String pesan, String targetlayar) throws Exception {
|
||||
|
||||
String[] target = targetlayar.split(",");
|
||||
for (String sTarget : target) {
|
||||
JSONObject oPesan = new JSONObject();
|
||||
oPesan.put("umumkan", true);
|
||||
oPesan.put("info", pesan);
|
||||
|
||||
kirimKeLayarBesar(oPesan.toString(), sTarget);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void kirimJumlahAntrian(String labelAntrian, String tipeAntrian, String total, boolean hapus,
|
||||
String targetlayar) throws Exception {
|
||||
String[] target = targetlayar.split(",");
|
||||
for (String sTarget : target) {
|
||||
JSONObject oPesan = new JSONObject();
|
||||
oPesan.put("jenisAntrian", true);
|
||||
oPesan.put("infoLabel", labelAntrian);
|
||||
oPesan.put("infoTipe", tipeAntrian);
|
||||
oPesan.put("infoTotal", total);
|
||||
oPesan.put("hapus", hapus);
|
||||
|
||||
kirimKeLayarBesar(oPesan.toString(), sTarget);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import com.google.gson.Gson;
|
||||
import com.jasamedika.medifirst2000.base.vo.BaseMasterVO;
|
||||
import com.jasamedika.medifirst2000.entities.Pegawai;
|
||||
import com.jasamedika.medifirst2000.entities.Ruangan;
|
||||
import com.jasamedika.medifirst2000.exception.ServiceVOException;
|
||||
import com.jasamedika.medifirst2000.notification.MessagePublisher;
|
||||
import com.jasamedika.medifirst2000.service.NotifikasiMessageObjekModulService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
@ -11,48 +12,39 @@ import com.jasamedika.medifirst2000.vo.*;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import com.rabbitmq.client.Connection;
|
||||
import com.rabbitmq.client.ConnectionFactory;
|
||||
import com.rabbitmq.client.MessageProperties;
|
||||
import io.socket.client.IO;
|
||||
import io.socket.client.Socket;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
import javax.persistence.PersistenceContext;
|
||||
import javax.persistence.Query;
|
||||
import javax.sql.DataSource;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
import java.util.*;
|
||||
|
||||
import static com.rabbitmq.client.MessageProperties.PERSISTENT_TEXT_PLAIN;
|
||||
import static org.slf4j.LoggerFactory.getLogger;
|
||||
import static org.springframework.beans.BeanUtils.copyProperties;
|
||||
|
||||
@Component("messagePublisher")
|
||||
public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MessagePublisherImpl.class);
|
||||
|
||||
static io.socket.client.Socket socket = null;
|
||||
private static final Logger LOGGER = getLogger(MessagePublisherImpl.class);
|
||||
|
||||
static Socket socket = null;
|
||||
|
||||
@PersistenceContext
|
||||
protected EntityManager em;
|
||||
|
||||
@Autowired
|
||||
DataSource dataSource;
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = false)
|
||||
public String GetSettingDataFixed(String prefix) {
|
||||
@Transactional
|
||||
public String getSettingDataFixed(String prefix) {
|
||||
try{
|
||||
StringBuffer buffer = new StringBuffer();
|
||||
buffer.append("select model.nilaiField from SettingDataFixed ")
|
||||
.append(" model where model.namaField ='" + prefix + "' ");
|
||||
Query query = em.createQuery(buffer.toString());
|
||||
|
||||
Query query = em.createQuery("select model.nilaiField from SettingDataFixed " + " model where model.namaField ='" + prefix + "' ");
|
||||
return (String) query.getSingleResult();
|
||||
}catch(Exception e){
|
||||
return "127.0.0.1";
|
||||
@ -61,43 +53,37 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
|
||||
@Override
|
||||
public void sendDirectNotification(final Map<K, V> data) {
|
||||
|
||||
try {
|
||||
if (socket == null) {
|
||||
socket = IO.socket(GetSettingDataFixed("UrlSocketMessaging"));
|
||||
socket = IO.socket(getSettingDataFixed("UrlSocketMessaging"));
|
||||
socket.on(Socket.EVENT_CONNECT, args -> {
|
||||
try {
|
||||
Gson gson = new Gson();
|
||||
JSONObject item = new JSONObject(
|
||||
"{\"to\":\"NOTIF\",\"message\":" + gson.toJson(data) + "}");
|
||||
|
||||
socket.on(io.socket.client.Socket.EVENT_CONNECT, new io.socket.emitter.Emitter.Listener() {
|
||||
LOGGER.info("socket null: {\"to\":\"NOTIF\",\"message\":{}}", gson.toJson(data));
|
||||
|
||||
@Override
|
||||
public void call(Object... args) {
|
||||
|
||||
try {
|
||||
Gson gson = new Gson();
|
||||
JSONObject item = new JSONObject(
|
||||
"{\"to\":\"NOTIF\",\"message\":" + gson.toJson(data) + "}");
|
||||
LOGGER.info("{\"to\":\"NOTIF\",\"message\":" + gson.toJson(data) + "}");
|
||||
socket.emit("subscribe", item);
|
||||
// socket.disconnect();
|
||||
} catch (JSONException e) {
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
socket.emit("subscribe", item);
|
||||
} catch (JSONException e) {
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
});
|
||||
socket.connect();
|
||||
} else {
|
||||
try {
|
||||
Gson gson = new Gson();
|
||||
JSONObject item = new JSONObject("{\"to\":\"NOTIF\",\"message\":" + gson.toJson(data) + "}");
|
||||
LOGGER.info("{\"to\":\"NOTIF\",\"message\":" + gson.toJson(data) + "}");
|
||||
|
||||
LOGGER.info("socket is not null: {\"to\":\"NOTIF\",\"message\":{}}", gson.toJson(data));
|
||||
|
||||
socket.emit("subscribe", item);
|
||||
// socket.disconnect();
|
||||
} catch (JSONException e) {
|
||||
LOGGER.error(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (URISyntaxException e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceVOException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@ -106,14 +92,11 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
Channel channel;
|
||||
String routingKeyAndQueueName;
|
||||
Gson gson;
|
||||
//String urlSocket;
|
||||
String host;
|
||||
|
||||
public DefaultRabbitHole(String host){
|
||||
this.gson = new Gson();
|
||||
this.host = host;
|
||||
// urlSocket = GetSettingDataFixed("UrlRabbitMQMessaging"); //sementara kunci dulu.
|
||||
//urlSocket = "127.0.0.1";
|
||||
}
|
||||
|
||||
public void connect(String host, String userName, String password, String routingKeyAndQueueName) throws Exception {
|
||||
@ -128,7 +111,7 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
}
|
||||
|
||||
public void sendRabbitMQNotification(String pesan) throws Exception {
|
||||
channel.basicPublish("", routingKeyAndQueueName, MessageProperties.PERSISTENT_TEXT_PLAIN, pesan.getBytes());
|
||||
channel.basicPublish("", routingKeyAndQueueName, PERSISTENT_TEXT_PLAIN, pesan.getBytes());
|
||||
}
|
||||
|
||||
public void close() throws Exception {
|
||||
@ -139,19 +122,14 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
public void sendNotif(MessagePublisher.RabbitHole rabbitHole, Ruangan dariRuangan, Pegawai pegawai,
|
||||
NotifikasiMessageObjekModulService<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulService,
|
||||
Integer notifMessagingId, List<Integer> ruanganTujuansId) throws Exception {
|
||||
|
||||
List<NotifikasiMessageObjekModulVO> notifikasiMessageObjekModulVOs = notifikasiMessageObjekModulService
|
||||
.findByNotifMessagingIdAndRuanganId(notifMessagingId, ruanganTujuansId);
|
||||
|
||||
if (CommonUtil.isNullOrEmpty(notifikasiMessageObjekModulVOs)) {
|
||||
if (CommonUtil.isNullOrEmpty(notifikasiMessageObjekModulVOs))
|
||||
return;
|
||||
}
|
||||
|
||||
Integer ruanganTujuanIdtemp = 0;
|
||||
boolean connect = false;
|
||||
RuanganVO dariRuanganVO = convertToVO(new RuanganVO(),dariRuangan);
|
||||
PegawaiVO pegawaiVO = convertToVO(new PegawaiVO(),pegawai);
|
||||
|
||||
for (NotifikasiMessageObjekModulVO vo : notifikasiMessageObjekModulVOs) {
|
||||
RuanganVO ruanganTujuan = vo.getRuangan();
|
||||
ModulAplikasiVO modulAplikasi = vo.getModulAplikasi();
|
||||
@ -160,23 +138,17 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
String titleNotifikasi = vo.getTitleNotifikasi();
|
||||
String pesanNotifikasi = vo.getPesanNotifikasi();
|
||||
String namaFungsiFrontEnd = vo.getNamaFungsiFrontEnd();
|
||||
|
||||
if (ruanganTujuan.getId() == dariRuanganVO.getId()) {
|
||||
if (Objects.equals(ruanganTujuan.getId(), dariRuanganVO.getId()))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (ruanganTujuanIdtemp != ruanganTujuan.getId()) {
|
||||
if (connect) {
|
||||
if (!Objects.equals(ruanganTujuanIdtemp, ruanganTujuan.getId())) {
|
||||
if (connect)
|
||||
rabbitHole.close();
|
||||
}
|
||||
rabbitHole.connect(host, "rsab", "rsab", String.valueOf(ruanganTujuan.getId()));
|
||||
connect = true;
|
||||
ruanganTujuanIdtemp = ruanganTujuan.getId();
|
||||
}
|
||||
|
||||
ModulAplikasiVO modulAplikasiVO = convertToVO(new ModulAplikasiVO(), modulAplikasi);
|
||||
ObjekModulAplikasiVO objekModulAplikasiVO = convertToVO(new ObjekModulAplikasiVO(), objekModulAplikasi);
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("rec", UUID.randomUUID());
|
||||
map.put("title", titleNotifikasi);
|
||||
@ -190,39 +162,20 @@ public class MessagePublisherImpl<K, V> implements MessagePublisher<K, V> {
|
||||
map.put("namaFungsiFrontEnd", namaFungsiFrontEnd);
|
||||
map.put("fromPegawai", pegawaiVO);
|
||||
map.put("urlForm",CommonUtil.isNullOrEmpty(customURLObjekModul)? objekModulAplikasi.getAlamatUrlForm() : customURLObjekModul);
|
||||
|
||||
rabbitHole.sendRabbitMQNotification(gson.toJson(map));
|
||||
}
|
||||
if (connect) {
|
||||
if (connect)
|
||||
rabbitHole.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
<T extends BaseMasterVO> T convertToVO(T target, Object source){
|
||||
BeanUtils.copyProperties(source, target);
|
||||
copyProperties(source, target);
|
||||
return target;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public RabbitHole getRabbitHole() {
|
||||
return new DefaultRabbitHole(GetSettingDataFixed("UrlRabbitMQMessaging"));
|
||||
return new DefaultRabbitHole(getSettingDataFixed("UrlRabbitMQMessaging"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
// public void sendRabbitMQNotification(String host, String
|
||||
// routingKeyAndQueueName, String pesan) throws Exception {
|
||||
// ConnectionFactory factory = new ConnectionFactory();
|
||||
// factory.setHost(host);
|
||||
// Connection connection = factory.newConnection();
|
||||
// Channel channel = connection.createChannel();
|
||||
// channel.queueDeclare(routingKeyAndQueueName, true, false, false, null);
|
||||
// channel.basicPublish("", routingKeyAndQueueName, null, pesan.getBytes());
|
||||
// channel.close();
|
||||
// connection.close();
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@ -1,35 +1,24 @@
|
||||
package com.jasamedika.medifirst2000.notification.impl;
|
||||
|
||||
import com.jasamedika.medifirst2000.notification.MessageSubscriber;
|
||||
import com.rabbitmq.client.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.jasamedika.medifirst2000.notification.MessageSubscriber;
|
||||
import com.rabbitmq.client.AMQP;
|
||||
import com.rabbitmq.client.Channel;
|
||||
import com.rabbitmq.client.Connection;
|
||||
import com.rabbitmq.client.ConnectionFactory;
|
||||
import com.rabbitmq.client.Consumer;
|
||||
import com.rabbitmq.client.DefaultConsumer;
|
||||
import com.rabbitmq.client.Envelope;
|
||||
import static java.nio.charset.StandardCharsets.UTF_8;
|
||||
import static org.slf4j.LoggerFactory.getLogger;
|
||||
|
||||
@Component("messageSubscriber")
|
||||
public class MessageSubscriberImpl implements MessageSubscriber {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(MessageSubscriberImpl.class);
|
||||
private static final Logger LOGGER = getLogger(MessageSubscriberImpl.class);
|
||||
|
||||
Channel channel;
|
||||
Connection connection;
|
||||
AMQP.Queue.DeclareOk Queue;
|
||||
|
||||
@Autowired
|
||||
DataSource dataSource;
|
||||
|
||||
public void startRabbitMQNotification(String host, String routingKeyAndQueueName) throws Exception {
|
||||
ConnectionFactory factory = new ConnectionFactory();
|
||||
factory.setHost(host);
|
||||
@ -40,10 +29,8 @@ public class MessageSubscriberImpl implements MessageSubscriber {
|
||||
|
||||
public void listenRabbitMQNotification(String routingKeyAndQueueName, Consumer consumer, boolean autoAck)
|
||||
throws Exception {
|
||||
for (int i = 0; i < Queue.getMessageCount(); i++) {
|
||||
for (int i = 0; i < Queue.getMessageCount(); i++)
|
||||
channel.basicConsume(routingKeyAndQueueName, autoAck, consumer);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void stopRabbitMQNotification() throws Exception {
|
||||
@ -57,7 +44,7 @@ public class MessageSubscriberImpl implements MessageSubscriber {
|
||||
@Override
|
||||
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties,
|
||||
byte[] body) throws IOException {
|
||||
LOGGER.info(new String(body, "UTF-8"));
|
||||
LOGGER.info(new String(body, UTF_8));
|
||||
getChannel().basicAck(envelope.getDeliveryTag(), false);
|
||||
}
|
||||
};
|
||||
|
||||
@ -1,20 +1,12 @@
|
||||
package com.jasamedika.medifirst2000.paging;
|
||||
|
||||
public enum Comparison {
|
||||
// equal
|
||||
eq,
|
||||
// greaterThan
|
||||
gt,
|
||||
// lowerThan
|
||||
lt,
|
||||
// not equal
|
||||
ne,
|
||||
// is null
|
||||
isnull,
|
||||
|
||||
in,
|
||||
|
||||
inn,
|
||||
|
||||
lk
|
||||
EQ, // equal
|
||||
GT, // greaterThan
|
||||
LT, // lowerThan
|
||||
NE, // not equal
|
||||
IS_NULL, // is null
|
||||
IN,
|
||||
INN,
|
||||
LK
|
||||
}
|
||||
|
||||
@ -1,53 +1,21 @@
|
||||
package com.jasamedika.medifirst2000.paging;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class Condition {
|
||||
|
||||
public Type type;
|
||||
public Comparison comparison;
|
||||
private Type type;
|
||||
|
||||
public Object value;
|
||||
private Comparison comparison;
|
||||
|
||||
public String field;
|
||||
private Object value;
|
||||
|
||||
public Condition() {
|
||||
}
|
||||
|
||||
public Condition(Type type, Comparison comparison, Object value, String field) {
|
||||
this.type = type;
|
||||
this.comparison = comparison;
|
||||
this.value = value;
|
||||
this.field = field;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private Type type;
|
||||
private Comparison comparison;
|
||||
private Object value;
|
||||
private String field;
|
||||
|
||||
public Builder setType(Type type) {
|
||||
this.type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setComparison(Comparison comparison) {
|
||||
this.comparison = comparison;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setValue(Object value) {
|
||||
this.value = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setField(String field) {
|
||||
this.field = field;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Condition build() {
|
||||
return new Condition(type, comparison, value, field);
|
||||
}
|
||||
}
|
||||
private String field;
|
||||
}
|
||||
|
||||
@ -9,30 +9,12 @@ import javax.persistence.criteria.Root;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* [{
|
||||
* "type": "string",
|
||||
* "value": "***",
|
||||
* "field": "model"
|
||||
* },{
|
||||
* "type": "numeric",
|
||||
* "value": "***",
|
||||
* "field": "year",
|
||||
* "comparison": "gt"
|
||||
* }]
|
||||
*/
|
||||
public class Filter implements Specification {
|
||||
|
||||
List<Condition> conditions;
|
||||
|
||||
public Filter(String json) {
|
||||
// ObjectMapper mapper = new ObjectMapper();
|
||||
// this.conditions = mapper.readValue(json, mapper.getTypeFactory().constructCollectionType(List.class, Condition.class));
|
||||
}
|
||||
private final List<Condition> conditions;
|
||||
|
||||
public Filter() {
|
||||
conditions = new ArrayList<>();
|
||||
this.conditions = new ArrayList<>();
|
||||
}
|
||||
|
||||
public void addCondition(Condition condition) {
|
||||
@ -41,47 +23,39 @@ public class Filter implements Specification {
|
||||
|
||||
@Override
|
||||
public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
|
||||
List<Predicate> predicates = buildPredicates(root, criteriaQuery, criteriaBuilder);
|
||||
List<Predicate> predicates = buildPredicates(root, criteriaBuilder);
|
||||
return predicates.size() > 1
|
||||
? criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]))
|
||||
? criteriaBuilder.and(predicates.toArray(new Predicate[0]))
|
||||
: predicates.get(0);
|
||||
}
|
||||
|
||||
private List<Predicate> buildPredicates(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
|
||||
// return conditions.stream().map(this::buildPredicate).collect(toList());
|
||||
private List<Predicate> buildPredicates(Root<?> root, CriteriaBuilder criteriaBuilder) {
|
||||
List<Predicate> predicates = new ArrayList<>();
|
||||
for(Condition c:conditions){
|
||||
predicates.add(buildPredicate(c, root, criteriaQuery, criteriaBuilder));
|
||||
predicates.add(buildPredicate(c, root, criteriaBuilder));
|
||||
}
|
||||
|
||||
return predicates;
|
||||
}
|
||||
|
||||
public Predicate buildPredicate(Condition condition, Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
|
||||
switch (condition.comparison) {
|
||||
case eq:
|
||||
return buildEqualsPredicateToCriteria(condition, root, criteriaQuery, criteriaBuilder);
|
||||
case gt:
|
||||
public Predicate buildPredicate(Condition condition, Root<?> root, CriteriaBuilder criteriaBuilder) {
|
||||
switch (condition.getComparison()) {
|
||||
case GT:
|
||||
case LT:
|
||||
case NE:
|
||||
case IS_NULL:
|
||||
case IN:
|
||||
break;
|
||||
case lt:
|
||||
break;
|
||||
case ne:
|
||||
break;
|
||||
case isnull:
|
||||
break;
|
||||
case in:
|
||||
break;
|
||||
case inn:
|
||||
return criteriaBuilder.isNotNull(root.get(condition.field));
|
||||
case lk:
|
||||
return criteriaBuilder.like(root.get(condition.field), "%"+condition.value+"%");
|
||||
case INN:
|
||||
return criteriaBuilder.isNotNull(root.get(condition.getField()));
|
||||
case LK:
|
||||
return criteriaBuilder.like(root.get(condition.getField()), "%"+condition.getValue()+"%");
|
||||
default:
|
||||
return buildEqualsPredicateToCriteria(condition, root, criteriaQuery, criteriaBuilder);
|
||||
return buildEqualsPredicateToCriteria(condition, root, criteriaBuilder);
|
||||
}
|
||||
throw new RuntimeException();
|
||||
}
|
||||
|
||||
private Predicate buildEqualsPredicateToCriteria(Condition condition, Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
|
||||
return criteriaBuilder.equal(root.get(condition.field), condition.value);
|
||||
private Predicate buildEqualsPredicateToCriteria(Condition condition, Root<?> root, CriteriaBuilder criteriaBuilder) {
|
||||
return criteriaBuilder.equal(root.get(condition.getField()), condition.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
package com.jasamedika.medifirst2000.paging;
|
||||
|
||||
public enum Type {
|
||||
numeric,
|
||||
string,
|
||||
date,
|
||||
bool,
|
||||
uuid,
|
||||
list,
|
||||
raw
|
||||
NUMERIC,
|
||||
STRING,
|
||||
DATE,
|
||||
BOOLEAN,
|
||||
UUID,
|
||||
LIST,
|
||||
RAW
|
||||
}
|
||||
|
||||
@ -1,20 +1,5 @@
|
||||
package com.jasamedika.medifirst2000.service.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.jasamedika.medifirst2000.converter.KamusIndikatorConverter;
|
||||
import com.jasamedika.medifirst2000.dao.KamusIndikatorDao;
|
||||
import com.jasamedika.medifirst2000.dao.TargetIndikatorDao;
|
||||
@ -28,6 +13,20 @@ import com.jasamedika.medifirst2000.paging.Filter;
|
||||
import com.jasamedika.medifirst2000.service.KamusIndikatorService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import com.jasamedika.medifirst2000.vo.KamusIndikatorVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service("KamusIndikatorService")
|
||||
public class KamusIndikatorServiceImpl extends BaseVoServiceImpl implements KamusIndikatorService{
|
||||
@ -114,37 +113,26 @@ public class KamusIndikatorServiceImpl extends BaseVoServiceImpl implements Kamu
|
||||
Specification<KamusIndikator> spec) {
|
||||
Direction direction=null;
|
||||
List<DetailKamusIndikatorDto> dtos = new LinkedList<DetailKamusIndikatorDto>();
|
||||
|
||||
if(dir.equalsIgnoreCase("asc")){
|
||||
direction=Sort.Direction.ASC;
|
||||
}else{
|
||||
direction=Sort.Direction.DESC;
|
||||
}
|
||||
|
||||
Pageable pageable = new PageRequest(page, take, direction, sort);
|
||||
Page<KamusIndikator> resultPage = kamusIndikatorDao.findAll(spec, pageable);
|
||||
List<KamusIndikator> resultData = resultPage.getContent();
|
||||
|
||||
for(KamusIndikator model : resultData){
|
||||
|
||||
Filter filter = new Filter();
|
||||
if (CommonUtil.isNotNullOrEmpty(model.getId())) {
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.eq).setField("kamusIndikatorId")
|
||||
.setValue(model.getId()).build());
|
||||
}
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.inn).setField("id").build());
|
||||
|
||||
if (CommonUtil.isNotNullOrEmpty(model.getId()))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.EQ).field("kamusIndikatorId").value(model.getId()).build());
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.INN).field("id").build());
|
||||
Page<TargetIndikator> resultPageKontrak = targetDao.findAll(filter, pageable);
|
||||
List<TargetIndikator> resultDataKontrak = resultPageKontrak.getContent();
|
||||
|
||||
DetailKamusIndikatorDto resultObj = new DetailKamusIndikatorDto();
|
||||
|
||||
resultObj.setKamus(model);
|
||||
resultObj.setListTarget(resultDataKontrak);
|
||||
|
||||
dtos.add(resultObj);
|
||||
}
|
||||
|
||||
}
|
||||
return constructMapReturn(dtos, resultPage.getTotalElements(), resultPage.getTotalPages());
|
||||
}
|
||||
|
||||
|
||||
@ -1,10 +1,17 @@
|
||||
package com.jasamedika.medifirst2000.service.impl;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.jasamedika.medifirst2000.core.web.WebConstants;
|
||||
import com.jasamedika.medifirst2000.dao.KamusIndikatorDao;
|
||||
import com.jasamedika.medifirst2000.dao.KontrakKinerjaDao;
|
||||
import com.jasamedika.medifirst2000.dao.TargetIndikatorDao;
|
||||
import com.jasamedika.medifirst2000.dto.MatriksIndikatorDTO;
|
||||
import com.jasamedika.medifirst2000.entities.KamusIndikator;
|
||||
import com.jasamedika.medifirst2000.entities.TargetIndikator;
|
||||
import com.jasamedika.medifirst2000.paging.Comparison;
|
||||
import com.jasamedika.medifirst2000.paging.Condition;
|
||||
import com.jasamedika.medifirst2000.paging.Filter;
|
||||
import com.jasamedika.medifirst2000.service.MatriksIndikatorService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
@ -14,19 +21,10 @@ import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.jasamedika.medifirst2000.core.web.WebConstants;
|
||||
import com.jasamedika.medifirst2000.dao.KamusIndikatorDao;
|
||||
import com.jasamedika.medifirst2000.dao.KontrakKinerjaDao;
|
||||
import com.jasamedika.medifirst2000.dao.TargetIndikatorDao;
|
||||
import com.jasamedika.medifirst2000.dto.MatriksIndikatorDTO;
|
||||
import com.jasamedika.medifirst2000.entities.KamusIndikator;
|
||||
import com.jasamedika.medifirst2000.entities.KontrakKinerja;
|
||||
import com.jasamedika.medifirst2000.entities.TargetIndikator;
|
||||
import com.jasamedika.medifirst2000.paging.Comparison;
|
||||
import com.jasamedika.medifirst2000.paging.Condition;
|
||||
import com.jasamedika.medifirst2000.paging.Filter;
|
||||
import com.jasamedika.medifirst2000.service.MatriksIndikatorService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service("MatriksIndikatorService")
|
||||
public class MatriksIndikatorServiceImpl implements MatriksIndikatorService{
|
||||
@ -60,12 +58,10 @@ public class MatriksIndikatorServiceImpl implements MatriksIndikatorService{
|
||||
for(KamusIndikator model : resultDataIKU){
|
||||
|
||||
Filter filter = new Filter();
|
||||
if (CommonUtil.isNotNullOrEmpty(model.getId())) {
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.eq).setField("kamusIndikatorId")
|
||||
.setValue(model.getId()).build());
|
||||
}
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.inn).setField("id").build());
|
||||
|
||||
if (CommonUtil.isNotNullOrEmpty(model.getId()))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.EQ).field("kamusIndikatorId").value(model.getId()).build());
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.INN).field("id").build());
|
||||
|
||||
Page<TargetIndikator> resultPageTarget = realisasiDao.findAll(filter, pageable);
|
||||
List<TargetIndikator> resultDataTarget = resultPageTarget.getContent();
|
||||
|
||||
|
||||
@ -235,15 +235,11 @@ public class PegawaiServiceImpl extends BaseVoServiceImpl implements PegawaiServ
|
||||
String namaLengkap) {
|
||||
try {
|
||||
Filter filter = new Filter();
|
||||
if (CommonUtil.isNotNullOrEmpty(id)) {
|
||||
filter.addCondition(
|
||||
new Condition.Builder().setComparison(Comparison.eq).setField("id").setValue(id).build());
|
||||
}
|
||||
if (CommonUtil.isNotNullOrEmpty(namaLengkap)) {
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.eq).setField("namaLengkap")
|
||||
.setValue(namaLengkap).build());
|
||||
}
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.inn).setField("id").build());
|
||||
if (CommonUtil.isNotNullOrEmpty(id))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.EQ).field("id").value(id).build());
|
||||
if (CommonUtil.isNotNullOrEmpty(namaLengkap))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.EQ).field("namaLengkap").value(namaLengkap).build());
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.INN).field("id").build());
|
||||
Pageable pageable = new PageRequest(page, take, Sort.Direction.ASC, sort);
|
||||
Page<Pegawai> resultPage = pegawaiDao.findAll(filter, pageable);
|
||||
List<Pegawai> pegawaiList = resultPage.getContent();
|
||||
|
||||
@ -1,22 +1,5 @@
|
||||
package com.jasamedika.medifirst2000.service.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.jasamedika.medifirst2000.converter.RuanganConverter;
|
||||
import com.jasamedika.medifirst2000.dao.KamarDao;
|
||||
import com.jasamedika.medifirst2000.dao.RuanganDao;
|
||||
@ -31,6 +14,22 @@ import com.jasamedika.medifirst2000.service.RuanganService;
|
||||
import com.jasamedika.medifirst2000.util.CommonUtil;
|
||||
import com.jasamedika.medifirst2000.util.JsonUtil;
|
||||
import com.jasamedika.medifirst2000.vo.RuanganVO;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.domain.Sort.Direction;
|
||||
import org.springframework.data.jpa.domain.Specification;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Implement class for PasienService
|
||||
@ -74,16 +73,11 @@ public class RuanganServiceImpl extends BaseVoServiceImpl implements RuanganServ
|
||||
String kdRuangan) {
|
||||
|
||||
Filter filter = new Filter();
|
||||
if (CommonUtil.isNotNullOrEmpty(nama)) {
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.lk).setField("namaRuangan")
|
||||
.setValue(nama).build());
|
||||
}
|
||||
|
||||
if (CommonUtil.isNotNullOrEmpty(kdRuangan)) {
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.lk).setField("kdRuangan")
|
||||
.setValue(kdRuangan).build());
|
||||
}
|
||||
filter.addCondition(new Condition.Builder().setComparison(Comparison.inn).setField("id").build());
|
||||
if (CommonUtil.isNotNullOrEmpty(nama))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.LK).field("namaRuangan").value(nama).build());
|
||||
if (CommonUtil.isNotNullOrEmpty(kdRuangan))
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.LK).field("kdRuangan").value(kdRuangan).build());
|
||||
filter.addCondition(Condition.builder().comparison(Comparison.INN).field("id").build());
|
||||
|
||||
Pageable pageable = new PageRequest(page, limit, Sort.Direction.ASC, sort);
|
||||
Page<Ruangan> resultPage = ruanganDao.findAll(filter, pageable);
|
||||
|
||||
@ -1,136 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.service.test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.OutputStream;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.file.Files;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
//import org.apache.commons.io.FileUtils;
|
||||
|
||||
public class CopyFilesExample {
|
||||
public static void main(String[] args) throws InterruptedException,
|
||||
IOException {
|
||||
// domain
|
||||
String folderWorkspace="jasamedika-domain";
|
||||
String folderChange="entities";
|
||||
String fromFileName="Bedah";
|
||||
String toFileName="Gizi";
|
||||
String endFileName="";
|
||||
//domain File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
//vo
|
||||
folderChange="vo";
|
||||
endFileName="VO";
|
||||
//vo File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
// converter -dao -service -service impl
|
||||
folderWorkspace="jasamedika-business";
|
||||
folderChange="converter";
|
||||
endFileName="Converter";
|
||||
//Converter File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
folderChange="dao";
|
||||
endFileName="Dao";
|
||||
//Dao File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
folderChange="service";
|
||||
endFileName="Service";
|
||||
//Service File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
folderChange="service\\impl";
|
||||
endFileName="ServiceImpl";
|
||||
//ServiceImpl File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
|
||||
// controller
|
||||
folderWorkspace="jasamedika-web";
|
||||
folderChange="controller";
|
||||
endFileName="Controller";
|
||||
//Controller File
|
||||
copyAndReplace(folderWorkspace, folderChange, fromFileName, toFileName, endFileName);
|
||||
}
|
||||
|
||||
private static void copyAndReplace(String folderWorkspace, String folderChange, String fromFileName,
|
||||
String toFileName, String endFileName) throws IOException, InterruptedException {
|
||||
copyFile(fromFileName,toFileName,folderWorkspace,folderChange,endFileName);
|
||||
Thread.sleep(3000);
|
||||
replaceFile(fromFileName,toFileName,folderWorkspace,folderChange,endFileName);
|
||||
}
|
||||
|
||||
private static void replaceFile(String fromFileName,String toFileName,String folderWorkspace,String folderChange,String endFileName) {
|
||||
System.out.println("REPLACE FILE " +folderChange+ " START");
|
||||
File destFileConverter = new File("E:\\workspace-7\\"+folderWorkspace+"\\src\\main\\java\\com\\jasamedika\\medifirst2000\\"+folderChange+"\\Pap"+toFileName+endFileName+".java");
|
||||
try{
|
||||
FileInputStream fstream = new FileInputStream(destFileConverter);
|
||||
DataInputStream in = new DataInputStream(fstream);
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
||||
String strLine;
|
||||
String result = null;
|
||||
StringBuffer stringBuffer=new StringBuffer();
|
||||
while((strLine=br.readLine())!=null)
|
||||
{
|
||||
System.out.println("LINE : "+strLine);
|
||||
Pattern p = Pattern.compile(fromFileName, Pattern.CASE_INSENSITIVE);
|
||||
Matcher m = p.matcher(strLine);
|
||||
result = m.replaceAll(toFileName);
|
||||
stringBuffer.append(result+"\n");
|
||||
System.out.println("RESULT : "+result);
|
||||
}
|
||||
FileWriter fw = new FileWriter(destFileConverter);
|
||||
fw.write(stringBuffer.toString());
|
||||
fw.close();
|
||||
in.close();
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
}
|
||||
System.out.println("REPLACE FILE " +folderChange+ " END");
|
||||
}
|
||||
|
||||
|
||||
private static void copyFile(String fromFileName,String toFileName,String folderWorkspace,String folderChange,String endFileName) throws IOException {
|
||||
System.out.println("COPY FILE " +folderChange+ " START");
|
||||
File source = new File("E:\\workspace-7\\"+folderWorkspace+"\\src\\main\\java\\com\\jasamedika\\medifirst2000\\"+folderChange+"\\Pap"+fromFileName+endFileName+".java");
|
||||
File destFile = new File("E:\\workspace-7\\"+folderWorkspace+"\\src\\main\\java\\com\\jasamedika\\medifirst2000\\"+folderChange+"\\Pap"+toFileName+endFileName+".java");
|
||||
|
||||
// copy file using FileStreams
|
||||
long start = System.nanoTime();
|
||||
long end;
|
||||
copyFileUsingFileStreams(source, destFile);
|
||||
System.out.println("Time taken by FileStreams Copy = "
|
||||
+ (System.nanoTime() - start));
|
||||
System.out.println("COPY FILE " +folderChange+ " END");
|
||||
}
|
||||
|
||||
private static void copyFileUsingFileStreams(File source, File dest)
|
||||
throws IOException {
|
||||
InputStream input = null;
|
||||
OutputStream output = null;
|
||||
try {
|
||||
input = new FileInputStream(source);
|
||||
output = new FileOutputStream(dest);
|
||||
byte[] buf = new byte[1024];
|
||||
int bytesRead;
|
||||
while ((bytesRead = input.read(buf)) > 0) {
|
||||
output.write(buf, 0, bytesRead);
|
||||
}
|
||||
} finally {
|
||||
input.close();
|
||||
output.close();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,46 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.service.test;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.DataInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class FindRekursif {
|
||||
public static void main(String[] args) {
|
||||
String javaFileName="Produk";
|
||||
try {
|
||||
searchFile(javaFileName);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private static void searchFile(String javaFileName) throws IOException {
|
||||
System.out.println("SEARCH FILE START");
|
||||
File file = new File("E:\\workspace-7\\jasamedika-domain\\src\\main\\java\\com\\jasamedika\\medifirst2000\\entities\\"+javaFileName+".java");
|
||||
FileInputStream fstream = new FileInputStream(file);
|
||||
DataInputStream in = new DataInputStream(fstream);
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(in));
|
||||
String strLine;
|
||||
StringBuffer stringBuffer=new StringBuffer();
|
||||
int count=1;
|
||||
while((strLine=br.readLine())!=null)
|
||||
{
|
||||
Pattern p = Pattern.compile(javaFileName, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
|
||||
Matcher m = p.matcher(strLine);
|
||||
if( m.find()){
|
||||
System.out.println("COUNT "+count+" RESULT : "+strLine);
|
||||
}
|
||||
count++;
|
||||
}
|
||||
System.out.println("SEARCH FILE END");
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
package com.jasamedika.medifirst2000.util;
|
||||
|
||||
public class DateHelper {
|
||||
|
||||
public static String toMonthName(String monthNumber){
|
||||
String result="";
|
||||
switch (monthNumber) {
|
||||
|
||||
@ -1,28 +1,22 @@
|
||||
package com.jasamedika.medifirst2000.util;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.proxy.HibernateProxy;
|
||||
|
||||
@Slf4j
|
||||
public class HibernateInitialize {
|
||||
public static <T> T initializeAndUnproxy(T entity) {
|
||||
if (entity == null) {
|
||||
throw new
|
||||
NullPointerException("Entity passed for initialization is null");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
Hibernate.initialize(entity);
|
||||
if (entity instanceof HibernateProxy) {
|
||||
entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
|
||||
.getImplementation();
|
||||
}
|
||||
public static <T> T initializeAndUnproxy(T entity) {
|
||||
if (entity == null)
|
||||
throw new NullPointerException("Entity passed for initialization is null");
|
||||
try {
|
||||
Hibernate.initialize(entity);
|
||||
if (entity instanceof HibernateProxy)
|
||||
entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation();
|
||||
} catch(Exception ex) {
|
||||
log.error(ex.getMessage());
|
||||
}
|
||||
catch(Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,38 +0,0 @@
|
||||
package com.jasamedika.medifirst2000.util;
|
||||
|
||||
import com.ulisesbocchio.jasyptspringboot.annotation.EncryptablePropertySource;
|
||||
import com.ulisesbocchio.jasyptspringboot.annotation.EncryptablePropertySources;
|
||||
import org.jasypt.encryption.StringEncryptor;
|
||||
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
|
||||
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author salmanoe
|
||||
* @version 1.0.0
|
||||
* @since 23/01/2024
|
||||
*/
|
||||
@Configuration
|
||||
@EncryptablePropertySources({@EncryptablePropertySource("classpath:jdbc.bridging.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.cssd.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.development.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.ip3rs.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.it.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.k3kl.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.laundry.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.localhost.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.mirroring.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.pelayanan.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.sdm.properties"),
|
||||
@EncryptablePropertySource("classpath:jdbc.web.properties")})
|
||||
public class JasyptConfig {
|
||||
@Bean
|
||||
public StringEncryptor jasyptStringEncryptor() {
|
||||
String password = System.getProperty("jasypt.encryptor.password");
|
||||
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
|
||||
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
|
||||
config.setPassword(password);
|
||||
return encryptor;
|
||||
}
|
||||
}
|
||||
@ -1,29 +1,28 @@
|
||||
package com.jasamedika.medifirst2000.util;
|
||||
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.UrlResource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.UrlResource;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @author salmanoe
|
||||
* @since Jan 31, 2023
|
||||
*/
|
||||
@Component
|
||||
public class ResourceUtils {
|
||||
|
||||
public static Resource loadFile(String fileName) throws Exception {
|
||||
try {
|
||||
Path filePath = Paths.get(fileName).toAbsolutePath().normalize();
|
||||
Resource resource = new UrlResource(filePath.toUri());
|
||||
if (resource.exists()) {
|
||||
return resource;
|
||||
} else {
|
||||
if (!resource.exists())
|
||||
throw new FileNotFoundException("File not found " + fileName);
|
||||
}
|
||||
return resource;
|
||||
} catch (MalformedURLException e) {
|
||||
throw new FileNotFoundException("File not found " + fileName);
|
||||
}
|
||||
|
||||
@ -1,19 +0,0 @@
|
||||
<!-- <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
|
||||
monitoring="autodetect" dynamicConfig="true">
|
||||
|
||||
<diskStore path="java.io.tmpdir" />
|
||||
<diskStore path="c:\\cacheTest" />
|
||||
|
||||
<cache name="testFindCache"
|
||||
maxEntriesLocalHeap="10000"
|
||||
maxEntriesLocalDisk="100000"
|
||||
eternal="false"
|
||||
diskSpoolBufferSizeMB="20"
|
||||
timeToIdleSeconds="300" timeToLiveSeconds="600"
|
||||
memoryStoreEvictionPolicy="LFU"
|
||||
transactionalMode="off">
|
||||
<persistence strategy="localTempSwap" />
|
||||
</cache>
|
||||
|
||||
</ehcache> -->
|
||||
Loading…
x
Reference in New Issue
Block a user