some bugfixes on DwcA Export
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 12 Jul 2011 15:55:37 +0000 (15:55 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 12 Jul 2011 15:55:37 +0000 (15:55 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaRecordBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/out/DwcaResourceRelationExport.java

index cc5e73cd997d8f9a0a4f44cb6194ab69fabf2ec2..9b36366a7d94e14e9e4aa83bf98b7a512bd3f076 100644 (file)
@@ -205,6 +205,12 @@ public abstract class DwcaRecordBase {
                        String strToPrint = addSeparator ? config.getFieldsTerminatedBy() : "";\r
                        if (StringUtils.isNotBlank(value)){\r
                                value = value.replace(config.getLinesTerminatedBy(), "\\r");\r
+                               \r
+                               //replace all line brakes according to best practices: http://code.google.com/p/gbif-ecat/wiki/BestPractices\r
+                               value = value.replace("\r\n", "\\r");\r
+                               value = value.replace("\r", "\\r");\r
+                               value = value.replace("\n", "\\r");\r
+                               \r
                                strToPrint += config.getFieldsEnclosedBy() + value + config.getFieldsEnclosedBy();\r
                        }\r
                        writer.print(strToPrint);\r
index d1a3338aaae213e9fc7651ad585aed67038e3a55..9efb3c6f940f52363539ee975700f4fd18ec26eb 100644 (file)
@@ -112,7 +112,7 @@ public class DwcaResourceRelationExport extends DwcaExportBase {
                                                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
@@ -130,12 +130,23 @@ public class DwcaResourceRelationExport extends DwcaExportBase {
                                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
@@ -162,8 +173,9 @@ public class DwcaResourceRelationExport extends DwcaExportBase {
        }\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
@@ -171,17 +183,23 @@ public class DwcaResourceRelationExport extends DwcaExportBase {
                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