Project

General

Profile

« Previous | Next » 

Revision f2f47cbd

Added by Andreas Müller over 4 years ago

ref #8479 First version of cdm2cdm import for FauEu (classes created, no real implementation yet)

View differences:

cdm-pesi/src/main/java/eu/etaxonomy/cdm/app/pesi/FauEu2CdmActivator.java
1
/**
2
* Copyright (C) 2019 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.app.pesi;
10

  
11
import org.apache.log4j.Logger;
12

  
13
import eu.etaxonomy.cdm.app.common.CdmDestinations;
14
import eu.etaxonomy.cdm.database.DbSchemaValidation;
15
import eu.etaxonomy.cdm.database.ICdmDataSource;
16
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
17
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
18
import eu.etaxonomy.cdm.io.common.IImportConfigurator.DO_REFERENCES;
19
import eu.etaxonomy.cdm.io.pesi.fauEu2Cdm.FauEu2CdmImportConfigurator;
20

  
21
/**
22
 * @author a.mueller
23
 * @since 17.08.2019
24
 */
25
public class FauEu2CdmActivator {
26

  
27
    @SuppressWarnings("unused")
28
    private static final Logger logger = Logger.getLogger(FauEu2CdmActivator.class);
29

  
30
    static final ICdmDataSource fauEuSource = CdmDestinations.cdm_pesi_fauna_europaea();
31
    static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_erms();
32

  
33
    //check - import
34
    static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;
35

  
36
    static final int partitionSize = 5000;
37

  
38
// ***************** ALL ************************************************//
39

  
40
    //references
41
    static final DO_REFERENCES doReferences =  DO_REFERENCES.ALL;
42

  
43
    //taxa
44
    static final boolean doTaxa = true;
45

  
46

  
47
    private void doImport(ICdmDataSource source, ICdmDataSource destination, DbSchemaValidation hbm2dll){
48

  
49
        String importFrom = " import from "+ source.getDatabase() + " to "+ destination.getDatabase() + " ...";
50
        System.out.println("Start"+importFrom);
51

  
52
        FauEu2CdmImportConfigurator config = FauEu2CdmImportConfigurator.NewInstance(source,  destination);
53

  
54
//        config.setDoTaxa(doTaxa);
55
        config.setDbSchemaValidation(hbm2dll);
56

  
57
        config.setCheck(check);
58
//        config.setRecordsPerTransaction(partitionSize);
59
//        config.setSourceRefUuid(PesiTransformer.uuidSourceRefErms);
60

  
61
        // invoke import
62
        CdmDefaultImport<FauEu2CdmImportConfigurator> myImport = new CdmDefaultImport<>();
63
        myImport.invoke(config);
64

  
65
        System.out.println("End" + importFrom);
66
    }
67

  
68
    /**
69
     * @param args
70
     */
71
    public static void main(String[] args) {
72
        ICdmDataSource cdmDB = CdmDestinations.chooseDestination(args) != null ? CdmDestinations.chooseDestination(args) : cdmDestination;
73
        FauEu2CdmActivator myImport = new FauEu2CdmActivator();
74
        myImport.doImport(fauEuSource, cdmDB, DbSchemaValidation.VALIDATE);
75

  
76
    }
77
}
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/fauEu2Cdm/FauEu2CdmImport.java
1
/**
2
* Copyright (C) 2019 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.io.pesi.fauEu2Cdm;
10

  
11
import java.util.ArrayList;
12
import java.util.Collection;
13
import java.util.List;
14

  
15
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
16
import eu.etaxonomy.cdm.io.common.TaxonNodeOutStreamPartitioner;
17
import eu.etaxonomy.cdm.io.common.XmlExportState;
18
import eu.etaxonomy.cdm.model.common.AnnotatableEntity;
19
import eu.etaxonomy.cdm.model.common.Annotation;
20
import eu.etaxonomy.cdm.model.common.CdmBase;
21
import eu.etaxonomy.cdm.model.common.Marker;
22
import eu.etaxonomy.cdm.model.common.VersionableEntity;
23
import eu.etaxonomy.cdm.model.taxon.Classification;
24
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
25

  
26
/**
27
 * @author a.mueller
28
 * @since 17.08.2019
29
 */
