Project

General

Profile

Download (4.46 KB) Statistics
| Branch: | Revision:
1
/**
2
* Copyright (C) 2009 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.eflora;
10

    
11
import java.util.Collection;
12
import java.util.HashMap;
13
import java.util.HashSet;
14
import java.util.List;
15
import java.util.Map;
16
import java.util.Set;
17
import java.util.UUID;
18

    
19
import org.apache.log4j.Logger;
20

    
21
import eu.etaxonomy.cdm.api.application.ICdmRepository;
22
import eu.etaxonomy.cdm.api.service.ITermService;
23
import eu.etaxonomy.cdm.common.URI;
24
import eu.etaxonomy.cdm.database.ICdmDataSource;
25
import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
26
import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
27
import eu.etaxonomy.cdm.io.common.events.IIoObserver;
28
import eu.etaxonomy.cdm.io.common.events.LoggingIoObserver;
29
import eu.etaxonomy.cdm.io.markup.FeatureSorter;
30
import eu.etaxonomy.cdm.io.markup.FeatureSorterInfo;
31
import eu.etaxonomy.cdm.io.markup.MarkupImportConfigurator;
32
import eu.etaxonomy.cdm.io.markup.MarkupImportState;
33
import eu.etaxonomy.cdm.model.description.Feature;
34
import eu.etaxonomy.cdm.model.term.TermNode;
35
import eu.etaxonomy.cdm.model.term.TermTree;
36

    
37
/**
38
 * @author a.mueller
39
 */
40
public class EfloraActivatorBase {
41
	private static final Logger logger = Logger.getLogger(EfloraActivatorBase.class);
42

    
43
	protected MarkupImportConfigurator config;
44
	protected CdmDefaultImport<MarkupImportConfigurator> myImport;
45
	protected IIoObserver observer = new LoggingIoObserver();
46
	protected Set<IIoObserver> observerList = new HashSet<>();
47

    
48
	protected MarkupImportConfigurator doImport(URI source, ICdmDataSource cdmDestination, CHECK check, boolean h2ForCheck){
49
		observerList.add(observer);
50
		if (h2ForCheck && cdmDestination.getDatabaseType().equals(CdmDestinations.localH2().getDatabaseType())){
51
			check = CHECK.CHECK_ONLY;
52
		}
53
		config = MarkupImportConfigurator.NewInstance(source, cdmDestination);
54
		config.setObservers(observerList);
55
		config.setCheck(check);
56

    
57
		myImport = new CdmDefaultImport<>();
58

    
59
		return config;
60
	}
61

    
62
	protected TermTree<Feature> makeAutomatedFeatureTree(ICdmRepository app,
63
			MarkupImportState state, UUID featureTreeUuid, String featureTreeTitle){
64

    
65
	    System.out.println("Start creating automated Feature Tree");
66
		TermTree<Feature> tree = TermTree.NewFeatureInstance(featureTreeUuid);
67
		tree.setTitleCache(featureTreeTitle, true);
68
		TermNode<Feature> root = tree.getRoot();
69

    
70
		ITermService termService = app.getTermService();
71
		FeatureSorter sorter = new FeatureSorter();
72
		TermNode<Feature> descriptionNode = null;
73

    
74
		//general features
75
		Map<String, List<FeatureSorterInfo>> generalList = state.getGeneralFeatureSorterListMap();
76
		List<UUID> uuidList = sorter.getSortOrder(generalList);
77
		Map<UUID, Feature> map = makeUuidMap(uuidList, termService);
78
		for (UUID key : uuidList){
79
			Feature feature = map.get(key);
80
			TermNode<Feature> node = root.addChild(feature);
81
			if (feature.equals(Feature.DESCRIPTION())){
82
				descriptionNode = node;
83
			}
84
		}
85
		TermNode<Feature> newNode = root.addChild(Feature.CITATION());
86

    
87

    
88
		//description features
89
		if (descriptionNode != null){
90
			Map<String, List<FeatureSorterInfo>> charList = state.getCharFeatureSorterListMap();
91
			uuidList = sorter.getSortOrder(charList);
92
			map = makeUuidMap(uuidList, termService);
93
			for (UUID key : uuidList){
94
				Feature feature = map.get(key);
95
				descriptionNode.addChild(feature);
96
			}
97
		}else{
98
			logger.warn("No description node found. Could not create feature nodes for description features.");
99
		}
100

    
101
		//save tree
102
		app.getTermTreeService().saveOrUpdate(tree);
103

    
104
		System.out.println("End creating automated Feature Tree");
105

    
106
		return tree;
107
	}
108

    
109
	private Map<UUID,Feature> makeUuidMap(Collection<UUID> uuids, ITermService termService){
110
		HashSet<UUID> uuidSet = new HashSet<>();
111
		uuidSet.addAll(uuids);
112
		List<Feature> featureSet = (List)termService.find(uuidSet);
113

    
114
		Map<UUID,Feature> result = new HashMap<>();
115
		for (Feature feature : featureSet){
116
			result.put(feature.getUuid(), feature);
117
		}
118
		return result;
119
	}
120

    
121
	protected void executeVolume(URI source, boolean include) {
122
		if (include){
123
			System.out.println("\nStart import from ("+ source.toString() + ") ...");
124
			config.setSource(source);
125
			myImport.invoke(config);
126
			System.out.println("End import from ("+ source.toString() + ")...");
127
		}
128
	}
129
}
(7-7/15)