From 5db7d3364cdfef65eb1ada8d62b5dce38bb7f121 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Thu, 30 Oct 2014 10:33:29 +0000
Subject: [PATCH] SSDM-1081: Refactoring for unit testing: Extracting interface
 IMultiDatasetArchiverDBTransaction from MultiDatasetArchiverDBTransaction.

SVN: 32693
---
 .../archiver/MultiDatasetArchiver.java        | 35 ++++++-----
 .../IMultiDatasetArchiverDBTransaction.java   | 58 +++++++++++++++++++
 .../MultiDatasetArchiverDBTransaction.java    | 21 ++++---
 3 files changed, 94 insertions(+), 20 deletions(-)
 create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/IMultiDatasetArchiverDBTransaction.java

diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
index cec21cfe104..7fb1d566ebe 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/MultiDatasetArchiver.java
@@ -23,6 +23,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Properties;
 
+import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.NotImplementedException;
 import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.filesystem.BooleanStatus;
@@ -34,7 +35,7 @@ import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractArch
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiveCopierFactory;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.RsyncArchiver;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.SshCommandExecutorFactory;
-import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.IMultiDataSetArchiverReadonlyQueryDAO;
+import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.IMultiDatasetArchiverDBTransaction;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverContainerDTO;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDataSetArchiverDataSetDTO;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess.MultiDatasetArchiverDBTransaction;
@@ -82,6 +83,8 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
 
     public static final Long DEFAULT_MAXIMUM_CONTAINER_SIZE_IN_BYTES = 80L * 1024 * 1024 * 1024;
 
+    private IMultiDatasetArchiverDBTransaction transaction;
+
     public MultiDatasetArchiver(Properties properties, File storeRoot)
     {
         super(properties, storeRoot, null, null);
@@ -103,24 +106,23 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
             return result;
         }
 
-        MultiDatasetArchiverDBTransaction transaction = new MultiDatasetArchiverDBTransaction();
         try
         {
             verifyDataSetsSize(dataSets);
 
-            DatasetProcessingStatuses archiveResult = doArchive(dataSets, transaction, context);
+            DatasetProcessingStatuses archiveResult = archiveDataSets(dataSets, context);
 
             result.addResults(archiveResult);
 
-            transaction.commit();
-            transaction.close();
+            getTransaction().commit();
+            getTransaction().close();
         } catch (Exception e)
         {
             operationLog.warn("Archiving of " + dataSets.size() + " data sets failed", e);
             try
             {
-                transaction.rollback();
-                transaction.close();
+                getTransaction().rollback();
+                getTransaction().close();
             } catch (Exception ex)
             {
                 operationLog.warn("Rollback of multi dataset db transaction failed", ex);
@@ -207,8 +209,7 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
         }
     }
 
-    private DatasetProcessingStatuses doArchive(List<DatasetDescription> dataSets, MultiDatasetArchiverDBTransaction transaction,
-            ArchiverTaskContext context) throws Exception
+    private DatasetProcessingStatuses archiveDataSets(List<DatasetDescription> dataSets, ArchiverTaskContext context) throws Exception
     {
         DatasetProcessingStatuses statuses = new DatasetProcessingStatuses();
 
@@ -216,11 +217,11 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
 
         String containerPath = getFileOperations().generateContainerPath(dataSets);
 
-        MultiDataSetArchiverContainerDTO container = transaction.createContainer(containerPath);
+        MultiDataSetArchiverContainerDTO container = getTransaction().createContainer(containerPath);
 
         for (DatasetDescription dataSet : dataSets)
         {
-            transaction.insertDataset(dataSet, container);
+            getTransaction().insertDataset(dataSet, container);
         }
 
         IHierarchicalContent archivedContent = null;
@@ -348,8 +349,7 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
 
     protected boolean isDataSetPresentInArchive(String dataSetCode)
     {
-        IMultiDataSetArchiverReadonlyQueryDAO query = MultiDatasetArchiverDBTransaction.getReadonlyQuery();
-        MultiDataSetArchiverDataSetDTO dataSetInArchiveDB = query.getDataSetForCode(dataSetCode);
+        MultiDataSetArchiverDataSetDTO dataSetInArchiveDB = getTransaction().getDataSetForCode(dataSetCode);
         return dataSetInArchiveDB != null;
     }
 
@@ -361,4 +361,13 @@ public class MultiDatasetArchiver extends AbstractArchiverProcessingPlugin
         }
         return fileOperations;
     }
