Revision 9dc896c9
Added by Andreas Müller almost 7 years ago
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/tcsxml/in/TcsXmlTaxonNameRelationsImport.java | ||
---|---|---|
5 | 5 |
* |
6 | 6 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
7 | 7 |
* See LICENSE.TXT at the top of this package for the full license terms. |
8 |
*/
|
|
8 |
*/ |
|
9 | 9 |
|
10 | 10 |
package eu.etaxonomy.cdm.io.tcsxml.in; |
11 | 11 |
|
... | ... | |
30 | 30 |
import eu.etaxonomy.cdm.model.name.NameRelationshipType; |
31 | 31 |
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus; |
32 | 32 |
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType; |
33 |
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
|
|
33 |
import eu.etaxonomy.cdm.model.name.TaxonName; |
|
34 | 34 |
import eu.etaxonomy.cdm.model.reference.Reference; |
35 | 35 |
import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException; |
36 | 36 |
|
... | ... | |
39 | 39 |
private static final Logger logger = Logger.getLogger(TcsXmlTaxonNameRelationsImport.class); |
40 | 40 |
|
41 | 41 |
private static int modCount = 5000; |
42 |
|
|
42 |
|
|
43 | 43 |
public TcsXmlTaxonNameRelationsImport(){ |
44 | 44 |
super(); |
45 | 45 |
} |
46 |
|
|
46 |
|
|
47 | 47 |
@Override |
48 | 48 |
public boolean doCheck(TcsXmlImportState state){ |
49 | 49 |
boolean result = true; |
50 | 50 |
logger.warn("Checking for TaxonNameRelations not yet implemented"); |
51 | 51 |
//result &= checkArticlesWithoutJournal(tcsConfig); |
52 | 52 |
//result &= checkPartOfJournal(tcsConfig); |
53 |
|
|
53 |
|
|
54 | 54 |
return result; |
55 | 55 |
} |
56 |
|
|
56 |
|
|
57 | 57 |
@Override |
58 | 58 |
public void doInvoke(TcsXmlImportState state){ |
59 |
|
|
60 |
|
|
59 |
|
|
60 |
|
|
61 | 61 |
logger.info("start make taxon name relations ..."); |
62 |
MapWrapper<TaxonNameBase<?,?>> taxonNameMap = (MapWrapper<TaxonNameBase<?,?>>)state.getStore(ICdmIO.TAXONNAME_STORE);
|
|
62 |
MapWrapper<TaxonName<?,?>> taxonNameMap = (MapWrapper<TaxonName<?,?>>)state.getStore(ICdmIO.TAXONNAME_STORE);
|
|
63 | 63 |
MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE); |
64 | 64 |
|
65 |
Set<TaxonNameBase> nameStore = new HashSet<TaxonNameBase>();
|
|
65 |
Set<TaxonName> nameStore = new HashSet<TaxonName>();
|
|
66 | 66 |
|
67 | 67 |
ResultWrapper<Boolean> success = ResultWrapper.NewInstance(true); |
68 | 68 |
String childName; |
... | ... | |
72 | 72 |
TcsXmlImportConfigurator config = state.getConfig(); |
73 | 73 |
Element elDataSet = super. getDataSetElement(config); |
74 | 74 |
Namespace tcsNamespace = config.getTcsXmlNamespace(); |
75 |
|
|
75 |
|
|
76 | 76 |
DoubleResult<Element, Boolean> doubleResult; |
77 | 77 |
childName = "TaxonNames"; |
78 | 78 |
obligatory = false; |
79 | 79 |
Element elTaxonNames = XmlHelp.getSingleChildElement(success, elDataSet, childName, tcsNamespace, obligatory); |
80 |
|
|
80 |
|
|
81 | 81 |
String tcsElementName = "TaxonName"; |
82 | 82 |
List<Element> elTaxonNameList = elTaxonNames == null ? new ArrayList<Element>() : elTaxonNames.getChildren(tcsElementName, tcsNamespace); |
83 | 83 |
|
84 | 84 |
// Element source = tcsConfig.getSourceRoot(); |
85 |
|
|
85 |
|
|
86 | 86 |
int i = 0; |
87 | 87 |
int nameRelCount = 0; |
88 | 88 |
//for each taxonName |
89 | 89 |
for (Element elTaxonName : elTaxonNameList){ |
90 |
|
|
90 |
|
|
91 | 91 |
if ((++i % modCount) == 0){ logger.info("Names handled: " + (i-1));} |
92 | 92 |
|
93 | 93 |
//Basionyms |
94 | 94 |
tcsElementName = "Basionym"; |
95 | 95 |
List<Element> elBasionymList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
96 |
|
|
96 |
|
|
97 | 97 |
for (Element elBasionym: elBasionymList){ |
98 | 98 |
nameRelCount++; |
99 | 99 |
logger.debug("BASIONYM "+ nameRelCount); |
100 |
|
|
100 |
|
|
101 | 101 |
NameRelationshipType relType = NameRelationshipType.BASIONYM(); |
102 | 102 |
boolean inverse = false; |
103 |
|
|
103 |
|
|
104 | 104 |
String id = elTaxonName.getAttributeValue("id"); |
105 |
// TaxonNameBase<?,?> fromName = taxonNameMap.get(id);
|
|
106 |
|
|
105 |
// TaxonName fromName = taxonNameMap.get(id); |
|
106 |
|
|
107 | 107 |
makeNomenclaturalNoteType(config, elBasionym, relType, taxonNameMap, nameStore, removeVersionOfRef(id), inverse); |
108 | 108 |
}// end Basionyms |
109 |
|
|
109 |
|
|
110 | 110 |
//SpellingCorrections |
111 | 111 |
tcsElementName = "SpellingCorrectionOf"; |
112 | 112 |
List<Element> elSpellingCorrectionList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
113 |
|
|
113 |
|
|
114 | 114 |
for (Element elSpellingCorrection: elSpellingCorrectionList){ |
115 | 115 |
nameRelCount++; |
116 | 116 |
logger.debug("SpellingCorrectionOf "+ nameRelCount); |
117 |
|
|
117 |
|
|
118 | 118 |
NameRelationshipType relType = NameRelationshipType.ORTHOGRAPHIC_VARIANT(); |
119 | 119 |
boolean inverse = true; |
120 |
|
|
120 |
|
|
121 | 121 |
String id = elTaxonName.getAttributeValue("id"); |
122 | 122 |
makeNomenclaturalNoteType(config, elSpellingCorrection, relType, taxonNameMap, nameStore, id, inverse); |
123 | 123 |
}// end SpellingCorrections |
124 |
|
|
124 |
|
|
125 | 125 |
//LaterHomonymOf |
126 | 126 |
tcsElementName = "LaterHomonymOf"; |
127 | 127 |
List<Element> elLaterHomonymList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
128 | 128 |
for (Element elLaterHomonym: elLaterHomonymList){ |
129 | 129 |
nameRelCount++; |
130 | 130 |
logger.debug("LaterHomonymOf "+ nameRelCount); |
131 |
|
|
131 |
|
|
132 | 132 |
NameRelationshipType relType = NameRelationshipType.LATER_HOMONYM(); |
133 | 133 |
boolean inverse = false; |
134 |
|
|
134 |
|
|
135 | 135 |
String id = elTaxonName.getAttributeValue("id"); |
136 | 136 |
makeNomenclaturalNoteType(config, elLaterHomonym, relType, taxonNameMap, nameStore, id, inverse); |
137 | 137 |
}// end LaterHomonymOf |
138 |
|
|
138 |
|
|
139 | 139 |
//ReplacementNameFor |
140 | 140 |
tcsElementName = "ReplacementNameFor"; |
141 | 141 |
List<Element> elReplacementNameForList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
142 | 142 |
for (Element elReplacementNameFor: elReplacementNameForList){ |
143 | 143 |
nameRelCount++; |
144 | 144 |
logger.debug("LaterHomonymOf "+ nameRelCount); |
145 |
|
|
145 |
|
|
146 | 146 |
NameRelationshipType relType = NameRelationshipType.REPLACED_SYNONYM(); |
147 | 147 |
boolean inverse = false; |
148 |
|
|
148 |
|
|
149 | 149 |
String id = elTaxonName.getAttributeValue("id"); |
150 | 150 |
makeNomenclaturalNoteType(config, elReplacementNameFor, relType, taxonNameMap, nameStore, id, inverse); |
151 | 151 |
}// end ReplacementNameFor |
152 |
|
|
152 |
|
|
153 | 153 |
//ConservedAgainst |
154 | 154 |
tcsElementName = "ConservedAgainst"; |
155 | 155 |
List<Element> elConservedAgainstList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
156 | 156 |
for (Element elConservedAgainst: elConservedAgainstList){ |
157 | 157 |
nameRelCount++; |
158 | 158 |
logger.debug("ConservedAgainst "+ nameRelCount); |
159 |
|
|
159 |
|
|
160 | 160 |
NameRelationshipType relType = NameRelationshipType.CONSERVED_AGAINST(); |
161 | 161 |
boolean inverse = false; |
162 |
|
|
162 |
|
|
163 | 163 |
String id = elTaxonName.getAttributeValue("id"); |
164 | 164 |
makeNomenclaturalNoteType(config, elConservedAgainst, relType, taxonNameMap, nameStore, id, inverse); |
165 | 165 |
}// end ConservedAgainst |
166 | 166 |
|
167 |
|
|
168 |
|
|
167 |
|
|
168 |
|
|
169 | 169 |
//Sanctioned |
170 | 170 |
tcsElementName = "Sanctioned"; |
171 | 171 |
List<Element> elSanctionedList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
172 | 172 |
for (Element elSanctioned: elSanctionedList){ |
173 |
|
|
173 |
|
|
174 | 174 |
//nameRelCount++; |
175 | 175 |
//TODO sanctioned |
176 | 176 |
logger.warn("Sanctioned not yet implemented " ); |
177 |
|
|
177 |
|
|
178 | 178 |
///NameRelationshipType relType = NameRelationshipType.XXX |
179 | 179 |
//boolean inverse = false; |
180 | 180 |
// |
181 | 181 |
//String id = elTaxonName.getAttributeValue("id"); |
182 | 182 |
//makeNomenclaturalNoteType(tcsConfig, elSanctioned, relType, taxonNameMap, nameStore, id, inverse); |
183 | 183 |
}// end Sanctioned |
184 |
|
|
184 |
|
|
185 | 185 |
//PublicationStatus |
186 | 186 |
tcsElementName = "PublicationStatus"; |
187 | 187 |
List<Element> elPublicationStatusList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
188 | 188 |
for (Element elPublicationStatus: elPublicationStatusList){ |
189 |
|
|
189 |
|
|
190 | 190 |
nameRelCount++; |
191 | 191 |
//TODO PublicationStatus |
192 | 192 |
//logger.warn("PublicationStatus not yet implemented " ); |
... | ... | |
221 | 221 |
//in cdm NameRelationship |
222 | 222 |
nameRelType = NameRelationshipType.LATER_ISONYM(); |
223 | 223 |
} |
224 |
|
|
224 |
|
|
225 | 225 |
} |
226 | 226 |
}else if (element.getName().equals("RuleConsidered")){ |
227 | 227 |
Iterator<Content> iteratorNote = element.getContent().iterator(); |
... | ... | |
243 | 243 |
logger.warn(e.getMessage()); |
244 | 244 |
} |
245 | 245 |
} |
246 |
|
|
246 |
|
|
247 | 247 |
} |
248 |
TaxonNameBase taxonName = null;
|
|
248 |
TaxonName taxonName = null; |
|
249 | 249 |
if (statusType != null || nameRelType != null){ |
250 | 250 |
String id = elTaxonName.getAttributeValue("id"); |
251 |
|
|
251 |
|
|
252 | 252 |
taxonName= taxonNameMap.get(removeVersionOfRef(id)); |
253 | 253 |
} |
254 | 254 |
if (taxonName != null){ |
... | ... | |
261 | 261 |
} |
262 | 262 |
if (nameRelType != null){ |
263 | 263 |
String id = elTaxonName.getAttributeValue("id"); |
264 |
|
|
265 |
TaxonNameBase relatedTaxonName = taxonNameMap.get(removeVersionOfRef(id));
|
|
264 |
|
|
265 |
TaxonName relatedTaxonName = taxonNameMap.get(removeVersionOfRef(id)); |
|
266 | 266 |
taxonName.addRelationshipFromName(relatedTaxonName, nameRelType, ruleConsidered); |
267 | 267 |
} |
268 | 268 |
} |
269 |
|
|
270 |
|
|
271 |
|
|
272 |
|
|
269 |
|
|
270 |
|
|
271 |
|
|
272 |
|
|
273 | 273 |
}// end PublicationStatus |
274 |
|
|
274 |
|
|
275 | 275 |
//BasedOn |
276 | 276 |
tcsElementName = "BasedOn"; |
277 | 277 |
List<Element> elBasedOnList = elTaxonName.getChildren(tcsElementName, tcsNamespace); |
278 | 278 |
for (Element elBasedOn: elBasedOnList){ |
279 |
|
|
279 |
|
|
280 | 280 |
//nameRelCount++; |
281 | 281 |
//TODO BasedOn |
282 | 282 |
logger.debug("BasedOn not yet implemented " ); |
... | ... | |
291 | 291 |
//String id = elTaxonName.getAttributeValue("id"); |
292 | 292 |
//makeNomenclaturalNoteType(tcsConfig, elBasedOn, relType, taxonNameMap, nameStore, id, inverse); |
293 | 293 |
}// end BasedOn |
294 |
|
|
295 |
|
|
296 |
|
|
297 |
|
|
298 |
}
|
|
294 |
|
|
295 |
|
|
296 |
|
|
297 |
|
|
298 |
} |
|
299 | 299 |
//Other Relations |
300 | 300 |
//TODO |
301 |
|
|
301 |
|
|
302 | 302 |
logger.info(nameRelCount + " nameRelations handled"); |
303 | 303 |
getNameService().save(nameStore); |
304 | 304 |
logger.info("end make taxon name relationships ..."); |
... | ... | |
307 | 307 |
} |
308 | 308 |
return; |
309 | 309 |
} |
310 |
|
|
311 | 310 |
|
312 |
private boolean makeNomenclaturalNoteType(TcsXmlImportConfigurator tcsConfig, Element elRelation, NameRelationshipType relType, MapWrapper<TaxonNameBase<?,?>> taxonNameMap, Set<TaxonNameBase> nameStore, String id, boolean inverse){ |
|
311 |
|
|
312 |
private boolean makeNomenclaturalNoteType(TcsXmlImportConfigurator tcsConfig, Element elRelation, NameRelationshipType relType, MapWrapper<TaxonName<?,?>> taxonNameMap, Set<TaxonName> nameStore, String id, boolean inverse){ |
|
313 | 313 |
if (elRelation == null){ |
314 | 314 |
return false; |
315 | 315 |
} |
316 | 316 |
Namespace ns = elRelation.getNamespace(); |
317 |
|
|
317 |
|
|
318 | 318 |
String ruleConsidered = elRelation.getChildText("RuleConsidered", ns); |
319 | 319 |
String note = elRelation.getChildText("Note", ns); |
320 | 320 |
String microReference = elRelation.getChildText("MicroReference", ns); |
321 | 321 |
Element elRelatedName = elRelation.getChild("RelatedName", ns); |
322 | 322 |
//TODO relType |
323 | 323 |
String relatedNameId = elRelatedName.getAttributeValue("ref"); |
324 |
|
|
325 |
TaxonNameBase<?,?> fromName = taxonNameMap.get(removeVersionOfRef(id));
|
|
326 |
|
|
327 |
TaxonNameBase<?,?> toName = taxonNameMap.get(removeVersionOfRef(relatedNameId));
|
|
324 |
|
|
325 |
TaxonName fromName = taxonNameMap.get(removeVersionOfRef(id)); |
|
326 |
|
|
327 |
TaxonName toName = taxonNameMap.get(removeVersionOfRef(relatedNameId)); |
|
328 | 328 |
if (fromName == null){ |
329 | 329 |
//logger.warn("fromName (" + id + ") not found in Map! Relationship not set!"); |
330 | 330 |
return false; |
... | ... | |
334 | 334 |
return false; |
335 | 335 |
} |
336 | 336 |
|
337 |
|
|
337 |
|
|
338 | 338 |
//TODO note, microreference |
339 | 339 |
if (inverse == false){ |
340 | 340 |
toName.addRelationshipToName(fromName, relType, ruleConsidered); |
... | ... | |
344 | 344 |
nameStore.add(fromName); |
345 | 345 |
return true; |
346 | 346 |
} |
347 |
|
|
347 |
|
|
348 | 348 |
@Override |
349 | 349 |
protected boolean isIgnore(TcsXmlImportState state){ |
350 | 350 |
return ! state.getConfig().isDoRelNames(); |
Also available in: Unified diff
fix #6368 rename table and class TaxonNameBase