ref #5974 Remove synonym relationships (not finished yet)
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / app / cyprus / CyprusAltitudeActivator.java
index c6a1ef7f2c735e62c923ceaa571a76eb900093b5..c0092e397c7e59a2d3e1e74250cce5b0a3e0424b 100644 (file)
@@ -1,8 +1,8 @@
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
@@ -17,8 +17,6 @@ import java.util.HashMap;
 import java.util.HashSet;\r
 import java.util.Set;\r
 import java.util.UUID;\r
-import java.util.regex.Matcher;\r
-import java.util.regex.Pattern;\r
 \r
 import org.apache.commons.lang.StringUtils;\r
 import org.apache.log4j.Logger;\r
@@ -33,60 +31,56 @@ import eu.etaxonomy.cdm.io.api.application.CdmIoApplicationController;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
 import eu.etaxonomy.cdm.model.common.OriginalSourceType;\r
-import eu.etaxonomy.cdm.model.common.TermVocabulary;\r
 import eu.etaxonomy.cdm.model.description.Feature;\r
 import eu.etaxonomy.cdm.model.description.MeasurementUnit;\r
 import eu.etaxonomy.cdm.model.description.QuantitativeData;\r
 import eu.etaxonomy.cdm.model.description.StatisticalMeasure;\r
 import eu.etaxonomy.cdm.model.description.StatisticalMeasurementValue;\r
 import eu.etaxonomy.cdm.model.description.TaxonDescription;\r
