cleanup
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / berlinModel / in / BerlinModelAreaImport.java
index 52e1ebcaf4fb12cb2bc5c086981ba28a25222200..e90af042aaea73a0b5f51706a22c5fd54c85e845 100644 (file)
@@ -14,7 +14,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.springframework.stereotype.Component;
@@ -95,19 +95,125 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
 
     @Override
     public void doInvoke(BerlinModelImportState state)  {
-        TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
-        if (voc == null){
-            try {
-                createEuroMedAreas(state);
-                createCaucasusAreas(state);
-            } catch (SQLException e) {
-                logger.warn("Exception when creating areas: " + e.getMessage());
-                e.printStackTrace();
+        if (state.getConfig().isEuroMed()) {
+            TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocEuroMedAreas);
+            if (voc == null){
+                try {
+                    createEuroMedAreas(state);
+                    createCaucasusAreas(state);
+                } catch (SQLException e) {
+                    logger.warn("Exception when creating areas: " + e.getMessage());
+                    e.printStackTrace();
+                }
+            }
+        }else if (state.getConfig().isMcl()) {
+            TermVocabulary<?> voc = getVocabularyService().find(BerlinModelTransformer.uuidVocMclAreas);
+            if (voc == null){
+                createMclAreas(state);
             }
         }
         return;
     }
 
+    private TermVocabulary<NamedArea> createMclAreas(BerlinModelImportState state) {
+        logger.warn("Start creating MCL areas");
+
+        Reference sourceReference = state.getConfig().getSourceReference();
+
+        TransactionStatus txStatus = this.startTransaction();
+        sourceReference = getSourceReference(sourceReference);
+
+        OrderedTermVocabulary<NamedAreaLevel> mclAreaLevelVoc = makeEmptyMclAreaLevelVocabulary();
+        NamedAreaLevel areaLevelTop = getNamedAreaLevel(state, BerlinModelTransformer.uuidMclAreaLevelTop, "MCL top area level",
+                "MCL top area level. This level is only to be used for the area representing the complete MCL area", "mcl top", mclAreaLevelVoc);
+        NamedAreaLevel areaLevelMclMain = getNamedAreaLevel(state, BerlinModelTransformer.uuidMclAreaLevelFirst,
+                "MCL main area level", "MCL main area level", "mcl main", mclAreaLevelVoc);
+
+        OrderedTermVocabulary<NamedArea> mclAreasVoc = makeEmptyMclVocabulary();
+        NamedArea topArea = createMclArea(state, mclAreasVoc, null, areaLevelTop, "MCL", "MCL Area", "f0500f01-0a59-4a6b-83cf-4070182f7266");
+
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "AE", "East Aegean Islands", "e2367915-828b-4151-a3af-1a278abf1cd5");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Ag", "Algeria", "9dea2928-65fc-4999-8a5d-f63552553f9f");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Al", "Albania", "53e87d91-f5a8-434b-86c9-268750c3473b");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "An", "Asiatic Turkey", "96394d80-85b7-4b5d-940e-28772cb8fe46");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Bl", "Balearic Islands", "b9259337-c216-44b2-be26-337e1beebf5f");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Bu", "Bulgaria", "bb85aa3f-18cb-4961-866e-8bdedaf0c41b");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Co", "Corsica", "bcc5a02c-b37f-4639-9f50-e5623da46c95");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Cr", "Crete and Karpathos", "0773529f-e230-4397-8ba5-cd12d5af4172");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Cy", "Cyprus", "3b502256-4db5-47be-96da-c20341f7984e");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Eg", "Egypt", "9564126a-e24c-4ca1-a229-dd5c084dd543");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Ga", "France", "1a0b6e9d-9568-434f-8346-f33cd31b0c5f");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Gr", "Greece", "4a9a0f92-eb51-428a-b82f-96ee7ed77c60");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Hs", "Spain", "29f6ac94-2573-4122-87c7-165710037ff6");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "IJ", "Israel and Jordan", "abaa10ea-7da4-4940-81e3-6a6023b0d6b5");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "It", "Italy", "7003c0d4-ffab-4ee6-888d-47fc483fa8bd");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Ju", "Jugoslavia", "6409b4b8-2b3d-440c-b22c-ef98ed3257f3");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Li", "Libya", "a5418d46-5f3c-4964-8b12-19509bb313e1");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "LS", "Lebanon and Syria", "023f8dba-40f5-4d4e-b2ca-4e3004a25d1c");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Lu", "Portugal", "6b5018ed-d637-4dd2-a08e-e0d2f7633688");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Ma", "Morocco", "b9b85f84-6e3e-4f6c-b3bc-2f42d17bf077");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Me", "Malta", "6394ee61-999c-473e-88ed-aad9259ffa81");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "RK", "Crimea", "60ea0344-0639-451d-81fd-33263014f30f");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Sa", "Sardinia", "c3a7d579-998d-472b-a238-26d893ee03cb");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Si", "Sicily", "5187232e-38d3-4bec-9094-2f90abde78b8");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Sn", "Sinai", "54a53738-2e04-433e-9657-dd1fac45094e");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Tn", "Tunisia", "46d2df14-0b45-4413-bbf0-022d769cb479");
+        createMclArea(state, mclAreasVoc, topArea, areaLevelMclMain, "Tu", "Turkey-in-Europe", "aa93af77-033f-4096-a4ca-468ba07c64d9");
+
+        getVocabularyService().saveOrUpdate(mclAreasVoc);
+        try {
+            commitTransaction(txStatus);
+        } catch (Exception e) {
+             e.printStackTrace();
+             logger.error("An exception occurred when trying to commit MCL Areas");
+        }
+        logger.warn("Created MCL areas");
+
+        return mclAreasVoc;
+    }
+
+    private NamedArea createMclArea(BerlinModelImportState state, OrderedTermVocabulary<NamedArea> mclAreasVoc, NamedArea topArea,
+            NamedAreaLevel areaLevel, String abbrev, String label, String uuidStr) {
+        NamedArea namedArea = makeSingleMclArea(state, mclAreasVoc, topArea, areaLevel, UUID.fromString(uuidStr), label, abbrev);
+        state.putNamedArea(namedArea);
+        return namedArea;
+    }
+
+    private NamedArea makeSingleMclArea(@SuppressWarnings("unused") BerlinModelImportState state, OrderedTermVocabulary<NamedArea> voc,
+            NamedArea top, NamedAreaLevel areaLevel, UUID uuid, String label, String labelAbbrev) {
+
+        NamedArea namedArea = NamedArea.NewInstance(label, label, labelAbbrev);
+        namedArea.setUuid(uuid);
+
+        namedArea.setPartOf(top);
+        namedArea.setLevel(areaLevel);
+        namedArea.setIdInVocabulary(labelAbbrev);
+        namedArea.setSymbol(labelAbbrev);
+        namedArea.setSymbol2(labelAbbrev);
+
+        String geoAbbrev = labelAbbrev;
+        if ("An".equalsIgnoreCase(geoAbbrev)) {
+            geoAbbrev = "Tu(A)";
+        } else if ("Me".equalsIgnoreCase(geoAbbrev)) {
+            geoAbbrev = "Si(M)";
+        } else if ("RK".equalsIgnoreCase(geoAbbrev)) {
+            geoAbbrev = "Cm";
+        } else if ("Si".equalsIgnoreCase(geoAbbrev)) {
+            geoAbbrev = "Si(S)";
+        } else if ("Tu".equalsIgnoreCase(geoAbbrev)) {
+            geoAbbrev = "Tu(E)";
+        }
+
+        String geoMapping = "<?xml version=\"1.0\" ?><mapService xmlns=\"http://www.etaxonomy.eu/cdm\" type=\"editMapService\">"
+                + "<area><layer>euromed_2013</layer><field>EMAREA</field>"
+                + "<value>" + geoAbbrev + "</value></area></mapService>";
+        Annotation geoServiceMapping = Annotation.NewInstance(geoMapping, AnnotationType.TECHNICAL(), Language.UNKNOWN_LANGUAGE());
+        namedArea.addAnnotation(geoServiceMapping);
+
+        voc.addTerm(namedArea);
+        return namedArea;
+    }
+
     private TermVocabulary<NamedArea> createEuroMedAreas(BerlinModelImportState state) throws SQLException {
 
            logger.warn("Start creating E+M areas");
@@ -129,7 +235,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                NamedAreaLevel areaLevelEm1 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelFirst, "Euro+Med 1. area level", "Euro+Med 1. area level", "e+m 1.", null);
                NamedAreaLevel areaLevelEm2 = getNamedAreaLevel(state, BerlinModelTransformer.uuidEuroMedAreaLevelSecond, "Euro+Med 2. area level", "Euro+Med 2. area level", "Euro+Med 1. area level", null);
 
