bugfix for wrong http anchor replacement
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / in / BerlinModelNameStatusImport.java
index bb905c081f05059d2a2123f20c1d56362a90c5c0..9886b38753ddb27146c34aee5f4c365250045aa8 100644 (file)
@@ -16,6 +16,7 @@ import java.util.HashSet;
 import java.util.Map;\r
 import java.util.Set;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Component;\r
 \r
@@ -31,7 +32,7 @@ import eu.etaxonomy.cdm.model.common.Marker;
 import eu.etaxonomy.cdm.model.common.MarkerType;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;\r
 \r
 /**\r
@@ -58,8 +59,13 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
         * @see eu.etaxonomy.cdm.io.berlinModel.in.BerlinModelImportBase#getIdQuery()\r
         */\r
        @Override\r
-       protected String getIdQuery() {\r
-               return " SELECT RIdentifier FROM " + getTableName();\r
+       protected String getIdQuery(BerlinModelImportState state) {\r
+               String result =  " SELECT RIdentifier FROM " + getTableName();\r
+               \r
+               if (StringUtils.isNotEmpty(state.getConfig().getNameIdTable())){\r
+                       result += " WHERE nameFk IN (SELECT NameId FROM " + state.getConfig().getNameIdTable() + ")";\r
+               }\r
+               return result;\r
        }\r
 \r
 \r
@@ -111,15 +117,31 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                                int nameId = rs.getInt("nameFk");\r
                                \r
                                boolean doubtful = rs.getBoolean("DoubtfulFlag");\r
-//                             ReferenceBase citation = rs.getString("");\r
-//                             String microcitation = null;\r
+                               String nomStatusLabel = rs.getString("NomStatus");\r
                                \r
                                TaxonNameBase taxonName = nameMap.get(String.valueOf(nameId));\r
                                //TODO doubtful\r
                                \r
                                if (taxonName != null ){\r
                                        try{\r
-                                               NomenclaturalStatus nomStatus = BerlinModelTransformer.nomStatusFkToNomStatus(nomStatusFk);\r
+                                               NomenclaturalStatus nomStatus = BerlinModelTransformer.nomStatusFkToNomStatus(nomStatusFk, nomStatusLabel);\r
+                                               if (nomStatus == null){\r
+                                                       String message = "Nomenclatural status could not be defined for %s ; %s";\r
+                                                       message = String.format(message, nomStatusFk, nomStatusLabel);\r
+                                                       logger.warn(message);\r
+                                                       success = false;\r
+                                                       continue;\r
+                                               }else{\r
+                                                       if (nomStatus.getType() == null){\r
+                                                               String message = "Nomenclatural status type could not be defined for %s ; %s";\r
+                                                               message = String.format(message, nomStatusFk, nomStatusLabel);\r
+                                                               logger.warn(message);\r
+                                                               success = false;\r
+                                                               continue;\r
+                                                       }else if(nomStatus.getType().getId() == 0){\r
+                                                               getTermService().save(nomStatus.getType());\r
+                                                       }\r
+                                               }\r
                                                \r
                                                //reference\r
                                                makeReference(config, nomStatus, nameId, rs, partitioner);\r
@@ -127,7 +149,7 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                                                //Details\r
                                                dbAttrName = "details";\r
                                                cdmAttrName = "citationMicroReference";\r
-                                               success &= ImportHelper.addStringValue(rs, nomStatus, dbAttrName, cdmAttrName);\r
+                                               success &= ImportHelper.addStringValue(rs, nomStatus, dbAttrName, cdmAttrName, true);\r
                                                \r
                                                //doubtful\r
                                                if (doubtful){\r
@@ -136,7 +158,6 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                                                taxonName.addStatus(nomStatus);\r
                                                namesToSave.add(taxonName);\r
                                        }catch (UnknownCdmTypeException e) {\r
-                                               //TODO\r
                                                logger.warn("NomStatusType " + nomStatusFk + " not yet implemented");\r
                                                success = false;\r
                                        }\r
@@ -187,30 +208,30 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
 \r
                        //nom reference map\r
                        nameSpace = BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE;\r
-                       cdmClass = ReferenceBase.class;\r
+                       cdmClass = Reference.class;\r
                        idSet = referenceIdSet;\r
-                       Map<String, ReferenceBase> nomReferenceMap = (Map<String, ReferenceBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+                       Map<String, Reference> nomReferenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
                        result.put(nameSpace, nomReferenceMap);\r
 \r
                        //biblio reference map\r
                        nameSpace = BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE;\r
-                       cdmClass = ReferenceBase.class;\r
+                       cdmClass = Reference.class;\r
                        idSet = referenceIdSet;\r
-                       Map<String, ReferenceBase> biblioReferenceMap = (Map<String, ReferenceBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+                       Map<String, Reference> biblioReferenceMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
                        result.put(nameSpace, biblioReferenceMap);\r
                        \r
                        //nom refDetail map\r
                        nameSpace = BerlinModelRefDetailImport.NOM_REFDETAIL_NAMESPACE;\r
-                       cdmClass = ReferenceBase.class;\r
+                       cdmClass = Reference.class;\r
                        idSet = refDetailIdSet;\r
-                       Map<String, ReferenceBase> nomRefDetailMap= (Map<String, ReferenceBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+                       Map<String, Reference> nomRefDetailMap= (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
                        result.put(nameSpace, nomRefDetailMap);\r
                        \r
                        //biblio refDetail map\r
                        nameSpace = BerlinModelRefDetailImport.BIBLIO_REFDETAIL_NAMESPACE;\r
-                       cdmClass = ReferenceBase.class;\r
+                       cdmClass = Reference.class;\r
                        idSet = refDetailIdSet;\r
-                       Map<String, ReferenceBase> biblioRefDetailMap= (Map<String, ReferenceBase>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
+                       Map<String, Reference> biblioRefDetailMap= (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);\r
                        result.put(nameSpace, biblioRefDetailMap);\r
 \r
 \r
@@ -224,10 +245,10 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                        int nameId, ResultSet rs, ResultSetPartitioner partitioner) \r
                        throws SQLException{\r
                \r
-               Map<String, ReferenceBase> biblioRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);\r
-               Map<String, ReferenceBase> nomRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE);\r
-               Map<String, ReferenceBase> biblioDetailMap = partitioner.getObjectMap(BerlinModelRefDetailImport.BIBLIO_REFDETAIL_NAMESPACE);\r
-               Map<String, ReferenceBase> nomRefDetailMap = partitioner.getObjectMap(BerlinModelRefDetailImport.NOM_REFDETAIL_NAMESPACE);\r
+               Map<String, Reference> biblioRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.BIBLIO_REFERENCE_NAMESPACE);\r
+               Map<String, Reference> nomRefMap = partitioner.getObjectMap(BerlinModelReferenceImport.NOM_REFERENCE_NAMESPACE);\r
+               Map<String, Reference> biblioDetailMap = partitioner.getObjectMap(BerlinModelRefDetailImport.BIBLIO_REFDETAIL_NAMESPACE);\r
+               Map<String, Reference> nomRefDetailMap = partitioner.getObjectMap(BerlinModelRefDetailImport.NOM_REFDETAIL_NAMESPACE);\r
                \r
                Object nomRefFkObj = rs.getObject("NomStatusRefFk");\r
                Object nomRefDetailFkObj = rs.getObject("NomStatusRefDetailFk");\r
@@ -240,7 +261,7 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                        if (nomRefFkObj != null){\r
                                String nomRefFk = String.valueOf(nomRefFkObj);\r
                                String nomRefDetailFk = String.valueOf(nomRefDetailFkObj);\r
-                               ReferenceBase ref = getReferenceFromMaps(biblioRefMap,\r
+                               Reference<?> ref = getReferenceFromMaps(biblioRefMap,\r
                                                nomRefMap, biblioDetailMap, nomRefDetailMap,\r
                                                nomRefDetailFk, nomRefFk);                                                                      \r
                                \r
@@ -248,7 +269,7 @@ public class BerlinModelNameStatusImport extends BerlinModelImportBase {
                                if (ref == null ){\r
                                        //TODO\r
                                        if (! config.isIgnoreNull()){logger.warn("Reference (refFk = " + nomRefFk + ") for NomStatus of TaxonName (nameId = " + nameId + ")"+\r
-                                               " was not found in reference store. Nomenclatural reference was not set!!");}\r
+                                               " was not found in reference store. Nomenclatural status reference was not set!!");}\r
                                }else{\r
                                        nomStatus.setCitation(ref);\r
                                }\r