ref #9932 latest changes to MexicoEflora imports
[cdmlib-apps.git] / app-import / src / main / java / eu / etaxonomy / cdm / io / mexico / MexicoEfloraImportBase.java
index 94382bd8f6d3aafb0a4f1fb7705e853d21c3f7fb..526e57704607bd7f30fa7b69437f5527d7fbb0a1 100644 (file)
@@ -6,25 +6,20 @@
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * See LICENSE.TXT at the top of this package for the full license terms.
 */
-
 package eu.etaxonomy.cdm.io.mexico;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Map;
-
+import org.apache.commons.lang3.StringUtils;
 import org.apache.log4j.Logger;
 
-import eu.etaxonomy.cdm.common.CdmUtils;
-import eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportState;
 import eu.etaxonomy.cdm.io.common.DbImportBase;
 import eu.etaxonomy.cdm.io.common.ICdmIO;
 import eu.etaxonomy.cdm.io.common.IPartitionedIO;
-import eu.etaxonomy.cdm.model.common.IdentifiableSource;
-import eu.etaxonomy.cdm.model.reference.ISourceable;
+import eu.etaxonomy.cdm.io.common.TdwgAreaProvider;
+import eu.etaxonomy.cdm.model.location.Country;
+import eu.etaxonomy.cdm.model.location.NamedArea;
+import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
+import eu.etaxonomy.cdm.model.location.NamedAreaType;
 import eu.etaxonomy.cdm.model.reference.Reference;
-import eu.etaxonomy.cdm.model.taxon.Taxon;
-import eu.etaxonomy.cdm.model.taxon.TaxonBase;
 
 /**
  * @author a.mueller
@@ -47,83 +42,107 @@ public abstract class MexicoEfloraImportBase
                return result;
        }
 
-    //can be overriden
-    protected String getIdInSource(MexicoEfloraImportState state, ResultSet rs) throws SQLException {
-        return null;
+       protected Reference sourceReference;
+    protected Reference getSourceReference(Reference sourceReference) {
+        if (this.sourceReference != null) {
+            return this.sourceReference;
+        }
+        Reference persistentSourceReference = getReferenceService().find(sourceReference.getUuid());  //just to be sure
+        if (persistentSourceReference != null){
+            sourceReference = persistentSourceReference;
+        }
+        this.sourceReference = sourceReference;
+        return sourceReference;
     }
 
+    protected NamedArea getArea(MexicoEfloraImportState state, Integer idRegion,
+            String estadoStr, String paisStr, String abbrev, Integer idTipoRegion) {
 
-       protected Taxon getTaxon(BerlinModelImportState state, int taxonId, Map<String, TaxonBase> taxonMap, int factId) {
-               TaxonBase<?> taxonBase = taxonMap.get(String.valueOf(taxonId));
-
-               //TODO for testing
-//             if (taxonBase == null && ! state.getConfig().isDoTaxa()){
-//                     taxonBase = Taxon.NewInstance(TaxonNameFactory.NewBotanicalInstance(Rank.SPECIES()), null);
-//             }
-
-               Taxon taxon;
-               if ( taxonBase instanceof Taxon ) {
-                       taxon = (Taxon) taxonBase;
-               } else if (taxonBase != null) {
-                       logger.warn("TaxonBase (" + taxonId + ") for Fact(Specimen) with factId " + factId + " was not of type Taxon but: " + taxonBase.getClass().getSimpleName());
-                       return null;
-               } else {
-                       logger.warn("TaxonBase (" + taxonId + ") for Fact(Specimen) with factId " + factId + " is null.");
-                       return null;
-               }
-               return taxon;
-       }
+        NamedArea areaById = state.getAreaMap().get(idRegion);
+        if (areaIsMexicoCountry(idRegion, estadoStr, paisStr)) {
+            return areaById;
+        }
+        String label = isNotBlank(estadoStr) ? estadoStr : paisStr;
+        String labelKey = label.toLowerCase();
+        NamedArea areaByLabel = state.getAreaLabelMap().get(labelKey) ;
 
+        NamedArea result;
+        if (areaById != null && areaByLabel != null && !areaById.equals(areaByLabel)){
+            logger.warn("Area by label and area by id differs: " + areaById + "<->" + label);
+        }
+        result = areaById == null? areaByLabel : areaById;
 
-       /**
-        *      Searches first in the detail maps then in the ref maps for a reference.
-        *  Returns the reference as soon as it finds it in one of the map, according
-        *  to the order of the map.
-        *  If nomRefDetailFk is <code>null</code> no search on detail maps is performed.
-        *  If one of the maps is <code>null</code> no search on the according map is
-        *  performed. <BR>
-        *  You may define the order of search by the order you pass the maps but
-        *  make sure to always pass the detail maps first.
-        * @param firstDetailMap
-        * @param secondDetailMap
-        * @param firstRefMap
-        * @param secondRefMap
-        * @param nomRefDetailFk
-        * @param nomRefFk
-        * @return
-        */
-       protected Reference getReferenceFromMaps(
-                       Map<String, Reference> detailMap,
-                       Map<String, Reference> refMap,
-                       String nomRefDetailFk,
-                       String nomRefFk) {
-               Reference ref = null;
-               if (detailMap != null){
-                       ref = detailMap.get(nomRefDetailFk);
-               }
-               if (ref == null){
-                       ref = refMap.get(nomRefFk);
-               }
-               return ref;
-       }
+        if (result == null) {
+            result = getNewCountry(state, label);
+        }
 
