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