-import eu.etaxonomy.cdm.model.location.NamedArea;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 16.12.2010\r
- * @version 1.0\r
  */\r
 public class CyprusAltitudeActivator {\r
        private static final Logger logger = Logger.getLogger(CyprusAltitudeActivator.class);\r
-       \r
+\r
        //database validation status (create, update, validate ...)\r
        static DbSchemaValidation hbm2dll = DbSchemaValidation.VALIDATE;\r
 //     static final URI source = cyprus_distribution();\r
        static final URI source = cyprus_altitude();\r
 \r
-       \r
-//     static final ICdmDataSource cdmDestination = CdmDestinations.localH2();\r
-//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql();\r
-       static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_dev();\r
+\r
+       static final ICdmDataSource cdmDestination = CdmDestinations.localH2();\r
+//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_test();\r
+//     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_dev();\r
 //     static final ICdmDataSource cdmDestination = CdmDestinations.cdm_cyprus_production();\r
 \r
-       \r
+\r
        //feature tree uuid\r
        public static final UUID featureTreeUuid = UUID.fromString("14d1e912-5ec2-4d10-878b-828788b70a87");\r
-       \r
+\r
        //classification\r
        static final UUID classificationUuid = UUID.fromString("0c2b5d25-7b15-4401-8b51-dd4be0ee5cab");\r
-       \r
+\r
        private static final String sourceReferenceTitle = "Cyprus Excel Altitude Import";\r
-       \r
-       \r
+\r
+\r
        //TODO move to Feature vocabulary\r
-       private static final UUID uuidAltitudeFeature = UUID.fromString("1279e8c8-b6e2-4f9f-af41-76acfa7312ed");\r
-       \r
+       private static final UUID uuidAltitudeFeature = UUID.fromString("1a28ed59-e15f-4001-b5c2-ea89f0012671");\r
+\r
        //check - import\r
        static final CHECK check = CHECK.IMPORT_WITHOUT_CHECK;\r
-       \r
+\r
        private void doImport(ICdmDataSource cdmDestination){\r
-               \r
-               \r
+\r
+\r
                ArrayList<HashMap<String, String>> excel;\r
                try {\r
                        excel = ExcelUtils.parseXLS(source, "coreTax");\r
@@ -94,78 +88,85 @@ public class CyprusAltitudeActivator {
                        e.printStackTrace();\r
                        return;\r
                }\r
-               \r
+\r
                CdmApplicationController app = CdmIoApplicationController.NewInstance(cdmDestination, hbm2dll);\r
 \r
                Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();\r
-       \r
+\r
                TransactionStatus tx = app.startTransaction();\r
-               \r
+\r
                UUID uuidMikle77 = UUID.fromString("9f5fa7ee-538b-4ae5-bd82-2a9503fea1d6");\r
                UUID uuidMikle85 = UUID.fromString("994403c4-c400-413d-9a1a-8531a40bfd8c");\r
-               \r
-               Reference<?> mikle77 = app.getReferenceService().find(uuidMikle77);\r
-               Reference<?> mikle85 = app.getReferenceService().find(uuidMikle85);\r
-               \r
-               \r
-               TermVocabulary<Feature> featureVoc = null;\r
+\r
+               Reference mikle77 = app.getReferenceService().find(uuidMikle77);\r
+               Reference mikle85 = app.getReferenceService().find(uuidMikle85);\r
+\r
+\r
                Feature altitudeFeature = (Feature) app.getTermService().find(uuidAltitudeFeature);\r
                if (altitudeFeature == null){\r
-                       altitudeFeature = Feature.NewInstance("Altitude", "Altitude", "alt.");\r
-                       altitudeFeature.setUuid(uuidAltitudeFeature);\r
-                       featureVoc = app.getVocabularyService().find(UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"));\r
-                       featureVoc.addTerm(altitudeFeature);\r
+//                     altitudeFeature = Feature.NewInstance("Altitude", "Altitude", "alt.");\r
+//                     altitudeFeature.setUuid(uuidAltitudeFeature);\r
+//                     featureVoc = app.getVocabularyService().find(UUID.fromString("b187d555-f06f-4d65-9e53-da7c93f8eaa8"));\r
+//                     featureVoc.addTerm(altitudeFeature);\r
+                       throw new RuntimeException("Could not find altitudinal range feature");\r
                }\r
-               \r
+\r
                MeasurementUnit meter = (MeasurementUnit)app.getTermService().find(UUID.fromString("8bef5055-789c-41e5-bea2-8dc2ea8ecdf6"));\r
 //             NamedArea cyprus = (NamedArea)app.getTermService().find(UUID.fromString("da4cce9a-439b-4cc4-8073-85dc75bae169"));\r
-       \r
+\r
                int count =1;\r
                for (HashMap<String, String> row : excel){\r
                        count++;\r
                        UUID baseUuid = makeUuid(row, "uuid");\r
                        UUID acceptedUuid = makeUuid(row, "acceptedNameUuid");\r
                        UUID parentUuid = makeUuid(row, "parentUuid");\r
-                       \r
-                       String altitude = row.get("Altitude-kumuliert");\r
+\r
+//                     String altitude = row.get("Altitude-kumuliert");\r
+\r
+                       String altitudeMin = row.get("Min");\r
+                       String altitudeMax = row.get("Max");\r
+                       String acceptedName = row.get("AcceptedName");\r
+\r
+\r
+\r
                        String source = row.get("Source");\r
-                       \r
-                       if (StringUtils.isBlank(altitude)){\r
+\r
+                       if (StringUtils.isBlank(altitudeMin)){\r
                                continue;\r
                        }\r
-                       \r
+\r
                        boolean hasAltitude = false;\r
-                       Reference<?> sourceRef = getSource(source, mikle77, mikle85);\r
-                       Taxon taxon = getTaxon(app, baseUuid, acceptedUuid, parentUuid, count);\r
+                       Reference sourceRef = getSource(source, mikle77, mikle85);\r
+                       Taxon taxon = getTaxon(app, baseUuid, acceptedUuid, parentUuid, acceptedName, count);\r
                        if (taxon != null){\r
                                TaxonDescription desc = getDescription(taxon, sourceRef);\r
-                               \r
-                               \r
-                               hasAltitude = makeAltitude(altitude, altitudeFeature, sourceRef, desc, meter, count);\r
+\r
+                               hasAltitude = makeAltitude(altitudeMin, altitudeMax, altitudeFeature, sourceRef, desc, meter, count);\r
+//                             hasAltitude = makeAltitudeOld(altitude, altitudeFeature, sourceRef, desc, meter, count);\r
                                if (hasAltitude){\r
                                        if(desc.getTaxon() == null){\r
                                                taxon.addDescription(desc);\r
                                        }\r
                                        taxaToSave.add(taxon);\r
+                               }else{\r
+                                       logger.warn("HasALtitude is false in " + count);\r
                                }\r
                        }else{\r
                                logger.warn("Taxon not recognized in line " + count);\r
                        }\r
                }\r
 \r
-               if (featureVoc != null){\r
-                       app.getVocabularyService().saveOrUpdate(featureVoc);\r
-               }\r
                app.getTaxonService().saveOrUpdate(taxaToSave);\r
-               \r
+\r
 //             tx.setRollbackOnly();\r
                app.commitTransaction(tx);\r
        }\r
 \r
-       private Taxon getTaxon(CdmApplicationController app, UUID baseUuid, UUID acceptedUuid, UUID parentUuid, int row) {\r
+\r
+       private Taxon getTaxon(CdmApplicationController app, UUID baseUuid, UUID acceptedUuid, UUID parentUuid, String acceptedName, int row) {\r
                TaxonBase<?> base = app.getTaxonService().find(baseUuid);\r
 //             TaxonBase<?> parent = app.getTaxonService().find(parentUuid);\r
-               \r
+\r
                //TODO\r
                Taxon result = null;\r
                if (base.isInstanceOf(Taxon.class)){\r
@@ -185,19 +186,27 @@ public class CyprusAltitudeActivator {
                                }else{\r
                                        logger.warn("Synonym relation has changed somehow. Row: " + row +  ", Taxon: " + base.getTitleCache());\r
                                }\r
-                               \r
+\r
                        }else{\r
                                logger.warn("Accepted taxon not in classification. Row: " + row +  ", Taxon: " + base.getTitleCache());\r
                        }\r
                }\r
-               \r
+\r
+               if (result != null){\r
+                       if (! result.getName().getTitleCache().equals(acceptedName)){\r
+                               logger.warn("AcceptedName and taxon name is not equal in " + row + ".\n" +\r
+                                               " Accepted Name: " + acceptedName + ";\n" +\r
+                                               " Taxon    Name: " + result.getName().getTitleCache());\r
+                       }\r
+               }\r
+\r
                return result;\r
        }\r
 \r
        private boolean hasSynonym(Taxon t, TaxonBase<?> base) {\r
                if (base.isInstanceOf(Synonym.class)){\r
-                       for (SynonymRelationship rel : t.getSynonymRelations()){\r
-                               if (rel.getSynonym().equals(base)){\r
+                       for (Synonym syn : t.getSynonyms()){\r
+                               if (syn.equals(base)){\r
                                        return true;\r
                                }\r
                        }\r
@@ -205,61 +214,88 @@ public class CyprusAltitudeActivator {
                return false;\r
        }\r
 \r
-       private static final Pattern altitudePattern = Pattern.compile("\\d{1,4}(-\\d{1,4})?");\r
-\r
-\r
-       \r
-       private boolean makeAltitude(String altitudeOrig, Feature feature, Reference<?> source, TaxonDescription desc, MeasurementUnit meter, int row) {\r
-               String altitude = altitudeOrig.trim().replace(" ", "");\r
-               Matcher matcher = altitudePattern.matcher(altitude);\r
-               \r
-               if (matcher.matches()){\r
-                       QuantitativeData data = QuantitativeData.NewInstance(feature);\r
-                       \r
-                       //Meikle\r
-                       if (source != null){\r
-                               TaxonNameBase<?,?> nameUsedInSource = null;  //TODO\r
-                               data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, source, null, nameUsedInSource, null);\r
-                       }\r
-                       //Excel\r
-                       TaxonNameBase<?,?> nameUsedInSource = null;  //TODO probably we don't want this\r
-                       data.addSource(OriginalSourceType.Import, null, null, getSourceReference(), null, nameUsedInSource, null);\r
-                       data.setUnit(meter);\r
-                       \r
-                       String[] split = altitude.split("-");\r
-\r
-                       Integer min = Integer.valueOf(split[0]);\r
-                       StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
-                       data.addStatisticalValue(minValue);\r
-\r
-                       if (split.length > 1){\r
-                               Integer max = Integer.valueOf(split[1]);\r
-                               StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
-                               data.addStatisticalValue(maxValue);\r
-                       }\r
-                       desc.addElement(data);\r
-                       return true;\r
-               }else{\r
-                       logger.warn("Altitude does not match in row " + row + ": "  + altitudeOrig);\r
-                       return false;\r
+//     private static final Pattern altitudePattern = Pattern.compile("\\d{1,4}(-\\d{1,4})?");\r
+\r
+\r
+       private boolean makeAltitude(String altitudeMin, String altitudeMax, Feature altitudeFeature,\r
+                       Reference sourceRef, TaxonDescription desc, MeasurementUnit meter, int row) {\r
+\r
+               QuantitativeData data = QuantitativeData.NewInstance(altitudeFeature);\r
+\r
+               //Meikle\r
+               if (source != null){\r
+                       TaxonNameBase<?,?> nameUsedInSource = null;  //TODO\r
+                       data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, sourceRef, null, nameUsedInSource, null);\r
                }\r
+//             //Excel   //excel source not wanted by Ralf\r
+//             TaxonNameBase<?,?> nameUsedInSource = null;  //TODO probably we don't want this\r
+//             data.addSource(OriginalSourceType.Import, String.valueOf(row), "row", getSourceReference(), null, nameUsedInSource, null);\r
+\r
+               data.setUnit(meter);\r
+\r
+               Integer min = Integer.valueOf(altitudeMin);\r
+               StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
+               data.addStatisticalValue(minValue);\r
+\r
+               Integer max = Integer.valueOf(altitudeMax);\r
+               StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
+               data.addStatisticalValue(maxValue);\r
+\r
+               desc.addElement(data);\r
+               return true;\r
        }\r
 \r
-       private TaxonDescription getDescription(Taxon taxon, Reference<?> sourceRef) {\r
+//     private boolean makeAltitudeOld(String altitudeOrig, Feature feature, Reference source, TaxonDescription desc, MeasurementUnit meter, int row) {\r
+//             String altitude = altitudeOrig.trim().replace(" ", "");\r
+//             Matcher matcher = altitudePattern.matcher(altitude);\r
+//\r
+//             if (matcher.matches()){\r
+//                     QuantitativeData data = QuantitativeData.NewInstance(feature);\r
+//\r
+//                     //Meikle\r
+//                     if (source != null){\r
+//                             TaxonNameBase<?,?> nameUsedInSource = null;  //TODO\r
+//                             data.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, source, null, nameUsedInSource, null);\r
+//                     }\r
+//                     //Excel\r
+//                     TaxonNameBase<?,?> nameUsedInSource = null;  //TODO probably we don't want this\r
+//                     data.addSource(OriginalSourceType.Import, String.valueOf(row), "row", getSourceReference(), null, nameUsedInSource, null);\r
+//                     data.setUnit(meter);\r
+//\r
+//                     String[] split = altitude.split("-");\r
+//\r
+//                     Integer min = Integer.valueOf(split[0]);\r
+//                     StatisticalMeasurementValue minValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MIN(), min);\r
+//                     data.addStatisticalValue(minValue);\r
+//\r
+//                     if (split.length > 1){\r
+//                             Integer max = Integer.valueOf(split[1]);\r
+//                             StatisticalMeasurementValue maxValue = StatisticalMeasurementValue.NewInstance(StatisticalMeasure.MAX(), max);\r
+//                             data.addStatisticalValue(maxValue);\r
+//                     }\r
+//                     desc.addElement(data);\r
+//                     return true;\r
+//             }else{\r
+//                     logger.warn("Altitude does not match in row " + row + ": "  + altitudeOrig);\r
+//                     return false;\r
+//             }\r
+//     }\r
+\r
+       private TaxonDescription getDescription(Taxon taxon, Reference sourceRef) {\r
                if (taxon != null){\r
                        //TODO Mikle existiert derzeit nicht also Source\r
-                       \r
+\r
                        TaxonDescription desc = TaxonDescription.NewInstance();\r
                        desc.setTitleCache("Import from " + getSourceReference().getTitleCache(), true);\r
                        desc.addSource(OriginalSourceType.PrimaryTaxonomicSource, null, null, sourceRef,null);\r
                        desc.addSource(OriginalSourceType.Import, null, null, getSourceReference(), null);\r
-                       \r
+\r
                        return desc;\r
                }\r
                return null;\r
        }\r
 \r
-       private Reference<?> getSource(String source, Reference<?> m77, Reference<?> m85) {\r
+       private Reference getSource(String source, Reference m77, Reference m85) {\r
                if(StringUtils.isNotBlank(source)){\r
                        if (source.equals("Meikle 1977")){\r
                                return m77;\r
@@ -288,20 +324,20 @@ public class CyprusAltitudeActivator {
 //             // TODO Auto-generated method stub\r
 //             HashMap<String, Object> = new HashM\r
 //             row\r
-//             \r
-//             \r
+//\r
+//\r
 //     }\r
 \r
-       \r
-       Reference<?> sourceReference;\r
-       private Reference<?> getSourceReference() {\r
+\r
+       Reference sourceReference;\r
+       private Reference getSourceReference() {\r
                if (sourceReference == null){\r
                        sourceReference = ReferenceFactory.newGeneric();\r
                        sourceReference.setTitleCache(sourceReferenceTitle, true);\r
-                       \r
+\r
                }\r
                return sourceReference;\r
-                       \r
+\r
        }\r
 \r
 \r
@@ -309,7 +345,8 @@ public class CyprusAltitudeActivator {
        public static URI cyprus_altitude() {\r
                URI sourceUrl;\r
                try {\r
-                       sourceUrl = new URI("file:/F:/data/cyprus/Zypern-Altitude.xls");\r
+                       sourceUrl = new URI("file:/F:/data/cyprus/Cyprus-altitude-import-neu.xls");\r
+//                     sourceUrl = new URI("file:/F:/data/cyprus/Zypern-Altitude.xls");\r
                        return sourceUrl;\r
                } catch (URISyntaxException e) {\r
                        e.printStackTrace();\r
@@ -329,7 +366,7 @@ public class CyprusAltitudeActivator {
 \r
        private void testMatcher() {\r
 //             makeAltitude("0-4400", null, null);\r
-               \r
+\r
        }\r
-       \r
+\r
 }\r