include more auditing in schema update and refactor to better allow transaction suppo...
[cdmlib.git] / cdmlib-persistence / src / main / java / eu / etaxonomy / cdm / database / update / CdmUpdater.java
index c90c320293cc7bfc7d96dd7aa7d6250fbeb71ef5..064af565d966df7e35c43a56532e5326effdd43b 100644 (file)
@@ -11,10 +11,12 @@ package eu.etaxonomy.cdm.database.update;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import eu.etaxonomy.cdm.common.DefaultProgressMonitor;\r
-import eu.etaxonomy.cdm.common.IProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.DefaultProgressMonitor;\r
+import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;\r
 import eu.etaxonomy.cdm.database.CdmDataSource;\r
 import eu.etaxonomy.cdm.database.ICdmDataSource;\r
+import eu.etaxonomy.cdm.database.update.v30_31.TermUpdater_314_315;\r
+import eu.etaxonomy.cdm.database.update.v31_33.SchemaUpdater_31_33;\r
 \r
 /**\r
  * @author a.mueller\r
@@ -24,7 +26,10 @@ import eu.etaxonomy.cdm.database.ICdmDataSource;
 public class CdmUpdater {\r
        private static final Logger logger = Logger.getLogger(CdmUpdater.class);\r
        \r
-\r
+       public static CdmUpdater NewInstance(){\r
+               return new CdmUpdater();\r
+       }\r
+       \r
        /**\r
         * @param datasource\r
         * @param monitor may be <code>null</code>\r
@@ -37,26 +42,47 @@ public class CdmUpdater {
                }\r
                \r
                ISchemaUpdater currentSchemaUpdater = getCurrentSchemaUpdater();\r
+               // TODO do we really always update the terms??\r
                ITermUpdater currentTermUpdater = getCurrentTermUpdater();\r
                \r
-               int steps = currentSchemaUpdater.countSteps(datasource);\r
-               steps += currentTermUpdater.countSteps(datasource);\r
+               int steps = currentSchemaUpdater.countSteps(datasource, monitor);\r
+               steps += currentTermUpdater.countSteps(datasource, monitor);\r
                \r
                String taskName = "Update to schema version " + currentSchemaUpdater.getTargetVersion() + " and to term version " + currentTermUpdater.getTargetVersion(); //+ currentSchemaUpdater.getVersion();\r
                monitor.beginTask(taskName, steps);\r
                \r
                try {\r
+                       datasource.startTransaction();\r
                        result &= currentSchemaUpdater.invoke(datasource, monitor);\r
-                       result &= currentTermUpdater.invoke(datasource, monitor);\r
+                       if (result == true){\r
+                               result &= currentTermUpdater.invoke(datasource, monitor);\r
+                       }\r
+                       if (result == false){\r
+                               datasource.rollback();\r
+                       }else{\r
+                               datasource.commitTransaction();\r
+                       }\r
+                       \r
                } catch (Exception e) {\r
-                               monitor.warning("Stopped schema updater");\r
+                       result = false;\r
+                       monitor.warning("Stopped schema updater");\r
+               } finally {\r
+                       String message = "Update finished " + (result ? "successfully" : "with ERRORS");\r
+                       monitor.subTask(message);\r
+                       if (!result){\r
+                               monitor.warning(message);\r
+                               monitor.setCanceled(true);\r
+                       }else{\r
+                               monitor.done();\r
+                       }\r
+                       logger.info(message);\r
                }\r
-               logger.info("Update finished " + (result ? "successfully" : "with ERRORS"));\r
+               \r
                return result;\r
        }\r
        \r
        private ITermUpdater getCurrentTermUpdater() {\r
-               return TermUpdater_24_25.NewInstance();\r
+               return TermUpdater_314_315.NewInstance();\r
        }\r
 \r
        /**\r
@@ -64,11 +90,9 @@ public class CdmUpdater {
         * @return\r
         */\r
        private ISchemaUpdater getCurrentSchemaUpdater() {\r
-               return SchemaUpdater_24_25.NewInstance();\r
+               return SchemaUpdater_31_33.NewInstance();\r
        }\r
 \r
-\r
-//     5432\r
        /**\r
         * @param args\r
         */\r