-
                String sql = "SELECT * , CASE WHEN EMCode = 'EM' THEN 'a' ELSE 'b' END as isEM " +
                                " FROM emArea " +
                                " WHERE areaId not IN (1, 14, 20, 21, 33, 646, 647, 653, 654, 1718) " +
@@ -174,10 +279,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                return euroMedAreasVoc;
        }
 
-       /**
-     * @param areaLevelEm2
-        * @param euroMedAreas2
-     */
     private void emAreaFinetuning(TermVocabulary<NamedArea> euroMedAreas, NamedAreaLevel areaLevelEm2) {
         //CZ
         NamedArea oldArea = euroMedAreas.getTermByIdInvocabulary("Cz");
@@ -212,17 +313,17 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
 
         try {
 
-            MarkerType hiddenAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidHiddenArea,
+            MarkerType fallbackAreaMarkerType = getMarkerType(state, BerlinModelTransformer.uuidHiddenArea,
                     "Hidden Area","Used to hide distributions for the named areas in publications", null, getEuroMedMarkerTypeVoc(state));
 
             //Add hidden area marker to Rs(C) and Rs(N)
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_B);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_C);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_E);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_N);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_K);
-            hideArea(euroMedAreasVoc, hiddenAreaMarkerType, BerlinModelTransformer.uuidRs_W);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_B);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_C);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_E);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_N);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_K);
+            hideArea(euroMedAreasVoc, fallbackAreaMarkerType, BerlinModelTransformer.uuidRs_W);
         } catch (Exception e) {
             e.printStackTrace();
             logger.error("Exception in markAreasAsHidden: " + e.getMessage());
@@ -230,38 +331,20 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
 
     }
 
