Project

General

Profile

Download (4.48 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<MarkupImportConfigurator>();
58

    
59
		return config;
60
	}
61

    
62
	protected TermTree<Feature> makeAutomatedFeatureTree(ICdmRepository app,
63
			MarkupImportState state, UUID featureTreeUuid, String featureTreeTitle){
64
		System.out.println("Start creating automated Feature Tree");
65
		TermTree<Feature> tree = TermTree.NewFeatureInstance(featureTreeUuid);
66
		tree.setTitleCache(featureTreeTitle, true);
67
		TermNode<Feature> root = tree.getRoot();
68

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

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

    
86

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

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

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

    
105
		return tree;
106
	}
107

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

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

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