ResultSet rs = partitioner.getResultSet();
Classification gesamtListeClassification = getClassificationService().load(state.getConfig().getClassificationUuid());
Classification checklistClassification = getClassificationService().load(RedListUtil.checkListClassificationUuid);
+ Classification classificationE = getClassificationService().load(RedListUtil.uuidClassificationE);
+ Classification classificationW = getClassificationService().load(RedListUtil.uuidClassificationW);
+ Classification classificationK = getClassificationService().load(RedListUtil.uuidClassificationK);
+ Classification classificationAW = getClassificationService().load(RedListUtil.uuidClassificationAW);
+ Classification classificationAO = getClassificationService().load(RedListUtil.uuidClassificationAO);
+ Classification classificationR = getClassificationService().load(RedListUtil.uuidClassificationR);
+ Classification classificationO = getClassificationService().load(RedListUtil.uuidClassificationO);
+ Classification classificationS = getClassificationService().load(RedListUtil.uuidClassificationS);
try {
while (rs.next()){
- makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification);
+ makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification,
+ classificationE, classificationW, classificationK, classificationAW
+ , classificationAO, classificationR, classificationO, classificationS);
}
} catch (SQLException e) {
return true;
}
- private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs, Classification gesamtListeClassification, Classification checklistClassification)
+ private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs,
+ Classification gesamtListeClassification, Classification checklistClassification,
+ Classification classificationE, Classification classificationW, Classification classificationK,
+ Classification classificationAW, Classification classificationAO, Classification classificationR,
+ Classification classificationO, Classification classificationS)
throws SQLException {
long id = rs.getLong(RedListUtil.NAMNR);
String parentId = String.valueOf(rs.getLong(RedListUtil.LOWER));
}
//add taxa for concept relationships to E, W, K, AW, AO, R, O, S
- addTaxonToClassification(RedListUtil.uuidClassificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
- addTaxonToClassification(RedListUtil.uuidClassificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
+ addTaxonToClassification(classificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
+ addTaxonToClassification(classificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
+ addTaxonToClassification(classificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
+ addTaxonToClassification(classificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
+ addTaxonToClassification(classificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
+ addTaxonToClassification(classificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
+ addTaxonToClassification(classificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
+ addTaxonToClassification(classificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
}
- private void addTaxonToClassification(UUID classificationUuid, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
+ private void addTaxonToClassification(Classification classification, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
Taxon taxon = HibernateProxyHelper.deproxy(state.getRelatedObject(classificationNamespace, String.valueOf(id), TaxonBase.class), Taxon.class);
- Classification classification = getClassificationService().load(classificationUuid);
classification.addChildTaxon(taxon, null, null);
}
*/
//checklist
if(CdmUtils.isNotBlank(clTaxonString) && !clTaxonString.trim().equals("-")){
- cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, state);
+ cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, false, true, state);
}
//E, W, K, AW, AO, R, O, S
addConceptRelation(relationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, taxonBase, name, taxaToSave, id, state);
private void addConceptRelation(String relationString, String classificationNamespace, TaxonBase taxonBase, TaxonNameBase name, Set<TaxonBase> taxaToSave, long id, RedListGefaesspflanzenImportState state){
if(CdmUtils.isNotBlank(relationString) && !relationString.equals(".")){
- TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(relationString);
+ String substring = relationString.substring(relationString.length()-1, relationString.length());
+ TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(substring);
if(taxonRelationshipTypeByKey==null){
- RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase, logger);
+ RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase.generateTitle(), logger);
+ }
+ //there is no type "included in" so we have to reverse the direction
+ if(substring.equals("<")){
+ cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, true, false, state);
+ }
+ else{
+ cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, false, false, state);
}
- cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, state);
}
}
/**
* <b>NOTE:</b> the {@link TaxonRelationshipType} passed as parameter is
- * directed <b>from the clone</b> to the taxon
+ * directed <b>from the clone</b> to the taxon.<br>
+ * This can be changed with parameter <i>reverseRelation</i>
*/
- private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, RedListGefaesspflanzenImportState state){
- TaxonBase clone = (TaxonBase) taxonBase.clone();
- clone.setName(name);
- if(taxonBase.isInstanceOf(Taxon.class)){
- TaxonRelationship taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
- taxonRelation.setDoubtful(true);//TODO Ist das mit " mit Fragezeichen" gemeint?
+ private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, boolean reverseRelation, boolean doubtful, RedListGefaesspflanzenImportState state){
+ TaxonBase clone = (TaxonBase) taxonBase.clone();
+ clone.setName(name);
+ if(taxonBase.isInstanceOf(Taxon.class)){
+ TaxonRelationship taxonRelation;
+ if(reverseRelation){
+ taxonRelation = ((Taxon) taxonBase).addTaxonRelation((Taxon) clone, relationFromCloneToTaxon, null, null);
}
- ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
- taxaToSave.add(clone);
+ else {
+ taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
+ }
+ taxonRelation.setDoubtful(doubtful);
+ }
+ ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
+ taxaToSave.add(clone);
}
private TaxonBase importTaxon(long id, String taxNameString, String gueltString, String authorBasiString,
public TaxonRelationshipType getTaxonRelationshipTypeByKey(String key) {
if (key == null){return null;}
else {
- String substring = key.substring(key.length()-1, key.length());
// if (key.equals("<")){return TaxonRelationshipType.();}//TODO: what to do here?
- if (substring.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
- else if (substring.equals(">")){return TaxonRelationshipType.INCLUDES();}
- else if (substring.equals("!")){return TaxonRelationshipType.OVERLAPS();}
- else if (substring.equals("?")){return TaxonRelationshipType.ALL_RELATIONSHIPS();}
+ if (key.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
+ else if (key.equals(">")){return TaxonRelationshipType.INCLUDES();}
+ else if (key.equals("<")){return TaxonRelationshipType.INCLUDES();}
+ else if (key.equals("!")){return TaxonRelationshipType.OVERLAPS();}
+// else if (key.equals("?")){return TaxonRelationshipType.;}//TODO: what to do here?
// else if (key.equals("x")){return TaxonRelationshipType.();}//TODO: what to do here?
}
return null;