latest changes to Dwca Import
authorAndreas Müller <a.mueller@bgbm.org>
Sat, 10 Mar 2012 00:21:23 +0000 (00:21 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Sat, 10 Mar 2012 00:21:23 +0000 (00:21 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/ConverterBase.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/DwcTaxonCsv2CdmTaxonConverter.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/DwcaImport.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/in/DwcaZipToStreamConverter.java
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/dwca/jaxb/Field.java
cdmlib-io/src/test/java/eu/etaxonomy/cdm/io/dwca/in/DwcaImportIntegrationTest.java

index 745734e3d1a27a9df5fcb7deb870aa5818247d8e..38939b242ad2d053cfc7e99fd5b755a86dbe6dd4 100644 (file)
@@ -58,8 +58,6 @@ public class ConverterBase<STATE extends IoStateBase> {
                //http://stackoverflow.com/questions/421280/in-java-how-do-i-find-the-caller-of-a-method-using-stacktrace-or-reflection\r
 //             Object o = new SecurityManager().getSecurityContext();\r
                \r
-               logger.warn(message + "; " + dataLocation);  //TDOO preliminary until event system works on Converters\r
-               \r
                fire(event);\r
        }\r
        \r
@@ -68,6 +66,9 @@ public class ConverterBase<STATE extends IoStateBase> {
                for (IIoObserver observer: observers){\r
                        observer.handleEvent(event);\r
                }\r
+               if (observers.size() == 0){\r
+                       logger.warn(event.getMessage() +  " (no observer for message!).");\r
+               }\r
        }\r
        \r
 \r
index 89dedcb9874df5cedf1d674e8a9a9c234875997c..f89c61142ef1e6bbbf7acfe20ae6728afe3d4c33 100644 (file)
@@ -75,10 +75,10 @@ public class DwcTaxonCsv2CdmTaxonConverter extends ConverterBase<DwcaImportState
                csvTaxonRecord.remove(ID);\r
                \r
                //rank\r
-               Rank rank = getRank(csvTaxonRecord);\r
+               NomenclaturalCode nomCode = getNomCode(csvTaxonRecord);\r
+               Rank rank = getRank(csvTaxonRecord, nomCode);\r
 \r
                //name\r
-               NomenclaturalCode nomCode = getNomCode(csvTaxonRecord);\r
                TaxonNameBase<?,?> name = getScientificName(csvTaxonRecord, nomCode, rank);\r
                taxonBase.setName(name);\r
                \r
@@ -234,18 +234,21 @@ public class DwcTaxonCsv2CdmTaxonConverter extends ConverterBase<DwcaImportState
        }\r
 \r
 \r
-       private Rank getRank(CsvStreamItem csvTaxonRecord) {\r
+       private Rank getRank(CsvStreamItem csvTaxonRecord, NomenclaturalCode nomCode) {\r
                boolean USE_UNKNOWN = true;\r
                Rank rank = null;\r
                String strRank = getValue(csvTaxonRecord,TermUri.DWC_TAXON_RANK);\r
                String strVerbatimRank = getValue(csvTaxonRecord,TermUri.DWC_VERBATIM_TAXON_RANK);\r
                if (strRank != null){\r
                        try {\r
-                               rank = Rank.getRankByNameOrAbbreviation(strRank, USE_UNKNOWN);\r
+                               rank = Rank.getRankByEnglishName(strRank, nomCode, USE_UNKNOWN);\r
                                if (rank.equals(Rank.UNKNOWN_RANK())){\r
-                                       String message = "Rank can not be defined for '%s'";\r
-                                       message = String.format(message, strRank);\r
-                                       fireWarningEvent(message, csvTaxonRecord, 4);\r
+                                       rank = Rank.getRankByNameOrAbbreviation(strRank, USE_UNKNOWN);\r
+                                       if (rank.equals(Rank.UNKNOWN_RANK())){\r
+                                               String message = "Rank can not be defined for '%s'";\r
+                                               message = String.format(message, strRank);\r
+                                               fireWarningEvent(message, csvTaxonRecord, 4);\r
+                                       }\r
                                }\r
                        } catch (UnknownCdmTypeException e) {\r
                                //should not happen as USE_UNKNOWN is used\r
@@ -275,11 +278,14 @@ public class DwcTaxonCsv2CdmTaxonConverter extends ConverterBase<DwcaImportState
                TaxonBase<?> result;\r
                String taxStatus = item.get(TermUri.DWC_TAXONOMIC_STATUS);\r
                String status = "";\r
+               boolean isMissaplied = false;\r
                if (taxStatus != null){\r
-                       if (taxStatus.matches("accepted|valid|misapplied")){\r
+                       if (taxStatus.matches("accepted|valid")){\r
                                status += "A";\r
                        }else if (taxStatus.matches(".*synonym|invalid")){\r
                                status += "S";\r
+                       }if (taxStatus.matches("misapplied")){\r
+                               status += "M";\r
                        }else{\r
                                status += "?";\r
                        }\r
@@ -293,10 +299,11 @@ public class DwcTaxonCsv2CdmTaxonConverter extends ConverterBase<DwcaImportState
                                status += "S";\r
                        }\r
                }\r
-               if (status.contains("A")){\r
+               if (status.contains("A") || status.contains("M")){\r
                        result = Taxon.NewInstance(name, sec);\r
-                       if (status.contains("S")){\r
-                               String message = "Ambigous taxon status.";\r
+                       if (status.contains("S") && ! status.contains("M") ){\r
+                               String message = "Ambigous taxon status (%s)";\r
+                               message = String.format(message, status);\r
                                fireWarningEvent(message, item, 6);\r
                        }\r
                }else if (status.contains("S")){\r
@@ -305,9 +312,6 @@ public class DwcTaxonCsv2CdmTaxonConverter extends ConverterBase<DwcaImportState
                        result = Taxon.NewUnknownStatusInstance(name, sec);\r
                }\r
                        \r
-               \r
-               \r
-               //TODO handle acceptedNameUsage(ID), \r
                return result;\r
        }\r
        \r
index daadd9a5066e0c98f36542893381a7413f603170..5d23fc1b34ad7902b6dc33143b07b34cc186b472 100644 (file)
@@ -12,6 +12,7 @@ import java.net.URI;
 \r
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Component;\r
+import org.springframework.transaction.TransactionStatus;\r
 \r
 import eu.etaxonomy.cdm.api.service.IIdentifiableEntityService;\r
 import eu.etaxonomy.cdm.io.common.CdmImportBase;\r
@@ -40,7 +41,9 @@ public class DwcaImport extends CdmImportBase<DwcaImportConfigurator, DwcaImport
                        CsvStream csvStream = stream.read();\r
                        while (csvStream.hasNext()){\r
                                CsvStreamItem item = csvStream.read();\r
+                               TransactionStatus tx = startTransaction();\r
                                handleCsvStreamItem(state, item);\r
+                               commitTransaction(tx);\r
                        }\r
                        finalizeStream(csvStream, state);\r
                }\r
@@ -93,10 +96,12 @@ public class DwcaImport extends CdmImportBase<DwcaImportConfigurator, DwcaImport
                        //start preliminary for testing\r
                        IIdentifiableEntityService service;\r
                        try {\r
-                               service = getServiceByClass(cdmBase.getClass());\r
-                               if (service != null){\r
-                                       IdentifiableEntity<?> entity = CdmBase.deproxy(cdmBase, IdentifiableEntity.class);\r
-                                       service.save(entity);\r
+                               if (cdmBase.isInstanceOf(IdentifiableEntity.class)){\r
+                                       service = getServiceByClass(cdmBase.getClass());\r
+                                       if (service != null){\r
+                                               IdentifiableEntity<?> entity = CdmBase.deproxy(cdmBase, IdentifiableEntity.class);\r
+                                               service.saveOrUpdate(entity);\r
+                                       }\r
                                }\r
                        } catch (IllegalArgumentException e) {\r
                                fireWarningEvent(e.getMessage(), location, 12);\r
index d941bafebad5a4ff4a947a386ca2c283253a441f..c5ecb6dba6fc02b696163e1b2018b7a4bb993b5b 100644 (file)
@@ -31,8 +31,6 @@ import javax.xml.bind.Unmarshaller;
 import org.apache.log4j.Logger;\r
 \r
 import au.com.bytecode.opencsv.CSVReader;\r
-import eu.etaxonomy.cdm.io.common.IImportConfigurator;\r
-import eu.etaxonomy.cdm.io.common.ImportStateBase;\r
 import eu.etaxonomy.cdm.io.common.IoStateBase;\r
 import eu.etaxonomy.cdm.io.dwca.TermUri;\r
 import eu.etaxonomy.cdm.io.dwca.jaxb.Archive;\r
@@ -212,6 +210,29 @@ public class DwcaZipToStreamConverter<STATE extends IoStateBase> {
                \r
        }\r
 \r
+//\r
+//     /**\r
+//      * @return\r
+//      * @throws IOException\r
+//      */\r
+//     private InputStream makeInputStream(String name) throws IOException {\r
+//             \r
+//             ZipInputStream zin = new ZipInputStream(dwcaZip.toURL().openStream());\r
+//             ZipEntry ze = zin.getNextEntry();\r
+//             while (!ze.getName().equals(name)) {\r
+//                 zin.closeEntry(); // not sure whether this is necessary\r
+//                 ze = zin.getNextEntry();\r
+//             }\r
+//             \r
+//             CheckedInputStream cis = new CheckedInputStream(in, cksum)\r
+//             \r
+//             InputStream metaInputStream = zip.getInputStream(ze);\r
+//             return metaInputStream;\r
+//     \r
+//             InputStream metaInputStream = zip.getInputStream(metaEntry);\r
+//             return metaInputStream;\r
+//     }\r
+//     \r
 \r
        /**\r
         * @return\r
index 6da2c77515924254f1eba7efb025ea925810ca0b..0efd63a3174c4a029f86a11c1ffe9a345b064be9 100644 (file)
@@ -104,5 +104,10 @@ public class Field {
     public void setIndex(byte value) {\r
         this.index = value;\r
     }\r
+    \r
+    @Override\r
+    public String toString(){\r
+       return "[" + index + ";" + term + "]";\r
+    }\r
 \r
 }\r
index 052660576f5c359c203504f05909d5156cb76615..2a47c50b8270df7f3725d01034e61922c55dd591 100644 (file)
@@ -22,6 +22,7 @@ import org.junit.Test;
 import org.unitils.spring.annotation.SpringBeanByName;\r
 \r
 import eu.etaxonomy.cdm.io.common.CdmApplicationAwareDefaultImport;\r
+import eu.etaxonomy.cdm.io.common.events.LoggingIoObserver;\r
 import eu.etaxonomy.cdm.test.integration.CdmTransactionalIntegrationTest;\r
 \r
 /**\r
@@ -48,6 +49,7 @@ public class DwcaImportIntegrationTest extends CdmTransactionalIntegrationTest{
                assertNotNull("URI for the test file '" + inputFile + "' does not exist", uri);\r
                try {\r
                        configurator = DwcaImportConfigurator.NewInstance(url.toURI(), null);\r
+                       configurator.addObserver(new LoggingIoObserver());\r
                } catch (URISyntaxException e) {\r
                        e.printStackTrace();\r
                        Assert.fail();\r