30
public class FauEu2CdmImport
31
        extends FauEu2CdmImportBase {
32

  
33
    private static final long serialVersionUID = -2111102574346601573L;
34

  
35
    @Override
36
    protected boolean doCheck(FauEu2CdmImportState state) {
37
        return false;
38
    }
39

  
40
    @Override
41
    protected void doInvoke(FauEu2CdmImportState state) {
42
        IProgressMonitor monitor = state.getConfig().getProgressMonitor();
43
        FauEu2CdmImportConfigurator config = state.getConfig();
44
        if (config.getTaxonNodeFilter().getClassificationFilter() != null
45
                && !config.getTaxonNodeFilter().getClassificationFilter().isEmpty()) {
46
            Classification classification = getClassificationService()
47
                    .load(config.getTaxonNodeFilter().getClassificationFilter().get(0).getUuid());
48
            state.setRootId(classification.getRootNode().getUuid());
49

  
50
        } else if (config.getTaxonNodeFilter().getSubtreeFilter() != null
51
                && !config.getTaxonNodeFilter().getSubtreeFilter().isEmpty()) {
52
            state.setRootId(config.getTaxonNodeFilter().getSubtreeFilter().get(0).getUuid());
53
        }
54
        @SuppressWarnings("unchecked")
55
        TaxonNodeOutStreamPartitioner<XmlExportState> partitioner = TaxonNodeOutStreamPartitioner.NewInstance(this,
56
                state, state.getConfig().getTaxonNodeFilter(), 100, monitor, null);
57

  
58
        monitor.subTask("Start partitioning");
59

  
60
        TaxonNode node = partitioner.next();
61
        while (node != null) {
62
            handleTaxonNode(state, node);
63
            node = partitioner.next();
64
        }
65
    }
66

  
67
    /**
68
     * @param state
69
     * @param node
70
     */
71
    private void handleTaxonNode(FauEu2CdmImportState state, TaxonNode node) {
72
//        Integer id = state.getTarget(createdBy.getUuid(), createdBy.getClass());
73
        handleAnnotatableEntity(node);
74

  
75

  
76
    }
77

  
78
    private void handleAnnotatableEntity(AnnotatableEntity entity) {
79
        handleVersionableEntity(entity);
80
        for (Annotation a : getTargetCollection(entity.getAnnotations())){
81
            entity.addAnnotation(a);
82
        }
83
        for (Marker a : getTargetCollection(entity.getMarkers())){
84
            entity.addMarker(a);
85
        }
86
//        entity.setUpdatedBy(getTarget(entity.getUpdatedBy()));
87
    }
88

  
89
    /**
90
     * @param annotations
91
     * @return
92
     */
93
    private <T extends Collection<S>, S extends CdmBase> List<S> getTargetCollection(T sourceCollection) {
94
        List<S> result = new ArrayList<>();
95
        for (S entity : sourceCollection){
96
            S target = getTarget(entity);
97
            result.add(target);
98
        }
99
        return result;
100
    }
101

  
102
    private void handleVersionableEntity(VersionableEntity entity) {
103
        handleCdmBase(entity);
104
        entity.setUpdatedBy(getTarget(entity.getUpdatedBy()));
105
    }
106

  
107
    private void handleCdmBase(CdmBase cdmBase) {
108
        cdmBase.setCreatedBy(getTarget(cdmBase.getCreatedBy()));
109
    }
110

  
111
    //TODO this should be cached for partition
112
    private <T extends CdmBase> T getTarget(T source) {
113
        Class<T> clazz = (Class<T>)source.getClass();
114
        T result = getCommonService().find(clazz, source.getUuid());
115
        if (result == null){
116
            //TODO recursive
117
            //TODO session evict
118
            result = CdmBase.deproxy(source);
119
            result.setId(0);
120
        }
121
        return result;
122
    }
123

  
124
    @Override
125
    protected boolean isIgnore(FauEu2CdmImportState state) {
126
        return false;
127
    }
128

  
129
}
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/fauEu2Cdm/FauEu2CdmImportBase.java
1
/**
2
* Copyright (C) 2019 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.io.pesi.fauEu2Cdm;
10

  
11
import eu.etaxonomy.cdm.api.application.CdmApplicationController;
12
import eu.etaxonomy.cdm.api.application.ICdmRepository;
13
import eu.etaxonomy.cdm.database.DbSchemaValidation;
14
import eu.etaxonomy.cdm.io.common.CdmImportBase;
15

  
16
/**
17
 * @author a.mueller
18
 * @since 17.08.2019
19
 */