+
+    @Private IMultiDatasetArchiverDBTransaction getTransaction()
+    {
+        if (transaction == null)
+        {
+            transaction = new MultiDatasetArchiverDBTransaction();
+        }
+        return transaction;
+    }
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/IMultiDatasetArchiverDBTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/IMultiDatasetArchiverDBTransaction.java
new file mode 100644
index 00000000000..4d72ee67b2a
--- /dev/null
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/IMultiDatasetArchiverDBTransaction.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2014 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.archiver.dataaccess;
+
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public interface IMultiDatasetArchiverDBTransaction
+{
+
+    public List<MultiDataSetArchiverDataSetDTO> getDataSetsForContainer(MultiDataSetArchiverContainerDTO container);
+
+    /**
+     * Creates a new container
+     */
+    public MultiDataSetArchiverContainerDTO createContainer(String path);
+
+    public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet,
+            MultiDataSetArchiverContainerDTO container);
+
+    public MultiDataSetArchiverDataSetDTO getDataSetForCode(String code);
+
+    /**
+     * @see net.lemnik.eodsql.TransactionQuery#commit()
+     */
+    public void commit();
+
+    /**
+     * @see net.lemnik.eodsql.TransactionQuery#rollback()
+     */
+    public void rollback();
+
+    /**
+     * @see net.lemnik.eodsql.BaseQuery#close()
+     */
+    public void close();
+
+}
\ No newline at end of file
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
index 06e3b78b594..bcdd19235ca 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/standard/archiver/dataaccess/MultiDatasetArchiverDBTransaction.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
 /**
  * @author Jakub Straszewski
  */
-public class MultiDatasetArchiverDBTransaction
+public class MultiDatasetArchiverDBTransaction implements IMultiDatasetArchiverDBTransaction
 {
 
     private static DataSource dataSource = ServiceProvider.getDataSourceProvider().getDataSource("multi-dataset-archiver-db");
@@ -40,16 +40,12 @@ public class MultiDatasetArchiverDBTransaction
         this.transaction = getTransactionalQuery();
     }
 
-    public static IMultiDataSetArchiverReadonlyQueryDAO getReadonlyQuery()
-    {
-        return QueryTool.getQuery(dataSource, IMultiDataSetArchiverReadonlyQueryDAO.class);
-    }
-
     private static IMultiDataSetArchiverQueryDAO getTransactionalQuery()
     {
         return QueryTool.getQuery(dataSource, IMultiDataSetArchiverQueryDAO.class);
     }
 
+    @Override
     public List<MultiDataSetArchiverDataSetDTO> getDataSetsForContainer(MultiDataSetArchiverContainerDTO container)
     {
         return transaction.listDataSetsForContainerId(container.getId());
@@ -58,6 +54,7 @@ public class MultiDatasetArchiverDBTransaction
     /**
      * Creates a new container
      */
+    @Override
     public MultiDataSetArchiverContainerDTO createContainer(String path)
     {
 
@@ -70,12 +67,13 @@ public class MultiDatasetArchiverDBTransaction
         return container;
     }
 
+    @Override
     public MultiDataSetArchiverDataSetDTO insertDataset(DatasetDescription dataSet,
             MultiDataSetArchiverContainerDTO container)
     {
         String code = dataSet.getDataSetCode();
 
-        MultiDataSetArchiverDataSetDTO mads = transaction.getDataSetForCode(code);
+        MultiDataSetArchiverDataSetDTO mads = getDataSetForCode(code);
 
         if (mads != null)
         {
@@ -90,9 +88,16 @@ public class MultiDatasetArchiverDBTransaction
         return mads;
     }
 
+    @Override
+    public MultiDataSetArchiverDataSetDTO getDataSetForCode(String code)
+    {
+        return transaction.getDataSetForCode(code);
+    }
+
     /**
      * @see net.lemnik.eodsql.TransactionQuery#commit()
      */
+    @Override
     public void commit()
     {
         transaction.commit();
@@ -101,6 +106,7 @@ public class MultiDatasetArchiverDBTransaction
     /**
      * @see net.lemnik.eodsql.TransactionQuery#rollback()
      */
+    @Override
     public void rollback()
     {
         transaction.rollback();
@@ -109,6 +115,7 @@ public class MultiDatasetArchiverDBTransaction
     /**
      * @see net.lemnik.eodsql.BaseQuery#close()
      */
+    @Override
     public void close()
     {
         transaction.close();
-- 
GitLab