continue;\r
}\r
if (! this.recordExistsUuid(rel)){\r
- handleRelationship(record, subject, object, rel);\r
+ handleRelationship(record, subject, object, rel, false);\r
record.write(writer);\r
this.addExistingRecordUuid(rel);\r
}\r
Set<NameRelationship> rels = name.getNameRelations();\r
for (NameRelationship rel : rels){\r
DwcaResourceRelationRecord record = new DwcaResourceRelationRecord(metaRecord, config);\r
- IdentifiableEntity<?> subject = rel.getFromName();\r
- IdentifiableEntity<?> object = rel.getToName();\r
+ IdentifiableEntity<?> subject = CdmBase.deproxy(rel.getFromName(), TaxonNameBase.class); \r
+ IdentifiableEntity<?> object = CdmBase.deproxy(rel.getToName(), TaxonNameBase.class);\r
+ boolean isInverse = false;\r
+ if(subject == name){\r
+ subject = taxon;\r
+ }else if(object == name){\r
+ object= subject;\r
+ subject = taxon;\r
+ isInverse = true;\r
+ }else{\r
+ String message = "Both, subject and object, are not part of the relationship for " + name.getTitleCache();\r
+ logger.warn(message);\r
+ }\r
\r
if (! this.recordExistsUuid(rel)){\r
//????\r
- handleRelationship(record, subject, object, rel);\r
+ handleRelationship(record, subject, object, rel, isInverse);\r
record.write(writer);\r
this.addExistingRecordUuid(rel);\r
}\r
}\r
\r
private void handleRelationship(DwcaResourceRelationRecord record, IdentifiableEntity<?> subject, IdentifiableEntity<?> object,\r
- RelationshipBase<?,?,?> rel) {\r
+ RelationshipBase<?,?,?> rel, boolean isInverse) {\r
RelationshipTermBase<?> type = rel.getType();\r
+ \r
record.setId(subject.getId());\r
record.setUuid(subject.getUuid());\r
\r
record.setResourceRelationshipId(rel.getId());\r
record.setResourceRelationshipId(rel.getUuid());\r
//TODO id / uuid / names ??\r
- if (subject.isInstanceOf(TaxonBase.class)){\r
+ if (object.isInstanceOf(TaxonBase.class)){\r
record.setRelatedResourceId(object.getUuid());\r
}\r
//TODO transform to controlled voc\r
- record.setRelationshipOfResource(type.getLabel());\r
+ String relTypeLabel;\r
+ if (isInverse){\r
+ relTypeLabel = type.getInverseLabel();\r
+ }else{\r
+ relTypeLabel = type.getLabel();\r
+ }\r
+ record.setRelationshipOfResource(relTypeLabel);\r
record.setRelationshipAccordingTo(rel.getCitation()== null? null : rel.getCitation().getTitleCache());\r
//TODO missing\r
record.setRelatioshipEstablishedDate(null);\r
record.setRelationshipRemarks(rel.getAnnotations());\r
- if (subject.isInstanceOf(TaxonNameBase.class)){\r
- record.setScientificName(subject.getTitleCache());\r
+ if (object.isInstanceOf(TaxonNameBase.class)){\r
+ record.setScientificName(object.getTitleCache());\r
}\r
\r
\r