cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DistributionNodeByAreaLabelComparator.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/DistributionTree.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/EntityConstraintViolationServiceImpl.java -text
-cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/EntityValidationResultServiceImpl.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/EntityValidationServiceImpl.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/EventBaseServiceImpl.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureNodeServiceImpl.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/FeatureTreeServiceImpl.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IDatabaseService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IDescriptionService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IEntityConstraintViolationService.java -text
-cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IEntityValidationResultService.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IEntityValidationService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IEventBaseService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IFeatureNodeService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/IFeatureTreeService.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/util/TaxonRelationshipEdge.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/utility/DescriptionUtility.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/utility/ImagesUtility.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/Level3TransactionalValidationEventListener.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/Level3TransactionalValidationTask.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/ValidationManager.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/batch/BatchValidationUtil.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/batch/BatchValidator.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/batch/EntityValidationUnit.java -text
+cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/validation/batch/ValidationScheduler.java -text
cdmlib-services/src/main/java/eu/etaxonomy/cdm/validation/constraint/NoDuplicateNamesValidator.java -text
cdmlib-services/src/main/java/org/apache/lucene/search/MultiCollector.java -text
cdmlib-services/src/main/resources/eu/etaxonomy/cdm/defaultApplicationContext.xml -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/molecular/SequenceServiceTest.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/service/pager/PagerTest.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/utility/DescriptionUtilityTest.java -text
+cdmlib-services/src/test/java/eu/etaxonomy/cdm/api/validation/batch/BatchValidatorTest.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/scripts/FixMultipleTextDataInImageGalleries.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/example/ApplicationExample.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/ConcurrentSessionTest.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestConversationEnabled.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestDatabase.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestLocationServiceImpl.java -text
+cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestModelUpdate.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestService.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestTaxonFunction.java -text
+cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/function/TestValidationManager.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/integration/CreateDataTest.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/integration/CreateDataTestNoUnit.java -text
cdmlib-services/src/test/java/eu/etaxonomy/cdm/test/integration/TermLoaderIntegrationTest.java -text
import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;\r
-import eu.etaxonomy.cdm.api.service.IEntityValidationResultService;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;\r
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;\r
\r
/**\r
* @author a.mueller\r
- * \r
*/\r
public class CdmApplicationController implements ICdmApplicationConfiguration {\r
private static final Logger logger = Logger.getLogger(CdmApplicationController.class);\r
\r
/**\r
* Constructor, opens a spring ApplicationContext by using the default data source\r
- * \r
+ *\r
* @throws DataSourceNotFoundException\r
*/\r
- public static CdmApplicationController NewInstance() throws DataSourceNotFoundException\r
- {\r
+ public static CdmApplicationController NewInstance() throws DataSourceNotFoundException{\r
logger.info("Start CdmApplicationController with default data source");\r
CdmPersistentDataSource dataSource = getDefaultDatasource();\r
DbSchemaValidation dbSchemaValidation = defaultDbSchemaValidation;\r
\r
/**\r
* Constructor, opens a spring ApplicationContext by using the default data source\r
- * \r
+ *\r
* @param dbSchemaValidation\r
* validation type for database schema\r
* @throws DataSourceNotFoundException\r
*/\r
- public static CdmApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException\r
- {\r
+ public static CdmApplicationController NewInstance(DbSchemaValidation dbSchemaValidation) throws DataSourceNotFoundException{\r
logger.info("Start CdmApplicationController with default data source");\r
CdmPersistentDataSource dataSource = getDefaultDatasource();\r
return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);\r
/**\r
* Constructor, opens an spring ApplicationContext by using the according data source\r
* and the default database schema validation type\r
- * \r
+ *\r
* @param dataSource\r
*/\r
- public static CdmApplicationController NewInstance(ICdmDataSource dataSource)\r
- {\r
+ public static CdmApplicationController NewInstance(ICdmDataSource dataSource){\r
return CdmApplicationController.NewInstance(null, dataSource, defaultDbSchemaValidation, false);\r
}\r
\r
\r
- public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation)\r
- {\r
+ public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){\r
return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, false);\r
}\r
\r
\r
- public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading)\r
- {\r
+ public static CdmApplicationController NewInstance(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){\r
return CdmApplicationController.NewInstance(null, dataSource, dbSchemaValidation, omitTermLoading);\r
}\r
\r
-\r
public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,\r
- DbSchemaValidation dbSchemaValidation, boolean omitTermLoading)\r
- {\r
+ DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){\r
return CdmApplicationController.NewInstance(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, null);\r
}\r
\r
-\r
public static CdmApplicationController NewInstance(Resource applicationContextResource, ICdmDataSource dataSource,\r
- DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor)\r
- {\r
+ DbSchemaValidation dbSchemaValidation, boolean omitTermLoading, IProgressMonitor progressMonitor){\r
return new CdmApplicationController(applicationContextResource, dataSource, dbSchemaValidation, omitTermLoading, progressMonitor, null);\r
}\r
\r
/**\r
* @return\r
*/\r
- protected static ClassPathResource getClasspathResource()\r
- {\r
+ protected static ClassPathResource getClasspathResource(){\r
return new ClassPathResource(DEFAULT_APPLICATION_CONTEXT_RESOURCE);\r
}\r
\r
* @return\r
* @throws DataSourceNotFoundException\r
*/\r
- protected static CdmPersistentDataSource getDefaultDatasource() throws DataSourceNotFoundException\r
- {\r
+ protected static CdmPersistentDataSource getDefaultDatasource() throws DataSourceNotFoundException{\r
CdmPersistentDataSource dataSource = CdmPersistentDataSource.NewDefaultInstance();\r
return dataSource;\r
}\r
\r
\r
/**\r
- * \r
+ *\r
* FIXME:Remoting this constructor is added only to allow extension of this cntroller\r
* class. and should be removed after refactoring\r
*/\r
- protected CdmApplicationController()\r
- {\r
+ protected CdmApplicationController(){\r
applicationContextResource = null;\r
progressMonitor = null;\r
}\r
/**\r
* Constructor, opens an spring 2.5 ApplicationContext by using the according data\r
* source\r
- * \r
+ *\r
* @param dataSource\r
* @param dbSchemaValidation\r
* @param omitTermLoading\r
*/\r
protected CdmApplicationController(Resource applicationContextResource, ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation,\r
- boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners)\r
- {\r
+ boolean omitTermLoading, IProgressMonitor progressMonitor, List<ApplicationListener> listeners){\r
logger.info("Start CdmApplicationController with datasource: " + dataSource.getName());\r
\r
if (dbSchemaValidation == null) {\r
/**\r
* Sets the application context to a new spring ApplicationContext by using the\r
* according data source and initializes the Controller.\r
- * \r
+ *\r
* @param dataSource\r
*/\r
private boolean setNewDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,\r
- List<ApplicationListener> listeners)\r
- {\r
+ List<ApplicationListener> listeners){\r
\r
if (dbSchemaValidation == null) {\r
dbSchemaValidation = defaultDbSchemaValidation;\r
\r
/**\r
* Tests if some DefinedTermsAreMissing.\r
- * \r
+ *\r
* @return true, if at least one is missing, else false\r
*/\r
- public boolean testDefinedTermsAreMissing()\r
- {\r
+ public boolean testDefinedTermsAreMissing(){\r
UUID englishUuid = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");\r
DefinedTermBase<?> english = this.getTermService().load(englishUuid);\r
if (english == null || !english.getUuid().equals(englishUuid)) {\r
\r
/**\r
* Changes the ApplicationContext to the new dataSource\r
- * \r
+ *\r
* @param dataSource\r
*/\r
- public boolean changeDataSource(ICdmDataSource dataSource)\r
- {\r
+ public boolean changeDataSource(ICdmDataSource dataSource){\r
//logger.info("Change datasource to : " + dataSource);\r
return setNewDataSource(dataSource, DbSchemaValidation.VALIDATE, false, null);\r
}\r
\r
/**\r
* Changes the ApplicationContext to the new dataSource\r
- * \r
+ *\r
* @param dataSource\r
* @param dbSchemaValidation\r
*/\r
- public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation)\r
- {\r
+ public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation){\r
//logger.info("Change datasource to : " + dataSource);\r
return setNewDataSource(dataSource, dbSchemaValidation, false, null);\r
}\r
\r
/**\r
* Changes the ApplicationContext to the new dataSource\r
- * \r
+ *\r
* @param dataSource\r
* @param dbSchemaValidation\r
* @param omitTermLoading\r
*/\r
- public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading)\r
- {\r
+ public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading){\r
logger.info("Change datasource to : " + dataSource);\r
return setNewDataSource(dataSource, dbSchemaValidation, omitTermLoading, null);\r
}\r
\r
/**\r
* Changes the ApplicationContext to the new dataSource\r
- * \r
+ *\r
* @param dataSource\r
* @param dbSchemaValidation\r
* @param omitTermLoading\r
*/\r
public boolean changeDataSource(ICdmDataSource dataSource, DbSchemaValidation dbSchemaValidation, boolean omitTermLoading,\r
- List<ApplicationListener> listeners)\r
- {\r
+ List<ApplicationListener> listeners){\r
logger.info("Change datasource to : " + dataSource);\r
return setNewDataSource(dataSource, dbSchemaValidation, omitTermLoading, listeners);\r
}\r
\r
/**\r
* Sets a new application Context.\r
- * \r
+ *\r
* @param ac\r
*/\r
- public void setApplicationContext(AbstractApplicationContext ac)\r
- {\r
+ public void setApplicationContext(AbstractApplicationContext ac){\r
closeApplicationContext(); //closes old application context if necessary\r
applicationContext = ac;\r
applicationContext.registerShutdownHook();\r
\r
/*\r
* (non-Javadoc)\r
- * \r
+ *\r
* @see java.lang.Object#finalize()\r
*/\r
@Override\r
- public void finalize()\r
- {\r
+ public void finalize(){\r
close();\r
}\r
\r
/**\r
* closes the application\r
*/\r
- public void close()\r
- {\r
+ public void close(){\r
closeApplicationContext();\r
}\r
\r
/**\r
* closes the application context\r
*/\r
- protected void closeApplicationContext()\r
- {\r
+ protected void closeApplicationContext(){\r
if (applicationContext != null) {\r
logger.info("Close ApplicationContext");\r
applicationContext.close();\r
}\r
\r
\r
- protected void init()\r
- {\r
+ protected void init(){\r
logger.debug("Init " + this.getClass().getName() + " ... ");\r
if (logger.isDebugEnabled()) {\r
for (String beanName : applicationContext.getBeanDefinitionNames()) {\r
\r
/* ****** Services ******** */\r
@Override\r
- public final INameService getNameService()\r
- {\r
+ public final INameService getNameService(){\r
return configuration.getNameService();\r
}\r
\r
\r
@Override\r
- public final ITaxonService getTaxonService()\r
- {\r
+ public final ITaxonService getTaxonService(){\r
return configuration.getTaxonService();\r
}\r
\r
\r
@Override\r
- public final IClassificationService getClassificationService()\r
- {\r
+ public final IClassificationService getClassificationService(){\r
return configuration.getClassificationService();\r
}\r
\r
\r
@Override\r
- public final ITaxonNodeService getTaxonNodeService()\r
- {\r
+ public final ITaxonNodeService getTaxonNodeService(){\r
return configuration.getTaxonNodeService();\r
}\r
\r
\r
@Override\r
- public final IReferenceService getReferenceService()\r
- {\r
+ public final IReferenceService getReferenceService(){\r
return configuration.getReferenceService();\r
}\r
\r
\r
@Override\r
- public final IAgentService getAgentService()\r
- {\r
+ public final IAgentService getAgentService(){\r
return configuration.getAgentService();\r
}\r
\r
\r
@Override\r
- public final IDatabaseService getDatabaseService()\r
- {\r
+ public final IDatabaseService getDatabaseService(){\r
return configuration.getDatabaseService();\r
}\r
\r
\r
@Override\r
- public final ITermService getTermService()\r
- {\r
+ public final ITermService getTermService(){\r
return configuration.getTermService();\r
}\r
\r
\r
@Override\r
- public final IDescriptionService getDescriptionService()\r
- {\r
+ public final IDescriptionService getDescriptionService(){\r
return configuration.getDescriptionService();\r
}\r
\r
\r
@Override\r
- public final IOccurrenceService getOccurrenceService()\r
- {\r
+ public final IOccurrenceService getOccurrenceService(){\r
return configuration.getOccurrenceService();\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAmplificationService\r
- * ()\r
- */\r
@Override\r
- public IAmplificationService getAmplificationService()\r
- {\r
+ public IAmplificationService getAmplificationService(){\r
return configuration.getAmplificationService();\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getSequenceService()\r
- */\r
@Override\r
- public ISequenceService getSequenceService()\r
- {\r
+ public ISequenceService getSequenceService(){\r
return configuration.getSequenceService();\r
}\r
\r
\r
@Override\r
- public final IPrimerService getPrimerService()\r
- {\r
+ public final IPrimerService getPrimerService(){\r
return configuration.getPrimerService();\r
}\r
\r
\r
@Override\r
- public final IMediaService getMediaService()\r
- {\r
+ public final IMediaService getMediaService(){\r
return configuration.getMediaService();\r
}\r
\r
\r
@Override\r
- public final ICommonService getCommonService()\r
- {\r
+ public final ICommonService getCommonService(){\r
return configuration.getCommonService();\r
}\r
\r
\r
@Override\r
- public final ILocationService getLocationService()\r
- {\r
+ public final ILocationService getLocationService(){\r
return configuration.getLocationService();\r
}\r
\r
\r
@Override\r
- public final IUserService getUserService()\r
- {\r
+ public final IUserService getUserService(){\r
return configuration.getUserService();\r
}\r
\r
\r
@Override\r
- public final IGrantedAuthorityService getGrantedAuthorityService()\r
- {\r
+ public final IGrantedAuthorityService getGrantedAuthorityService(){\r
return configuration.getGrantedAuthorityService();\r
}\r
\r
\r
@Override\r
- public IGroupService getGroupService()\r
- {\r
+ public IGroupService getGroupService(){\r
return configuration.getGroupService();\r
}\r
\r
\r
@Override\r
- public final ICollectionService getCollectionService()\r
- {\r
+ public final ICollectionService getCollectionService(){\r
return configuration.getCollectionService();\r
}\r
\r
\r
@Override\r
- public final IFeatureTreeService getFeatureTreeService()\r
- {\r
+ public final IFeatureTreeService getFeatureTreeService(){\r
return configuration.getFeatureTreeService();\r
}\r
\r
\r
@Override\r
- public final IFeatureNodeService getFeatureNodeService()\r
- {\r
+ public final IFeatureNodeService getFeatureNodeService(){\r
return configuration.getFeatureNodeService();\r
}\r
\r
\r
@Override\r
- public final IVocabularyService getVocabularyService()\r
- {\r
+ public final IVocabularyService getVocabularyService(){\r
return configuration.getVocabularyService();\r
}\r
\r
\r
@Override\r
- public final IIdentificationKeyService getIdentificationKeyService()\r
- {\r
+ public final IIdentificationKeyService getIdentificationKeyService(){\r
return configuration.getIdentificationKeyService();\r
}\r
\r
\r
@Override\r
- public final IPolytomousKeyService getPolytomousKeyService()\r
- {\r
+ public final IPolytomousKeyService getPolytomousKeyService(){\r
return configuration.getPolytomousKeyService();\r
}\r
\r
\r
@Override\r
- public final IPolytomousKeyNodeService getPolytomousKeyNodeService()\r
- {\r
+ public final IPolytomousKeyNodeService getPolytomousKeyNodeService(){\r
return configuration.getPolytomousKeyNodeService();\r
}\r
\r
\r
@Override\r
- public IEntityValidationResultService getEntityValidationResultService()\r
- {\r
- return configuration.getEntityValidationResultService();\r
+ public IEntityValidationService getEntityValidationService(){\r
+ return configuration.getEntityValidationService();\r
}\r
\r
\r
@Override\r
- public IEntityConstraintViolationService getEntityConstraintViolationService()\r
- {\r
+ public IEntityConstraintViolationService getEntityConstraintViolationService(){\r
return configuration.getEntityConstraintViolationService();\r
}\r
\r
\r
@Override\r
- public final IService<CdmBase> getMainService()\r
- {\r
+ public final IService<CdmBase> getMainService(){\r
return configuration.getMainService();\r
}\r
\r
\r
@Override\r
- public final IWorkingSetService getWorkingSetService()\r
- {\r
+ public final IWorkingSetService getWorkingSetService(){\r
return configuration.getWorkingSetService();\r
}\r
\r
\r
@Override\r
- public final ConversationHolder NewConversation()\r
- {\r
+ public final ConversationHolder NewConversation(){\r
//return (ConversationHolder)applicationContext.getBean("conversationHolder");\r
return configuration.NewConversation();\r
}\r
\r
/* **** Security ***** */\r
\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#authenticate(java\r
- * .lang.String, java.lang.String)\r
- */\r
@Override\r
- public void authenticate(String username, String password)\r
- {\r
+ public void authenticate(String username, String password){\r
UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);\r
Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);\r
SecurityContext context = SecurityContextHolder.getContext();\r
context.setAuthentication(authentication);\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAuthenticationManager\r
- * ()\r
- */\r
@Override\r
- public final ProviderManager getAuthenticationManager()\r
- {\r
+ public final ProviderManager getAuthenticationManager(){\r
return configuration.getAuthenticationManager();\r
}\r
\r
\r
@Override\r
- public ICdmPermissionEvaluator getPermissionEvaluator()\r
- {\r
+ public ICdmPermissionEvaluator getPermissionEvaluator(){\r
return configuration.getPermissionEvaluator();\r
}\r
\r
/**\r
* @see org.springframework.security.access.PermissionEvaluator#hasPermission(org.springframework.security.core.Authentication,\r
* java.lang.Object, java.lang.Object)\r
- * \r
+ *\r
* @param targetDomainObject\r
* @param permission\r
* @return\r
*/\r
- public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission)\r
- {\r
+ public boolean currentAuthentiationHasPermissions(CdmBase targetDomainObject, EnumSet<CRUD> permission){\r
SecurityContext context = SecurityContextHolder.getContext();\r
return getPermissionEvaluator().hasPermission(context.getAuthentication(), targetDomainObject, permission);\r
}\r
\r
\r
@Override\r
- public final PlatformTransactionManager getTransactionManager()\r
- {\r
+ public final PlatformTransactionManager getTransactionManager(){\r
return configuration.getTransactionManager();\r
}\r
\r
\r
@Override\r
- public final Object getBean(String name)\r
- {\r
+ public final Object getBean(String name){\r
return this.applicationContext.getBean(name);\r
}\r
\r
*/\r
\r
/* **** flush ********** */\r
- public void flush()\r
- {\r
+ public void flush(){\r
SessionFactory sf = (SessionFactory) applicationContext.getBean("sessionFactory");\r
sf.getCurrentSession().flush();\r
}\r
\r
\r
- public SessionFactory getSessionFactory()\r
- {\r
+ public SessionFactory getSessionFactory(){\r
return (SessionFactory) applicationContext.getBean("sessionFactory");\r
}\r
\r
\r
@Override\r
- public TransactionStatus startTransaction()\r
- {\r
+ public TransactionStatus startTransaction(){\r
return startTransaction(false);\r
}\r
\r
\r
@Override\r
- public TransactionStatus startTransaction(Boolean readOnly)\r
- {\r
+ public TransactionStatus startTransaction(Boolean readOnly){\r
return configuration.startTransaction(readOnly);\r
}\r
\r
-\r
@Override\r
- public void commitTransaction(TransactionStatus txStatus)\r
- {\r
+ public void commitTransaction(TransactionStatus txStatus){\r
PlatformTransactionManager txManager = configuration.getTransactionManager();\r
txManager.commit(txStatus);\r
return;\r
}\r
-\r
}\r
import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;\r
-import eu.etaxonomy.cdm.api.service.IEntityValidationResultService;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;\r
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;\r
@Autowired\r
private IPolytomousKeyNodeService polytomousKeyNodeService;\r
@Autowired\r
- private IEntityValidationResultService entityValidationResultService;\r
+ private IEntityValidationService entityValidationService;\r
@Autowired\r
private IEntityConstraintViolationService entityConstraintViolationService;\r
@Autowired\r
/**\r
* Constructor\r
*/\r
- protected CdmApplicationDefaultConfiguration()\r
- {\r
- }\r
+ protected CdmApplicationDefaultConfiguration(){}\r
\r
\r
// ****************************** APPLICATION CONTEXT *************************************************/\r
\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.\r
- * springframework.context.ApplicationContext)\r
- */\r
@Override\r
- public void setApplicationContext(ApplicationContext applicationContext) throws BeansException\r
- {\r
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException{\r
this.applicationContext = applicationContext;\r
}\r
\r
-\r
// ****************************** GETTER *************************************************/\r
\r
@Override\r
- public final Object getBean(String name)\r
- {\r
+ public final Object getBean(String name){\r
return this.applicationContext.getBean(name);\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAgentService()\r
- */\r
@Override\r
- public IAgentService getAgentService()\r
- {\r
+ public IAgentService getAgentService(){\r
return this.agentService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDatabaseService()\r
- */\r
@Override\r
- public IDatabaseService getDatabaseService()\r
- {\r
+ public IDatabaseService getDatabaseService(){\r
return this.databaseService;\r
}\r
\r
\r
@Autowired\r
- public void setDataSource(DataSource dataSource)\r
- {\r
+ public void setDataSource(DataSource dataSource){\r
this.dataSource = dataSource;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getNameService()\r
- */\r
@Override\r
- public INameService getNameService()\r
- {\r
+ public INameService getNameService(){\r
return this.nameService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getReferenceService()\r
- */\r
@Override\r
- public IReferenceService getReferenceService()\r
- {\r
+ public IReferenceService getReferenceService(){\r
return this.referenceService;\r
}\r
\r
-\r
@Autowired\r
- public void setSessionFactory(SessionFactory sessionFactory)\r
- {\r
+ public void setSessionFactory(SessionFactory sessionFactory){\r
this.sessionFactory = sessionFactory;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTaxonService()\r
- */\r
@Override\r
- public ITaxonService getTaxonService()\r
- {\r
+ public ITaxonService getTaxonService(){\r
return this.taxonService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getClassificationService\r
- * ()\r
- */\r
@Override\r
- public IClassificationService getClassificationService()\r
- {\r
+ public IClassificationService getClassificationService(){\r
return this.classificationService;\r
}\r
\r
-\r
@Override\r
- public ITaxonNodeService getTaxonNodeService()\r
- {\r
+ public ITaxonNodeService getTaxonNodeService(){\r
return this.taxonNodeService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getDescriptionService\r
- * ()\r
- */\r
@Override\r
- public IDescriptionService getDescriptionService()\r
- {\r
+ public IDescriptionService getDescriptionService(){\r
return this.descriptionService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getOccurrenceService\r
- * ()\r
- */\r
@Override\r
- public IOccurrenceService getOccurrenceService()\r
- {\r
+ public IOccurrenceService getOccurrenceService(){\r
return this.occurrenceService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getOccurrenceService\r
- * ()\r
- */\r
@Override\r
- public IPrimerService getPrimerService()\r
- {\r
+ public IPrimerService getPrimerService(){\r
return this.primerService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAmplificationService\r
- * ()\r
- */\r
@Override\r
- public IAmplificationService getAmplificationService()\r
- {\r
+ public IAmplificationService getAmplificationService(){\r
return this.amplificationService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getSequenceService()\r
- */\r
@Override\r
- public ISequenceService getSequenceService()\r
- {\r
+ public ISequenceService getSequenceService(){\r
return this.sequenceService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getMediaService()\r
- */\r
@Override\r
- public IMediaService getMediaService()\r
- {\r
+ public IMediaService getMediaService(){\r
return this.mediaService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTermService()\r
- */\r
@Override\r
- public ITermService getTermService()\r
- {\r
+ public ITermService getTermService(){\r
return this.termService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()\r
- */\r
@Override\r
- public ICommonService getCommonService()\r
- {\r
+ public ICommonService getCommonService(){\r
return this.commonService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getLocationService()\r
- */\r
@Override\r
- public ILocationService getLocationService()\r
- {\r
+ public ILocationService getLocationService(){\r
return this.locationService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()\r
- */\r
@Override\r
- public IUserService getUserService()\r
- {\r
+ public IUserService getUserService(){\r
return this.userService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getUserService()\r
- */\r
@Override\r
- public IGrantedAuthorityService getGrantedAuthorityService()\r
- {\r
+ public IGrantedAuthorityService getGrantedAuthorityService(){\r
return this.grantedAuthorityService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCommonService()\r
- */\r
@Override\r
- public IService<CdmBase> getMainService()\r
- {\r
+ public IService<CdmBase> getMainService(){\r
return this.mainService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getTransactionManager\r
- * ()\r
- */\r
@Override\r
- public PlatformTransactionManager getTransactionManager()\r
- {\r
+ public PlatformTransactionManager getTransactionManager(){\r
return this.transactionManager;\r
}\r
\r
\r
@Autowired\r
- public void setTransactionManager(PlatformTransactionManager transactionManager)\r
- {\r
+ public void setTransactionManager(PlatformTransactionManager transactionManager){\r
this.transactionManager = (HibernateTransactionManager) transactionManager;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getAuthenticationManager\r
- * ()\r
- */\r
@Override\r
- public ProviderManager getAuthenticationManager()\r
- {\r
+ public ProviderManager getAuthenticationManager(){\r
return this.authenticationManager;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#NewConversation()\r
- */\r
@Override\r
- public ConversationHolder NewConversation()\r
- {\r
+ public ConversationHolder NewConversation(){\r
// TODO make this a prototype\r
return new ConversationHolder(dataSource, sessionFactory, transactionManager);\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getCollectionService\r
- * ()\r
- */\r
@Override\r
- public ICollectionService getCollectionService()\r
- {\r
+ public ICollectionService getCollectionService(){\r
return collectionService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureTreeService\r
- * ()\r
- */\r
@Override\r
- public IFeatureTreeService getFeatureTreeService()\r
- {\r
+ public IFeatureTreeService getFeatureTreeService(){\r
return featureTreeService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getFeatureNodeService\r
- * ()\r
- */\r
@Override\r
- public IFeatureNodeService getFeatureNodeService()\r
- {\r
+ public IFeatureNodeService getFeatureNodeService(){\r
return featureNodeService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getVocabularyService\r
- * ()\r
- */\r
@Override\r
- public IVocabularyService getVocabularyService()\r
- {\r
+ public IVocabularyService getVocabularyService(){\r
return vocabularyService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#\r
- * getIdentificationKeyService()\r
- */\r
@Override\r
- public IIdentificationKeyService getIdentificationKeyService()\r
- {\r
+ public IIdentificationKeyService getIdentificationKeyService(){\r
return identificationKeyService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPolytomousKeyService\r
- * ()\r
- */\r
@Override\r
- public IPolytomousKeyService getPolytomousKeyService()\r
- {\r
+ public IPolytomousKeyService getPolytomousKeyService(){\r
return polytomousKeyService;\r
}\r
\r
\r
@Override\r
- public IPolytomousKeyNodeService getPolytomousKeyNodeService()\r
- {\r
+ public IPolytomousKeyNodeService getPolytomousKeyNodeService(){\r
return polytomousKeyNodeService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getWorkingSetService\r
- * ()\r
- */\r
@Override\r
- public IWorkingSetService getWorkingSetService()\r
- {\r
+ public IWorkingSetService getWorkingSetService(){\r
return workingSetService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getGroupService()\r
- */\r
@Override\r
- public IGroupService getGroupService()\r
- {\r
+ public IGroupService getGroupService(){\r
return groupService;\r
}\r
\r
\r
@Override\r
- public IEntityValidationResultService getEntityValidationResultService()\r
- {\r
- return entityValidationResultService;\r
+ public IEntityValidationService getEntityValidationService(){\r
+ return entityValidationService;\r
}\r
\r
\r
@Override\r
- public IEntityConstraintViolationService getEntityConstraintViolationService()\r
- {\r
+ public IEntityConstraintViolationService getEntityConstraintViolationService(){\r
return entityConstraintViolationService;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#getPermissionEvaluator\r
- * ()\r
- */\r
@Override\r
- public ICdmPermissionEvaluator getPermissionEvaluator()\r
- {\r
+ public ICdmPermissionEvaluator getPermissionEvaluator(){\r
return permissionEvaluator;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()\r
- */\r
@Override\r
- public TransactionStatus startTransaction()\r
- {\r
+ public TransactionStatus startTransaction(){\r
return startTransaction(false);\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#startTransaction()\r
- */\r
@Override\r
- public TransactionStatus startTransaction(Boolean readOnly)\r
- {\r
+ public TransactionStatus startTransaction(Boolean readOnly){\r
\r
PlatformTransactionManager txManager = getTransactionManager();\r
\r
\r
\r
@Override\r
- public void commitTransaction(TransactionStatus txStatus)\r
- {\r
+ public void commitTransaction(TransactionStatus txStatus){\r
PlatformTransactionManager txManager = getTransactionManager();\r
txManager.commit(txStatus);\r
return;\r
}\r
\r
-\r
- /*\r
- * (non-Javadoc)\r
- * \r
- * @see\r
- * eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration#authenticate(java\r
- * .lang.String, java.lang.String)\r
- */\r
@Override\r
- public void authenticate(String username, String password)\r
- {\r
+ public void authenticate(String username, String password){\r
UsernamePasswordAuthenticationToken tokenForUser = new UsernamePasswordAuthenticationToken(username, password);\r
Authentication authentication = this.getAuthenticationManager().authenticate(tokenForUser);\r
SecurityContext context = SecurityContextHolder.getContext();\r
import eu.etaxonomy.cdm.api.service.IDatabaseService;\r
import eu.etaxonomy.cdm.api.service.IDescriptionService;\r
import eu.etaxonomy.cdm.api.service.IEntityConstraintViolationService;\r
-import eu.etaxonomy.cdm.api.service.IEntityValidationResultService;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
import eu.etaxonomy.cdm.api.service.IFeatureNodeService;\r
import eu.etaxonomy.cdm.api.service.IFeatureTreeService;\r
import eu.etaxonomy.cdm.api.service.IGrantedAuthorityService;\r
* @author a.mueller\r
* @created 21.05.2008\r
*/\r
-public interface ICdmApplicationConfiguration {\r
+public interface ICdmApplicationConfiguration{\r
\r
- public TransactionStatus startTransaction();\r
\r
+ public TransactionStatus startTransaction();\r
\r
- public TransactionStatus startTransaction(Boolean readOnly);\r
+ public TransactionStatus startTransaction(Boolean readOnly);\r
\r
-\r
- public void commitTransaction(TransactionStatus tx);\r
+ public void commitTransaction(TransactionStatus tx);\r
\r
\r
public Object getBean(String string);\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public ITaxonNodeService getTaxonNodeService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public ILocationService getLocationService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IUserService getUserService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IGroupService getGroupService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IGrantedAuthorityService getGrantedAuthorityService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public ProviderManager getAuthenticationManager();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public ICollectionService getCollectionService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IFeatureTreeService getFeatureTreeService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IFeatureNodeService getFeatureNodeService();\r
\r
\r
/**\r
- * \r
+ *\r
* @return\r
*/\r
public IVocabularyService getVocabularyService();\r
/**\r
* @return\r
*/\r
- public IEntityValidationResultService getEntityValidationResultService();\r
+ public IEntityValidationService getEntityValidationService();\r
\r
\r
/**\r
// $Id$\r
/**\r
* Copyright (C) 2009 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \r
+*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
public class MonitoredListableBeanFactory extends DefaultListableBeanFactory {\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(MonitoredListableBeanFactory.class);\r
- \r
+\r
private boolean isInitializingBeans = false;\r
private IProgressMonitor currentMonitor;\r
- \r
+\r
private static List<String> beansToMonitor = Arrays.asList("sessionFactory","defaultBeanInitializer","persistentTermInitializer");\r
- private Set<String> alreadyMonitoredBeans = new HashSet<String>();\r
+ private final Set<String> alreadyMonitoredBeans = new HashSet<String>();\r
\r
public MonitoredListableBeanFactory(){\r
}\r
- \r
+\r
// @Override\r
// protected RootBeanDefinition getMergedLocalBeanDefinition(String beanName) throws BeansException {\r
// if (registeredBeanNames.contains(beanName)){\r
// return super.getMergedLocalBeanDefinition(beanName);\r
-// \r
+//\r
// }\r
//// String message = "Handle bean '%s'";\r
//// message = String.format(message, beanName);\r
//// registeredBeanNames.add(beanName);\r
// return result;\r
// }\r
- \r
- public void preInstantiateSingletons() throws BeansException {\r
+\r
+ @Override\r
+ public void preInstantiateSingletons() throws BeansException {\r
isInitializingBeans = true;\r
checkMonitorCancelled(currentMonitor);\r
int countBeans = 0;\r
// }\r
// return result;\r
// }\r
- \r
+\r
+ @Override\r
protected Object createBean(final String name, final RootBeanDefinition mbd, final Object[] args){\r
boolean doMonitor = isInitializingBeans && beansToMonitor.contains(name) && !alreadyMonitoredBeans.contains(name);\r
checkMonitorCancelled(currentMonitor);\r
return result;\r
}\r
\r
- \r
+\r
/**\r
* @param mainMonitor the mainMonitor to set\r
*/\r
public void setCurrentMonitor(IProgressMonitor monitor) {\r
this.currentMonitor = monitor;\r
}\r
- \r
+\r
private void checkMonitorCancelled(IProgressMonitor monitor) {\r
if (monitor != null && monitor.isCanceled()){\r
throw new CancellationException();\r
- } \r
+ }\r
}\r
- \r
+\r
}\r
// $Id$\r
/**\r
* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \r
+*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.ISourceable;\r
import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
-import eu.etaxonomy.cdm.model.common.OriginalSourceBase;\r
import eu.etaxonomy.cdm.model.metadata.CdmMetaData;\r
import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;\r
import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;\r
import eu.etaxonomy.cdm.persistence.dao.common.IOriginalSourceDao;\r
+import eu.etaxonomy.cdm.persistence.query.OrderHint;\r
import eu.etaxonomy.cdm.strategy.match.DefaultMatchStrategy;\r
import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;\r
import eu.etaxonomy.cdm.strategy.match.IMatchable;\r
\r
@Service\r
@Transactional(readOnly = true)\r
-public class CommonServiceImpl extends ServiceBase<OriginalSourceBase,IOriginalSourceDao> implements ICommonService {\r
+public class CommonServiceImpl /*extends ServiceBase<OriginalSourceBase,IOriginalSourceDao>*/ implements ICommonService {\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(CommonServiceImpl.class);\r
- \r
- @Autowired\r
- IOriginalSourceDao originalSourceDao;\r
- \r
- @Autowired\r
- ICdmGenericDao genericDao;\r
\r
+ @Autowired\r
+ private IOriginalSourceDao originalSourceDao;\r
\r
@Autowired\r
- protected void setDao(IOriginalSourceDao dao) {\r
- this.dao = dao;\r
- }\r
- \r
+ private ICdmGenericDao genericDao;\r
+\r
@Override\r
public CdmBase find(Class<? extends CdmBase> clazz, int id){\r
return genericDao.find(clazz, id);\r
}\r
- \r
+\r
\r
@Override\r
public Map<String, ? extends ISourceable> getSourcedObjectsByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace) {\r
Map<String, ? extends ISourceable> list = originalSourceDao.findOriginalSourcesByIdInSource(clazz, idInSourceSet, idNamespace);\r
return list;\r
}\r
- \r
+\r
@Override\r
public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace) {\r
ISourceable result = null;\r
result = list.get(0);\r
}return result;\r
}\r
- \r
- \r
+\r
+\r
@Override\r
public Set<CdmBase> getReferencingObjects(CdmBase referencedCdmBase){\r
return this.genericDao.getReferencingObjects(referencedCdmBase);\r
- } \r
- \r
- \r
+ }\r
+\r
+\r
@Override\r
public Set<CdmBase> getReferencingObjectsForDeletion(CdmBase referencedCdmBase){\r
return this.genericDao.getReferencingObjectsForDeletion(referencedCdmBase);\r
}\r
// try {\r
// Set<Class<? extends CdmBase>> allCdmClasses = genericDao.getAllCdmClasses(false); //findAllCdmClasses();\r
-// \r
+//\r
// referencedCdmBase = (CdmBase)HibernateProxyHelper.deproxy(referencedCdmBase);\r
// Class referencedClass = referencedCdmBase.getClass();\r
// Set<CdmBase> result = new HashSet<CdmBase>();\r
// logger.debug("Referenced Class: " + referencedClass.getName());\r
-// \r
+//\r
// for (Class<? extends CdmBase> cdmClass : allCdmClasses){\r
// Set<Field> fields = getFields(cdmClass);\r
// for (Field field: fields){\r
// Class<?> type = field.getType();\r
// //class\r
// if (! type.isInterface()){\r
-// if (referencedClass.isAssignableFrom(type)|| \r
+// if (referencedClass.isAssignableFrom(type)||\r
// type.isAssignableFrom(referencedClass) && CdmBase.class.isAssignableFrom(type)){\r
// handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);\r
// }\r
// }else if (type.isAssignableFrom(referencedClass)){\r
// handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, false);\r
// }else if (Collection.class.isAssignableFrom(type)){\r
-// \r
+//\r
// if (checkIsSetOfType(field, referencedClass, type) == true){\r
-// handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, true); \r
+// handleSingleClass(referencedClass, type, field, cdmClass, result, referencedCdmBase, true);\r
// }\r
// }\r
//// Class[] interfaces = referencedClass.getInterfaces();\r
//// handleSingleClass(interfaze, type, field, cdmClass, result, referencedCdmBase);\r
//// }\r
//// }\r
-// } \r
+// }\r
// }\r
// return result;\r
// } catch (Exception e) {\r
// e.printStackTrace();\r
// throw new RuntimeException(e);\r
// }\r
-// \r
+//\r
// }\r
-// \r
+//\r
// private boolean checkIsSetOfType(Field field, Class referencedClass, Class<?> type){\r
// Type genericType = (ParameterizedTypeImpl)field.getGenericType();\r
// if (genericType instanceof ParameterizedTypeImpl){\r
// }\r
// return false;\r
// }\r
-// \r
-// \r
-// \r
-// \r
+//\r
+//\r
+//\r
+//\r
// private boolean handleSingleClass(Class itemClass, Class type, Field field, Class cdmClass, Set<CdmBase> result,CdmBase value, boolean isCollection){\r
// if (! Modifier.isStatic(field.getModifiers())){\r
// String methodName = StringUtils.rightPad(field.getName(), 30);\r
// String className = StringUtils.rightPad(cdmClass.getSimpleName(), 30);\r
// String returnTypeName = StringUtils.rightPad(type.getSimpleName(), 30);\r
-// \r
+//\r
// logger.debug(methodName + "\t\t" + className + "\t\t" + returnTypeName);\r
//// result_old.add(method);\r
// result.addAll(getCdmBasesByFieldAndClass(field, itemClass, cdmClass, value, isCollection));\r
// }\r
// return true;\r
// }\r
-// \r
+//\r
// private Set<Field> getFields(Class clazz){\r
// Set<Field> result = new HashSet<Field>();\r
// for (Field field: clazz.getDeclaredFields()){\r
// if (!Modifier.isStatic(field.getModifiers())){\r
-// result.add(field); \r
+// result.add(field);\r
// }\r
// }\r
// Class superclass = clazz.getSuperclass();\r
// }\r
// return result;\r
// }\r
-// \r
+//\r
// private Set<CdmBase> getCdmBasesByFieldAndClass(Field field, Class itemClass, Class otherClazz, CdmBase item, boolean isCollection){\r
// Set<CdmBase> result = new HashSet<CdmBase>();\r
// if (isCollection){\r
// }\r
// return result;\r
// }\r
- \r
+\r
@Override\r
public List getHqlResult(String hqlQuery){\r
return genericDao.getHqlResult(hqlQuery);\r
}\r
return genericDao.findMatching(objectToMatch, matchStrategy);\r
}\r
- \r
- \r
- \r
-// /* (non-Javadoc)\r
-// * @see eu.etaxonomy.cdm.api.service.IService#list(java.lang.Class, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
-// */\r
-// @Override\r
-// public <TYPE extends OriginalSourceBase> Pager<TYPE> list(Class<TYPE> type,\r
-// Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,\r
-// List<String> propertyPaths) {\r
-// logger.warn("Not yet implemented");\r
-// return null;\r
-// }\r
+\r
\r
@Transactional(readOnly = false)\r
@Override\r
return genericDao.initializeCollection(col);\r
\r
}\r
- \r
+\r
@Override\r
public boolean isEmpty(PersistentCollection col) {\r
return genericDao.isEmpty(col);\r
\r
}\r
- \r
+\r
@Override\r
public int size(PersistentCollection col) {\r
return genericDao.size(col);\r
}\r
- \r
+\r
@Override\r
public Object get(PersistentCollection col, int index) {\r
return genericDao.get(col, index);\r
}\r
- \r
+\r
@Override\r
public boolean contains(PersistentCollection col, Object element) {\r
return genericDao.contains(col, element);\r
}\r
- \r
- @Override \r
+\r
+ @Override\r
public boolean containsKey(PersistentCollection col, Object key) {\r
return genericDao.containsKey(col, key);\r
}\r
- \r
+\r
@Override\r
public boolean containsValue(PersistentCollection col, Object element) {\r
return genericDao.containsValue(col, element);\r
public void createFullSampleData() {\r
genericDao.createFullSampleData();\r
}\r
+\r
+\r
+ @Override\r
+ public void updateEntity(CdmBase cdmBase) {\r
+ genericDao.update(cdmBase);\r
+ }\r
+\r
+ @Override\r
+ public <S extends CdmBase> List<S> list(Class<S> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths){\r
+ return genericDao.list(type,limit, start, orderHints,propertyPaths);\r
+ }\r
+\r
+ @Override\r
+ public <S extends CdmBase> int count(Class<S> type) {\r
+ return genericDao.count(type);\r
+ }\r
+\r
+\r
+\r
}\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
package eu.etaxonomy.cdm.api.service;\r
\r
import java.util.List;\r
\r
+import org.springframework.beans.factory.annotation.Autowired;\r
import org.springframework.stereotype.Service;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;\r
-import eu.etaxonomy.cdm.persistence.dao.validation.IEntityConstraintViolationDao;\r
import eu.etaxonomy.cdm.model.validation.Severity;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityConstraintViolationDao;\r
\r
+/**\r
+ *\r
+ * @author ayco_holleman\r
+ * @date 15 jan. 2015\r
+ *\r
+ */\r
@Service\r
@Transactional(readOnly = true)\r
public class EntityConstraintViolationServiceImpl extends ServiceBase<EntityConstraintViolation, IEntityConstraintViolationDao> implements\r
IEntityConstraintViolationService {\r
\r
- IEntityConstraintViolationDao dao;\r
+ @Autowired\r
+ private IEntityConstraintViolationDao dao;\r
\r
\r
@Override\r
- protected void setDao(IEntityConstraintViolationDao dao)\r
- {\r
+ protected void setDao(IEntityConstraintViolationDao dao){\r
this.dao = dao;\r
}\r
\r
\r
@Override\r
- public List<EntityConstraintViolation> getConstraintViolations()\r
- {\r
+ public List<EntityConstraintViolation> getConstraintViolations(){\r
return dao.getConstraintViolations();\r
}\r
\r
\r
@Override\r
- public List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass)\r
- {\r
+ public List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass){\r
return dao.getConstraintViolations(validatedEntityClass);\r
}\r
\r
\r
@Override\r
- public List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass, Severity severity)\r
- {\r
+ public List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass, Severity severity){\r
return dao.getConstraintViolations(validatedEntityClass, severity);\r
}\r
\r
\r
@Override\r
- public List<EntityConstraintViolation> getConstraintViolations(Severity severity)\r
- {\r
+ public List<EntityConstraintViolation> getConstraintViolations(Severity severity){\r
return dao.getConstraintViolations(severity);\r
}\r
\r
+++ /dev/null
-package eu.etaxonomy.cdm.api.service;\r
-\r
-import java.util.List;\r
-\r
-import org.springframework.beans.factory.annotation.Autowired;\r
-import org.springframework.stereotype.Service;\r
-import org.springframework.transaction.annotation.Transactional;\r
-\r
-import eu.etaxonomy.cdm.model.validation.EntityValidationResult;\r
-import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationResultDao;\r
-import eu.etaxonomy.cdm.model.validation.Severity;\r
-\r
-@Service\r
-@Transactional(readOnly = true)\r
-public class EntityValidationResultServiceImpl extends ServiceBase<EntityValidationResult, IEntityValidationResultDao> implements\r
- IEntityValidationResultService {\r
-\r
- @Autowired\r
- IEntityValidationResultDao dao;\r
-\r
-\r
- @Override\r
- protected void setDao(IEntityValidationResultDao dao)\r
- {\r
- this.dao = dao;\r
- }\r
-\r
-\r
- @Override\r
- public EntityValidationResult getValidationResult(String validatedEntityClass, int validatedEntityId)\r
- {\r
- return dao.getValidationResult(validatedEntityClass, validatedEntityId);\r
- }\r
-\r
-\r
- @Override\r
- public List<EntityValidationResult> getValidationResults()\r
- {\r
- return dao.getValidationResults();\r
- }\r
-\r
-\r
- @Override\r
- public List<EntityValidationResult> getEntityValidationResults(String validatedEntityClass)\r
- {\r
- return dao.getEntityValidationResults(validatedEntityClass);\r
- }\r
-\r
-\r
- @Override\r
- public List<EntityValidationResult> getEntitiesViolatingConstraint(String validatorClass)\r
- {\r
- return dao.getEntitiesViolatingConstraint(validatorClass);\r
- }\r
-\r
-\r
- @Override\r
- public List<EntityValidationResult> getValidationResults(String validatedEntityClass, Severity severity)\r
- {\r
- return dao.getValidationResults(validatedEntityClass, severity);\r
- }\r
-\r
-\r
- @Override\r
- public List<EntityValidationResult> getValidationResults(Severity severity)\r
- {\r
- // TODO Auto-generated method stub\r
- return null;\r
- }\r
-\r
-}\r
--- /dev/null
+/**\r
+ * Copyright (C) 2007 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.service;\r
+\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import javax.validation.ConstraintViolation;\r
+\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.stereotype.Service;\r
+import org.springframework.transaction.annotation.Transactional;\r
+\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.model.validation.EntityValidation;\r
+import eu.etaxonomy.cdm.model.validation.Severity;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationDao;\r
+\r
+/**\r
+ *\r
+ * @author ayco_holleman\r
+ * @date 15 jan. 2015\r
+ *\r
+ */\r
+@Service\r
+@Transactional(readOnly = true)\r
+public class EntityValidationServiceImpl extends ServiceBase<EntityValidation, IEntityValidationDao>\r
+ implements IEntityValidationService {\r
+\r
+ @Autowired\r
+ IEntityValidationDao dao;\r
+\r
+ @Override\r
+ protected void setDao(IEntityValidationDao dao) {\r
+ this.dao = dao;\r
+ }\r
+\r
+ @Override\r
+ public EntityValidation getValidationResult(String validatedEntityClass, int validatedEntityId) {\r
+ return dao.getEntityValidation(validatedEntityClass, validatedEntityId);\r
+ }\r
+\r
+ @Override\r
+ public List<EntityValidation> getValidationResults() {\r
+ return dao.getEntityValidations();\r
+ }\r
+\r
+ @Override\r
+ public List<EntityValidation> getEntityValidations(String validatedEntityClass) {\r
+ return dao.getEntityValidations(validatedEntityClass);\r
+ }\r
+\r
+ @Override\r
+ public List<EntityValidation> getEntitiesViolatingConstraint(String validatorClass) {\r
+ return dao.getEntitiesViolatingConstraint(validatorClass);\r
+ }\r
+\r
+ @Override\r
+ public List<EntityValidation> getValidationResults(String validatedEntityClass, Severity severity) {\r
+ return dao.getEntityValidations(validatedEntityClass, severity);\r
+ }\r
+\r
+ @Override\r
+ public List<EntityValidation> getValidationResults(Severity severity) {\r
+ return dao.getEntityValidations(severity);\r
+ }\r
+\r
+ @Override\r
+ @Transactional(readOnly = false)\r
+ public <T extends ICdmBase> void saveEntityValidation(T validatedEntity, Set<ConstraintViolation<T>> errors,\r
+ CRUDEventType crudEventType, Class<?>[] validationGroups) {\r
+ dao.saveEntityValidation(validatedEntity, errors, crudEventType, validationGroups);\r
+\r
+ }\r
+\r
+ @Override\r
+ @Transactional(readOnly = false)\r
+ public void deleteEntityValidation(String validatedEntityClass, int validatedEntityId) {\r
+ dao.deleteEntityValidation(validatedEntityClass, validatedEntityId);\r
+ }\r
+\r
+}\r
// $Id$
/**
* Copyright (C) 2007 EDIT
-* European Distributed Institute of Taxonomy
+* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
-*
+*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import org.hibernate.Session;
import org.hibernate.collection.spi.PersistentCollection;
-import eu.etaxonomy.cdm.api.service.config.DeleteConfiguratorBase;
-import eu.etaxonomy.cdm.database.DatabaseSchemaMismatchException;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.ISourceable;
-import eu.etaxonomy.cdm.model.common.OriginalSourceBase;
import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
import eu.etaxonomy.cdm.model.metadata.CdmMetaData.MetaDataPropertyName;
-import eu.etaxonomy.cdm.model.reference.IGeneric;
import eu.etaxonomy.cdm.persistence.dao.common.ICdmGenericDao;
+import eu.etaxonomy.cdm.persistence.query.OrderHint;
import eu.etaxonomy.cdm.strategy.match.IMatchStrategy;
import eu.etaxonomy.cdm.strategy.match.IMatchable;
import eu.etaxonomy.cdm.strategy.match.MatchException;
import eu.etaxonomy.cdm.strategy.merge.MergeException;
-public interface ICommonService extends IService<OriginalSourceBase>{
-//
+public interface ICommonService /*extends IService<OriginalSourceBase>*/{
+//
// /** find cdmBase by UUID**/
// public abstract CdmBase getCdmBaseByUuid(UUID uuid);
//
* @param metaData
*/
public void saveAllMetaData(Collection<CdmMetaData> metaData);
-
+
/**
* Returns all meta data.
* @return
*/
public Map<MetaDataPropertyName, CdmMetaData> getCdmMetaData();
-
-
+
+
/**
- * Returns a map of identifiable entities of class <code>clazz</code> which have an original source of
+ * Returns a map of identifiable entities of class <code>clazz</code> which have an original source of
* with namespace <code>idNamespace</code> and with an idInSource in <code>idInSourceSet</code> <BR>
* The key of the map is the idInSource. If there are multiple objects that have the same id an arbitrary one is chosen.
* @param clazz
* @return
*/
public Map<String, ? extends ISourceable> getSourcedObjectsByIdInSource(Class clazz, Set<String> idInSourceSet, String idNamespace);
-
+
/**
* Returns a list of identifiable entities according to their class, idInSource and idNamespace
* @param clazz
*/
public ISourceable getSourcedObjectByIdInSource(Class clazz, String idInSource, String idNamespace);
-
+
/**
* Returns all CdmBase objects that reference the referencedCdmBase.
* For example, if referencedCdmBase is an agent it may return all taxon names
- * that have this person as an author but also all books, articles, etc. that have
+ * that have this person as an author but also all books, articles, etc. that have
* this person as an author
* @param referencedCdmBase
* @return
*/
public Set<CdmBase> getReferencingObjects(CdmBase referencedCdmBase);
-
+
/**
* Merges mergeSecond into mergeFirst. All references to mergeSecond will be replaced by references
* to merge first. If no merge strategy is defined (null), the DefaultMergeStrategy will be taken as default.
* @throws MergeException
*/
public <T extends IMergable> void merge(T mergeFirst, T mergeSecond, IMergeStrategy mergeStrategy) throws MergeException;
-
+
/**
* Returns all objects that match the object to match according to the given match strategy.
* If no match strategy is defined the default match strategy is taken.
* @throws MatchException
*/
public <T extends IMatchable> List<T> findMatching(T objectToMatch, IMatchStrategy matchStrategy) throws MatchException;
-
+
/**
* A generic method to retrieve any CdmBase object by its id and class.<BR>
* @see ICdmGenericDao#find(Class, int)
/**
* Initializes a lazy loaded persistent collection.
- *
+ *
* @param col the persistent collection to initialize
* @return the initialized persistent collection
*/
public PersistentCollection initializeCollection(PersistentCollection col);
-
+
/**
* Checks if a lazy loaded persistent collection is empty.
- *
- * @param col the persistent collection
+ *
+ * @param col the persistent collection
* @return the initialized persistent collection
*/
public boolean isEmpty(PersistentCollection col);
-
+
/**
* Returns the size of a persistent collection.
- *
+ *
* @param col the persistent collection to initialize
* @return the size of the persistent collection
*/
public int size(PersistentCollection col);
-
+
/**
* Returns the object contained in a persistent collection at the given index.
- *
- * @param col the persistent collection
+ *
+ * @param col the persistent collection
* @param index the index of the requested element
* @return the object at the requested index
*/
public Object get(PersistentCollection col, int index);
-
+
/**
* checks whether an object is contained within a persistent collection.
- *
- * @param col the persistent collection
+ *
+ * @param col the persistent collection
* @param element the element to check for
* @return true if the element exists in the collection, false o/w
*/
public boolean contains(PersistentCollection col, Object element);
-
+
/**
* checks whether an index object exists within a persistent collection
* (usually a map)
- *
- * @param col the persistent collection
+ *
+ * @param col the persistent collection
* @param key the index object to look for.
* @return true if the index object exists in the collection, false o/w
*/
public boolean containsKey(PersistentCollection col, Object key);
-
+
/**
* checks whether an value object exists within a persistent collection
* (usually a map)
- *
- * @param col the persistent collection
+ *
+ * @param col the persistent collection
* @param key the value object to look for.
* @return true if the value object exists in the collection, false o/w
*/
public boolean containsValue(PersistentCollection col, Object element);
public Set<CdmBase> getReferencingObjectsForDeletion(CdmBase referencedCdmBase);
-
+
/**
* Preliminary, may be moved to test later
*/
@Deprecated
public void createFullSampleData();
-
-
+
+ //TODO as common service currently implements OriginalSourceBase this is additionally needed
+ //maybe fixed in future
+ void updateEntity(CdmBase cdmBase);
+
+
+
+ /**
+ * Returns the number of objects that belong to a certain class.
+ * @param type the CdmBase class
+ * @return the number of objects in the database
+ */
+ public <S extends CdmBase> int count(Class<S> type);
+
+
+ /**
+ * Generic method to retrieve a list of objects. Use only if no specific service class
+ * can be used.
+ * @param type
+ * @param limit
+ * @param start
+ * @param orderHints
+ * @param propertyPaths
+ * @see IService#list(Class, Integer, Integer, List, List)
+ * @return
+ */
+ public <S extends CdmBase> List<S> list(Class<S> type, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths);
+
+
}
\ No newline at end of file
+// $Id: IEntityConstraintViolationService.java 22374 2014-12-10 23:02:58Z ayco_holleman $\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
package eu.etaxonomy.cdm.api.service;\r
\r
import java.util.List;\r
* A service that provides several retrieval methods for entity validation outcomes. The\r
* focus is on the constraints being violated rather than on the entities that violated\r
* them.\r
- * \r
+ *\r
* @author ayco_holleman\r
- * \r
+ *\r
*/\r
public interface IEntityConstraintViolationService extends IService<EntityConstraintViolation> {\r
\r
/**\r
* Get all constraint violations for all validated entities. The constraint violations\r
* are sorted according to the type and id of the validated entities.\r
- * \r
+ *\r
* @param validatedEntityClass\r
* The fully qualified class name of the entity class\r
- * \r
+ *\r
* @return The {@code EntityConstraintViolation}s\r
*/\r
List<EntityConstraintViolation> getConstraintViolations();\r
* Get all constraint violations for all entities of the specified type. The\r
* constraint violations are sorted according to the type and id of the validated\r
* entities.\r
- * \r
+ *\r
* @param validatedEntityClass\r
* The fully qualified class name of the entity class\r
- * \r
+ *\r
* @return The {@code EntityConstraintViolation}s\r
*/\r
List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass);\r
* Get all constraint violations of the specified severity for all entities of the\r
* specified type. The constraint violations are sorted according to the type and id\r
* of the validated entities.\r
- * \r
+ *\r
* @param validatedEntityClass\r
* The fully qualified class name of the entity class\r
* @param severity\r
* The severity of the {@link EntityConstraintViolation}s associated with\r
- * the {@code EntityValidationResult}\r
- * \r
+ * the {@code EntityValidation}\r
+ *\r
* @return The {@code EntityConstraintViolation}s\r
*/\r
List<EntityConstraintViolation> getConstraintViolations(String validatedEntityClass, Severity severity);\r
/**\r
* Get all constraint violations of the specified severity. The constraint violations\r
* are sorted according to the type and id of the validated entities.\r
- * \r
+ *\r
* @param severity\r
* The severity of the {@link EntityConstraintViolation}s associated with\r
- * the {@code EntityValidationResult}\r
- * \r
+ * the {@code EntityValidation}\r
+ *\r
* @return The {@code EntityConstraintViolation}s\r
*/\r
List<EntityConstraintViolation> getConstraintViolations(Severity severity);\r
+++ /dev/null
-package eu.etaxonomy.cdm.api.service;\r
-\r
-import java.util.List;\r
-\r
-import javax.validation.ConstraintValidator;\r
-\r
-import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;\r
-import eu.etaxonomy.cdm.model.validation.EntityValidationResult;\r
-import eu.etaxonomy.cdm.model.validation.Severity;\r
-\r
-/**\r
- * A service that provides several retrieval methods for entity validation outcomes. The\r
- * focus is on the entities rather than on the constraint violations being validated\r
- * (irrespective of the entities that violated them).\r
- * \r
- * @author ayco_holleman\r
- * \r
- */\r
-public interface IEntityValidationResultService extends IService<EntityValidationResult> {\r
-\r
- /**\r
- * Get the validation result for a particular entity.\r
- * \r
- * @param validatedEntityClass\r
- * The fully qualified class name of the entity's class.\r
- * @param validatedEntityId\r
- * The id of the entity\r
- * @return The {@code EntityValidationResult} or null if the entity has not been\r
- * validated yet\r
- * \r
- */\r
- EntityValidationResult getValidationResult(String validatedEntityClass, int validatedEntityId);\r
-\r
-\r
- /**\r
- * Get all validation results for all validated entities. The results are sorted\r
- * according the type and id of the validated entities.\r
- * \r
- * @return The {@code EntityValidationResult}s\r
- */\r
- List<EntityValidationResult> getValidationResults();\r
-\r
-\r
- /**\r
- * Get all validation results for all validated entities of the specified type. The\r
- * results are sorted according to the type and id of the validated entities.\r
- * \r
- * @param validatedEntityClass\r
- * The fully qualified class name of the entity class\r
- * \r
- * @return The {@code EntityValidationResult}s\r
- */\r
- List<EntityValidationResult> getEntityValidationResults(String validatedEntityClass);\r
-\r
-\r
- /**\r
- * Get all entities that violated a particular constraint. The results are sorted\r
- * according to the type and id of the validated entities. Note that the\r
- * {@code validatorClass} argument is a {@code String} (like all the {@code ***Class}\r
- * arguments). This is because it is stored as such in the database, and also because\r
- * the {@code Class} object itself may not be on the caller's classpath - e.g. when\r
- * called from the TaxEditor.\r
- * \r
- * @param validatorClass\r
- * The fully qualified class name of the {@link ConstraintValidator}.\r
- * \r
- * @return The {@code EntityValidationResult}s\r
- */\r
- List<EntityValidationResult> getEntitiesViolatingConstraint(String validatorClass);\r
-\r
-\r
- /**\r
- * Get all validation results for all entities of the specified type. Only constraint\r
- * violations of the specified severity are returned as part of the validation result.\r
- * The results are sorted according to the type and id of the validated entities.\r
- * \r
- * @param validatedEntityClass\r
- * The fully qualified class name of the entity class.\r
- * @param severity\r
- * The severity of the {@link EntityConstraintViolation}s associated with\r
- * the {@code EntityValidationResult}\r
- * \r
- * @return The {@code EntityValidationResult}s\r
- */\r
- List<EntityValidationResult> getValidationResults(String validatedEntityClass, Severity severity);\r
-\r
-\r
- /**\r
- * Get all validation results. Only constraint violations of the specified severity\r
- * are returned as part of the validation result. The results are sorted according the\r
- * type and id of the validated entities.\r
- * \r
- * @param severity\r
- * The severity of the {@link EntityConstraintViolation}s associated with\r
- * the {@code EntityValidationResult}\r
- * \r
- * @return The {@code EntityValidationResult}s\r
- */\r
- List<EntityValidationResult> getValidationResults(Severity severity);\r
-\r
-}\r
--- /dev/null
+// $Id: IEntityConstraintViolationService.java 22374 2014-12-10 23:02:58Z ayco_holleman $\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+\r
+package eu.etaxonomy.cdm.api.service;\r
+\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import javax.validation.ConstraintValidator;\r
+import javax.validation.ConstraintViolation;\r
+\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.model.validation.EntityConstraintViolation;\r
+import eu.etaxonomy.cdm.model.validation.EntityValidation;\r
+import eu.etaxonomy.cdm.model.validation.Severity;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationCrud;\r
+\r
+/**\r
+ * A service that provides several retrieval methods for entity validation outcomes. The\r
+ * focus is on the entities rather than on the constraint violations being validated\r
+ * (irrespective of the entities that violated them).\r
+ *\r
+ * @author ayco_holleman\r
+ *\r
+ */\r
+public interface IEntityValidationService extends IService<EntityValidation>,\r
+ IEntityValidationCrud {\r
+\r
+ /**\r
+ * Save the result of an entity validation to the error tables. Previous validation\r
+ * results of the same entity will be cleared first.\r
+ * @param validatedEntity\r
+ * The validated entity\r
+ * @param errors\r
+ * All constraints violated by the specified entity\r
+ * @param crudEventType\r
+ * The CRUD operation triggering the validation\r
+ */\r
+@Override\r
+// Note that this method should not\r
+// * be exposed via cdmlib-services, because this is a backend-only affair. Populating\r
+// * the error tables is done by the CVI (more particularly by an\r
+// * {@link EntityValidationTaskBase}). External software like the TaxEditor can and should\r
+// * not have access to this method.\r
+ <T extends ICdmBase> void saveEntityValidation(T validatedEntity, Set<ConstraintViolation<T>> errors, CRUDEventType crudEventType, Class<?>[] validationGroups);\r
+\r
+\r
+ /**\r
+ * Delete validation result for the specified entity, presumably because it has become\r
+ * obsolete.\r
+ *\r
+ * @param validatedEntityClass\r
+ * The fully qualified class name of the entity's class.\r
+ * @param validatedEntityId\r
+ * The id of the entity\r
+ */\r
+@Override\r
+// This method should not be exposed via cdmlib-services.\r
+ void deleteEntityValidation(String validatedEntityClass, int validatedEntityId);\r
+\r
+\r
+ /**\r
+ * Get the validation result for a particular entity.\r
+ *\r
+ * @param validatedEntityClass\r
+ * The fully qualified class name of the entity's class.\r
+ * @param validatedEntityId\r
+ * The id of the entity\r
+ * @return The {@code EntityValidation} or null if the entity has not been\r
+ * validated yet\r
+ *\r
+ */\r
+ EntityValidation getValidationResult(String validatedEntityClass, int validatedEntityId);\r
+\r
+\r
+ /**\r
+ * Get all validation results for all validated entities. The results are sorted\r
+ * according the type and id of the validated entities.\r
+ *\r
+ * @return The {@code EntityValidation}s\r
+ */\r
+ List<EntityValidation> getValidationResults();\r
+\r
+\r
+ /**\r
+ * Get all validation results for all validated entities of the specified type. The\r
+ * results are sorted according to the type and id of the validated entities.\r
+ *\r
+ * @param validatedEntityClass\r
+ * The fully qualified class name of the entity class\r
+ *\r
+ * @return The {@code EntityValidation}s\r
+ */\r
+ List<EntityValidation> getEntityValidations(String validatedEntityClass);\r
+\r
+\r
+ /**\r
+ * Get all entities that violated a particular constraint. The results are sorted\r
+ * according to the type and id of the validated entities. Note that the\r
+ * {@code validatorClass} argument is a {@code String} (like all the {@code ***Class}\r
+ * arguments). This is because it is stored as such in the database, and also because\r
+ * the {@code Class} object itself may not be on the caller's classpath - e.g. when\r
+ * called from the TaxEditor.\r
+ *\r
+ * @param validatorClass\r
+ * The fully qualified class name of the {@link ConstraintValidator}.\r
+ *\r
+ * @return The {@code EntityValidation}s\r
+ */\r
+ List<EntityValidation> getEntitiesViolatingConstraint(String validatorClass);\r
+\r
+\r
+ /**\r
+ * Get all validation results for all entities of the specified type. Only constraint\r
+ * violations of the specified severity are returned as part of the validation result.\r
+ * The results are sorted according to the type and id of the validated entities.\r
+ *\r
+ * @param validatedEntityClass\r
+ * The fully qualified class name of the entity class.\r
+ * @param severity\r
+ * The severity of the {@link EntityConstraintViolation}s associated with\r
+ * the {@code EntityValidation}\r
+ *\r
+ * @return The {@code EntityValidation}s\r
+ */\r
+ List<EntityValidation> getValidationResults(String validatedEntityClass, Severity severity);\r
+\r
+\r
+ /**\r
+ * Get all validation results. Only constraint violations of the specified severity\r
+ * are returned as part of the validation result. The results are sorted according the\r
+ * type and id of the validated entities.\r
+ *\r
+ * @param severity\r
+ * The severity of the {@link EntityConstraintViolation}s associated with\r
+ * the {@code EntityValidation}\r
+ *\r
+ * @return The {@code EntityValidation}s\r
+ */\r
+ List<EntityValidation> getValidationResults(Severity severity);\r
+\r
+}\r
import java.util.UUID;\r
\r
import org.apache.log4j.Logger;\r
-import org.hibernate.LockMode;\r
import org.hibernate.LockOptions;\r
import org.hibernate.Session;\r
import org.springframework.context.ApplicationContext;\r
import org.springframework.dao.DataAccessException;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
-import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;\r
import eu.etaxonomy.cdm.api.service.pager.Pager;\r
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
public T find(UUID uuid) {\r
return uuid == null ? null : dao.findByUuid(uuid);\r
}\r
- \r
+\r
@Override\r
@Transactional(readOnly = true)\r
public T findWithoutFlush(UUID uuid) {\r
public List<T> list(T example, Set<String> includeProperties, Integer limit, Integer start, List<OrderHint> orderHints, List<String> propertyPaths) {\r
return dao.list(example, includeProperties, limit, start, orderHints, propertyPaths);\r
}\r
- \r
- \r
+\r
+\r
\r
}\r
// $Id$\r
/**\r
* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
* http://www.e-taxonomy.eu\r
-* \r
+*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
\r
import org.apache.log4j.Logger;\r
import org.springframework.stereotype.Service;\r
-import org.springframework.transaction.annotation.Propagation;\r
import org.springframework.transaction.annotation.Transactional;\r
\r
import eu.etaxonomy.cdm.model.common.CdmBase;\r
public class ServiceImpl extends ServiceBase<CdmBase, ICdmEntityDao<CdmBase>> implements IService<CdmBase> {\r
@SuppressWarnings("unused")\r
private static final Logger logger = Logger.getLogger(ServiceImpl.class);\r
- \r
+\r
//@Autowired\r
//@Qualifier("mainDao")\r
protected ICdmEntityDao<CdmBase> mainDao;\r
- \r
+\r
//@Autowired\r
- protected void setDao(ICdmEntityDao<CdmBase> dao) {\r
+ @Override\r
+ protected void setDao(ICdmEntityDao<CdmBase> dao) {\r
this.dao = dao;\r
}\r
- \r
+\r
}\r
import eu.etaxonomy.cdm.model.media.Media;\r
import eu.etaxonomy.cdm.model.media.MediaRepresentation;\r
import eu.etaxonomy.cdm.model.media.MediaUtils;\r
-import eu.etaxonomy.cdm.model.molecular.Amplification;\r
import eu.etaxonomy.cdm.model.molecular.AmplificationResult;\r
import eu.etaxonomy.cdm.model.molecular.DnaSample;\r
import eu.etaxonomy.cdm.model.molecular.Sequence;\r
results = dao.getTaxaByNameForEditor(configurator.isDoTaxa(), configurator.isDoSynonyms(), configurator.isDoNamesWithoutTaxa(), configurator.isDoMisappliedNames(),configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
}\r
if (configurator.isDoTaxaByCommonNames()) {\r
- \r
//if(configurator.getPageSize() == null ){\r
List<UuidAndTitleCache<IdentifiableEntity>> commonNameResults = dao.getTaxaByCommonNameForEditor(configurator.getTitleSearchStringSqlized(), configurator.getClassification(), configurator.getMatchMode(), configurator.getNamedAreas());\r
if(commonNameResults != null){\r
*/\r
@Override\r
public DeleteResult deleteTaxon(Taxon taxon, TaxonDeletionConfigurator config, Classification classification) {\r
- \r
+\r
if (config == null){\r
config = new TaxonDeletionConfigurator();\r
}\r
\r
//remove name if possible (and required)\r
if (name != null && config.isDeleteNameIfPossible()){\r
-\r
nameResult = nameService.delete(name, config.getNameDeletionConfig());\r
-\r
}\r
-\r
- \r
\r
if (nameResult.isError()){\r
//result.setError();\r
taxonSet.addAll(synonym.getAcceptedTaxa());\r
}\r
for (Taxon relatedTaxon : taxonSet){\r
- HibernateProxyHelper.deproxy(relatedTaxon, Taxon.class);\r
+ relatedTaxon = HibernateProxyHelper.deproxy(relatedTaxon, Taxon.class);\r
relatedTaxon.removeSynonym(synonym, false);\r
this.saveOrUpdate(relatedTaxon);\r
}\r
\r
//remove synonym (if necessary)\r
\r
- UUID uuid = null;\r
if (synonym.getSynonymRelations().isEmpty()){\r
TaxonNameBase<?,?> name = synonym.getName();\r
synonym.setName(null);\r
- uuid = dao.delete(synonym);\r
+ dao.delete(synonym);\r
\r
//remove name if possible (and required)\r
if (name != null && config.isDeleteNameIfPossible()){\r
return result;\r
}\r
\r
- \r
+\r
}\r
return result;\r
// else{\r
if (!(ref instanceof TaxonNameBase)){\r
if (!config.isDeleteSynonymRelations() && (ref instanceof SynonymRelationship)){\r
message = "The Taxon can't be deleted as long as it has synonyms.";\r
- \r
+\r
}\r
if (!config.isDeleteDescriptions() && (ref instanceof DescriptionBase)){\r
message = "The Taxon can't be deleted as long as it has factual data.";\r
- \r
+\r
}\r
\r
if (!config.isDeleteTaxonNodes() && (ref instanceof TaxonNode)){\r
message = "The Taxon can't be deleted as long as it belongs to a taxon node.";\r
- \r
+\r
}\r
if (!config.isDeleteTaxonRelationships() && (ref instanceof TaxonNode)){\r
if (!config.isDeleteMisappliedNamesAndInvalidDesignations() && (((TaxonRelationship)ref).getType().equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())|| ((TaxonRelationship)ref).getType().equals(TaxonRelationshipType.INVALID_DESIGNATION_FOR()))){\r
message = "The Taxon can't be deleted as long as it has misapplied names or invalid designations.";\r
- \r
+\r
} else{\r
message = "The Taxon can't be deleted as long as it belongs to a taxon node.";\r
- \r
+\r
}\r
}\r
if (ref instanceof PolytomousKeyNode){\r
message = "The Taxon can't be deleted as long as it is referenced by a polytomous key node.";\r
- \r
+\r
}\r
\r
if (HibernateProxyHelper.isInstanceOf(ref, IIdentificationKey.class)){\r
message = "Taxon can't be deleted as it is used in an identification key. Remove from identification key prior to deleting this name";\r
- \r
+\r
\r
}\r
\r
//TaxonInteraction\r
if (ref.isInstanceOf(TaxonInteraction.class)){\r
message = "Taxon can't be deleted as it is used in taxonInteraction#taxon2";\r
- \r
+\r
}\r
\r
//TaxonInteraction\r
if (ref.isInstanceOf(DeterminationEvent.class)){\r
message = "Taxon can't be deleted as it is used in a determination event";\r
- \r
+\r
}\r
\r
}\r
}\r
return result;\r
}\r
- \r
+\r
@Override\r
public List<TaxonBase> findTaxaByName(MatchingTaxonConfigurator config){\r
List<TaxonBase> taxonList = dao.getTaxaByName(true, false, false, config.getTaxonNameTitle(), null, MatchMode.EXACT, null, 0, 0, config.getPropertyPath());\r
return new DefaultPagerImpl<FindByIdentifierDTO<S>>(pageNumber, numberOfResults, pageSize, result);\r
}\r
\r
-\r
}\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
*/\r
- package eu.etaxonomy.cdm.api.service;\r
+package eu.etaxonomy.cdm.api.service;\r
\r
- import java.io.Serializable;\r
+import java.io.Serializable;\r
import java.util.ArrayList;\r
import java.util.HashSet;\r
import java.util.List;\r
import java.util.Set;\r
\r
- import org.apache.log4j.Logger;\r
+import org.apache.log4j.Logger;\r
\r
- import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
import eu.etaxonomy.cdm.model.common.IIdentifiableEntity;\r
-import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
\r
/**\r
* This class represents the result of an update action.\r
// $Id$
/**
* Copyright (C) 2007 EDIT
- * European Distributed Institute of Taxonomy
+ * European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
- *
+ *
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
import eu.etaxonomy.cdm.api.service.exception.ReferencedObjectUndeletableException;
import eu.etaxonomy.cdm.api.service.pager.Pager;
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
-import eu.etaxonomy.cdm.model.agent.AgentBase;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.common.VersionableEntity;
import eu.etaxonomy.cdm.model.view.AuditEvent;
public abstract class VersionableServiceBase<T extends VersionableEntity, DAO extends IVersionableDao<T>> extends ServiceBase<T,DAO> implements IVersionableService<T> {
@Autowired
protected ICommonService commonService;
- @Transactional(readOnly = true)
+ @Override
+ @Transactional(readOnly = true)
public Pager<AuditEventRecord<T>> pageAuditEvents(T t, Integer pageSize, Integer pageNumber, AuditEventSort sort, List<String> propertyPaths) {
Integer numberOfResults = dao.countAuditEvents(t, sort);
-
+
List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
results = dao.getAuditEvents(t, pageSize, pageNumber, sort,propertyPaths);
}
-
+
return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
}
- @Transactional(readOnly = true)
+ @Override
+ @Transactional(readOnly = true)
public AuditEventRecord<T> getNextAuditEvent(T t) {
return dao.getNextAuditEvent(t);
}
- @Transactional(readOnly = true)
+ @Override
+ @Transactional(readOnly = true)
public AuditEventRecord<T> getPreviousAuditEvent(T t) {
return dao.getPreviousAuditEvent(t);
}
-
- @Transactional(readOnly = true)
+
+ @Override
+ @Transactional(readOnly = true)
public Pager<AuditEventRecord<T>> pageAuditEvents(Class<? extends T> clazz,AuditEvent from,AuditEvent to, List<AuditCriterion> criteria, Integer pageSize, Integer pageNumber, AuditEventSort sort,List<String> propertyPaths) {
Integer numberOfResults = dao.countAuditEvents(clazz, from, to, criteria);
-
+
List<AuditEventRecord<T>> results = new ArrayList<AuditEventRecord<T>>();
if(numberOfResults > 0) { // no point checking again //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)
results = dao.getAuditEvents(clazz,from,to,criteria, pageSize, pageNumber, sort,propertyPaths);
}
-
+
return new DefaultPagerImpl<AuditEventRecord<T>>(pageNumber, numberOfResults, pageSize, results);
}
-
+
/**
* the basic isDeletable method return false if the object is referenced from any other object.
*/
-
+
@Override
public DeleteResult isDeletable(T base, DeleteConfiguratorBase config){
DeleteResult result = new DeleteResult();
}
return result;
}
-
-
- }
+}
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2007 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.api.validation;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationCrud;\r
+import eu.etaxonomy.cdm.persistence.hibernate.Level3ValidationEventListener;\r
+import eu.etaxonomy.cdm.persistence.validation.EntityValidationTaskBase;\r
+\r
+@SuppressWarnings("serial")\r
+class Level3TransactionalValidationEventListener extends Level3ValidationEventListener{\r
+\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(Level3TransactionalValidationEventListener.class);\r
+\r
+ private final ICdmApplicationConfiguration repository;\r
+\r
+ public Level3TransactionalValidationEventListener(ICdmApplicationConfiguration repository, IEntityValidationCrud dao){\r
+ super(dao);\r
+ this.repository = repository;\r
+ }\r
+\r
+\r
+ @Override\r
+ protected EntityValidationTaskBase createValidationTask(ICdmBase entity, CRUDEventType trigger) {\r
+ return new Level3TransactionalValidationTask(entity, trigger, getDao(), repository);\r
+ }\r
+\r
+}\r
--- /dev/null
+/**\r
+ * Copyright (C) 2009 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.validation;\r
+\r
+import java.util.Set;\r
+\r
+import javax.validation.ConstraintViolation;\r
+\r
+import org.springframework.transaction.TransactionStatus;\r
+\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.persistence.dao.validation.IEntityValidationCrud;\r
+import eu.etaxonomy.cdm.persistence.validation.Level3ValidationTask;\r
+\r
+/**\r
+ * A {@link Runnable} performing Level-3 validation of a JPA entity\r
+ *\r
+ * @author ayco_holleman\r
+ *\r
+ */\r
+class Level3TransactionalValidationTask extends Level3ValidationTask {\r
+\r
+ private ICdmApplicationConfiguration repository;\r
+\r
+ public Level3TransactionalValidationTask(CdmBase entity, IEntityValidationCrud dao) {\r
+ super(entity, dao);\r
+ }\r
+\r
+ public Level3TransactionalValidationTask(ICdmBase entity, CRUDEventType crudEventType, IEntityValidationCrud dao, ICdmApplicationConfiguration repository) {\r
+ super(entity, crudEventType, dao);\r
+ this.repository = repository;\r
+ }\r
+\r
+ @Override\r
+ protected Set<ConstraintViolation<ICdmBase>> validateWithErrorHandling() {\r
+ if (repository != null){\r
+ TransactionStatus tx = repository.startTransaction(true);\r
+ //TODO what if getEntity() is not CdmBase?\r
+ CdmBase cdmBase = CdmBase.deproxy(getEntity(), CdmBase.class);\r
+ repository.getCommonService().find(cdmBase.getClass(), cdmBase.getId());\r
+ //was "create Entity in 2 open sessions" error\r
+ //not sure if the above works, should set the entity, but allowing to do so is critical the id is part of hash function, so we have to make sure that only entities with the same id can be replaced\r
+// repository.getCommonService().updateEntity(cdmBase);\r
+ Set<ConstraintViolation<ICdmBase>> result = super.validateWithErrorHandling();\r
+ repository.commitTransaction(tx);\r
+ return result;\r
+ }else{\r
+ return super.validateWithErrorHandling();\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.api.validation;\r
+\r
+import javax.annotation.PostConstruct;\r
+\r
+import org.hibernate.SessionFactory;\r
+import org.hibernate.event.service.spi.EventListenerRegistry;\r
+import org.hibernate.event.spi.EventType;\r
+import org.hibernate.internal.SessionFactoryImpl;\r
+import org.hibernate.service.spi.ServiceRegistryImplementor;\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.beans.factory.annotation.Qualifier;\r
+import org.springframework.context.annotation.Lazy;\r
+import org.springframework.scheduling.TaskScheduler;\r
+import org.springframework.stereotype.Component;\r
+\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.api.validation.batch.BatchValidator;\r
+import eu.etaxonomy.cdm.api.validation.batch.ValidationScheduler;\r
+import eu.etaxonomy.cdm.persistence.dao.jdbc.validation.EntityValidationCrudJdbcImpl;\r
+import eu.etaxonomy.cdm.persistence.hibernate.Level2ValidationEventListener;\r
+import eu.etaxonomy.cdm.persistence.hibernate.Level3ValidationEventListener;\r
+import eu.etaxonomy.cdm.persistence.validation.ValidationExecutor;\r
+\r
+/**\r
+ * This bean\r
+ *\r
+ * @author a.mueller\r
+ * @date 09.01.2015\r
+ *\r
+ */\r
+@Component\r
+@Lazy(false)\r
+public class ValidationManager {\r
+\r
+ private boolean validationEnabled = true;\r
+ private final boolean batchValidationEnabled = true;\r
+\r
+ private boolean level2Enabled = false;\r
+ private boolean level3Enabled = false;\r
+\r
+ private boolean isInitialized = false;\r
+\r
+ private Level2ValidationEventListener l2Listener;\r
+ private Level3ValidationEventListener l3Listener;\r
+\r
+ @Autowired\r
+ private SessionFactory sessionFactory;\r
+\r
+ @Autowired\r
+ private BatchValidator batchValidator;\r
+\r
+ @Autowired\r
+ @Qualifier("cdmApplicationDefaultConfiguration")\r
+ private ICdmApplicationConfiguration cdmApplicationDefaultConfiguration;\r
+\r
+ @Autowired\r
+// IEntityValidationService validationService;\r
+// IEntityValidationCrud validationService;\r
+ private EntityValidationCrudJdbcImpl validationDao;\r
+\r
+// private TaskExecutor taskExecutor;\r
+\r
+ private TaskScheduler scheduler;\r
+\r
+ @PostConstruct\r
+ public void initializeManager(){\r
+ registerValidationListeners();\r
+ initTaskExecutor();\r
+ }\r
+\r
+\r
+ /**\r
+ *\r
+ */\r
+ private void initTaskExecutor() {\r
+// taskExecutor = new ThreadPoolTaskExecutor();\r
+ ValidationScheduler validationScheduler = new ValidationScheduler();\r
+ validationScheduler.initialize();\r
+ scheduler = validationScheduler;\r
+ scheduler.scheduleWithFixedDelay(batchValidator, 5000);\r
+ //TODO how to disable scheduling if not wanted for a certain time\r
+\r
+ }\r
+\r
+ public void startBatchValidation(){\r
+ batchValidator.run();\r
+ }\r
+\r
+\r
+ public void registerValidationListeners(){\r
+ if (!isInitialized){\r
+ if (sessionFactory != null && sessionFactory instanceof SessionFactoryImpl){\r
+ ServiceRegistryImplementor serviceRegistry = ((SessionFactoryImpl)sessionFactory).getServiceRegistry();\r
+\r
+ final EventListenerRegistry eventRegistry = serviceRegistry.getService(EventListenerRegistry.class);\r
+\r
+ //duplication strategy\r
+ // eventRegistry.addDuplicationStrategy(CdmListenerDuplicationStrategy.NewInstance);\r
+ eventRegistry.getEventListenerGroup(EventType.POST_INSERT);\r
+\r
+ ValidationExecutor validationExecutor = new ValidationExecutor();\r
+\r
+ //level2\r
+ l2Listener = new Level2ValidationEventListener(validationDao);\r
+ l2Listener.setValidationExecutor(validationExecutor);\r
+\r
+ //level3\r
+ l3Listener = new Level3TransactionalValidationEventListener(cdmApplicationDefaultConfiguration, validationDao);\r
+ l3Listener.setValidationExecutor(validationExecutor);\r
+\r
+ // prepend to register before or append to register after\r
+\r
+ eventRegistry.appendListeners(EventType.POST_INSERT, l2Listener , l3Listener);\r
+ eventRegistry.appendListeners(EventType.POST_UPDATE, l2Listener , l3Listener);\r
+ //TODO don't we need l2Listener validation also for deleting the results?\r
+ eventRegistry.appendListeners(EventType.POST_DELETE, l3Listener);\r
+\r
+ isInitialized = true;\r
+\r
+ }else{\r
+ throw new RuntimeException("Session factory not available or not of type SessionFactoryImpl");\r
+ }\r
+ }\r
+ }\r
+\r
+ //for future use\r
+ private void enableLevel2Listener(boolean enabled){\r
+ level2Enabled = enabled;\r
+ l2Listener.setEnabled(level2Enabled && validationEnabled);\r
+ }\r
+\r
+ private void enableLevel3Listener(boolean enabled){\r
+ level3Enabled = enabled;\r
+ l3Listener.setEnabled(level3Enabled && validationEnabled);\r
+ }\r
+\r
+ private void enableValidation(boolean enabled){\r
+ validationEnabled = enabled;\r
+ l2Listener.setEnabled(level2Enabled);\r
+ l3Listener.setEnabled(level3Enabled);\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+ * Copyright (C) 2015 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.validation.batch;\r
+\r
+import java.lang.reflect.ParameterizedType;\r
+import java.lang.reflect.Type;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.List;\r
+\r
+import javax.print.attribute.standard.Media;\r
+import javax.validation.Validator;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.api.service.IService;\r
+import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.model.agent.AgentBase;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.DefinedTermBase;\r
+import eu.etaxonomy.cdm.model.common.Group;\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
+import eu.etaxonomy.cdm.model.common.User;\r
+import eu.etaxonomy.cdm.model.description.DescriptionBase;\r
+import eu.etaxonomy.cdm.model.description.FeatureNode;\r
+import eu.etaxonomy.cdm.model.description.FeatureTree;\r
+import eu.etaxonomy.cdm.model.description.PolytomousKey;\r
+import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;\r
+import eu.etaxonomy.cdm.model.description.WorkingSet;\r
+import eu.etaxonomy.cdm.model.molecular.Amplification;\r
+import eu.etaxonomy.cdm.model.molecular.Primer;\r
+import eu.etaxonomy.cdm.model.molecular.Sequence;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
+import eu.etaxonomy.cdm.model.name.TypeDesignationBase;\r
+import eu.etaxonomy.cdm.model.occurrence.Collection;\r
+import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;\r
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.taxon.Classification;\r
+import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+\r
+/**\r
+ * @author ayco_holleman\r
+ * @date 28 jan. 2015\r
+ *\r
+ */\r
+class BatchValidationUtil {\r
+\r
+ public static void main(String[] args) {\r
+ System.out.println(ITaxonService.class.getGenericInterfaces()[0]);\r
+ }\r
+\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(BatchValidationUtil.class);\r
+\r
+ // Ideally retrieved dynamically through reflection, but got stuck on\r
+ // getXXXService methods in ICdmApplicationConfiguration returning proxies\r
+ // (com.sun.proxy.$Proxy), which is a dead end when attempting to infer\r
+ // parameter arguments (e.g. the AgentBase in IAgentService<AgentBase>).\r
+ @SuppressWarnings({ "unchecked", "rawtypes" })\r
+ public static <T extends ICdmBase, S extends T> List<EntityValidationUnit<T, S>> getAvailableServices(\r
+ ICdmApplicationConfiguration appConfig) {\r
+ List<EntityValidationUnit<T, S>> services = new ArrayList<EntityValidationUnit<T, S>>();\r
+ services.add(new EntityValidationUnit(AgentBase.class, appConfig.getAgentService()));\r
+ services.add(new EntityValidationUnit(Amplification.class, appConfig.getAmplificationService()));\r
+ services.add(new EntityValidationUnit(Classification.class, appConfig.getClassificationService()));\r
+ services.add(new EntityValidationUnit(Collection.class, appConfig.getCollectionService()));\r
+// services.add(new EntityValidationUnit(OriginalSourceBase.class, appConfig.getCommonService()));\r
+ services.add(new EntityValidationUnit(DescriptionBase.class, appConfig.getDescriptionService()));\r
+ services.add(new EntityValidationUnit(FeatureNode.class, appConfig.getFeatureNodeService()));\r
+ services.add(new EntityValidationUnit(FeatureTree.class, appConfig.getFeatureTreeService()));\r
+ services.add(new EntityValidationUnit(Group.class, appConfig.getGroupService()));\r
+ // Causes some AOP-related error when calling list() method on it\r
+ //services.add(new EntityValidationUnit(DefinedTermBase.class, appConfig.getLocationService()));\r
+ services.add(new EntityValidationUnit(Media.class, appConfig.getMediaService()));\r
+ services.add(new EntityValidationUnit(TaxonNameBase.class, appConfig.getNameService()));\r
+ services.add(new EntityValidationUnit(SpecimenOrObservationBase.class, appConfig.getOccurrenceService()));\r
+ services.add(new EntityValidationUnit(PolytomousKeyNode.class, appConfig.getPolytomousKeyNodeService()));\r
+ services.add(new EntityValidationUnit(PolytomousKey.class, appConfig.getPolytomousKeyService()));\r
+ services.add(new EntityValidationUnit(Primer.class, appConfig.getPrimerService()));\r
+ services.add(new EntityValidationUnit(Reference.class, appConfig.getReferenceService()));\r
+ services.add(new EntityValidationUnit(Sequence.class, appConfig.getSequenceService()));\r
+ services.add(new EntityValidationUnit(TaxonNode.class, appConfig.getTaxonNodeService()));\r
+ services.add(new EntityValidationUnit(TaxonBase.class, appConfig.getTaxonService()));\r
+ services.add(new EntityValidationUnit(DefinedTermBase.class, appConfig.getTermService()));\r
+ services.add(new EntityValidationUnit(User.class, appConfig.getUserService()));\r
+ services.add(new EntityValidationUnit(TermVocabulary.class, appConfig.getVocabularyService()));\r
+ services.add(new EntityValidationUnit(WorkingSet.class, appConfig.getWorkingSetService()));\r
+ return services;\r
+ }\r
+\r
+ public static <T extends ICdmBase, S extends T> List<Class<CdmBase>> getClassesToValidate(){\r
+ List<Class<CdmBase>> classesToValidate = new ArrayList<Class<CdmBase>>();\r
+ classesToValidate.addAll((List)Arrays.asList(new Class[]{\r
+ Reference.class,\r
+ NameRelationship.class,\r
+ TaxonNameBase.class,\r
+ TypeDesignationBase.class,\r
+ TaxonBase.class,\r
+ SynonymRelationship.class,\r
+ TaxonNode.class,\r
+ GatheringEvent.class}));\r
+ return classesToValidate;\r
+ }\r
+\r
+\r
+ // Created to infer (1st) parameter type of parametrized type,\r
+ // but won't work because the service argument appears to be a\r
+ // proxy object (com.sun.proxy.$Proxy).\r
+ public static Class<?> getServicedEntity(IService<?> service) {\r
+ Class<?> serviceClass = service.getClass();\r
+ System.out.println(serviceClass.getName());\r
+ ParameterizedType pt = (ParameterizedType) serviceClass.getGenericInterfaces()[0];\r
+ Type type = pt.getActualTypeArguments()[0];\r
+ return (Class<?>) type;\r
+ }\r
+\r
+ public static boolean isConstrainedEntityClass(Validator validator, Class<? extends ICdmBase> entityClass) {\r
+ return validator.getConstraintsForClass(entityClass).hasConstraints();\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+ * Copyright (C) 2015 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.validation.batch;\r
+\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import javax.validation.ConstraintViolation;\r
+import javax.validation.Validation;\r
+import javax.validation.Validator;\r
+import javax.validation.ValidatorFactory;\r
+\r
+import org.apache.log4j.Logger;\r
+import org.hibernate.validator.HibernateValidator;\r
+import org.hibernate.validator.HibernateValidatorConfiguration;\r
+import org.springframework.context.ApplicationContext;\r
+import org.springframework.context.ApplicationContextAware;\r
+import org.springframework.orm.hibernate4.HibernateTransactionManager;\r
+import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.PlatformTransactionManager;\r
+import org.springframework.transaction.TransactionDefinition;\r
+import org.springframework.transaction.TransactionStatus;\r
+import org.springframework.transaction.support.DefaultTransactionDefinition;\r
+\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.api.service.ICommonService;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
+import eu.etaxonomy.cdm.api.service.IService;\r
+import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+import eu.etaxonomy.cdm.model.validation.CRUDEventType;\r
+import eu.etaxonomy.cdm.persistence.dao.jdbc.validation.EntityValidationCrudJdbcImpl;\r
+import eu.etaxonomy.cdm.validation.Level2;\r
+import eu.etaxonomy.cdm.validation.Level3;\r
+\r
+/**\r
+ * @author ayco_holleman\r
+ * @author a.mueller\r
+ * @date 27 jan. 2015\r
+ *\r
+ */\r
+@Component("batchValidator")\r
+public class BatchValidator implements Runnable, ApplicationContextAware {\r
+\r
+ static final Class<?>[] DEFAULT_VALIDATION_GROUPS = new Class<?>[] { Level2.class, Level3.class };\r
+\r
+ private static final Logger logger = Logger.getLogger(BatchValidator.class);\r
+\r
+\r
+ private ICdmApplicationConfiguration repository;\r
+\r
+ private ApplicationContext appContext;\r
+\r
+ private Validator validator;\r
+ private Class<?>[] validationGroups;\r
+\r
+\r
+ @Override\r
+ public void setApplicationContext(ApplicationContext appContext) {\r
+ this.appContext = appContext;\r
+ }\r
+\r
+ @Override\r
+ public void run() {\r
+ Thread.currentThread().setPriority(1);\r
+ initValidator();\r
+ validate();\r
+ }\r
+\r
+ /**\r
+ *\r
+ */\r
+ private void initValidator() {\r
+ if (getValidator() == null){\r
+ HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure();\r
+ ValidatorFactory factory = config.buildValidatorFactory();\r
+ setValidator(factory.getValidator());\r
+ }\r
+ if (validationGroups == null) {\r
+ validationGroups = DEFAULT_VALIDATION_GROUPS;\r
+ }\r
+ }\r
+\r
+\r
+\r
+ private <T extends ICdmBase, S extends T> void validate() {\r
+ logger.info("Starting batch validation");\r
+\r
+ // Get service for saving errors to database\r
+// IEntityValidationService validationResultService = context.getEntityValidationService();\r
+ IEntityValidationService entityValidationService = appContext.getBean(IEntityValidationService.class);\r
+\r
+ EntityValidationCrudJdbcImpl jdbcPersister = appContext.getBean(EntityValidationCrudJdbcImpl.class);\r
+\r
+ // Get all services dealing with "real" entities\r
+ List<Class<CdmBase>> classesToValidate = BatchValidationUtil.getClassesToValidate();\r
+\r
+ for (Class<CdmBase> entityClass : classesToValidate) {\r
+ //TODO currently this seems to work only on the exact class, we may move it down\r
+ //to single entity validation again but cache the information for each class\r
+ if (true || BatchValidationUtil.isConstrainedEntityClass(validator, entityClass)){\r
+\r
+ // ICommonService commonService = repository.getCommonService();\r
+ ICommonService commonService = appContext.getBean(ICommonService.class);\r
+ logger.info("Loading entities of type " + entityClass.getName());\r
+ //false for saving validation results\r
+ //TODO can we handle results in a different transaction?\r
+ boolean readOnly = false;\r
+ TransactionStatus txStatus = startTransaction(readOnly);\r
+ handleSingleClass(commonService, entityClass, entityValidationService, jdbcPersister);\r
+ commitTransaction(txStatus);\r
+ }\r
+ }\r
+\r
+ logger.info("Batch validation complete");\r
+ }\r
+\r
+ /**\r
+ * @param txStatus\r
+ */\r
+ private void commitTransaction(TransactionStatus txStatus) {\r
+ PlatformTransactionManager txManager = getTransactionManager();\r
+ txManager.commit(txStatus);\r
+\r
+ }\r
+\r
+ /**\r
+ * @param readOnly\r
+ * @return\r
+ *\r
+ */\r
+ private TransactionStatus startTransaction(boolean readOnly) {\r
+ PlatformTransactionManager txManager = getTransactionManager();\r
+\r
+ DefaultTransactionDefinition defaultTxDef = new DefaultTransactionDefinition();\r
+ defaultTxDef.setReadOnly(readOnly);\r
+ TransactionDefinition txDef = defaultTxDef;\r
+ TransactionStatus txStatus = txManager.getTransaction(txDef);\r
+ return txStatus;\r
+ }\r
+\r
+ /**\r
+ * @return\r
+ */\r
+ private PlatformTransactionManager getTransactionManager() {\r
+ PlatformTransactionManager txManager = appContext.getBean(HibernateTransactionManager.class);\r
+ return txManager;\r
+ }\r
+\r
+ private void handleSingleClass(ICommonService commonService, Class<CdmBase> entityClass, IEntityValidationService entityValidationService, EntityValidationCrudJdbcImpl jdbcPersister) {\r
+ int n = commonService.count(entityClass);\r
+ int pageSize = 1000;\r
+ for (int page = 0; page < n ; page = page + pageSize ){\r
+ handlePage(commonService, entityClass, entityValidationService, jdbcPersister,\r
+ page/pageSize, pageSize);\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * @param commonService\r
+ * @param entityClass\r
+ * @param entityValidationService\r
+ * @param jdbcPersister\r
+ *\r
+ */\r
+ private void handlePage(ICommonService commonService, Class<CdmBase> entityClass, IEntityValidationService entityValidationService, EntityValidationCrudJdbcImpl jdbcPersister, int start, int pageSize) {\r
+\r
+ List<CdmBase> entities;\r
+\r
+ try {\r
+// commonService.count()\r
+ entities = commonService.list(entityClass, pageSize, 0, null, null);\r
+ } catch (Throwable t) {\r
+ //TODO handle exception\r
+ logger.error("Failed to load entities", t);\r
+ return;\r
+ }\r
+ for (CdmBase entity : entities) {\r
+ try {\r
+ Set<ConstraintViolation<CdmBase>> errors = getValidator().validate(entity, getValidationGroups());\r
+ if (errors.size() != 0) {\r
+ if (logger.isInfoEnabled()){logger.info(errors.size() + " constraint violation(s) detected in entity " + entity.toString());}\r
+// entityValidationService.saveEntityValidation(entity, errors, CRUDEventType.NONE,\r
+// getValidationGroups());\r
+\r
+ jdbcPersister.saveEntityValidation(entity, errors, CRUDEventType.NONE, getValidationGroups());\r
+ }\r
+ } catch (Exception e) {\r
+ // TODO Exception handling\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ private <T extends ICdmBase, S extends T> void validate_old() {\r
+ logger.info("Starting batch validation");\r
+\r
+ if (validationGroups == null) {\r
+ validationGroups = DEFAULT_VALIDATION_GROUPS;\r
+ }\r
+\r
+ // Get service for saving errors to database\r
+ IEntityValidationService validationResultService = repository.getEntityValidationService();\r
+\r
+ // Get all services dealing with "real" entities\r
+ List<EntityValidationUnit<T, S>> validationUnits = BatchValidationUtil.getAvailableServices(repository);\r
+\r
+ for (EntityValidationUnit<T, S> unit : validationUnits) {\r
+ Class<S> entityClass = unit.getEntityClass();\r
+ IService<T> entityLoader = unit.getEntityLoader();\r
+ logger.info("Loading entities of type " + entityClass.getName());\r
+ List<S> entities;\r
+ try {\r
+ entities = entityLoader.list(entityClass, 0, 0, null, null);\r
+ } catch (Throwable t) {\r
+ logger.error("Failed to load entities", t);\r
+ continue;\r
+ }\r
+ for (S entity : entities) {\r
+ if (BatchValidationUtil.isConstrainedEntityClass(getValidator(), entity.getClass())) {\r
+ Set<ConstraintViolation<S>> errors = getValidator().validate(entity, validationGroups);\r
+ if (errors.size() != 0) {\r
+ logger.warn(errors.size() + " error(s) detected in entity " + entity.toString());\r
+ validationResultService.saveEntityValidation(entity, errors, CRUDEventType.NONE,\r
+ validationGroups);\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ logger.info("Batch validation complete");\r
+ }\r
+\r
+ /**\r
+ * Get the application context that will provide the services that will, on\r
+ * their turn, provide the entities to be validated.\r
+ *\r
+ * @return The application context\r
+ */\r
+ public ICdmApplicationConfiguration getAppController() {\r
+ return repository;\r
+ }\r
+\r
+ /**\r
+ * Set the application context.\r
+ *\r
+ * @param context\r
+ * The application context\r
+ */\r
+ public void setAppController(ICdmApplicationConfiguration context) {\r
+ this.repository = context;\r
+ }\r
+\r
+ /**\r
+ * Get the {@code Validator} instance that will carry out the validations.\r
+ *\r
+ * @return The {@code Validator}\r
+ */\r
+ public Validator getValidator() {\r
+ return validator;\r
+ }\r
+\r
+ /**\r
+ * Set the {@code Validator} instance that will carry out the validations.\r
+ *\r
+ * @param validator\r
+ * The {@code Validator}\r
+ */\r
+ public void setValidator(Validator validator) {\r
+ this.validator = validator;\r
+ }\r
+\r
+ /**\r
+ * Get the validation groups to be applied by the {@code Validator}.\r
+ *\r
+ * @return The validation groups\r
+ */\r
+ public Class<?>[] getValidationGroups() {\r
+ return validationGroups;\r
+ }\r
+\r
+ /**\r
+ * Set the validation groups to be applied by the {@code Validator}. By\r
+ * default all Level2 and Level3 will be checked. So if that is what you\r
+ * want, you do not need to call this method before calling {@link #run()}.\r
+ *\r
+ * @param validationGroups\r
+ * The validation groups\r
+ */\r
+ public void setValidationGroups(Class<?>... validationGroups) {\r
+ this.validationGroups = validationGroups;\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+ * Copyright (C) 2015 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.validation.batch;\r
+\r
+import eu.etaxonomy.cdm.api.service.IService;\r
+import eu.etaxonomy.cdm.model.common.ICdmBase;\r
+\r
+/**\r
+ * Probably not required anymore\r
+ * @author ayco_holleman\r
+ * @date 29 jan. 2015\r
+ *\r
+ */\r
+class EntityValidationUnit<T extends ICdmBase, S extends T> {\r
+\r
+ private final Class<S> entityClass;\r
+ private final IService<T> entityLoader;\r
+\r
+ EntityValidationUnit(Class<S> entityClass, IService<T> entityLoader) {\r
+ this.entityClass = entityClass;\r
+ this.entityLoader = entityLoader;\r
+ }\r
+\r
+ /**\r
+ * @return the entityClass\r
+ */\r
+ Class<S> getEntityClass() {\r
+ return entityClass;\r
+ }\r
+\r
+ /**\r
+ * @return the entityLoader\r
+ */\r
+ IService<T> getEntityLoader() {\r
+ return entityLoader;\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.api.validation.batch;\r
+\r
+import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;\r
+import org.springframework.stereotype.Component;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 19.02.2015\r
+ *\r
+ */\r
+@Component\r
+public class ValidationScheduler extends ThreadPoolTaskScheduler {\r
+ private static final long serialVersionUID = 7110200522760862056L;\r
+\r
+ public ValidationScheduler(){}\r
+}\r
*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/ \r
+*/\r
\r
package eu.etaxonomy.cdm.validation.constraint;\r
\r
\r
public class NoDuplicateNamesValidator implements\r
ConstraintValidator<NoDuplicateNames,NonViralName> {\r
- \r
+\r
private static Set<String> includeProperties;\r
- \r
+\r
static {\r
includeProperties = new HashSet<String>();\r
includeProperties.add("genusOrUninomial");\r
includeProperties.add("combinationAuthorTeam");\r
includeProperties.add("exCombinationAuthorTeam");\r
}\r
- \r
+\r
private INameService nameService;\r
- \r
+\r
@Autowired\r
public void setNameService(INameService nameService) {\r
this.nameService = nameService;\r
}\r
\r
+ @Override\r
public void initialize(NoDuplicateNames noDuplicateNames) { }\r
\r
+ @Override\r
public boolean isValid(NonViralName name, ConstraintValidatorContext constraintContext) {\r
if(name == null) {\r
return true;\r
*/
package eu.etaxonomy.cdm.api.application;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
import java.io.FileNotFoundException;
import java.util.Set;
import java.util.UUID;
-
import org.apache.log4j.Logger;
import org.junit.Test;
import org.unitils.dbunit.annotation.DataSet;
import eu.etaxonomy.cdm.api.service.TaxonServiceImplTest;
import eu.etaxonomy.cdm.datagenerator.TaxonGenerator;
import eu.etaxonomy.cdm.model.description.TaxonDescription;
-import eu.etaxonomy.cdm.model.name.BotanicalName;
-import eu.etaxonomy.cdm.model.name.Rank;
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.reference.IBook;
-import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.strategy.cache.reference.IReferenceBaseCacheStrategy;
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
/**
@SpringBeanByType
private IClassificationService classificationService;
-
+
@SpringBeanByType
private IDescriptionService descriptionService;
-
+
@Test
@DataSet(value="FirstDataInserterTest.testBlankDB.xml")
@ExpectedDataSet(value="FirstDataInserterTest.testBlankDB-result.xml")
commitAndStartNewTransaction(null);
// printDataSet(System.err, tableNames);
}
-
+
@Test
@DataSet(value="FirstDataInserterTest.testBlankDB.xml")
public void testInsertData(){
TaxonGenerator.getTestTaxon();
Taxon newTaxon = TaxonGenerator.getTestTaxon();
UUID taxonUUID = taxonService.save(newTaxon);
-
-
+
+
TaxonDescription description = TaxonGenerator.getTestDescription(1);
newTaxon.addDescription(description);
Set<TaxonDescription> descriptions = newTaxon.getDescriptions();
newTaxon = (Taxon)taxonService.find(taxonUUID);
descriptions = newTaxon.getDescriptions();
assertEquals(2, descriptions.size());
-
-
-
-
-
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.cdm.test.integration.CdmIntegrationTest#createTestData()
- */
+
@Override
public void createTestDataSet() throws FileNotFoundException {
// TODO Auto-generated method stub
-
}
}
import java.io.FileNotFoundException;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.UUID;
-import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.junit.Assert;
import org.junit.Ignore;
import org.unitils.dbunit.annotation.DataSet;
import org.unitils.spring.annotation.SpringBeanByType;
-import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
-import eu.etaxonomy.cdm.model.molecular.DnaSample;
-import eu.etaxonomy.cdm.model.molecular.Sequence;
-import eu.etaxonomy.cdm.model.molecular.SingleRead;
-import eu.etaxonomy.cdm.model.name.BotanicalName;
-import eu.etaxonomy.cdm.model.name.NonViralName;
-import eu.etaxonomy.cdm.model.name.Rank;
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
-import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
-import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
-import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
-import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
import eu.etaxonomy.cdm.model.taxon.Classification;
import eu.etaxonomy.cdm.model.taxon.Taxon;
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
-import eu.etaxonomy.cdm.model.taxon.TaxonNodeByNameComparator;
import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;
-import eu.etaxonomy.cdm.test.integration.CdmIntegrationTest;
import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;
/**
import java.util.Set;\r
import java.util.UUID;\r
\r
-import org.junit.Assert;\r
-\r
import org.apache.log4j.Logger;\r
+import org.junit.Assert;\r
import org.junit.Ignore;\r
import org.junit.Test;\r
import org.unitils.dbunit.annotation.DataSet;\r
@Override\r
public void createTestDataSet() throws FileNotFoundException {\r
// TODO Auto-generated method stub\r
- \r
+\r
}\r
}\r
--- /dev/null
+// $Id$\r
+/**\r
+ * Copyright (C) 2015 EDIT\r
+ * European Distributed Institute of Taxonomy\r
+ * http://www.e-taxonomy.eu\r
+ *\r
+ * The contents of this file are subject to the Mozilla Public License Version 1.1\r
+ * See LICENSE.TXT at the top of this package for the full license terms.\r
+ */\r
+package eu.etaxonomy.cdm.api.validation.batch;\r
+\r
+import java.io.FileNotFoundException;\r
+import java.sql.SQLException;\r
+import java.util.List;\r
+import java.util.Set;\r
+\r
+import javax.validation.Validation;\r
+import javax.validation.Validator;\r
+import javax.validation.ValidatorFactory;\r
+\r
+import org.hibernate.validator.HibernateValidator;\r
+import org.hibernate.validator.HibernateValidatorConfiguration;\r
+import org.junit.Assert;\r
+import org.junit.Ignore;\r
+import org.junit.Test;\r
+import org.springframework.context.ApplicationContext;\r
+import org.unitils.spring.annotation.SpringApplicationContext;\r
+\r
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
+import eu.etaxonomy.cdm.api.service.IEntityValidationService;\r
+import eu.etaxonomy.cdm.api.service.IReferenceService;\r
+import eu.etaxonomy.cdm.api.validation.batch.BatchValidator;\r
+import eu.etaxonomy.cdm.database.CdmDataSource;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
+import eu.etaxonomy.cdm.model.validation.EntityValidation;\r
+import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
+\r
+/**\r
+ * @author admin.ayco.holleman\r
+ * @date 11 feb. 2015\r
+ *\r
+ */\r
+public class BatchValidatorTest extends CdmTransactionalIntegrationTest {\r
+\r
+// @SpringBeanByType\r
+// private BatchValidator batchValidator;\r
+\r
+// @SpringBeanByName //does not exist as such\r
+ private ICdmApplicationConfiguration app;\r
+\r
+ @SpringApplicationContext\r
+ private ApplicationContext applicationContext;\r
+\r
+ /**\r
+ * Test method for\r
+ * {@link eu.etaxonomy.cdm.api.validation.batch.BatchValidator#run()}.\r
+ *\r
+ * @throws SQLException\r
+ */\r
+ @Test\r
+ @Ignore\r
+ public void testRun() throws SQLException {\r
+\r
+ ICdmDataSource dataSource = CdmDataSource.NewH2EmbeddedInstance("PUBLIC", "sa", "");\r
+ app = CdmApplicationController.NewInstance(dataSource, DbSchemaValidation.CREATE);\r
+\r
+ HibernateValidatorConfiguration config = Validation.byProvider(HibernateValidator.class).configure();\r
+ ValidatorFactory validatorFactory = config.buildValidatorFactory();\r
+ Validator validator = validatorFactory.getValidator();\r
+\r
+ BatchValidator batchValidator = new BatchValidator();\r
+ batchValidator.setAppController(app);\r
+ batchValidator.setValidator(validator);\r
+ batchValidator.setValidationGroups(BatchValidator.DEFAULT_VALIDATION_GROUPS);\r
+\r
+ // Create 10 References of type book and 10 of type Journal\r
+\r
+ IReferenceService refService = app.getReferenceService();\r
+ for (int i = 0; i < 10; ++i) {\r
+ Reference<?> ref0 = ReferenceFactory.newBook();\r
+ ref0.setIsbn("bla bla");\r
+ ref0.setIssn("foo foo");\r
+ // Each book should violate 3 constraints\r
+ if (i == 0) {\r
+ Set<?> errors = validator.validate(ref0, BatchValidator.DEFAULT_VALIDATION_GROUPS);\r
+ // We 're really not testing the BatchValidator here, but our\r
+ // knowledge of the constraints on the Reference class, so we\r
+ // do a plain java language assert here.\r
+ assert (errors.size() == 3);\r
+ }\r
+ refService.save(ref0);\r
+ Reference<?> ref1 = ReferenceFactory.newJournal();\r
+ ref1.setIsbn("bar bar");\r
+ ref1.setIssn("baz baz");\r
+ // Each journal should violate 4 constraints\r
+ if (i == 0) {\r
+ Set<?> errors = validator.validate(ref1, BatchValidator.DEFAULT_VALIDATION_GROUPS);\r
+ assert (errors.size() == 4);\r
+ }\r
+ refService.save(ref1);\r
+ }\r
+\r
+ batchValidator.run();\r
+\r
+ // So we should have 20 validation results (10 for books, 10 for\r
+ // journals);\r
+ IEntityValidationService validationResultService = app.getEntityValidationService();\r
+ List<EntityValidation> results = validationResultService.getValidationResults();\r
+ Assert.assertEquals("Expected 20 validation results", 20, results.size());\r
+\r
+ // And we should have a total of 70 (10 * (3+4)) constraint violations\r
+ int errors = 0;\r
+ for(EntityValidation result: results) {\r
+ errors += result.getEntityConstraintViolations().size();\r
+ }\r
+ Assert.assertEquals("Expected 70 errors", 70, errors);\r
+\r
+ }\r
+\r
+ @Override\r
+ public void createTestDataSet() throws FileNotFoundException {\r
+ // TODO Auto-generated method stub\r
+ }\r
+\r
+}\r
*\r
* The contents of this file are subject to the Mozilla Public License Version 1.1\r
* See LICENSE.TXT at the top of this package for the full license terms.\r
-*/ \r
+*/\r
\r
package eu.etaxonomy.cdm.test.function;\r
\r
import org.apache.log4j.Logger;\r
import org.hibernate.Query;\r
import org.hibernate.Session;\r
-import org.hibernate.SessionFactory;\r
-import org.hibernate.internal.SessionFactoryImpl;\r
+import org.springframework.orm.hibernate4.HibernateTransactionManager;\r
import org.springframework.transaction.TransactionStatus;\r
\r
import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;\r
import eu.etaxonomy.cdm.api.service.ITaxonService;\r
import eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator;\r
+import eu.etaxonomy.cdm.api.validation.ValidationManager;\r
import eu.etaxonomy.cdm.common.AccountStore;\r
import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;\r
import eu.etaxonomy.cdm.database.CdmDataSource;\r
public class Datasource {\r
private static final Logger logger = Logger.getLogger(Datasource.class);\r
\r
- \r
+\r
private void testNewConfigControler(){\r
List<CdmPersistentDataSource> lsDataSources = CdmPersistentDataSource.getAllDataSources();\r
DbSchemaValidation schema = DbSchemaValidation.CREATE;\r
+\r
System.out.println(lsDataSources);\r
ICdmDataSource dataSource;\r
- \r
+\r
dataSource = lsDataSources.get(1);\r
// DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;\r
- \r
+\r
String server = "localhost";\r
String database = (schema == DbSchemaValidation.VALIDATE ? "cdm34" : "cdm341");\r
database = "cdm_test";\r
// String username = "edit";\r
// dataSource = CdmDataSource.NewMySqlInstance(server, database, username, AccountStore.readOrStorePassword(server, database, username, null));\r
\r
- \r
+\r
// String server = "test.e-taxonomy.eu";\r
//// String database = "cdm_test";\r
// String database = "cdm_edit_flora_malesiana";\r
// String server = "localhost";\r
// String database = "testCDM";\r
// String username = "postgres";\r
-// dataSource = CdmDataSource.NewInstance(DatabaseTypeEnum.PostgreSQL, server, database, DatabaseTypeEnum.PostgreSQL.getDefaultPort(), username, AccountStore.readOrStorePassword(server, database, username, null)); \r
- \r
- \r
+// dataSource = CdmDataSource.NewInstance(DatabaseTypeEnum.PostgreSQL, server, database, DatabaseTypeEnum.PostgreSQL.getDefaultPort(), username, AccountStore.readOrStorePassword(server, database, username, null));\r
+\r
+\r
// //SQLServer\r
// database = "CDMTest";\r
// int port = 1433;\r
// username = "pesiexport";\r
//// dataSource = CdmDataSource.NewSqlServer2005Instance(server, database, port, username, AccountStore.readOrStorePassword(server, database, username, null));\r
-// \r
+//\r
//H2\r
// String path = "C:\\Users\\a.mueller\\eclipse\\svn\\cdmlib-trunk\\cdmlib-remote-webapp\\src\\test\\resources\\h2";\r
String path = "C:\\Users\\pesiimport\\.cdmLibrary\\writableResources\\h2\\LocalH2_test34";\r
username = "sa";\r
dataSource = CdmDataSource.NewH2EmbeddedInstance("cdmTest", username, "", path, NomenclaturalCode.ICNAFP);\r
// dataSource = CdmDataSource.NewH2EmbeddedInstance(database, username, "sa", NomenclaturalCode.ICNAFP);\r
- \r
+\r
try {\r
CdmUpdater updater = new CdmUpdater();\r
if (schema == DbSchemaValidation.VALIDATE){\r
} catch (Exception e) {\r
e.printStackTrace();\r
}\r
- \r
+\r
//CdmPersistentDataSource.save(dataSource.getName(), dataSource);\r
CdmApplicationController appCtr;\r
appCtr = CdmApplicationController.NewInstance(dataSource,schema);\r
- \r
+\r
// appCtr.getCommonService().createFullSampleData();\r
\r
- // insertSomeData(appCtr);\r
-// deleteHighLevelNode(appCtr); //->problem with Duplicate Key in Classification_TaxonNode \r
+ HibernateTransactionManager transMan = (HibernateTransactionManager)appCtr.getBean("transactionManager");\r
+\r
+ ValidationManager valMan = (ValidationManager)appCtr.getBean("validationManager");\r
+ valMan.registerValidationListeners();\r
+\r
+ Reference<?> ref = ReferenceFactory.newDatabase();\r
+ ref.setIsbn("1234");\r
+ appCtr.getReferenceService().save(ref);\r
\r
- \r
+\r
+ // insertSomeData(appCtr);\r
+// deleteHighLevelNode(appCtr); //->problem with Duplicate Key in Classification_TaxonNode\r
appCtr.close();\r
}\r
\r
Taxon taxon = node.getTaxon();\r
//try {\r
taxonService.deleteTaxon(taxon, new TaxonDeletionConfigurator(), node.getClassification());\r
- \r
+\r
/*} catch (DataChangeNoRollbackException e) {\r
e.printStackTrace();\r
}*/\r
e.printStackTrace();\r
}\r
TaxonNode node2 = service.find(60554);\r
- \r
- \r
+\r
+\r
}\r
\r
private void insertSomeData(CdmApplicationController appCtr) {\r
Classification cl = Classification.NewInstance("myClass");\r
TaxonNode node1 = cl.addChildTaxon(Taxon.NewInstance(BotanicalName.NewInstance(null), null), null, null);\r
appCtr.getClassificationService().save(cl);\r
- \r
+\r
Taxon t2 = Taxon.NewInstance(null, null);\r
t2.setTitleCache("Taxon2", true);\r
TaxonNode node2 = node1.addChildTaxon(t2, null, null);\r
- \r
+\r
Taxon t3 = Taxon.NewInstance(null, null);\r
t3.setTitleCache("Taxon3", true);\r
TaxonNode node3 = node1.addChildTaxon(t3, 0, null, null);\r
- \r
+\r
appCtr.getTaxonNodeService().saveOrUpdate(node1);\r
- \r
+\r
cl.addChildNode(node3, 0, null, null);\r
appCtr.getTaxonNodeService().saveOrUpdate(node3);\r
appCtr.getClassificationService().saveOrUpdate(cl);\r
- \r
+\r
FeatureTree ft1 = FeatureTree.NewInstance();\r
FeatureNode fn1 = FeatureNode.NewInstance(null);\r
ft1.getRoot().addChild(fn1);\r
appCtr.getFeatureNodeService().save(fn1);\r
- \r
+\r
FeatureNode fn2 = FeatureNode.NewInstance(null);\r
fn1.addChild(fn2);\r
- \r
+\r
FeatureNode fn3 = FeatureNode.NewInstance(null);\r
fn1.addChild(fn2, 0);\r
- \r
+\r
appCtr.getFeatureNodeService().saveOrUpdate(fn1);\r
- \r
+\r
ft1.getRoot().addChild(fn3, 0);\r
appCtr.getFeatureNodeService().saveOrUpdate(fn3);\r
appCtr.getFeatureTreeService().saveOrUpdate(ft1);\r
}\r
- \r
+\r
private void testDatabaseChange() throws DataSourceNotFoundException{\r
CdmApplicationController appCtr;\r
appCtr = CdmApplicationController.NewInstance();\r
- \r
+\r
// DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;\r
// String server = "192.168.2.10";\r
// String database = "cdm_test_andreas";\r
// String user = "edit";\r
// String pwd = "wp5";\r
-// \r
+//\r
DatabaseTypeEnum dbType = DatabaseTypeEnum.SqlServer2005;\r
String server = "LAPTOPHP";\r
String database = "cdmTest";\r
String username = "edit";\r
String password = "";\r
- \r
+\r
ICdmDataSource dataSource = CdmDataSource.NewInstance(DatabaseTypeEnum.SqlServer2005, "LAPTOPHP", "cdmTest", DatabaseTypeEnum.SqlServer2005.getDefaultPort(), "edit", "");\r
- \r
+\r
appCtr.getDatabaseService().saveDataSource("testSqlServer", dataSource);\r
try {\r
appCtr.getDatabaseService().connectToDatabase(dbType, server, database, username, password);\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
}\r
- \r
+\r
appCtr.close();\r
}\r
\r
String database = "cdmTest";\r
String username = "edit";\r
String password = "";\r
- \r
- ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, databaseTypeEnum.getDefaultPort(), username, password); \r
- \r
+\r
+ ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, databaseTypeEnum.getDefaultPort(), username, password);\r
+\r
CdmPersistentDataSource ds = CdmPersistentDataSource.save("testSqlServer", dataSource);\r
\r
CdmApplicationController appCtr = CdmApplicationController.NewInstance(ds);\r
TaxonNameBase<?,?> tn = BotanicalName.NewInstance(null);\r
appCtr.getNameService().save(tn);\r
appCtr.close();\r
- \r
+\r
}\r
- \r
+\r
private void testPostgreServer(){\r
DatabaseTypeEnum databaseTypeEnum = DatabaseTypeEnum.PostgreSQL;\r
String server = "192.168.1.17";\r
String database = "cdm_test";\r
String username = "edit";\r
String password = "";\r
- \r
- ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, databaseTypeEnum.getDefaultPort(), username, password); \r
- \r
+\r
+ ICdmDataSource dataSource = CdmDataSource.NewInstance(databaseTypeEnum, server, database, databaseTypeEnum.getDefaultPort(), username, password);\r
+\r
CdmPersistentDataSource ds = CdmPersistentDataSource.save("PostgreTest", dataSource);\r
\r
CdmApplicationController appCtr = CdmApplicationController.NewInstance(ds);\r
appCtr.close();\r
\r
}\r
- \r
+\r
private void testLocalHsql() throws DataSourceNotFoundException{\r
CdmApplicationController appCtr = null;\r
try {\r
logger.error("Runtime Exception");\r
e.printStackTrace();\r
appCtr.close();\r
- \r
+\r
} catch (DataSourceNotFoundException e) {\r
logger.error("Runtime Exception");\r
e.printStackTrace();\r
}\r
}\r
- \r
+\r
private void testLocalH2(){\r
- \r
+\r
DbSchemaValidation validation = DbSchemaValidation.CREATE;\r
- ICdmDataSource ds = \r
+ ICdmDataSource ds =\r
CdmDataSource.NewH2EmbeddedInstance("cdm", "sa", "", null);\r
// ds =\r
// CdmPersistentDataSource.NewInstance("localH2");\r
CdmApplicationController appCtr = CdmApplicationController.NewInstance(ds, validation);\r
- \r
+\r
boolean exists = appCtr.getUserService().userExists("admin");\r
try {\r
BotanicalName name = BotanicalName.NewInstance(null);\r
NamedArea area1 = appCtr.getTermService().getAreaByTdwgAbbreviation("GER");\r
Distribution distribution = Distribution.NewInstance(area1, PresenceAbsenceTerm.PRESENT());\r
description.addElement(distribution);\r
- \r
+\r
List<Distribution> distrList = new ArrayList<Distribution>();\r
distrList.add(distribution);\r
List<NamedArea> areaList = new ArrayList<NamedArea>();\r
areaList.add(area1);\r
- \r
+\r
// distribution.getInDescription().get\r
appCtr.getTaxonService().save(taxon);\r
\r
System.out.println(taxon.getDescriptions().size());\r
- \r
+\r
TransactionStatus txStatus = appCtr.startTransaction();\r
- \r
+\r
Session session = appCtr.getSessionFactory().getCurrentSession();\r
- \r
- //String hqlQuery = "from DescriptionBase d join d.elements as e " \r
+\r
+ //String hqlQuery = "from DescriptionBase d join d.elements as e "\r
// String hqlQuery = "from Taxon t join t.descriptions as d "+\r
// " inner join d.elements e on e member of d "\r
// +\r
-// "";//" where e.area = :namedArea " ; \r
+// "";//" where e.area = :namedArea " ;\r
String hqlQuery = "Select t from Distribution e join e.inDescription d join d.taxon t join t.name n "+\r
- " WHERE e.area in (:namedArea) AND n.nameCache = :nameCache "; \r
+ " WHERE e.area in (:namedArea) AND n.nameCache = :nameCache ";\r
Query query = session.createQuery(hqlQuery);\r
- \r
+\r
//query.setEntity("namedArea", area1);\r
query.setParameter("nameCache", nameCache);\r
query.setParameterList("namedArea", areaList);\r
List resultList = query.list();\r
//List list = appCtr.getCommonService().getHqlResult(hqlQuery);\r
- \r
+\r
for (Object o:resultList){\r
System.out.println(o);\r
}\r
appCtr.commitTransaction(txStatus);\r
- \r
+\r
//System.out.println(l);\r
//Agent agent = new Agent();\r
//appCtr.getAgentService().saveAgent(agent);\r
logger.error("Runtime Exception");\r
e.printStackTrace();\r
appCtr.close();\r
- \r
+\r
}\r
}\r
- \r
+\r
private boolean testWritableResourceDirectory() throws IOException{\r
CdmApplicationUtils.getWritableResourceDir();\r
return true;\r
// if (true)return true;\r
\r
DbSchemaValidation validation = DbSchemaValidation.CREATE;\r
- ICdmDataSource ds = \r
+ ICdmDataSource ds =\r
CdmDataSource.NewH2EmbeddedInstance("cdm", "sa", "", null);\r
//CdmDataSource.NewH2EmbeddedInstance("cdm", "sa", "");\r
// ds =\r
Logger loggerTrace = logger.getLogger("org.hibernate.type");\r
loggerTrace.setLevel(Level.TRACE);\r
System.out.println(logger.getName());\r
- \r
+\r
appCtr.getNameService().save(botName1);\r
ResultSet rs = ds.executeQuery("Select count(*) as n FROM NameRelationship");\r
rs.next();\r
int c = rs.getInt("n");\r
System.out.println("Begin :" + c);\r
- \r
+\r
botName1.removeRelationToTaxonName(botName2);\r
botName1.setSpecificEpithet("DELETED");\r
botName2.addHybridParent(hybridName, HybridRelationshipType.FIRST_PARENT(), null);\r
- \r
+\r
TransactionStatus tx = appCtr.startTransaction();\r
appCtr.getNameService().saveOrUpdate(botName2);\r
rs = ds.executeQuery("Select count(*) as n FROM NameRelationship");\r
rs.next();\r
c = rs.getInt("n");\r
System.out.println("End: " + c);\r
- \r
+\r
appCtr.commitTransaction(tx);\r
- \r
+\r
appCtr.getNameService().saveOrUpdate(botName1);\r
- \r
+\r
rs = ds.executeQuery("Select count(*) as n FROM NameRelationship");\r
rs.next();\r
c = rs.getInt("n");\r
System.out.println("End: " + c);\r
- \r
+\r
} catch (SQLException e) {\r
// TODO Auto-generated catch block\r
e.printStackTrace();\r
}\r
- \r
- \r
+\r
+\r
//Agent agent = new Agent();\r
//appCtr.getAgentService().saveAgent(agent);\r
appCtr.close();\r
logger.error("Runtime Exception");\r
e.printStackTrace();\r
appCtr.close();\r
- \r
+\r
}\r
return false;\r
}\r
- \r
+\r
private void test(){\r
System.out.println("Start Datasource");\r
testNewConfigControler();\r
//testDatabaseChange();\r
- \r
+\r
//testSqlServer();\r
- \r
+\r
//CdmUtils.findLibrary(au.com.bytecode.opencsv.CSVReader.class);\r
//testPostgreServer();\r
//testLocalHsql();\r
// testH2();\r
System.out.println("\nEnd Datasource");\r
}\r
- \r
+\r
/**\r
* @param args\r
*/\r
--- /dev/null
+/**\r
+* Copyright (C) 2009 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/ \r
+\r
+package eu.etaxonomy.cdm.test.function;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.common.AccountStore;\r
+import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;\r
+import eu.etaxonomy.cdm.database.CdmDataSource;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.database.update.CdmUpdater;\r
+import eu.etaxonomy.cdm.model.agent.Person;\r
+import eu.etaxonomy.cdm.model.common.IntextReference;\r
+import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.LanguageString;\r
+import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
+import eu.etaxonomy.cdm.model.description.TextData;\r
+import eu.etaxonomy.cdm.model.taxon.Taxon;\r
+\r
+public class TestModelUpdate {\r
+ @SuppressWarnings("unused")\r
+ private static final Logger logger = Logger.getLogger(TestModelUpdate.class);\r
+\r
+ \r
+ private void testMySQL(){\r
+ DbSchemaValidation schema = DbSchemaValidation.VALIDATE;\r
+\r
+// DatabaseTypeEnum dbType = DatabaseTypeEnum.MySQL;\r
+ \r
+ String server = "localhost";\r
+ String database = (schema == DbSchemaValidation.VALIDATE ? "cdm34" : "cdm35");\r
+// database = "validation_cichorieae";\r
+ String username = "edit";\r
+ CdmDataSource dataSource = CdmDataSource.NewMySqlInstance(server, database, username, AccountStore.readOrStorePassword(server, database, username, null));\r
+\r
+ \r
+ try {\r
+ CdmUpdater updater = new CdmUpdater();\r
+ if (schema == DbSchemaValidation.VALIDATE){\r
+ updater.updateToCurrentVersion(dataSource, DefaultProgressMonitor.NewInstance());\r
+ }\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ \r
+ //CdmPersistentDataSource.save(dataSource.getName(), dataSource);\r
+ CdmApplicationController appCtr;\r
+ appCtr = CdmApplicationController.NewInstance(dataSource,schema);\r
+ \r
+ Person person = Person.NewInstance();\r
+ TextData textData = TextData.NewInstance();\r
+ Taxon taxon = Taxon.NewInstance(null, null);\r
+ TaxonDescription description = TaxonDescription.NewInstance(taxon);\r
+ description.addElement(textData);\r
+ LanguageString text = textData.putText(Language.ENGLISH(), "Ich bin ein toller text");\r
+ IntextReference.NewAgentInstance(person, text, 3, 5);\r
+\r
+ appCtr.getAgentService().save(person);\r
+ appCtr.getTaxonService().save(taxon);\r
+// appCtr.getCommonService().createFullSampleData();\r
+\r
+ // insertSomeData(appCtr);\r
+// deleteHighLevelNode(appCtr); //->problem with Duplicate Key in Classification_TaxonNode \r
+ \r
+ appCtr.close();\r
+ }\r
+ \r
+ \r
+\r
+// String server = "localhost";\r
+// String database = "testCDM";\r
+// String username = "postgres";\r
+// dataSource = CdmDataSource.NewInstance(DatabaseTypeEnum.PostgreSQL, server, database, DatabaseTypeEnum.PostgreSQL.getDefaultPort(), username, AccountStore.readOrStorePassword(server, database, username, null)); \r
+ \r
+ \r
+// //SQLServer\r
+// database = "CDMTest";\r
+// int port = 1433;\r
+// username = "pesiexport";\r
+//// dataSource = CdmDataSource.NewSqlServer2005Instance(server, database, port, username, AccountStore.readOrStorePassword(server, database, username, null));\r
+// \r
+ //H2\r
+// String path = "C:\\Users\\a.mueller\\eclipse\\svn\\cdmlib-trunk\\cdmlib-remote-webapp\\src\\test\\resources\\h2";\r
+// String path = "C:\\Users\\a.mueller\\.cdmLibrary\\writableResources\\h2\\LocalH2_test34";\r
+// username = "sa";\r
+// dataSource = CdmDataSource.NewH2EmbeddedInstance("cdmTest", username, "", path, NomenclaturalCode.ICNAFP);\r
+// dataSource = CdmDataSource.NewH2EmbeddedInstance(database, username, "sa", NomenclaturalCode.ICNAFP);\r
+\r
+\r
+ private void test(){\r
+ System.out.println("Start Datasource");\r
+ testMySQL();\r
+ //testDatabaseChange();\r
+ \r
+ //testSqlServer();\r
+ \r
+ //CdmUtils.findLibrary(au.com.bytecode.opencsv.CSVReader.class);\r
+ //testPostgreServer();\r
+ //testLocalHsql();\r
+ //testLocalH2();\r
+ //testWritableResourceDirectory();\r
+// testH2();\r
+ System.out.println("\nEnd Datasource");\r
+ }\r
+ \r
+ /**\r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+ TestModelUpdate cc = new TestModelUpdate();\r
+ cc.test();\r
+ }\r
+\r
+}\r
--- /dev/null
+// $Id$\r
+/**\r
+* Copyright (C) 2015 EDIT\r
+* European Distributed Institute of Taxonomy\r
+* http://www.e-taxonomy.eu\r
+*\r
+* The contents of this file are subject to the Mozilla Public License Version 1.1\r
+* See LICENSE.TXT at the top of this package for the full license terms.\r
+*/\r
+package eu.etaxonomy.cdm.test.function;\r
+\r
+import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
+import eu.etaxonomy.cdm.api.validation.ValidationManager;\r
+import eu.etaxonomy.cdm.common.AccountStore;\r
+import eu.etaxonomy.cdm.database.CdmDataSource;\r
+import eu.etaxonomy.cdm.database.DbSchemaValidation;\r
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
+\r
+/**\r
+ * @author a.mueller\r
+ * @date 23.01.2015\r
+ *\r
+ */\r
+public class TestValidationManager {\r
+\r
+\r
+ public void testMe(){\r
+ DbSchemaValidation schema = DbSchemaValidation.CREATE;\r
+\r
+\r
+ String path = "C:\\Users\\a.mueller\\.cdmLibrary\\writableResources\\h2\\testValidation2";\r
+ String username = "sa";\r
+ CdmDataSource dataSource = CdmDataSource.NewH2EmbeddedInstance("validationTest", username, "", path, NomenclaturalCode.ICNAFP);\r
+// dataSource = getMySQLDatasource(schema);\r
+\r
+\r
+ //CdmPersistentDataSource.save(dataSource.getName(), dataSource);\r
+ CdmApplicationController appCtr;\r
+ appCtr = CdmApplicationController.NewInstance(dataSource,schema);\r
+// appCtr.getCommonService().createFullSampleData();\r
+\r
+ ValidationManager valMan = (ValidationManager)appCtr.getBean("validationManager");\r
+ valMan.registerValidationListeners();\r
+\r
+ Reference<?> ref = ReferenceFactory.newDatabase();\r
+ ref.setIsbn("1234");\r
+ appCtr.getReferenceService().save(ref);\r
+\r
+\r
+ // insertSomeData(appCtr);\r
+// deleteHighLevelNode(appCtr); //->problem with Duplicate Key in Classification_TaxonNode\r
+\r
+ appCtr.close();\r
+\r
+\r
+ }\r
+\r
+ private CdmDataSource getMySQLDatasource (DbSchemaValidation schema){\r
+ String server = "localhost";\r
+ String database = (schema == DbSchemaValidation.VALIDATE ? "AM_test" : "AM_test");\r
+ String username = "edit";\r
+ CdmDataSource dataSource = CdmDataSource.NewMySqlInstance(server, database, username, AccountStore.readOrStorePassword(server, database, username, null));\r
+ return dataSource;\r
+ }\r
+\r
+ /**\r
+ * @param args\r
+ */\r
+ public static void main(String[] args) {\r
+ TestValidationManager cc = new TestValidationManager();\r
+ cc.testMe();\r
+ }\r
+}\r
);
-- 0 +/- SELECT COUNT(*) FROM PUBLIC.DNAQUALITY_AUD;
-CREATE CACHED TABLE PUBLIC.ENTITYVALIDATIONRESULT(
+CREATE CACHED TABLE PUBLIC.ENTITYVALIDATION(
ID INTEGER NOT NULL,
UUID VARCHAR(36),
CREATED TIMESTAMP,
VALIDATEDENTITYID INTEGER,
VALIDATEDENTITYUUID VARCHAR(36),
VALIDATEDENTITYCLASS VARCHAR(255),
+ VALIDATIONCOUNT INTEGER,
+ UPDATED TIMESTAMP,
USERFRIENDLYDESCRIPTION VARCHAR(255),
USERFRIENDLYTYPENAME VARCHAR(255),
CREATEDBY_ID INTEGER,
UPDATEDBY_ID INTEGER,
- CRUDEVENTTYPE VARCHAR(24)
+ CRUDEVENTTYPE VARCHAR(24),
+ STATUS VARCHAR(16)
);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.ENTITYVALIDATION;
--- 0 +/- SELECT COUNT(*) FROM PUBLIC.ENTITYVALIDATIONRESULT;
CREATE CACHED TABLE PUBLIC.ENTITYCONSTRAINTVIOLATION(
ID INTEGER NOT NULL,
UUID VARCHAR(36),
SEVERITY VARCHAR(24),
MESSAGE VARCHAR(255),
VALIDATOR VARCHAR(255),
+ VALIDATIONGROUP VARCHAR(63),
CREATEDBY_ID INTEGER,
UPDATEDBY_ID INTEGER,
- ENTITYVALIDATIONRESULT_ID INTEGER
+ ENTITYVALIDATION_ID INTEGER
);
-
-- 0 +/- SELECT COUNT(*) FROM PUBLIC.ENTITYCONSTRAINTVIOLATION;
+
CREATE CACHED TABLE PUBLIC.EXTENSION(
ID INTEGER NOT NULL,
CREATED TIMESTAMP,
TYPE_ID INTEGER
);
-- 0 +/- SELECT COUNT(*) FROM PUBLIC.IDENTIFIER_AUD;
+CREATE CACHED TABLE PUBLIC.INTEXTREFERENCE(
+ ID INTEGER NOT NULL,
+ UUID VARCHAR(36),
+ CREATED TIMESTAMP,
+ UPDATED TIMESTAMP,
+ CREATEDBY_ID INTEGER,
+ UPDATEDBY_ID INTEGER,
+ STARTPOS INT,
+ ENDPOS INT,
+ AGENT_ID INT,
+ ANNOTATION_ID INT,
+ LANGUAGESTRING_ID INT,
+ MEDIA_ID INT,
+ OCCURRENCE_ID INT,
+ REFERENCE_ID INT,
+ TAXON_ID INT,
+ TAXONNAME_ID INT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.INTEXTREFERENCE;
+CREATE CACHED TABLE PUBLIC.INTEXTREFERENCE_AUD(
+ ID INTEGER NOT NULL,
+ REV INTEGER NOT NULL,
+ REVTYPE TINYINT,
+ UUID VARCHAR(36),
+ CREATED TIMESTAMP,
+ UPDATED TIMESTAMP,
+ CREATEDBY_ID INTEGER,
+ UPDATEDBY_ID INTEGER,
+ STARTPOS INT,
+ ENDPOS INT,
+ AGENT_ID INT,
+ ANNOTATION_ID INT,
+ LANGUAGESTRING_ID INT,
+ MEDIA_ID INT,
+ OCCURRENCE_ID INT,
+ REFERENCE_ID INT,
+ TAXON_ID INT,
+ TAXONNAME_ID INT
+);
+-- 0 +/- SELECT COUNT(*) FROM PUBLIC.INTEXTREFERENCE_AUD;
+
CREATE CACHED TABLE PUBLIC.INDIVIDUALASSOCIATION_LANGUAGESTRING_AUD(
REV INTEGER NOT NULL,
DESCRIPTIONELEMENTBASE_ID INTEGER NOT NULL,
\r
<context:property-override location="classpath:override.properties"/>\r
\r
- <context:component-scan base-package="eu/etaxonomy/cdm/api/service">\r
+ <context:component-scan base-package="eu/etaxonomy/cdm/api/service">\r
</context:component-scan>\r
+ <!-- <context:component-scan base-package="eu/etaxonomy/cdm/api/validation">\r
+ </context:component-scan>\r
+ --> \r
+\r
\r
<import resource="classpath:/eu/etaxonomy/cdm/services.xml"/>\r
\r