Merge branch 'release/5.44.0'
[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.logging.log4j.LogManager;
21 import org.apache.logging.log4j.Logger;
22
23 import eu.etaxonomy.cdm.api.application.ICdmRepository;
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.ICdmBase;
29 import eu.etaxonomy.cdm.model.description.DescriptionBase;
30 import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
31 import eu.etaxonomy.cdm.model.description.PolytomousKey;
32 import eu.etaxonomy.cdm.model.description.PolytomousKeyNode;
33 import eu.etaxonomy.cdm.model.molecular.Amplification;
34 import eu.etaxonomy.cdm.model.molecular.Primer;
35 import eu.etaxonomy.cdm.model.molecular.Sequence;
36 import eu.etaxonomy.cdm.model.name.NameRelationship;
37 import eu.etaxonomy.cdm.model.name.TaxonName;
38 import eu.etaxonomy.cdm.model.name.TypeDesignationBase;
39 import eu.etaxonomy.cdm.model.occurrence.Collection;
40 import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
41 import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
42 import eu.etaxonomy.cdm.model.permission.Group;
43 import eu.etaxonomy.cdm.model.permission.User;
44 import eu.etaxonomy.cdm.model.reference.Reference;
45 import eu.etaxonomy.cdm.model.taxon.Classification;
46 import eu.etaxonomy.cdm.model.taxon.Synonym;
47 import eu.etaxonomy.cdm.model.taxon.TaxonBase;
48 import eu.etaxonomy.cdm.model.taxon.TaxonNode;
49 import eu.etaxonomy.cdm.model.term.DefinedTermBase;
50 import eu.etaxonomy.cdm.model.term.TermNode;
51 import eu.etaxonomy.cdm.model.term.TermTree;
52 import eu.etaxonomy.cdm.model.term.TermVocabulary;
53
54 /**
55 * @author ayco_holleman
56 * @since 28 jan. 2015
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 = LogManager.getLogger();
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(TermNode.class, appConfig.getTermNodeService()));
82 services.add(new EntityValidationUnit(TermTree.class, appConfig.getTermTreeService()));
83
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(TaxonName.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(DescriptiveDataSet.class, appConfig.getDescriptiveDataSetService()));
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 TaxonName.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 }