ref #6286 latest changes to FloraHellenica import
authorunknown <a.mueller@BGBM-PESIHPC.bgbm.fu-berlin.de>
Wed, 29 Mar 2017 15:20:23 +0000 (17:20 +0200)
committerunknown <a.mueller@BGBM-PESIHPC.bgbm.fu-berlin.de>
Wed, 29 Mar 2017 15:20:23 +0000 (17:20 +0200)
app-import/src/main/java/eu/etaxonomy/cdm/app/greece/FloraHellenicaActivator.java
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaExcludedTaxonImport.java
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaImportBase.java
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaImportConfigurator.java
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaTaxonImport.java
app-import/src/main/java/eu/etaxonomy/cdm/io/greece/FloraHellenicaTransformer.java

index 86cd6e42c31bc8d349968def48a82f76689b647a..dea672386cfc1ed5e458103d84a19f060fdedbc0 100644 (file)
@@ -13,17 +13,12 @@ import java.util.UUID;
 
 import org.apache.log4j.Logger;
 
-import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.app.common.CdmDestinations;
 import eu.etaxonomy.cdm.database.DbSchemaValidation;
 import eu.etaxonomy.cdm.database.ICdmDataSource;
 import eu.etaxonomy.cdm.io.common.CdmDefaultImport;
 import eu.etaxonomy.cdm.io.common.IImportConfigurator.CHECK;
 import eu.etaxonomy.cdm.io.greece.FloraHellenicaImportConfigurator;