20
public abstract class FauEu2CdmImportBase
21
        extends CdmImportBase<FauEu2CdmImportConfigurator, FauEu2CdmImportState> {
22

  
23
    private static final long serialVersionUID = 8917991155285743172L;
24

  
25
    protected ICdmRepository source(FauEu2CdmImportState state){
26

  
27
        ICdmRepository repo = state.getSourceRepository();
28
        if (repo == null){
29
            boolean omitTermLoading = true;
30
            repo = CdmApplicationController.NewInstance(state.getConfig().getSource(),
31
                    DbSchemaValidation.VALIDATE, omitTermLoading);
32
        }
33
        return repo;
34
    }
35

  
36
}
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/fauEu2Cdm/FauEu2CdmImportConfigurator.java
1
/**
2
* Copyright (C) 2019 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.io.pesi.fauEu2Cdm;
10

  
11
import eu.etaxonomy.cdm.database.ICdmDataSource;
12
import eu.etaxonomy.cdm.filter.TaxonNodeFilter;
13
import eu.etaxonomy.cdm.io.common.ImportConfiguratorBase;
14
import eu.etaxonomy.cdm.io.common.mapping.IInputTransformer;
15
import eu.etaxonomy.cdm.model.reference.Reference;
16

  
17
/**
18
 * @author a.mueller
19
 * @since 17.08.2019
20
 */
21
public class FauEu2CdmImportConfigurator
22
        extends ImportConfiguratorBase<FauEu2CdmImportState, ICdmDataSource>{
23

  
24
    private static final long serialVersionUID = -5452466831212722546L;
25

  
26
    private static IInputTransformer myTransformer = null;
27

  
28
    private TaxonNodeFilter taxonNodeFilter = new TaxonNodeFilter();
29

  
30
    public static FauEu2CdmImportConfigurator NewInstance(ICdmDataSource source, ICdmDataSource destination) {
31
        return new FauEu2CdmImportConfigurator(source, destination);
32
    }
33

  
34
    public FauEu2CdmImportConfigurator(ICdmDataSource source, ICdmDataSource destination) {
35
        super(myTransformer);
36
        this.setSource(source);
37
        this.setDestination(destination);
38
    }
39

  
40
    @Override
41
    public FauEu2CdmImportState getNewState() {
42
        return new FauEu2CdmImportState(this);
43
    }
44

  
45
    @SuppressWarnings("unchecked")
46
    @Override
47
    protected void makeIoClassList() {
48
        ioClassList = new Class[]{
49
                FauEu2CdmImport.class ,
50
        };
51
    }
52

  
53
    @Override
54
    @Deprecated
55
    public Reference getSourceReference() {
56
        return null;
57
    }
58

  
59

  
60
    public TaxonNodeFilter getTaxonNodeFilter() {
61
        return taxonNodeFilter;
62
    }
63
    public void setTaxonNodeFilter(TaxonNodeFilter taxonNodeFilter) {
64
        this.taxonNodeFilter = taxonNodeFilter;
65
    }
66

  
67

  
68
}
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/fauEu2Cdm/FauEu2CdmImportState.java
1
/**
2
* Copyright (C) 2019 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.io.pesi.fauEu2Cdm;
10

  
11
import java.util.HashMap;
12
import java.util.Map;
13
import java.util.UUID;
14

  
15
import eu.etaxonomy.cdm.api.application.ICdmRepository;
16
import eu.etaxonomy.cdm.io.common.CdmImportBase;
17
import eu.etaxonomy.cdm.io.common.ImportStateBase;
18
import eu.etaxonomy.cdm.model.common.CdmBase;
19

  
20
/**
21
 * @author a.mueller
22
 * @since 17.08.2019
23
 */
24
public class FauEu2CdmImportState
25
        extends ImportStateBase<FauEu2CdmImportConfigurator,CdmImportBase>{
26

  
27
    private ICdmRepository sourceRepository;
28
    private UUID rootUuid;
29

  
30
    protected FauEu2CdmImportState(FauEu2CdmImportConfigurator config) {
31
        super(config);
32
    }
33

  
34

  
35
    public ICdmRepository getSourceRepository() {
36
        return sourceRepository;
37
    }
38
    public void setSourceRepository(ICdmRepository sourceRepository) {
39
        this.sourceRepository = sourceRepository;
40
    }
41

  
42
    public UUID getRootId() {
43
        return rootUuid;
44
    }
45
    public void setRootId(UUID rootId) {
46
        this.rootUuid = rootId;
47
    }
48

  
49

  
50
    private Map<UUID, Integer> targetMap = new HashMap<>();
51
    /**
52
     * @param uuid
53
     * @param class1
54
     */
55
    public <T extends CdmBase> Integer getTarget(UUID uuid, Class<T> clazz) {
56
        return targetMap.get(uuid);
57

  
58
    }
59

  
60
}

Also available in: Unified diff