1
2
3
4
5
6
7
8
9
10 package eu.etaxonomy.cdm.io.tcsrdf;
11
12 import java.util.HashSet;
13 import java.util.List;
14 import java.util.Set;
15
16 import org.apache.log4j.Logger;
17 import org.jdom.Attribute;
18 import org.jdom.Element;
19 import org.jdom.Namespace;
20 import org.springframework.stereotype.Component;
21
22 import eu.etaxonomy.cdm.api.service.INameService;
23 import eu.etaxonomy.cdm.io.common.ICdmIO;
24 import eu.etaxonomy.cdm.io.common.MapWrapper;
25 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
26 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
27
28
29
30
31
32
33 @Component
34 public class TcsRdfTaxonNameRelationsImport extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {
35 private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameRelationsImport.class);
36
37 private static int modCount = 5000;
38
39 public TcsRdfTaxonNameRelationsImport(){
40 super();
41 }
42
43 @Override
44 public boolean doCheck(TcsRdfImportState state){
45 boolean result = true;
46 logger.warn("Checking for TaxonNameRelations not yet implemented");
47
48
49
50 return result;
51 }
52
53 @Override
54 public boolean doInvoke(TcsRdfImportState state){
55
56 MapWrapper<TaxonNameBase> taxonNameMap = (MapWrapper<TaxonNameBase>)state.getStore(ICdmIO.TAXONNAME_STORE);
57 MapWrapper<ReferenceBase> referenceMap = (MapWrapper<ReferenceBase>)state.getStore(ICdmIO.REFERENCE_STORE);
58
59 String tcsElementName;
60 Namespace tcsNamespace;
61 String cdmAttrName;
62 String value;
63
64 Set<TaxonNameBase> nameStore = new HashSet<TaxonNameBase>();
65 TcsRdfImportConfigurator config = state.getConfig();
66 Element source = config.getSourceRoot();
67
68 logger.info("start makeNameRelationships ...");
69 INameService nameService = getNameService();
70
71
72
73 Element root = config.getSourceRoot();
74 boolean success =true;
75
76 Namespace rdfNamespace = config.getRdfNamespace();
77 Namespace taxonNameNamespace = config.getTnNamespace();
78
79 List<Element> elTaxonNames = root.getChildren("TaxonName", taxonNameNamespace);
80
81 int i = 0;
82 int nameRelCount = 0;
83
84 for (Element elTaxonName : elTaxonNames){
85
86 TaxonNameBase fromName = null;
87 if ((++i % modCount) == 0){ logger.info("Names handled: " + (i-1));}
88
89
90 tcsElementName = "hasBasionym";
91 tcsNamespace = taxonNameNamespace;
92 List<Element> elBasionymList = elTaxonName.getChildren(tcsElementName, tcsNamespace);
93
94 for (Element elBasionym: elBasionymList){
95 nameRelCount++;
96 logger.debug("BASIONYM "+ nameRelCount);
97 tcsElementName = "resource";
98 tcsNamespace = rdfNamespace;
99 Attribute attrResource = elBasionym.getAttribute(tcsElementName, tcsNamespace);
100 if (attrResource == null){
101 logger.warn("Basionym rdf:resource is missing ! Basionym not set!");
102 continue;
103 }
104 String basionymId = attrResource.getValue();
105 TaxonNameBase basionym = taxonNameMap.get(basionymId);
106 if (basionym == null){
107 logger.warn("Basionym name ("+basionymId+") not found in Map! Basionym not set!");
108 continue;
109 }
110 if (fromName == null){
111 Attribute about = elTaxonName.getAttribute("about", rdfNamespace);
112 if (about != null){
113 fromName = taxonNameMap.get(about.getValue() );
114 }
115 if (fromName == null){
116 logger.warn("From name ("+about+") not found in Map! Basionym not set!");
117 continue;
118 }
119 }
120 String ruleConcidered = null;
121 String microCitation = null;
122 ReferenceBase citation = null;
123 fromName.addBasionym(basionym, citation, microCitation, ruleConcidered);
124 nameStore.add(fromName);
125
126 }
127 }
128
129
130
131
132 logger.info(nameRelCount + " nameRelations handled");
133 nameService.save(nameStore);
134 logger.info("end makeNameRelationships ...");
135 return success;
136 }
137
138
139
140
141 protected boolean isIgnore(TcsRdfImportState state){
142 return ! state.getConfig().isDoRelNames();
143 }
144
145 }