-    protected Reference getSourceReference(Reference sourceReference) {
-        Reference persistentSourceReference = getReferenceService().find(sourceReference.getUuid());  //just to be sure
-        if (persistentSourceReference != null){
-            sourceReference = persistentSourceReference;
+        if (result == null && !"ND".equalsIgnoreCase(label)) {  //ND = no data
+            logger.warn("Area not found, create new one: " + idRegion + "; " + label);
+            NamedAreaLevel level = idTipoRegion != null && idTipoRegion.equals(1)? NamedAreaLevel.COUNTRY() : null;
+            NamedAreaType areaType = NamedAreaType.ADMINISTRATION_AREA();
+            NamedArea namedArea = this.getNamedArea(state, null, label, label, abbrev, areaType, level, null, null);
+            state.getAreaLabelMap().put(labelKey, namedArea);
         }
-        return sourceReference;
+        return result;
     }
 
-    protected static <T extends IdentifiableSource> boolean importSourceExists(ISourceable<T> sourceable, String idInSource,
-            String namespace, Reference ref) {
-        for (T source : sourceable.getSources()){
-            if (CdmUtils.nullSafeEqual(namespace, source.getIdNamespace()) &&
-                CdmUtils.nullSafeEqual(idInSource, source.getIdInSource()) &&
-                CdmUtils.nullSafeEqual(ref, source.getCitation())){
-                    return true;
-            }
+    private NamedArea getNewCountry(@SuppressWarnings("unused") MexicoEfloraImportState state, String label) {
+        if (StringUtils.isBlank(label)) {
+            return null;
+        }else if (label.equalsIgnoreCase("CANADÁ")) {return Country.CANADA();
+        }else if (label.equalsIgnoreCase("ESTADOS UNIDOS DE AMÉRICA")) {return Country.UNITEDSTATESOFAMERICA();
+        }else if (label.equalsIgnoreCase("HONDURAS")) {return Country.HONDURASREPUBLICOF();
+        }else if (label.equalsIgnoreCase("BELICE")) {return Country.BELIZE();
+        }else if (label.equalsIgnoreCase("EL SALVADOR")) {return Country.ELSALVADORREPUBLICOF();
+        }else if (label.equalsIgnoreCase("PANAMÁ")) {return Country.PANAMAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("GUATEMALA")) {return Country.GUATEMALAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("NICARAGUA")) {return Country.NICARAGUAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("ECUADOR")) {return Country.ECUADORREPUBLICOF();
+        }else if (label.equalsIgnoreCase("PERÚ")) {return Country.PERUREPUBLICOF();
+        }else if (label.equalsIgnoreCase("COSTA RICA")) {return Country.COSTARICAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("COLOMBIA")) {return Country.COLOMBIAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("CUBA")) {return Country.CUBAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("CHILE")) {return Country.CHILEREPUBLICOF();
+        }else if (label.equalsIgnoreCase("BOLIVIA")) {return Country.BOLIVIAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("URUGUAY")) {return Country.URUGUAYEASTERNREPUBLICOF();
+        }else if (label.equalsIgnoreCase("PARAGUAY")) {return Country.PARAGUAYREPUBLICOF();
+        }else if (label.equalsIgnoreCase("VENEZUELA")) {return Country.VENEZUELABOLIVARIANREPUBLICOF();
+        }else if (label.equalsIgnoreCase("BAHAMAS")) {return Country.BAHAMASCOMMONWEALTHOFTHE();
+        }else if (label.equalsIgnoreCase("BRASIL")) {return Country.BRAZILFEDERATIVEREPUBLICOF();
+        }else if (label.equalsIgnoreCase("GRANADA")) {return Country.GRENADA();
+        }else if (label.equalsIgnoreCase("TRINIDAD Y TOBAGO")) {return Country.TRINIDADANDTOBAGOREPUBLICOF();
+        }else if (label.equalsIgnoreCase("GUYANA")) {return Country.GUYANAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("COSTA DE MARFIL")) {return Country.COTEDIVOIREIVORYCOASTREPUBLICOFTHE();
+        }else if (label.equalsIgnoreCase("JAMAICA")) {return Country.JAMAICA();
+        }else if (label.equalsIgnoreCase("PUERTO RICO")) {return Country.PUERTORICO();
+        }else if (label.equalsIgnoreCase("ITALIA")) {return Country.ITALYITALIANREPUBLIC();
+        }else if (label.equalsIgnoreCase("FRANCIA")) {return Country.FRANCE();
+        }else if (label.equalsIgnoreCase("ESPAÑA")) {return Country.SPAINSPANISHSTATE();
+        }else if (label.equalsIgnoreCase("PORTUGAL")) {return Country.PORTUGALPORTUGUESEREPUBLIC();
+        }else if (label.equalsIgnoreCase("FILIPINAS")) {return Country.PHILIPPINESREPUBLICOFTHE();
+        }else if (label.equalsIgnoreCase("INDIA")) {return Country.INDIAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("ALASKA")) {return TdwgAreaProvider.getAreaByTdwgAbbreviation("ASK");
+        }else if (label.equalsIgnoreCase("AUSTRALIA")) {return Country.AUSTRALIACOMMONWEALTHOF();
+        }else if (label.equalsIgnoreCase("REPÚBLICA DOMINICANA")) {return Country.DOMINICANREPUBLIC();
+        }else if (label.equalsIgnoreCase("HAITÍ")) {return Country.HAITIREPUBLICOF();
+        }else if (label.equalsIgnoreCase("CHINA")) {return Country.CHINAPEOPLESREPUBLICOF();
+        }else if (label.equalsIgnoreCase("SUDÁFRICA")) {return Country.SOUTHAFRICAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("MADAGASCAR")) {return Country.MADAGASCARREPUBLICOF();
+        }else if (label.equalsIgnoreCase("NAMIBIA")) {return Country.NAMIBIA();
+        }else if (label.equalsIgnoreCase("ETIOPÍA")) {return Country.ETHIOPIA();
+        }else if (label.equalsIgnoreCase("ANGOLA")) {return Country.ANGOLAREPUBLICOF();
+        }else if (label.equalsIgnoreCase("TAILANDIA")) {return Country.THAILANDKINGDOMOF();
+        }else if (label.equalsIgnoreCase("TANZANIA")) {return Country.TANZANIAUNITEDREPUBLICOF();
+        }else if (label.equalsIgnoreCase("ARGENTINA")) {return Country.ARGENTINAARGENTINEREPUBLIC();
+        }else if (label.equalsIgnoreCase("SURINAM")) {return Country.SURINAMEREPUBLICOF();
+        }else if (label.equalsIgnoreCase("INGLATERRA")) {return Country.UNITEDKINGDOMOFGREATBRITAINANDNORTHERNIRELAND();
         }
-        return false;
+        return null;
+    }
+
+    private boolean areaIsMexicoCountry(Integer idRegion, String estadoStr,
+            String paisStr) {
+        return idRegion == 2 && isBlank(estadoStr) &&
+                "MÉXICO".equalsIgnoreCase(paisStr);
     }
-}
+}
\ No newline at end of file