fix #6368 rename table and class TaxonNameBase
[cdmlib.git] / cdmlib-services / src / main / java / eu / etaxonomy / cdm / api / validation / batch / BatchValidationUtil.java
1 /**
2 * Copyright (C) 2015 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
5 *
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.
8 */
9 package eu.etaxonomy.cdm.api.validation.batch;
10
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;
16
17 import javax.print.attribute.standard.Media;
18 import javax.validation.Validator;
19
20 import org.apache.log4j.Logger;
21
22 import eu.etaxonomy.cdm.api.application.ICdmRepository;
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.TaxonName;
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;
52
53 /**
54 * @author ayco_holleman
55 * @date 28 jan. 2015
56 *
57 */
58 class BatchValidationUtil {
59
60 public static void main(String[] args) {
61 System.out.println(ITaxonService.class.getGenericInterfaces()[0]);
62 }
63
64 @SuppressWarnings("unused")
65 private static final Logger logger = Logger.getLogger(BatchValidationUtil.class);
66
67 // Ideally retrieved dynamically through reflection, but got stuck on
68 // getXXXService methods in ICdmRepository 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 ICdmRepository 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(TaxonName.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()));
100 return services;
101 }
102
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[]{
106 Reference.class,
107 NameRelationship.class,
108 TaxonName.class,
109 TypeDesignationBase.class,
110 TaxonBase.class,
111 Synonym.class,
112 TaxonNode.class,
113 GatheringEvent.class}));
114 return classesToValidate;
115 }
116
117
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;
127 }
128
129 public static boolean isConstrainedEntityClass(Validator validator, Class<? extends ICdmBase> entityClass) {
130 return validator.getConstraintsForClass(entityClass).hasConstraints();
131 }
132
133
134 }