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 0ffd7466d2f9a43c2e7205fdb47e6bec663fcc65..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
@@ -40,24 +45,36 @@ public class CdmUpdater {
                // 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
-                       // the above apparently did not work while testing. Did not want to set the version in CdmMetaData yet\r
-//                     result &= currentSchemaUpdater.invoke(currentSchemaUpdater.getTargetVersion(), 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
                        result = false;\r
                        monitor.warning("Stopped schema updater");\r
                } finally {\r
                        String message = "Update finished " + (result ? "successfully" : "with ERRORS");\r
                        monitor.subTask(message);\r
-                       monitor.done();\r
+                       if (!result){\r
+                               monitor.warning(message);\r
+                               monitor.setCanceled(true);\r
+                       }else{\r
+                               monitor.done();\r
+                       }\r
                        logger.info(message);\r
                }\r
                \r
@@ -65,7 +82,7 @@ public class CdmUpdater {
        }\r
        \r
        private ITermUpdater getCurrentTermUpdater() {\r
-               return TermUpdater_24_25.NewInstance();\r
+               return TermUpdater_314_315.NewInstance();\r
        }\r
 \r
        /**\r
@@ -73,8 +90,7 @@ public class CdmUpdater {
         * @return\r
         */\r
        private ISchemaUpdater getCurrentSchemaUpdater() {\r
-               return SchemaUpdater_24_25.NewInstance();\r
-//             return SchemaUpdater_25_26.NewInstance();\r
+               return SchemaUpdater_31_33.NewInstance();\r
        }\r
 \r
        /**\r