ref #5974 Remove synonym relationship first compiling implementation in cdmlib
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / validation / batch / BatchValidationUtil.java
1 // $Id$
2 /**
3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
6 *
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.
9 */
10 package eu.etaxonomy.cdm.api.validation.batch;
11
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;
17
18 import javax.print.attribute.standard.Media;
19 import javax.validation.Validator;
20
21 import org.apache.log4j.Logger;
22
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;
53
54 /**
55 * @author ayco_holleman
56 * @date 28 jan. 2015
57 *
58 */
59 class BatchValidationUtil {
60
61 public static void main(String[] args) {
62 System.out.println(ITaxonService.class.getGenericInterfaces()[0]);
63 }
64
65 @SuppressWarnings("unused")
66 private static final Logger logger = Logger.getLogger(BatchValidationUtil.class);
67
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()));
101 return services;
102 }
103
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[]{
107 Reference.class,
108 NameRelationship.class,
109 TaxonNameBase.class,
110 TypeDesignationBase.class,
111 TaxonBase.class,
112 Synonym.class,
113 TaxonNode.class,
114 GatheringEvent.class}));
115 return classesToValidate;
116 }
117
118
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;
128 }
129
130 public static boolean isConstrainedEntityClass(Validator validator, Class<? extends ICdmBase> entityClass) {
131 return validator.getConstraintsForClass(entityClass).hasConstraints();
132 }
133
134
135 }