(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelReferenceIO.java
index 01e5c95f532366182908e8e8dfb3accd2cd9f1aa..00246e042bf66751e3ed167db915fc6df92855ff 100644 (file)
@@ -11,24 +11,20 @@ import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_JOURNAL
 import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_PART_OF_OTHER_TITLE;\r
 import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_UNKNOWN;\r
 import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.REF_WEBSITE;\r
+import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelImportConfigurator.DO_REFERENCES.*;\r
 \r
 import java.sql.ResultSet;\r
 import java.sql.SQLException;\r
 import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
 import java.util.Iterator;\r
 import java.util.List;\r
-import java.util.Map;\r
-import java.util.UUID;\r
 \r
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
 import eu.etaxonomy.cdm.api.service.IReferenceService;\r
 import eu.etaxonomy.cdm.io.source.Source;\r
-import eu.etaxonomy.cdm.model.common.Annotation;\r
-import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.reference.Article;\r
 import eu.etaxonomy.cdm.model.reference.Book;\r
 import eu.etaxonomy.cdm.model.reference.BookSection;\r
@@ -47,21 +43,19 @@ public class BerlinModelReferenceIO {
 \r
        private static int modCount = 1000;\r
 \r
-       public static boolean invoke(\r
-                       Source source, \r
-                       CdmApplicationController cdmApp, \r
-                       boolean deleteAll, \r
-                       Map<Integer, UUID> referenceMap){\r
-               \r
+       public static boolean invoke(BerlinModelImportConfigurator bmiConfig, CdmApplicationController cdmApp,\r
+                       MapWrapper<ReferenceBase> referenceMap, MapWrapper<Team> authorMap){\r
+               Source source = bmiConfig.getSource();\r
                String dbAttrName;\r
                String cdmAttrName;\r
                boolean success = true;\r
-               Map<Integer, ReferenceBase> referenceCollectionMap = new HashMap<Integer, ReferenceBase>();\r
+               MapWrapper<ReferenceBase> referenceStore= new MapWrapper<ReferenceBase>(null);\r
+               //Map<Integer, ReferenceBase> referenceCollectionMap = new HashMap<Integer, ReferenceBase>();\r
                \r
                \r
                logger.info("start makeReferences ...");\r
                IReferenceService referenceService = cdmApp.getReferenceService();\r
-               boolean delete = deleteAll;\r
+               boolean delete = bmiConfig.isDeleteAll();\r
 \r
 //             if (delete){\r
 //                     List<TaxonNameBase> listAllReferences =  referenceService.getAllReferences(0, 1000);\r
@@ -83,31 +77,38 @@ public class BerlinModelReferenceIO {
                                                " InReference.InRefFk AS InRefInRefFk, InInReference.InRefFk AS InInRefInRefFk " +\r
                     " FROM Reference AS InInReference " +\r
                        " RIGHT OUTER JOIN Reference AS InReference ON InInReference.RefId = InReference.InRefFk " + \r
-                       " RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk ";\r
-                       \r
+                       " RIGHT OUTER JOIN Reference ON InReference.RefId = dbo.Reference.InRefFk " + \r
+                                       " WHERE (1=1) "; \r
+                       //strQueryBase += " AND Reference.refId = 7000000 " ;\r
                        String strQueryNoInRef = strQueryBase + \r
-                               " WHERE (Reference.InRefFk is NULL) ";\r
-\r
+                               " AND (Reference.InRefFk is NULL) ";\r
                        \r
                        String strQuery1InRef = strQueryBase + \r
-                               " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";\r
+                               " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NULL) ";\r
 \r
                        String strQuery2InRef = strQueryBase + \r
-                               " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";\r
+                               " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NULL) ";\r
 \r
                        String strQueryTesMaxRecursion = strQueryBase + \r
-                               " WHERE (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
+                               " AND (Reference.InRefFk is NOT NULL) AND (InReference.InRefFk is NOT NULL) AND (InInReference.InRefFk is NOT NULL) ";\r
 \r
                        ResultSet testMaxRecursionResultSet = source.getResultSet(strQueryTesMaxRecursion);\r
                        if (testMaxRecursionResultSet.next() == true){\r
                                logger.error("Maximum allowed InReference recursions exceeded in Berlin Model. Maximum recursion level is 2.");\r
                                return false;\r
                        }\r
+\r
+                       if (bmiConfig.getDoReferences() == CONCEPT_REFERENCES){\r
+                               strQueryNoInRef += " AND ( Reference.refId IN ( SELECT ptRefFk FROM PTaxon) ) ";\r
+                       }\r
                        \r
                        List<ResultSet> resultSetList = new ArrayList<ResultSet>();\r
                        resultSetList.add(source.getResultSet(strQueryNoInRef));\r
-                       resultSetList.add(source.getResultSet(strQuery1InRef));\r
-                       resultSetList.add(source.getResultSet(strQuery2InRef));\r
+                       if (bmiConfig.getDoReferences() == ALL || bmiConfig.getDoReferences() == NOMENCLATURAL){\r
+                               resultSetList.add(source.getResultSet(strQuery1InRef));\r
+                               resultSetList.add(source.getResultSet(strQuery2InRef));\r
+                       }\r
+                       \r
                        \r
                        int i = 0;\r
                        //for each reference\r
@@ -138,8 +139,8 @@ public class BerlinModelReferenceIO {
                                                        if (inRefFk != null){\r
                                                                if (inRefCategoryFk == REF_JOURNAL){\r
                                                                        int inRefFkInt = (Integer)inRefFk;\r
-                                                                       if (referenceCollectionMap.containsKey(inRefFkInt)){\r
-                                                                               ReferenceBase inJournal = referenceCollectionMap.get(inRefFkInt);\r
+                                                                       if (referenceStore.containsId(inRefFkInt)){\r
+                                                                               ReferenceBase inJournal = referenceStore.get(inRefFkInt);\r
                                                                                if (Journal.class.isAssignableFrom(inJournal.getClass())){\r
                                                                                        ((Article)referenceBase).setInJournal((Journal)inJournal);\r
                                                                                }else{\r
@@ -162,8 +163,8 @@ public class BerlinModelReferenceIO {
                                                                referenceBase = new BookSection();\r
                                                                if (inRefFk != null){\r
                                                                        int inRefFkInt = (Integer)inRefFk;\r
-                                                                       if (referenceCollectionMap.containsKey(inRefFkInt)){\r
-                                                                               ReferenceBase inBook = referenceCollectionMap.get(inRefFkInt);\r
+                                                                       if (referenceStore.containsId(inRefFkInt)){\r
+                                                                               ReferenceBase inBook = referenceStore.get(inRefFkInt);\r
                                                                                if (Book.class.isAssignableFrom(inBook.getClass())){\r
                                                                                        ((BookSection)referenceBase).setInBook((Book)inBook);\r
                                                                                }else{\r
@@ -207,14 +208,10 @@ public class BerlinModelReferenceIO {
                                                \r
                                                dbAttrName = "nomRefCache";\r
                                                cdmAttrName = "titleCache";\r
-                                               success &= ImportHelper.addStringValue(rs, referenceBase, dbAttrName, cdmAttrName);\r
-                                               \r
+                                               success &= ImportHelper.addStringValue(rs, referenceBase, dbAttrName, cdmAttrName, ImportHelper.NO_OVERWRITE);\r
                                                \r
                                                //refId\r
-                                               //TODO\r
-//                                             Annotation annotation = new Annotation("Berlin Model id: " + String.valueOf(refId), Language.DEFAULT());\r
-//                                             referenceBase.addAnnotations(annotation);\r
-                                               //referenceBase.setLsid(String.valueOf(refId));\r
+                                               ImportHelper.setOriginalSource(referenceBase, bmiConfig.getSourceReference(), refId);\r
                                                \r
                                                //      dbAttrName = "BinomHybFlag";\r
                                                //      cdmAttrName = "isBinomHybrid";\r
@@ -223,9 +220,9 @@ public class BerlinModelReferenceIO {
                                                //TODO\r
                                                // all attributes\r
                                                \r
-                                               if (! referenceCollectionMap.containsKey(refId)){\r
-                                                       referenceCollectionMap.put(refId, referenceBase);\r
-                                                       referenceMap.put(refId, referenceBase.getUuid());\r
+                                               if (! referenceStore.containsId(refId)){\r
+                                                       referenceStore.put(refId, referenceBase);\r
+                                                       referenceMap.put(refId, referenceBase);\r
                                                }else{\r
                                                        logger.warn("Duplicate refId in Berlin Model database. Second reference was not imported !!");\r
                                                }\r
@@ -238,7 +235,7 @@ public class BerlinModelReferenceIO {
                                        \r
                                } // end resultSet\r
                                //save and store in map\r
-                               referenceService.saveReference(referenceCollectionMap.values());\r
+                               referenceService.saveReferenceAll(referenceStore.objects());\r
                        }//end resultSetList    \r
 \r
                        logger.info("end makeReferences ...");\r