-    private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType hiddenAreaMarkerType, UUID areaUuid) {
+    private void hideArea(TermVocabulary<NamedArea> euroMedAreasVoc, MarkerType fallbackAreaMarkerType, UUID areaUuid) {
         for (NamedArea namedArea : euroMedAreasVoc.getTerms()){
             if (namedArea.getUuid().equals(areaUuid)){
-                namedArea.addMarker(Marker.NewInstance(hiddenAreaMarkerType, true));
+                namedArea.addMarker(Marker.NewInstance(fallbackAreaMarkerType, true));
                 return;
             }
         }
     }
 
-    /**
-     * @param oldArea
-     * @param namedArea
-     * @param areaLevelEm2
-     */
     private void makeSubterm(NamedArea oldArea, NamedArea namedArea, NamedAreaLevel areaLevelEm2) {
         namedArea.setLevel(areaLevelEm2);
         namedArea.setPartOf(oldArea);
     }
 
-
-       /**
-        * @param eurMarkerType
-        * @param euroMedAreaMarkerType
-        * @param isoCodeExtType
-        * @param tdwgCodeExtType
-        * @param mclCodeExtType
-        * @param rs
-        * @param areaLevelEm2
-        * @param areaLevelEm1
-        * @param areaLevelTop
-        * @throws SQLException
-        */
        private NamedArea makeSingleEuroMedArea(ResultSet rs, MarkerType eurMarkerType,
                        MarkerType euroMedAreaMarkerType, ExtensionType isoCodeExtType,
                        ExtensionType tdwgCodeExtType, ExtensionType mclCodeExtType,
@@ -281,7 +364,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                String mclCode = nullSafeTrim(rs.getString("MCLCode"));
                String geoSearch = nullSafeTrim(rs.getString("NameForGeoSearch"));
 
-
                if (isBlank(emCode)){
                        emCode = unit;
                }
@@ -302,7 +384,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                        }
                }
 
-
                //code
                area.setIdInVocabulary(emCode);
                //notes
@@ -365,9 +446,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                }
        }
 
-       /**
-        *
-        */
        private OrderedTermVocabulary<NamedArea> makeEmptyEuroMedVocabulary() {
                TermType type = TermType.NamedArea;
                String description = "Euro+Med area vocabulary";
@@ -381,10 +459,32 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
                return result;
        }
 
+    private OrderedTermVocabulary<NamedArea> makeEmptyMclVocabulary() {
+        TermType type = TermType.NamedArea;
+        String description = "MCL area vocabulary";
+        String label = "MCL Areas";
+        String abbrev = null;
+        URI termSourceUri = null;
+        OrderedTermVocabulary<NamedArea> result = OrderedTermVocabulary.NewOrderedInstance(type, null, description, label, abbrev, termSourceUri);
+
+        result.setUuid(BerlinModelTransformer.uuidVocMclAreas);
+        getVocabularyService().save(result);
+        return result;
+    }
+
+    private OrderedTermVocabulary<NamedAreaLevel> makeEmptyMclAreaLevelVocabulary() {
+        TermType type = TermType.NamedAreaLevel;
+        String description = "MCL area level vocabulary";
+        String label = "MCL Area Levels";
+        String abbrev = null;
+        URI termSourceUri = null;
+        OrderedTermVocabulary<NamedAreaLevel> result = OrderedTermVocabulary.NewOrderedInstance(type, null, description, label, abbrev, termSourceUri);
+
+        result.setUuid(UUID.randomUUID());
+        getVocabularyService().save(result);
+        return result;
+    }
 
-    /**
-     * @param state
-     */
     private void createCaucasusAreas(BerlinModelImportState state) {
         OrderedTermVocabulary<NamedArea> voc = makeEmptyCaucasusVocabulary(state);
         NamedArea last = null;
@@ -444,16 +544,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
         makeSingleArea(state, voc, last, BerlinModelTransformer.uuidCauc12, "Talysch","T","12","");
     }
 
-       /**
-     * @param state
-        * @param voc
-     * @param uuidCauc1
-     * @param string
-     * @param string2
-     * @param string3
-     * @param string4
-     * @return
-     */
     private NamedArea makeSingleArea(BerlinModelImportState state, OrderedTermVocabulary<NamedArea> voc, NamedArea last,
             UUID uuid, String label, String labelAbbrev,
             String mainLevel, String subLevel) {
@@ -476,9 +566,6 @@ public class BerlinModelAreaImport  extends BerlinModelImportBase {
         return namedArea;
     }
 
-    /**
-     * @param state
-     */
     private OrderedTermVocabulary<NamedArea> makeEmptyCaucasusVocabulary(BerlinModelImportState state) {
         TermType type = TermType.NamedArea;
         String description = "E+M Caucasus area vocabulary";