diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ConfigProvider.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ConfigProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..4b69e72bad146b9f18413fbe9da3c973d329abac --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ConfigProvider.java @@ -0,0 +1,60 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * 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.etlserver; + +import java.io.File; +import java.util.Properties; + +import ch.systemsx.cisd.openbis.dss.generic.shared.IConfigProvider; +import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; + +/** + * The default implementation of {@link IConfigProvider}. + * <p> + * Currently it is a simple wrapper around DssPropertyParametersUtil, but in the future we might + * consider replacing it. + * + * @author Kaloyan Enimanev + */ +public class ConfigProvider implements IConfigProvider +{ + private final Properties properties; + + public ConfigProvider() + { + this(DssPropertyParametersUtil.loadServiceProperties()); + } + + /** + * helper constructor - can be used for testing purposes. + */ + public ConfigProvider(Properties properties) + { + this.properties = properties; + } + + public File getStoreRoot() + { + return DssPropertyParametersUtil.getStoreRootDir(properties); + } + + public String getDataStoreCode() + { + return DssPropertyParametersUtil.getDataStoreCode(properties); + } + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java index 69f8596379fe4a7880a092e3b073179973294caa..752bbcfbefd42fb760f925c81e576a6cfb36722f 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java +++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTask.java @@ -37,10 +37,10 @@ import ch.systemsx.cisd.common.utilities.PropertyParametersUtil; import ch.systemsx.cisd.etlserver.ETLDaemon; import ch.systemsx.cisd.etlserver.plugins.DataSetMover; import ch.systemsx.cisd.etlserver.plugins.IDataSetMover; +import ch.systemsx.cisd.openbis.dss.generic.shared.IConfigProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IShareIdManager; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; -import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.SegmentedStoreUtils; import ch.systemsx.cisd.openbis.dss.generic.shared.utils.Share; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; @@ -93,12 +93,14 @@ public class EagerShufflingTask extends AbstractPostRegistrationTask { this(properties, ETLDaemon.getIdsOfIncomingShares(), service, ServiceProvider.getShareIdManager(), new SimpleFreeSpaceProvider(), new DataSetMover(service, - ServiceProvider.getShareIdManager()), new Log4jSimpleLogger(operationLog)); + ServiceProvider.getShareIdManager()), ServiceProvider.getConfigProvider(), + new Log4jSimpleLogger(operationLog)); } - EagerShufflingTask(Properties properties, Set<String> incomingShares, IEncapsulatedOpenBISService service, - IShareIdManager shareIdManager, IFreeSpaceProvider freeSpaceProvider, - IDataSetMover dataSetMover, ISimpleLogger logger) + EagerShufflingTask(Properties properties, Set<String> incomingShares, + IEncapsulatedOpenBISService service, IShareIdManager shareIdManager, + IFreeSpaceProvider freeSpaceProvider, IDataSetMover dataSetMover, + IConfigProvider configProvider, ISimpleLogger logger) { super(properties, service); this.incomingShares = incomingShares; @@ -107,8 +109,8 @@ public class EagerShufflingTask extends AbstractPostRegistrationTask this.dataSetMover = dataSetMover; this.logger = logger; - dataStoreCode = DssPropertyParametersUtil.getDataStoreCode(properties); - storeRoot = DssPropertyParametersUtil.getStoreRootDir(properties); + dataStoreCode = configProvider.getDataStoreCode(); + storeRoot = configProvider.getStoreRoot(); if (storeRoot.isDirectory() == false) { throw new ConfigurationFailureException( diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IConfigProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IConfigProvider.java new file mode 100644 index 0000000000000000000000000000000000000000..edab468ac358e9507baa4bfb68b96f9403466902 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/IConfigProvider.java @@ -0,0 +1,39 @@ +/* + * Copyright 2011 ETH Zuerich, CISD + * + * 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.shared; + +import java.io.File; + +/** + * A provider for DSS configuration infos which can be used at runtime. + * + * @author Kaloyan Enimanev + */ +public interface IConfigProvider +{ + + /** + * Return the DSS store root. + */ + File getStoreRoot(); + + /** + * Return the data store code. + */ + String getDataStoreCode(); + +} diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java index 8869f2063e92070f7b4886f19bf4bdb80dfcad11..4f3f9854dfea53ee4ba5ada560a3356412c1fa8c 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/ServiceProvider.java @@ -109,6 +109,11 @@ public class ServiceProvider return ((DataSourceProvider) getApplicationContext().getBean("data-source-provider")); } + public static IConfigProvider getConfigProvider() + { + return ((IConfigProvider) getApplicationContext().getBean("config-provider")); + } + public static IDataStoreServiceInternal getDataStoreService() { Advised advised = (Advised) getApplicationContext().getBean("data-store-service"); diff --git a/datastore_server/source/java/dssApplicationContext.xml b/datastore_server/source/java/dssApplicationContext.xml index ec66d8a79919cdef2751544bab197c16882faad7..86cb531ea1c927da67fde05aae759372b0a13cd7 100644 --- a/datastore_server/source/java/dssApplicationContext.xml +++ b/datastore_server/source/java/dssApplicationContext.xml @@ -114,6 +114,8 @@ <bean id="data-source-provider" class="ch.systemsx.cisd.openbis.dss.generic.shared.DataSourceProvider" /> + <bean id="config-provider" class="ch.systemsx.cisd.etlserver.ConfigProvider"/> + <!-- // This discovers on-the-fly all <code>org.springframework.aop.Advisor</code> implementations. --> diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTaskTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTaskTest.java index 6deda6a6316fe719495a8cccf161f3bc790a2303..3e438a9084b03006f41403fa33e787d498e797cb 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTaskTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/postregistration/EagerShufflingTaskTest.java @@ -42,9 +42,9 @@ import ch.systemsx.cisd.common.logging.ISimpleLogger; import ch.systemsx.cisd.common.logging.LogLevel; import ch.systemsx.cisd.common.test.RecordingMatcher; import ch.systemsx.cisd.etlserver.plugins.IDataSetMover; +import ch.systemsx.cisd.openbis.dss.generic.shared.IConfigProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IShareIdManager; -import ch.systemsx.cisd.openbis.dss.generic.shared.utils.DssPropertyParametersUtil; import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO; /** @@ -65,6 +65,8 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase private IShareIdManager shareIdManager; private IFreeSpaceProvider freeSpaceProvider; private IDataSetMover dataSetMover; + + private IConfigProvider configProvider; private ISimpleLogger logger; private File store; private File share1; @@ -81,6 +83,7 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase service = context.mock(IEncapsulatedOpenBISService.class); shareIdManager = context.mock(IShareIdManager.class); freeSpaceProvider = context.mock(IFreeSpaceProvider.class); + configProvider = context.mock(IConfigProvider.class); dataSetMover = context.mock(IDataSetMover.class); logger = context.mock(ISimpleLogger.class); store = new File(workingDirectory.getAbsolutePath(), "store"); @@ -110,6 +113,7 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase @Test public void testShufflingIntoAnExtensionShare() { + prepareConfigProvider(); EagerShufflingTask task = createTask(); RecordingMatcher<HostAwareFile> hostAwareFileMatcher = new RecordingMatcher<HostAwareFile>(); @@ -137,6 +141,7 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase @Test public void testShufflingIntoAnotherIncomingShare() { + prepareConfigProvider(); EagerShufflingTask task = createTask(); RecordingMatcher<HostAwareFile> hostAwareFileMatcher = new RecordingMatcher<HostAwareFile>(); @@ -164,11 +169,13 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase @Test public void testShufflingButNoShareFoundExceptTheOwnOne() { + prepareConfigProvider(); EagerShufflingTask task = createTask(); RecordingMatcher<HostAwareFile> hostAwareFileMatcher = new RecordingMatcher<HostAwareFile>(); prepareFreeSpaceProvider(hostAwareFileMatcher, 200, 10, 10, 0); prepareListDataSets(); + RecordingMatcher<String> logMessageMatcher = prepareLogging(LogLevel.WARN); IPostRegistrationTaskExecutor executor = task.createExecutor(DATA_SET_CODE1); @@ -204,6 +211,19 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase }); } + private void prepareConfigProvider() + { + context.checking(new Expectations() + { + { + allowing(configProvider).getDataStoreCode(); + will(returnValue(DATA_STORE_SERVER_CODE)); + allowing(configProvider).getStoreRoot(); + will(returnValue(store)); + } + }); + } + private void prepareGetShareId() { context.checking(new Expectations() @@ -269,8 +289,6 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase private EagerShufflingTask createTask() { Properties properties = new Properties(); - properties.setProperty(DssPropertyParametersUtil.DSS_CODE_KEY, DATA_STORE_SERVER_CODE); - properties.setProperty(DssPropertyParametersUtil.STOREROOT_DIR_KEY, store.getPath()); properties.setProperty(EagerShufflingTask.SHARE_FINDER_KEY + ".class", SimpleShareFinder.class.getName()); return createTask(properties); @@ -280,7 +298,7 @@ public class EagerShufflingTaskTest extends AbstractFileSystemTestCase { return new EagerShufflingTask(properties, new LinkedHashSet<String>(Arrays.asList("1", "2")), service, shareIdManager, - freeSpaceProvider, dataSetMover, logger); + freeSpaceProvider, dataSetMover, configProvider, logger); } }