(no commit message)
[cdmlib.git] / cdmlib-io / src / main / java / eu / etaxonomy / cdm / io / berlinModel / BerlinModelImport.java
index 88a377b5d308c4de43943c55db99b6d773a8777e..f0352e448ac16fc96e3c61d39eb0ec5515ce85c2 100644 (file)
@@ -1,46 +1,22 @@
 package eu.etaxonomy.cdm.io.berlinModel;\r
 \r
-import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelTransformer.*;\r
-import java.sql.ResultSet;\r
-import java.sql.SQLException;\r
-\r
-\r
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Service;\r
 \r
 import eu.etaxonomy.cdm.api.application.CdmApplicationController;\r
-import eu.etaxonomy.cdm.api.service.ITaxonService;\r
+import eu.etaxonomy.cdm.database.DataSourceNotFoundException;\r
 import eu.etaxonomy.cdm.io.source.Source;\r
-import eu.etaxonomy.cdm.model.agent.Agent;\r
+import eu.etaxonomy.cdm.model.agent.Team;\r
+import eu.etaxonomy.cdm.model.common.init.TermNotFoundException;\r
 import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
-import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
-import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
+import static eu.etaxonomy.cdm.io.berlinModel.BerlinModelImportConfigurator.DO_REFERENCES.*;\r
 \r
 @Service\r
 public class BerlinModelImport {\r
        private static final Logger logger = Logger.getLogger(BerlinModelImport.class);\r
        \r
-       private boolean deleteAll = false;\r
-       \r
-       private boolean makeAuthors = false;\r
-       private boolean makeReferences = true;\r
-       private boolean makeTaxonNames = true;\r
-       private boolean makeTaxa = true;\r
-       private boolean makeRelNames = false;\r
-       private boolean makeNameStatus = false;\r
-       private boolean makeRelTaxa = true;\r
-       private boolean makeFacts = true;\r
-       \r
-       \r
-       //BerlinModelDB\r
-       private Source source;\r
-       \r
-       //CdmApplication\r
-       private CdmApplicationController cdmApp;\r
-       \r
        //Constants\r
        //final boolean OBLIGATORY = true; \r
        //final boolean FACULTATIVE = false; \r
@@ -49,7 +25,7 @@ public class BerlinModelImport {
        \r
        //Hashmaps for Joins\r
        //OLD: private Map<Integer, UUID> referenceMap = new HashMap<Integer, UUID>();\r
-       private MapWrapper<Agent> authorStore= new MapWrapper<Agent>(null);\r
+       private MapWrapper<Team> authorStore= new MapWrapper<Team>(null);\r
        private MapWrapper<ReferenceBase> referenceStore= new MapWrapper<ReferenceBase>(null);\r
        private MapWrapper<TaxonNameBase> taxonNameStore = new MapWrapper<TaxonNameBase>(null);\r
        private MapWrapper<TaxonBase> taxonStore = new MapWrapper<TaxonBase>(null);\r
@@ -58,16 +34,32 @@ public class BerlinModelImport {
        /**\r
         * Executes the whole \r
         */\r
-       public boolean doImport(Source source, CdmApplicationController cdmApp){\r
-               if (source == null || cdmApp == null){\r
-                       throw new NullPointerException("Source and CdmApplicationController must not be null");\r
+       public boolean doImport(BerlinModelImportConfigurator bmiConfig){\r
+               CdmApplicationController cdmApp;\r
+               if (bmiConfig == null){\r
+                       logger.warn("BerlinModelImportConfiguration is null");\r
+                       return false;\r
+               }else if (! bmiConfig.isValid()){\r
+                       logger.warn("BerlinModelImportConfiguration is not valid");\r
+                       return false;\r
+               }\r
+               try {\r
+                       cdmApp = CdmApplicationController.NewInstance(bmiConfig.getDestination(), bmiConfig.getDbSchemaValidation());\r
+               } catch (DataSourceNotFoundException e) {\r
+                       logger.warn("could not connect to destination database");\r
+                       return false;\r
+               }catch (TermNotFoundException e) {\r
+                       logger.warn("could not find needed term in destination datasource");\r
+                       return false;\r
                }\r
-               this.source = source;\r
-               this.cdmApp = cdmApp;\r
+               Source source = bmiConfig.getSource();\r
+               ReferenceBase sourceReference = bmiConfig.getSourceReference();\r
+               System.out.println("Start import from BerlinModel ("+ bmiConfig.getSource().getDatabase() + ") to Cdm  (" + cdmApp.getDatabaseService().getUrl() + ") ...");\r
+               \r
 \r
                //Authors\r
-               if (makeAuthors){\r
-                       if (! BerlinModelAuthorIO.invoke(source, cdmApp, deleteAll, authorStore)){\r
+               if (bmiConfig.isDoAuthors()){\r
+                       if (! BerlinModelAuthorIO.invoke(bmiConfig, cdmApp, authorStore)){\r
                                logger.warn("No Authors imported");\r
                                return false;\r
                        }\r
@@ -76,8 +68,8 @@ public class BerlinModelImport {
                }\r
                \r
                //References\r
-               if (makeReferences){\r
-                       if (! BerlinModelReferenceIO.invoke(source, cdmApp, deleteAll, referenceStore, authorStore)){\r
+               if (bmiConfig.getDoReferences() != NONE){\r
+                       if (! BerlinModelReferenceIO.invoke(bmiConfig, cdmApp, referenceStore, authorStore)){\r
                                return false;\r
                        }\r
                }else{\r
@@ -86,18 +78,31 @@ public class BerlinModelImport {
                }\r
                \r
                //TaxonNames\r
-               if (makeTaxonNames){\r
-                       if (! BerlinModelTaxonNameIO.invoke(source, cdmApp, deleteAll, taxonNameStore, referenceStore, authorStore)){\r
+               if (bmiConfig.isDoTaxonNames()){\r
+                       if (! BerlinModelTaxonNameIO.invoke(bmiConfig, cdmApp, taxonNameStore, referenceStore, authorStore)){\r
                                //return false;\r
                        }\r
                }else{\r
                        logger.warn("No TaxonNames imported");\r
                        taxonNameStore = null;\r
                }\r
+\r
+               \r
+               //make and save RelNames\r
+               if(bmiConfig.isDoRelNames()){\r
+                       if (! BerlinModelTaxonNameIO.invokeRelations(bmiConfig, cdmApp, taxonNameStore, referenceStore)){\r
+                               return false;\r
+                       }\r
+               }else{\r
+                       logger.warn("No RelPTaxa imported");\r
+               }\r
+\r
+               //TODO NomStatus\r
+               //TODO Types\r
                \r
                //make and save Taxa\r
-               if(makeTaxa){\r
-                       if (! BerlinModelTaxonIO.invoke(source, cdmApp, deleteAll, taxonStore, taxonNameStore, referenceStore)){\r
+               if(bmiConfig.isDoTaxa()){\r
+                       if (! BerlinModelTaxonIO.invoke(bmiConfig, cdmApp, taxonStore, taxonNameStore, referenceStore)){\r
                                return false;\r
                        }\r
                }else{\r
@@ -106,21 +111,17 @@ public class BerlinModelImport {
                }\r
                \r
                //make and save RelPTaxa\r
-               if(makeRelTaxa){\r
-                       if (! BerlinModelTaxonIO.invokeRelations(source, cdmApp, deleteAll, taxonStore, referenceStore)){\r
+               if(bmiConfig.isDoRelTaxa()){\r
+                       if (! BerlinModelTaxonIO.invokeRelations(bmiConfig, cdmApp, taxonStore, referenceStore)){\r
                                return false;\r
                        }\r
                }else{\r
                        logger.warn("No RelPTaxa imported");\r
                }\r
-\r
-               \r
-               //make and save Facts\r
-               //makeRelTaxa();\r
                \r
                //make and save Facts\r
-               if(makeFacts){\r
-                       if (! BerlinModelFactsIO.invoke(source, cdmApp, deleteAll, taxonStore, referenceStore)){\r
+               if(bmiConfig.isDoFacts()){\r
+                       if (! BerlinModelFactsIO.invoke(bmiConfig, cdmApp, taxonStore, referenceStore)){\r
                                return false;\r
                        }\r
                }else{\r
@@ -128,6 +129,7 @@ public class BerlinModelImport {
                }\r
                \r
                //return\r
+               System.out.println("End import from BerlinModel ("+ source.getDatabase() + ") to Cdm  (" + cdmApp.getDatabaseService().getUrl() + ") ...");\r
                return true;\r
        }\r
        \r