-import eu.etaxonomy.cdm.io.greece.FloraHellenicaTransformer;
-import eu.etaxonomy.cdm.model.description.Feature;
-import eu.etaxonomy.cdm.model.description.FeatureNode;
-import eu.etaxonomy.cdm.model.description.FeatureTree;
 
 /**
  *
@@ -41,8 +36,8 @@ public class FloraHellenicaActivator {
     //database validation status (create, update, validate ...)
     static DbSchemaValidation hbm2dll = DbSchemaValidation.CREATE;
 
-    static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
-//  static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_test();
+//    static final ICdmDataSource cdmDestination = CdmDestinations.localH2();
+  static final ICdmDataSource cdmDestination = CdmDestinations.cdm_test_local_mysql_test();
 //    static final ICdmDataSource cdmDestination = CdmDestinations.cdm_greece_checklist_production();
 
     //feature tree uuid
@@ -73,48 +68,16 @@ public class FloraHellenicaActivator {
         config.setDbSchemaValidation(hbm2dll);
 //        config.setSourceReferenceTitle(sourceReferenceTitle);
 //        config.setDoVocabularies(doVocabularies);
+        config.setUuidFeatureTree(featureTreeUuid);
+        config.setFeatureTreeTitle(featureTreeTitle);
 
-        CdmDefaultImport<FloraHellenicaImportConfigurator> myImport = new CdmDefaultImport<FloraHellenicaImportConfigurator>();
+        CdmDefaultImport<FloraHellenicaImportConfigurator> myImport = new CdmDefaultImport<>();
         myImport.invoke(config);
 
-        FeatureTree tree = makeFeatureNodes(myImport.getCdmAppController().getTermService());
-        myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
+//        FeatureTree tree = makeFeatureNodes(myImport.getCdmAppController().getTermService());
+//        myImport.getCdmAppController().getFeatureTreeService().saveOrUpdate(tree);
     }
 
-    private FeatureTree makeFeatureNodes(ITermService service){
-
-        FeatureTree result = FeatureTree.NewInstance(featureTreeUuid);
-        result.setTitleCache(featureTreeTitle, true);
-        FeatureNode root = result.getRoot();
-        FeatureNode newNode;
-
-        Feature newFeature = (Feature)service.find(Feature.DISTRIBUTION().getUuid());
-        newNode = FeatureNode.NewInstance(newFeature);
-        root.addChild(newNode);
-
-        newFeature = (Feature)service.find(FloraHellenicaTransformer.uuidFloraHellenicaChorologyFeature);
-        newNode = FeatureNode.NewInstance(newFeature);
-        root.addChild(newNode);
-
-        newFeature = (Feature)service.find(Feature.LIFEFORM().getUuid());
-        newNode = FeatureNode.NewInstance(newFeature);
-        root.addChild(newNode);
-
-        newFeature = (Feature)service.find(Feature.HABITAT().getUuid());
-        newNode = FeatureNode.NewInstance(newFeature);
-        root.addChild(newNode);
-
-
-        newFeature = (Feature)service.find(Feature.NOTES().getUuid());
-        newNode = FeatureNode.NewInstance(newFeature);
-        root.addChild(newNode);
-
-        return result;
-    }
-
-    private URI greekChecklist_OldVersion(){
-        return URI.create("file:////BGBM-PESIHPC/Greece/VPG_FINAL_June_2016.xlsx");
-    }
 
     private URI greekChecklist(){
         return URI.create("file:////BGBM-PESIHPC/Greece/VPG_FINAL_WITH_SYNONYMS_21.01.2017.xlsx");
index dd9d14d9c47fa70161e03b3b422a8370192b5647..38449eed22a3b30fed80f9f627668036ccda6a63 100644 (file)
@@ -111,7 +111,7 @@ public class FloraHellenicaExcludedTaxonImport<CONFIG extends FloraHellenicaImpo
         taxon.addImportSource(noStr, getWorksheetName(), getSourceCitation(state), null);
         TaxonNode excludedNode = familyTaxon.addChildTaxon(taxon, getSecReference(state), null);
         excludedNode.setExcluded(true);
-        getTaxonNodeService().save(excludedNode);
+        getTaxonNodeService().saveOrUpdate(excludedNode);
         return excludedNode;
     }
 
@@ -142,7 +142,7 @@ public class FloraHellenicaExcludedTaxonImport<CONFIG extends FloraHellenicaImpo
             ITaxonTreeNode groupNode = getExcludedFamilyTaxon(state);
             familyNode = groupNode.addChildTaxon(family, sec, null);
             state.putHigherTaxon(familyStr, family);
-            getTaxonNodeService().save(familyNode);
+            getTaxonNodeService().saveOrUpdate(familyNode);
 //            logger.warn(state.getCurrentLine() +": " + "Family not found for excluded taxon");
         }
         return familyNode;
@@ -163,7 +163,7 @@ public class FloraHellenicaExcludedTaxonImport<CONFIG extends FloraHellenicaImpo
         Taxon taxon = Taxon.NewInstance(name, getSecReference(state));
         excludedFamilyNode = plantae.addChildTaxon(taxon, getSourceCitation(state), null);
         excludedFamilyNode.setExcluded(true);
-        getTaxonNodeService().save(excludedFamilyNode);
+        getTaxonNodeService().saveOrUpdate(excludedFamilyNode);
         return excludedFamilyNode;
     }
 
index 20772d335e619a48e43ac49d185b641a593162eb..5a597b476cc9efe2a2d86fcf063fbe673b673ab7 100644 (file)
@@ -33,8 +33,6 @@ public abstract class FloraHellenicaImportBase<CONFIG extends FloraHellenicaImpo
     private static final Logger logger = Logger.getLogger(FloraHellenicaImportBase.class);
 
 
-
-
     /**
      * @param taxon
      * @return
index 6e41b2031d89def2612e88556fb417b61e126da4..90f79c08988925d8b1281d0cdcc52888590c7931 100644 (file)
@@ -29,6 +29,7 @@ public class FloraHellenicaImportConfigurator extends ExcelImportConfiguratorBas
     private static IInputTransformer defaultTransformer = new FloraHellenicaTransformer();
     private Reference secReference;
 
+
     /**
      * @param source
      * @param cdmDestination
index 936b95e64e600c7c0875b5b230689695f7d0672b..542fd43102df8adaf0075f7e8ff8ee2a56766226 100644 (file)
@@ -19,6 +19,7 @@ import java.util.UUID;
 import org.apache.log4j.Logger;
 import org.springframework.stereotype.Component;
 
+import eu.etaxonomy.cdm.api.service.ITermService;
 import eu.etaxonomy.cdm.common.CdmUtils;
 import eu.etaxonomy.cdm.ext.geo.GeoServiceArea;
 import eu.etaxonomy.cdm.ext.geo.GeoServiceAreaAnnotatedMapping;
@@ -29,6 +30,8 @@ import eu.etaxonomy.cdm.model.common.TermType;
 import eu.etaxonomy.cdm.model.description.CategoricalData;
 import eu.etaxonomy.cdm.model.description.Distribution;
 import eu.etaxonomy.cdm.model.description.Feature;
+import eu.etaxonomy.cdm.model.description.FeatureNode;
+import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
 import eu.etaxonomy.cdm.model.description.State;
 import eu.etaxonomy.cdm.model.description.TaxonDescription;
@@ -71,7 +74,13 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
     private OrderedTermVocabulary<State> habitatVoc;
     private Map<String, State> lifeformMap = new HashMap<>();
 
+    private OrderedTermVocabulary<PresenceAbsenceTerm> statusVoc;
+    private PresenceAbsenceTerm rangeRestricted;
+    private PresenceAbsenceTerm doubtfullyRangeRestricted;
+
+
     private OrderedTermVocabulary<State> chorologicalVoc;
+    private Map<String, State> chorologyMap = new HashMap<>();
 
 
    private  static List<String> expectedKeys= Arrays.asList(new String[]{
@@ -80,7 +89,6 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
             STATUS,CHOROLOGICAL_CATEGOGY,LIFE_FORM,"A","C","G","H","M","P","R","W", "Taxon"
     });
 
-    private String lastFamily;
     private String lastGenus;
     private String lastSpecies;
     private NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();
@@ -99,6 +107,8 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
         initLifeformVocabulary(state);
         initHabitatVocabulary(state);
         initChorologicalVocabulary(state);
+        initStatusVocabulary(state);
+        makeFeatureTree(state);
 
         String line = state.getCurrentLine() + ": ";
         HashMap<String, String> record = state.getOriginalRecord();
@@ -111,7 +121,6 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
         }
 
         String noStr = getValue(record, "Unique ID");
-        Integer id = noStr == null? null : Integer.valueOf(noStr);
         Taxon taxon = makeTaxon(state, line, record, noStr);
 
         //Distribution
@@ -129,6 +138,50 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
         state.putTaxon(noStr, taxon);
     }
 
+    boolean hasFeatureTree = false;
+    /**
+     * @param state
+     */
+    private void makeFeatureTree(SimpleExcelTaxonImportState<CONFIG> state) {
+        if (hasFeatureTree  ){
+            return;
+        }
+        if (getFeatureTreeService().find(state.getConfig().getUuidFeatureTree()) != null){
+            hasFeatureTree = true;
+            return;
+        }
+        FeatureTree result = FeatureTree.NewInstance(state.getConfig().getUuidFeatureTree());
+        result.setTitleCache(state.getConfig().getFeatureTreeTitle(), true);
+        FeatureNode root = result.getRoot();
+        FeatureNode newNode;
+
+        ITermService service = getTermService();
+        Feature newFeature = (Feature)service.find(Feature.DISTRIBUTION().getUuid());
+        newNode = FeatureNode.NewInstance(newFeature);
+        root.addChild(newNode);
+
+        newFeature = (Feature)service.find(FloraHellenicaTransformer.uuidFloraHellenicaChorologyFeature);
+        newNode = FeatureNode.NewInstance(newFeature);
+        root.addChild(newNode);
+
+        newFeature = (Feature)service.find(Feature.LIFEFORM().getUuid());
+        newNode = FeatureNode.NewInstance(newFeature);
+        root.addChild(newNode);
+
+        newFeature = (Feature)service.find(Feature.HABITAT().getUuid());
+        newNode = FeatureNode.NewInstance(newFeature);
+        root.addChild(newNode);
+
+
+        newFeature = (Feature)service.find(Feature.NOTES().getUuid());
+        newNode = FeatureNode.NewInstance(newFeature);
+        root.addChild(newNode);
+
+        getFeatureTreeService().saveOrUpdate(result);
+        hasFeatureTree = true;
+
+    }
+
     /**
      * @param state
      * @param line
@@ -139,11 +192,66 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
             TaxonDescription desc) {
 
         HashMap<String, String> record = state.getOriginalRecord();
-        String value = getValue(record, CHOROLOGICAL_CATEGOGY);
-        //TODO
+        String valueStr = getValue(record, CHOROLOGICAL_CATEGOGY);
 
+        String value = valueStr;
+        if (value == null){
+            return;
+        }
+        Feature choroFeature = getFeature(state, FloraHellenicaTransformer.uuidFloraHellenicaChorologyFeature,
+                "Chorology", "The Chorological Category", "Choro", null);
+        CategoricalData catData = CategoricalData.NewInstance(choroFeature);
+
+        String[] splits = value.split(" & ");
+        replaceDirection(splits, line);
+        for (String split: splits){
+            String[] splitsA = split.split("/");
+            for (String splitA : splitsA){
+                String[] splitsB = splitA.split(", ");
+                for (String splitB : splitsB){
+                    splitB = normalizeChorology(splitB);
+                    State choroTerm = chorologyMap.get(splitB);
+                    if (choroTerm == null){
+                        logger.warn(line + "Some chorology could not be recognized in: " + value + "; Term was: " +splitB);
+                    }else{
+                        catData.addStateData(choroTerm);
+                    }
+                }
+            }
+        }
+        desc.addElement(catData);
+    }
 
+    /**
+     * @param splitB
+     * @return
+     */
+    private String normalizeChorology(String choroStr) {
+        choroStr = choroStr.trim()
+                .replace("BK", "Bk")
+                .replace("Austral.", "Austr.")
+                .replace("trop.As.", "trop. As.");
+        if (choroStr.startsWith("[") && !choroStr.endsWith("]")){
+            choroStr += "]";
+        }else if (!choroStr.startsWith("[") && choroStr.endsWith("]")){
+            choroStr = "[" + choroStr;
+        }
+        return choroStr;
+    }
 
