From 079540c71785738c7897d9815a7c0c7352ae38d5 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Tue, 2 Aug 2011 13:01:27 +0000
Subject: [PATCH] Completed implementation of
 IDataSetRegistrationTransaction.getDatabaseQuery()

SVN: 22310
---
 .../api/v1/impl/AbstractTransactionState.java | 27 +++++++++++++++++--
 .../impl/DataSetRegistrationTransaction.java  |  6 ++---
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
index 75d7d23cac4..5cae0002ad7 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/AbstractTransactionState.java
@@ -22,6 +22,9 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import net.lemnik.eodsql.DynamicTransactionQuery;
+import net.lemnik.eodsql.QueryTool;
+
 import ch.systemsx.cisd.common.exceptions.NotImplementedException;
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationDetails;
@@ -117,6 +120,9 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
 
         private final List<Material> materialsToBeRegistered = new ArrayList<Material>();
 
+        private final List<DynamicTransactionQuery> queriesToCommit =
+                new ArrayList<DynamicTransactionQuery>();
+
         private String userIdOrNull = null;
 
         public LiveTransactionState(DataSetRegistrationTransaction<T> parent,
@@ -264,7 +270,7 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
             {
                 return result;
             }
-            
+
             ExternalData dataSet = openBisService.tryGetDataSet(dataSetCode);
             if (dataSet == null)
             {
@@ -433,6 +439,13 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
             return dstFile.getAbsolutePath();
         }
 
+        public DynamicTransactionQuery getDatabaseQuery(String dataSourceName)
+        {
+            DynamicTransactionQuery query = QueryTool.getQuery(DynamicTransactionQuery.class);
+            queriesToCommit.add(query);
+            return query;
+        }
+
         public void deleteFile(String src)
         {
             throw new NotImplementedException();
@@ -467,6 +480,12 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
             DataSetStorageAlgorithmRunner<T> runner =
                     new DataSetStorageAlgorithmRunner<T>(algorithms, parent, parent);
             List<DataSetInformation> datasets = runner.prepareAndRunStorageAlgorithms();
+            for (DynamicTransactionQuery query : queriesToCommit)
+            {
+                query.commit();
+                query.close(false);
+            }
+
             return datasets.isEmpty() == false;
         }
 
@@ -478,6 +497,11 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
         {
             rollbackStack.rollbackAll();
             registeredDataSets.clear();
+            for (DynamicTransactionQuery query : queriesToCommit)
+            {
+                query.rollback();
+                query.close(false);
+            }
         }
 
         /**
@@ -611,7 +635,6 @@ abstract class AbstractTransactionState<T extends DataSetInformation>
         {
             return false;
         }
-
     }
 
     private static abstract class TerminalTransactionState<T extends DataSetInformation> extends
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
index 49e17f9f47e..0d2dc5f380e 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransaction.java
@@ -22,7 +22,6 @@ import java.util.Date;
 import java.util.List;
 
 import net.lemnik.eodsql.DynamicTransactionQuery;
-import net.lemnik.eodsql.QueryTool;
 
 import org.apache.commons.lang.time.DateFormatUtils;
 import org.apache.log4j.Logger;
@@ -355,7 +354,8 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem
 
     private void invokeDidCommitTransaction()
     {
-        try {
+        try
+        {
             registrationService.didCommitTransaction(this);
         } catch (Throwable t)
         {
@@ -453,6 +453,6 @@ public class DataSetRegistrationTransaction<T extends DataSetInformation> implem
     public DynamicTransactionQuery getDatabaseQuery(String dataSourceName)
             throws IllegalArgumentException
     {
-        return QueryTool.getQuery(DynamicTransactionQuery.class);
+        return getStateAsLiveState().getDatabaseQuery(dataSourceName);
     }
 }
-- 
GitLab