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