2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
9 package eu
.etaxonomy
.cdm
.api
.validation
.batch
;
11 import java
.lang
.reflect
.ParameterizedType
;
12 import java
.lang
.reflect
.Type
;
13 import java
.util
.ArrayList
;
14 import java
.util
.Arrays
;
15 import java
.util
.List
;
17 import javax
.print
.attribute
.standard
.Media
;
18 import javax
.validation
.Validator
;
20 import org
.apache
.log4j
.Logger
;
22 import eu
.etaxonomy
.cdm
.api
.application
.ICdmApplicationConfiguration
;
23 import eu
.etaxonomy
.cdm
.api
.service
.IService
;
24 import eu
.etaxonomy
.cdm
.api
.service
.ITaxonService
;
25 import eu
.etaxonomy
.cdm
.model
.agent
.AgentBase
;
26 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
27 import eu
.etaxonomy
.cdm
.model
.common
.DefinedTermBase
;
28 import eu
.etaxonomy
.cdm
.model
.common
.Group
;
29 import eu
.etaxonomy
.cdm
.model
.common
.ICdmBase
;
30 import eu
.etaxonomy
.cdm
.model
.common
.TermVocabulary
;
31 import eu
.etaxonomy
.cdm
.model
.common
.User
;
32 import eu
.etaxonomy
.cdm
.model
.description
.DescriptionBase
;
33 import eu
.etaxonomy
.cdm
.model
.description
.FeatureNode
;
34 import eu
.etaxonomy
.cdm
.model
.description
.FeatureTree
;
35 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKey
;
36 import eu
.etaxonomy
.cdm
.model
.description
.PolytomousKeyNode
;
37 import eu
.etaxonomy
.cdm
.model
.description
.WorkingSet
;
38 import eu
.etaxonomy
.cdm
.model
.molecular
.Amplification
;
39 import eu
.etaxonomy
.cdm
.model
.molecular
.Primer
;
40 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
41 import eu
.etaxonomy
.cdm
.model
.name
.NameRelationship
;
42 import eu
.etaxonomy
.cdm
.model
.name
.TaxonNameBase
;
43 import eu
.etaxonomy
.cdm
.model
.name
.TypeDesignationBase
;
44 import eu
.etaxonomy
.cdm
.model
.occurrence
.Collection
;
45 import eu
.etaxonomy
.cdm
.model
.occurrence
.GatheringEvent
;
46 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
47 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
48 import eu
.etaxonomy
.cdm
.model
.taxon
.Classification
;
49 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
50 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
51 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonNode
;
54 * @author ayco_holleman
58 class BatchValidationUtil
{
60 public static void main(String
[] args
) {
61 System
.out
.println(ITaxonService
.class.getGenericInterfaces()[0]);
64 @SuppressWarnings("unused")
65 private static final Logger logger
= Logger
.getLogger(BatchValidationUtil
.class);
67 // Ideally retrieved dynamically through reflection, but got stuck on
68 // getXXXService methods in ICdmApplicationConfiguration returning proxies
69 // (com.sun.proxy.$Proxy), which is a dead end when attempting to infer
70 // parameter arguments (e.g. the AgentBase in IAgentService<AgentBase>).
71 @SuppressWarnings({ "unchecked", "rawtypes" })
72 public static <T
extends ICdmBase
, S
extends T
> List
<EntityValidationUnit
<T
, S
>> getAvailableServices(
73 ICdmApplicationConfiguration appConfig
) {
74 List
<EntityValidationUnit
<T
, S
>> services
= new ArrayList
<EntityValidationUnit
<T
, S
>>();
75 services
.add(new EntityValidationUnit(AgentBase
.class, appConfig
.getAgentService()));
76 services
.add(new EntityValidationUnit(Amplification
.class, appConfig
.getAmplificationService()));
77 services
.add(new EntityValidationUnit(Classification
.class, appConfig
.getClassificationService()));
78 services
.add(new EntityValidationUnit(Collection
.class, appConfig
.getCollectionService()));
79 // services.add(new EntityValidationUnit(OriginalSourceBase.class, appConfig.getCommonService()));
80 services
.add(new EntityValidationUnit(DescriptionBase
.class, appConfig
.getDescriptionService()));
81 services
.add(new EntityValidationUnit(FeatureNode
.class, appConfig
.getFeatureNodeService()));
82 services
.add(new EntityValidationUnit(FeatureTree
.class, appConfig
.getFeatureTreeService()));
83 services
.add(new EntityValidationUnit(Group
.class, appConfig
.getGroupService()));
84 // Causes some AOP-related error when calling list() method on it
85 //services.add(new EntityValidationUnit(DefinedTermBase.class, appConfig.getLocationService()));
86 services
.add(new EntityValidationUnit(Media
.class, appConfig
.getMediaService()));
87 services
.add(new EntityValidationUnit(TaxonNameBase
.class, appConfig
.getNameService()));
88 services
.add(new EntityValidationUnit(SpecimenOrObservationBase
.class, appConfig
.getOccurrenceService()));
89 services
.add(new EntityValidationUnit(PolytomousKeyNode
.class, appConfig
.getPolytomousKeyNodeService()));
90 services
.add(new EntityValidationUnit(PolytomousKey
.class, appConfig
.getPolytomousKeyService()));
91 services
.add(new EntityValidationUnit(Primer
.class, appConfig
.getPrimerService()));
92 services
.add(new EntityValidationUnit(Reference
.class, appConfig
.getReferenceService()));
93 services
.add(new EntityValidationUnit(Sequence
.class, appConfig
.getSequenceService()));
94 services
.add(new EntityValidationUnit(TaxonNode
.class, appConfig
.getTaxonNodeService()));
95 services
.add(new EntityValidationUnit(TaxonBase
.class, appConfig
.getTaxonService()));
96 services
.add(new EntityValidationUnit(DefinedTermBase
.class, appConfig
.getTermService()));
97 services
.add(new EntityValidationUnit(User
.class, appConfig
.getUserService()));
98 services
.add(new EntityValidationUnit(TermVocabulary
.class, appConfig
.getVocabularyService()));
99 services
.add(new EntityValidationUnit(WorkingSet
.class, appConfig
.getWorkingSetService()));
103 public static <T
extends ICdmBase
, S
extends T
> List
<Class
<CdmBase
>> getClassesToValidate(){
104 List
<Class
<CdmBase
>> classesToValidate
= new ArrayList
<Class
<CdmBase
>>();
105 classesToValidate
.addAll((List
)Arrays
.asList(new Class
[]{
107 NameRelationship
.class,
109 TypeDesignationBase
.class,
113 GatheringEvent
.class}));
114 return classesToValidate
;
118 // Created to infer (1st) parameter type of parametrized type,
119 // but won't work because the service argument appears to be a
120 // proxy object (com.sun.proxy.$Proxy).
121 public static Class
<?
> getServicedEntity(IService
<?
> service
) {
122 Class
<?
> serviceClass
= service
.getClass();
123 System
.out
.println(serviceClass
.getName());
124 ParameterizedType pt
= (ParameterizedType
) serviceClass
.getGenericInterfaces()[0];
125 Type type
= pt
.getActualTypeArguments()[0];
126 return (Class
<?
>) type
;
129 public static boolean isConstrainedEntityClass(Validator validator
, Class
<?
extends ICdmBase
> entityClass
) {
130 return validator
.getConstraintsForClass(entityClass
).hasConstraints();