Project

General

Profile

Download (6.93 KB) Statistics
| Branch: | Tag: | Revision:
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.batch.validation;
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.SynonymRelationship;
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
                SynonymRelationship.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
}
(1-1/4)