+    /**
+     * @param splits
+     * @param line
+     */
+    private void replaceDirection(String[] splits, String line) {
+        if (splits.length > 1){
+            String[] divs = splits[1].split("-");
+            if (divs.length == 2){
+                splits[0] = splits[0] + "-" + divs[1];
+            }else{
+                logger.warn(line + "Splits[1] has not expected format: " + splits[1]);
+            }
+        }
     }
 
     /**
@@ -480,27 +588,27 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
             TaxonDescription desc, String key, UUID uuid, String line, String id) {
         HashMap<String, String> record = state.getOriginalRecord();
         String value = getValue(record, key);
-        if (value != null){
-            NamedArea area = getNamedArea(state, uuid, null, null, null, null, null);
-            Distribution dist;
+        NamedArea area = getNamedArea(state, uuid, null, null, null, null, null);
+        Distribution dist;
+        if (value == null || ".".equals(value) ){
+            dist = Distribution.NewInstance(area, PresenceAbsenceTerm.NATIVE());
             if (".".equals(value)){
-                dist = Distribution.NewInstance(area, PresenceAbsenceTerm.ABSENT());
                 logger.warn(line + "'.' Should not exist anmore as a distribution status: '" + value + "' for " + key);
-            }else if ("Range-restricted".equals(value)){
-                dist = Distribution.NewInstance(area, PresenceAbsenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA());
-            }else if ("?Range-restricted".equals(value)){
-                dist = Distribution.NewInstance(area, PresenceAbsenceTerm.ENDEMIC_FOR_THE_RELEVANT_AREA());
-            }else if ("Xenophyte".equals(value)){
-                dist = Distribution.NewInstance(area, PresenceAbsenceTerm.INTRODUCED());
-            }else if ("?Xenophyte".equals(value)){
-                dist = Distribution.NewInstance(area, PresenceAbsenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED());
-            }else {
-                logger.warn(line + "Not matching status. This should not happpen '" + value + "' for " + key);
-                return;
             }
-            desc.addElement(dist);
-            dist.addImportSource(id, getWorksheetName(), getSourceCitation(state), line);
+        }else if ("Range-restricted".equals(value)){
+            dist = Distribution.NewInstance(area, rangeRestricted);
+        }else if ("?Range-restricted".equals(value)){
+            dist = Distribution.NewInstance(area, doubtfullyRangeRestricted);
+        }else if ("Xenophyte".equals(value)){
+            dist = Distribution.NewInstance(area, PresenceAbsenceTerm.INTRODUCED());
+        }else if ("?Xenophyte".equals(value)){
+            dist = Distribution.NewInstance(area, PresenceAbsenceTerm.INTRODUCED_DOUBTFULLY_INTRODUCED());
+        }else {
+            logger.warn(line + "Not matching status. This should not happpen '" + value + "' for " + key);
+            return;
         }
+        desc.addElement(dist);
+        dist.addImportSource(id, getWorksheetName(), getSourceCitation(state), line);
     }
 
     @SuppressWarnings("unchecked")
@@ -577,27 +685,71 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
                 description, label, null, termSourceUri);
         chorologicalVoc.setUuid(vocUuid);
 
-        addChorological(state, "Bk", "Balkan", "", FloraHellenicaTransformer.uuidChorologicalBk);
-        addChorological(state, "BI", "Balkan-Italy", "", FloraHellenicaTransformer.uuidChorologicalBI);
-        addChorological(state, "BA", "Balkan-Anatolia", "", FloraHellenicaTransformer.uuidChorologicalBA);
-        addChorological(state, "BC", "Balkan-Central Europe", "", FloraHellenicaTransformer.uuidChorologicalBC);
-        addChorological(state, "EM", "East Mediterranean", "", FloraHellenicaTransformer.uuidChorologicalEM);
-        addChorological(state, "Me", "Mediterranean", "", FloraHellenicaTransformer.uuidChorologicalMe);
-        addChorological(state, "MA", "Mediterranean-Atlantic", "", FloraHellenicaTransformer.uuidChorologicalMA);
-        addChorological(state, "ME", "Mediterranean-European", "", FloraHellenicaTransformer.uuidChorologicalME);
-        addChorological(state, "MS", "Mediterranean-SW Asian", "", FloraHellenicaTransformer.uuidChorologicalMS);
-        addChorological(state, "EA", "European-SW Asian", "", FloraHellenicaTransformer.uuidChorologicalEA);
-        addChorological(state, "ES", "Euro-Siberian", "", FloraHellenicaTransformer.uuidChorologicalES);
-        addChorological(state, "Eu", "European", "", FloraHellenicaTransformer.uuidChorologicalEu);
-        addChorological(state, "Pt", "Paleotemperate", "", FloraHellenicaTransformer.uuidChorologicalPt);
-        addChorological(state, "Ct", "Circumtemperate", "", FloraHellenicaTransformer.uuidChorologicalCt);
-        addChorological(state, "IT", "Irano-Turanian", "", FloraHellenicaTransformer.uuidChorologicalIT);
-        addChorological(state, "SS", "Saharo-Sindian", "", FloraHellenicaTransformer.uuidChorologicalSS);
-        addChorological(state, "ST", "Subtropical-tropical", "", FloraHellenicaTransformer.uuidChorologicalST);
-        addChorological(state, "Bo", "(Circum-) Boreal", "", FloraHellenicaTransformer.uuidChorologicalBo);
-        addChorological(state, "AA", "Arctic-Alpine", "", FloraHellenicaTransformer.uuidChorologicalAA);
-        addChorological(state, "Co", "Cosmopolitan", "", FloraHellenicaTransformer.uuidChorologicalCo);
         addChorological(state, "*", "Greek endemic", "Greek endemics (incl. single-island and single-mountain endemics)", FloraHellenicaTransformer.uuidChorologicalStar);
+        addChorological(state, "Bk", "Balkan", "Taxa restricted to Balkan countries, occasionally extending to adjacent parts of SE Europe", FloraHellenicaTransformer.uuidChorologicalBk);
+        addChorological(state, "BI", "Balkan-Italy", "Taxa restricted to Balkan countries and Italy (amphi-Adreatic)", FloraHellenicaTransformer.uuidChorologicalBI);
+        addChorological(state, "BA", "Balkan-Anatolia", "Taxa restricted to Balkan countries and to Asia minor (Anatolia), occasionally extending to S Ukraine (Crimea), adjacent Caucasian countries (Georgia, Armenia) or N Iraq", FloraHellenicaTransformer.uuidChorologicalBA);
+        addChorological(state, "BC", "Balkan-Central Europe", "Taxa distributed in the Balkans, Carpathians, Alps and adjacent areas (mainly in the mountains)", FloraHellenicaTransformer.uuidChorologicalBC);
+        addChorological(state, "EM", "East Mediterranean", "Taxa restricted to the E Mediterranean, occasionally extending to S Italy or adjacent Caucasian countries", FloraHellenicaTransformer.uuidChorologicalEM);
+        addChorological(state, "Me", "Mediterranean", "Taxa with a circum-Mediterranean distribution including Portugal, occasionally extending to the Caucasus area and N Iran", FloraHellenicaTransformer.uuidChorologicalMe);
+        addChorological(state, "MA", "Mediterranean-Atlantic", "Taxa restricted to maritime W Europe and the Mediterranean", FloraHellenicaTransformer.uuidChorologicalMA);
+        addChorological(state, "ME", "Mediterranean-European", "Taxa restricted to the Mediterranean and temperate Europe, occasionally extending to NW Africa and the Caucasus area", FloraHellenicaTransformer.uuidChorologicalME);
+        addChorological(state, "MS", "Mediterranean-SW Asian", "Taxa distributed in one or more Mediterranean countries and extending to SW and C Asia", FloraHellenicaTransformer.uuidChorologicalMS);
+        addChorological(state, "EA", "European-SW Asian", "Eruopean taxa (occasionally reachin N Africa) with a distribution extending to SW Asia, occasionally reaching C Asia", FloraHellenicaTransformer.uuidChorologicalEA);
+        addChorological(state, "ES", "Euro-Siberian", "Taxa with main distribution in temperate Eurasia (occasionally reaching the Caucasus area)", FloraHellenicaTransformer.uuidChorologicalES);
+        addChorological(state, "Eu", "European", "Taxa with a distribution all over Europe. In S European countries this category in fact represents the C European element", FloraHellenicaTransformer.uuidChorologicalEu);
+        addChorological(state, "Pt", "Paleotemperate", "Taxa of extratropical Eurasia including the Himalaya and E Asia, not (or at most marginally) extending to North America", FloraHellenicaTransformer.uuidChorologicalPt);
+        addChorological(state, "Ct", "Circumtemperate", "Taxa of both extratropical Eurasia and North America", FloraHellenicaTransformer.uuidChorologicalCt);
+        addChorological(state, "IT", "Irano-Turanian", "Taxa with main distribution in arid SW and C Asia, extrazonally extending to the Mediterranean", FloraHellenicaTransformer.uuidChorologicalIT);
+        addChorological(state, "SS", "Saharo-Sindian", "Taxa with main distribution in arid N Africa and SQ Asia, extrazonally extending to the Mediterranean", FloraHellenicaTransformer.uuidChorologicalSS);
+        addChorological(state, "ST", "Subtropical-tropical", "Taxa widespread in the warmer regions of both hemispheres", FloraHellenicaTransformer.uuidChorologicalST);
+        addChorological(state, "Bo", "(Circum-)Boreal", "Taxa with main distribution in N and high-montane Eurasia (occasionally extending to North America)", FloraHellenicaTransformer.uuidChorologicalBo);
+        addChorological(state, "AA", "Arctic-Alpine", "Taxa with main distribution beyound the N and aove the high-montane timerlines o fEurasia (occasionally extending to North America)", FloraHellenicaTransformer.uuidChorologicalAA);
+        addChorological(state, "Co", "Cosmopolitan", "Taxa distributed in all continents, i.e. beyond the N hemisphere. This category may be given in brackets after the known or supposed native distribution in cases of taxa that have been spread worldwide by humans", FloraHellenicaTransformer.uuidChorologicalCo);
+
+        addChorological(state, "[trop.]", "[tropical]", "", FloraHellenicaTransformer.uuidChorologicaltrop);
+        addChorological(state, "[subtrop.]", "[subtropical]", "", FloraHellenicaTransformer.uuidChorologicalsubtrop);
+        addChorological(state, "[paleotrop.]", "[paleotropical]", "", FloraHellenicaTransformer.uuidChorologicalpaleotrop);
+        addChorological(state, "[neotrop.]", "[neotropical]", "", FloraHellenicaTransformer.uuidChorologicalneotrop);
+        addChorological(state, "[pantrop.]", "[pantropical]", "", FloraHellenicaTransformer.uuidChorologicalpantrop);
+        addChorological(state, "[N-Am.]", "[North American]", "", FloraHellenicaTransformer.uuidChorologicalN_Am);
+        addChorological(state, "[S-Am.]", "[South American]", "", FloraHellenicaTransformer.uuidChorologicalS_Am);
+        addChorological(state, "[E-As.]", "[East Asian]", "", FloraHellenicaTransformer.uuidChorologicalE_As);
+        addChorological(state, "[SE-As.", "[South East Asian]", "", FloraHellenicaTransformer.uuidChorologicalSE_As);
+        addChorological(state, "[S-Afr.]", "[South African]", "", FloraHellenicaTransformer.uuidChorologicalS_Afr);
+        addChorological(state, "[Arab.]", "[Arabian]", "", FloraHellenicaTransformer.uuidChorologicalArab);
+        addChorological(state, "[Arab. NE-Afr.]", "[Arabian and North East African]", "", FloraHellenicaTransformer.uuidChorologicalArab_NE_Afr);
+        addChorological(state, "[Caucas.]", "[Caucasian]", "", FloraHellenicaTransformer.uuidChorologicalCaucas);
+        addChorological(state, "[Pontic]", "[Pontic]", "", FloraHellenicaTransformer.uuidChorologicalPontic);
+        addChorological(state, "[Europ.]", "[European]", "", FloraHellenicaTransformer.uuidChorologicalEurop);
+        addChorological(state, "[Austr.]", "[Australian]", "", FloraHellenicaTransformer.uuidChorologicalAustral);
+
+        addChorological(state, "[W-Med.]", "[West Mediterranean]", "", FloraHellenicaTransformer.uuidChorologicalW_Med);
+        addChorological(state, "[C-Med.]", "[Central Mediterranean]", "", FloraHellenicaTransformer.uuidChorologicalC_Med);
+        addChorological(state, "[W-Eur.]", "[West European]", "", FloraHellenicaTransformer.uuidChorologicalW_Eur);
+        addChorological(state, "[S-Eur.]", "[South European]", "", FloraHellenicaTransformer.uuidChorologicalS_Eur);
+        addChorological(state, "[C-Am.]", "[Central American]", "", FloraHellenicaTransformer.uuidChorologicalC_Am);
+        addChorological(state, "[C-As.]", "[Central Asian]", "", FloraHellenicaTransformer.uuidChorologicalC_As);
+        addChorological(state, "[SW-As.]", "[South West Asian]", "", FloraHellenicaTransformer.uuidChorologicalSW_As);
+        addChorological(state, "[unknown]", "[unknown]", "", FloraHellenicaTransformer.uuidChorologicalUnknown);
+        addChorological(state, "[N-Afr.]", "[North African]", "", FloraHellenicaTransformer.uuidChorologicalN_Afr);
+        addChorological(state, "[Am.]", "[American]", "", FloraHellenicaTransformer.uuidChorologicalAm);
+        addChorological(state, "[paleosubtrop.]", "[paleosubtropical]", "", FloraHellenicaTransformer.uuidChorologicalPaleosubtrop);
+        addChorological(state, "[SW-Eur.]", "[South West European]", "", FloraHellenicaTransformer.uuidChorologicalSW_Eur);
+
+        addChorological(state, "[S-As.]", "[South Asian]", "", FloraHellenicaTransformer.uuidChorologicalS_As);
+        addChorological(state, "[NE-Afr.]", "[North East African]", "", FloraHellenicaTransformer.uuidChorologicalNE_Afr);
+        addChorological(state, "[NW-Afr.]", "[North West African]", "", FloraHellenicaTransformer.uuidChorologicalNW_Afr);
+        addChorological(state, "[trop. Afr.]", "[tropical African]", "", FloraHellenicaTransformer.uuidChorologicalTrop_Afr);
+        addChorological(state, "[Afr.]", "[Arican]", "", FloraHellenicaTransformer.uuidChorologicalAfr);
+        addChorological(state, "[As.]", "[Asian]", "", FloraHellenicaTransformer.uuidChorologicalAs);
+        addChorological(state, "[W-As.]", "[West Asian]", "", FloraHellenicaTransformer.uuidChorologicalW_As);
+        addChorological(state, "[C-Eur.]", "[Central European]", "", FloraHellenicaTransformer.uuidChorologicalC_Eur);
+        addChorological(state, "[E-Afr.]", "[East African]", "", FloraHellenicaTransformer.uuidChorologicalE_Afr);
+        addChorological(state, "[W-Austr.]", "[West Australian]", "", FloraHellenicaTransformer.uuidChorologicalW_Austr);
+        addChorological(state, "[trop. As.]", "[tropical Asian]", "", FloraHellenicaTransformer.uuidChorologicaltrop_As);
+
+        addChorological(state, "[Co]", "[Cosmopolitan]", "Taxa distributed in all continents, i.e. beyond the N hemisphere. This category may be given in brackets after the known or supposed native distribution in cases of taxa that have been spread worldwide by humans", FloraHellenicaTransformer.uuidChorological__Co_);
 
         this.getVocabularyService().save(chorologicalVoc);
         return;
@@ -613,10 +765,10 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
      * @param uuidchorologicalstar
      */
     private void addChorological(SimpleExcelTaxonImportState<CONFIG> state, String abbrevLabel, String label,
-            String string3, UUID uuidChorological) {
-        State chorological = addState(state, abbrevLabel, label, label, uuidChorological, chorologicalVoc);
-
-
+            String desc, UUID uuidChorological) {
+        desc = isBlank(desc)? label : desc;
+        State chorologyTerm = addState(state, abbrevLabel, label, desc, uuidChorological, chorologicalVoc);
+        chorologyMap.put(abbrevLabel, chorologyTerm);
     }
 
     /**
@@ -635,11 +787,21 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
                 description, stateLabel, abbrev);
         newState.setUuid(uuid);
         newState.setIdInVocabulary(abbrev);
-        newState.setIdInVocabulary(abbrev);
         voc.addTerm(newState);
         return newState;
     }
 
+    private PresenceAbsenceTerm addStatus(SimpleExcelTaxonImportState<CONFIG> state,
+            String abbrev, String stateLabel, String description, UUID uuid, OrderedTermVocabulary<PresenceAbsenceTerm> voc) {
+        PresenceAbsenceTerm newStatus = PresenceAbsenceTerm.NewPresenceInstance(
+                description, stateLabel, abbrev);
+        newStatus.setUuid(uuid);
+        newStatus.setIdInVocabulary(abbrev);
+        newStatus.setSymbol(abbrev);
+        voc.addTerm(newStatus);
+        return newStatus;
+    }
+
     private void initHabitatVocabulary(SimpleExcelTaxonImportState<CONFIG> state) {
         if (habitatVoc == null){
             UUID uuid = FloraHellenicaTransformer.uuidFloraHellenicaHabitatVoc;
@@ -650,6 +812,35 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
         }
     }
 
+    private void initStatusVocabulary(SimpleExcelTaxonImportState<CONFIG> state) {
+        if (statusVoc == null){
+            UUID uuid = FloraHellenicaTransformer.uuidFloraHellenicaStatusVoc;
+            statusVoc = (OrderedTermVocabulary<PresenceAbsenceTerm>)this.getVocabularyService().find(uuid);
+            if (statusVoc == null){
+                createStatusVoc(state, uuid);
+            }
+        }
+    }
+
+    /**
+     * @param state
+     */
+    private void createStatusVoc(SimpleExcelTaxonImportState<CONFIG> state, UUID vocUuid) {
+        //voc
+        URI termSourceUri = null;
+        String label = "Checklist of Greece Status";
+        String description = "Status as used in the Checklist of Greece";
+        statusVoc = OrderedTermVocabulary.NewInstance(TermType.PresenceAbsenceTerm,
+                description, label, null, termSourceUri);
+        statusVoc.setUuid(vocUuid);
+
+        rangeRestricted = addStatus(state, "RR", "Range-restricted", "", FloraHellenicaTransformer.uuidStatusRangeRestricted, statusVoc);
+        doubtfullyRangeRestricted = addStatus(state, "?RR", "?Range-restricted", "", FloraHellenicaTransformer.uuidStatusRangeRestrictedDoubtfully, statusVoc);
+
+        this.getVocabularyService().save(statusVoc);
+        return;
+    }
+
 
     /**
      * @param state
@@ -703,9 +894,10 @@ public class FloraHellenicaTaxonImport<CONFIG extends FloraHellenicaImportConfig
 
         //greece country
         String countryLabel = "Greece";
-        greece = NamedArea.NewInstance(
-                countryLabel, countryLabel, null);
+        greece = NamedArea.NewInstance(countryLabel, countryLabel, "GR");
         greece.setUuid(FloraHellenicaTransformer.uuidAreaGreece);
+        greece.setIdInVocabulary("GR");
+        greece.setSymbol("GR");
         areasVoc.addTerm(greece);
         //FIXME
 //        addMapping(greece, xx "mex_adm0", "iso", "MEX");
index 90a6fddd979420d8cc5e2cb4fd05efb5dd9b0ce3..5a212b0615bc670a5ce56a800f261e723d47f94e 100644 (file)
@@ -66,9 +66,13 @@ public class FloraHellenicaTransformer extends InputTransformerBase{
     protected static final UUID uuidHabitatR = UUID.fromString("ebe8ffba-7155-4dbe-9b09-faa38a61276a");
     protected static final UUID uuidHabitatW = UUID.fromString("b72dc722-d85b-4496-8828-1eeccb37849a");
 
+    //status
+    protected static final UUID uuidFloraHellenicaStatusVoc = UUID.fromString("a0d39c0a-4e6f-4d0f-827c-cefd793d5b09");
+    protected static final UUID uuidStatusRangeRestricted = UUID.fromString("3ba59506-9f4d-4eb7-b22d-0085f6cc27d0");
+    protected static final UUID uuidStatusRangeRestrictedDoubtfully = UUID.fromString("78e64023-e9d6-4bb2-88cd-a400118ddfcf");
+
     //Chorological Category
     protected static final UUID uuidFloraHellenicaChorologicalVoc = UUID.fromString("7c95ac7f-e3ea-46c2-863f-9ad663f5086c");
-    //Chorological Category
     public static final UUID uuidFloraHellenicaChorologyFeature = UUID.fromString("fab27b99-c480-4873-bcfc-39235f6d0c5d");
 
     protected static final UUID uuidChorologicalBk = UUID.fromString("53a75041-b8ab-4890-82a3-f29117db8609");
@@ -93,5 +97,47 @@ public class FloraHellenicaTransformer extends InputTransformerBase{
     protected static final UUID uuidChorologicalCo = UUID.fromString("9ec7e14c-43a7-4086-9840-9beb6689655d");
     protected static final UUID uuidChorologicalStar = UUID.fromString("2fb30e13-4fa6-46e8-928e-4ddecec63d62");
 
+    protected static final UUID uuidChorologicaltrop = UUID.fromString("fc204567-efac-4677-a978-56e8c1cff5be");
+    protected static final UUID uuidChorologicalsubtrop = UUID.fromString("d3acbf5e-ee13-41a0-89f2-520f43b71f59");
+    protected static final UUID uuidChorologicalpaleotrop = UUID.fromString("989c6edb-92ed-48f1-b6ed-4f24ecec73c8");
+    protected static final UUID uuidChorologicalneotrop = UUID.fromString("92ed494d-f294-424b-a8b6-e9cec6f5c7d3");
+    protected static final UUID uuidChorologicalpantrop = UUID.fromString("1b5b74ea-1ebf-4822-b4b6-121c513efe1d");
+    protected static final UUID uuidChorologicalN_Am = UUID.fromString("ab2d5adb-b29f-4463-a99a-4c5ed21f131f");
+    protected static final UUID uuidChorologicalS_Am = UUID.fromString("6b587c6e-b96a-4d8d-a963-3e1b82aea483");
+    protected static final UUID uuidChorologicalE_As = UUID.fromString("9f818f24-87ba-4cf7-adfb-442573ab0e66");
+    protected static final UUID uuidChorologicalSE_As = UUID.fromString("f63700d1-3327-4300-ac54-3474c7cd6630");
+    protected static final UUID uuidChorologicalS_Afr = UUID.fromString("a2918074-a09e-4491-9789-72984230f647");
+    protected static final UUID uuidChorologicalArab = UUID.fromString("ed62dc2f-e741-4728-936d-fc02b74e4ec0");
+    protected static final UUID uuidChorologicalArab_NE_Afr = UUID.fromString("07ce7798-585d-4488-a2fa-cdd9464e9761");
+    protected static final UUID uuidChorologicalCaucas = UUID.fromString("0656ed2c-5523-4ae1-bc37-75feeed8c914");
+    protected static final UUID uuidChorologicalPontic = UUID.fromString("b70cbdc3-8201-4da3-b8ca-cfa2dd2852b9");
+    protected static final UUID uuidChorologicalEurop = UUID.fromString("14bad9e4-fd7c-4d6b-910a-d74f48a38eb1");
+    protected static final UUID uuidChorologicalAustral = UUID.fromString("13217177-94c4-4b4f-84bb-6b04729e5063");
+
+    protected static final UUID uuidChorological__Co_ = UUID.fromString("72ffbc62-7c0a-4d88-9663-ead7499b8a26");
+    protected static final UUID uuidChorologicalW_Med = UUID.fromString("9dca0ce0-177b-4674-b43a-ce2802c27010");
+    protected static final UUID uuidChorologicalC_Med = UUID.fromString("0026029d-6aa0-4b71-bcf4-572ed7d2eec1");
+    protected static final UUID uuidChorologicalW_Eur = UUID.fromString("e9aeb881-f659-4f77-94bc-140d30d53627");
+    protected static final UUID uuidChorologicalS_Eur = UUID.fromString("d4726968-6334-4073-9ff9-271adb8114a8");
+    protected static final UUID uuidChorologicalC_Am = UUID.fromString("f93f3e62-048a-4d3a-a481-c3a43c329811");
+    protected static final UUID uuidChorologicalC_As = UUID.fromString("3b384884-5862-4426-b906-82d3049cf87a");
+    protected static final UUID uuidChorologicalSW_As = UUID.fromString("ce6bd344-049c-4e48-b2c5-dd9baeed73af");
+    protected static final UUID uuidChorologicalUnknown = UUID.fromString("e5a98a56-4916-4f3d-849f-10276051208a");
+    protected static final UUID uuidChorologicalN_Afr = UUID.fromString("6cf2b057-1c8c-4756-98e6-559c1e330915");
+    protected static final UUID uuidChorologicalAm = UUID.fromString("2474ada3-d6ee-402f-a59f-df6164066766");
+    protected static final UUID uuidChorologicalPaleosubtrop = UUID.fromString("bd65ea55-6841-424f-8ecc-57c5adb9b558");
+    protected static final UUID uuidChorologicalSW_Eur = UUID.fromString("394bb97f-7fbd-44e3-ba2d-af52abf5a302");
+
+    protected static final UUID uuidChorologicalS_As = UUID.fromString("6440fb40-6304-423b-a952-2e99911c4fc5");
+    protected static final UUID uuidChorologicalNE_Afr = UUID.fromString("48fb80a7-e350-4563-812b-7931d5cf1675");
+    protected static final UUID uuidChorologicalNW_Afr = UUID.fromString("1c713f25-0f1f-43f4-b644-2d985b9d2f6e");
+    protected static final UUID uuidChorologicalTrop_Afr = UUID.fromString("a67c04e6-4d1f-4238-9b25-0454d3611513");
+    protected static final UUID uuidChorologicalAfr = UUID.fromString("751c28cc-05af-4778-9eba-dfa5b23aa664");
+    protected static final UUID uuidChorologicalAs = UUID.fromString("8258ab53-2f30-4b4d-8e67-69219b79eb1b");
+    protected static final UUID uuidChorologicalW_As = UUID.fromString("537c7670-3f35-4295-a177-8ac2b3e3315c");
+    protected static final UUID uuidChorologicalC_Eur = UUID.fromString("88c129f8-d45b-48f3-b8bc-6f1e4ea1d902");
+    protected static final UUID uuidChorologicalE_Afr = UUID.fromString("1a56fc84-93a2-4414-af63-3d3c83f8e8d9");
+    protected static final UUID uuidChorologicalW_Austr = UUID.fromString("271d503b-9279-46cb-ac14-184f44e07498");
+    protected static final UUID uuidChorologicaltrop_As = UUID.fromString("c357a2e4-85d1-46ab-abb1-df0211f5f8bd");
 
 }