Project

General

Profile

Download (6.87 KB) Statistics
| Branch: | Tag: | Revision:
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.DescriptiveDataSet;
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
 * @since 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(DescriptiveDataSet.class, appConfig.getDescriptiveDataSetService()));
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
}
(1-1/4)