From e6b2a5fcc4f4e126e2f8e94bcdac375cff23f429 Mon Sep 17 00:00:00 2001 From: cramakri <cramakri> Date: Mon, 31 May 2010 15:43:54 +0000 Subject: [PATCH] LMS-1503 Refactoring put implementation. SVN: 16225 --- .../server/api/v1/DssServiceRpcGeneric.java | 38 +----- .../server/api/v1/PutDataSetExecutor.java | 17 ++- .../server/api/v1/PutDataSetService.java | 126 ++++++++++++++++++ 3 files changed, 141 insertions(+), 40 deletions(-) create mode 100644 datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetService.java diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java index 1db8e4373f7..f9fed56c914 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/DssServiceRpcGeneric.java @@ -25,7 +25,6 @@ import java.util.ArrayList; import org.apache.log4j.Logger; import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; -import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.openbis.dss.generic.server.AbstractDssServiceRpc; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.DataSetFileDTO; @@ -41,26 +40,18 @@ import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; */ public class DssServiceRpcGeneric extends AbstractDssServiceRpc implements IDssServiceRpcGeneric { - private final File incomingDir; - static Logger getOperationLog() { return operationLog; } + private final PutDataSetService putService; + public DssServiceRpcGeneric(IEncapsulatedOpenBISService openBISService) { super(openBISService); - incomingDir = new File(System.getProperty("java.io.tmpdir"), "dss_rpc_incoming"); - incomingDir.mkdir(); + putService = new PutDataSetService(openBISService); operationLog.info("[rpc] Started DSS API V1 service."); - intializeFromProperties(); - } - - private void intializeFromProperties() - { - // ExtendedProperties props = DssPropertyParametersUtil.loadServiceProperties(); - // Parameters.createThreadParameters(props); } public FileInfoDssDTO[] listFilesForDataSet(String sessionToken, String dataSetCode, @@ -109,28 +100,7 @@ public class DssServiceRpcGeneric extends AbstractDssServiceRpc implements IDssS public void putDataSet(String sessionToken, NewDataSetDTO newDataSet, InputStream inputStream) throws IOExceptionUnchecked, IllegalArgumentException { - try - { - new PutDataSetExecutor(getOpenBISService(), incomingDir, sessionToken, newDataSet, - inputStream).execute(); - - } catch (UserFailureException e) - { - throw new IllegalArgumentException(e); - } catch (IOException e) - { - throw new IOExceptionUnchecked(e); - } finally - { - // Close the input stream now that we are done with it - try - { - inputStream.close(); - } catch (IOException ex) - { - - } - } + putService.putDataSet(sessionToken, newDataSet, inputStream); } public int getMajorVersion() diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetExecutor.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetExecutor.java index c555b9e3331..bf6ef417205 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetExecutor.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetExecutor.java @@ -48,7 +48,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier; class PutDataSetExecutor { // General State - private final IEncapsulatedOpenBISService openBisService; + private final PutDataSetService service; // Command Context State private final String sessionToken; @@ -59,14 +59,14 @@ class PutDataSetExecutor private final File dataSetDir; - PutDataSetExecutor(IEncapsulatedOpenBISService openBisService, File incomingDir, - String sessionToken, NewDataSetDTO newDataSet, InputStream inputStream) + PutDataSetExecutor(PutDataSetService service, String sessionToken, NewDataSetDTO newDataSet, + InputStream inputStream) { - this.openBisService = openBisService; + this.service = service; this.sessionToken = sessionToken; this.newDataSet = newDataSet; this.inputStream = inputStream; - this.dataSetDir = new File(incomingDir, newDataSet.getDataSetFolderName()); + this.dataSetDir = new File(service.getIncomingDir(), newDataSet.getDataSetFolderName()); if (false == this.dataSetDir.mkdir()) { throw new EnvironmentFailureException("Could not create directory for data set " @@ -85,7 +85,7 @@ class PutDataSetExecutor // Check that the session owner has at least user access to the space the new data // set should belongs to SpaceIdentifier spaceId = getSpaceIdentifierForNewDataSet(); - openBisService.checkSpaceAccess(sessionToken, spaceId); + getOpenBisService().checkSpaceAccess(sessionToken, spaceId); writeDataSetToTempDirectory(); @@ -157,4 +157,9 @@ class PutDataSetExecutor } return spaceId; } + + private IEncapsulatedOpenBISService getOpenBisService() + { + return service.getOpenBisService(); + } } diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetService.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetService.java new file mode 100644 index 00000000000..813abd78258 --- /dev/null +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/api/v1/PutDataSetService.java @@ -0,0 +1,126 @@ +/* + * Copyright 2010 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.server.api.v1; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Properties; + +import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked; +import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.mail.MailClient; +import ch.systemsx.cisd.etlserver.IETLServerPlugin; +import ch.systemsx.cisd.etlserver.Parameters; +import ch.systemsx.cisd.etlserver.ThreadParameters; +import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; +import ch.systemsx.cisd.openbis.dss.generic.shared.api.v1.NewDataSetDTO; + +/** + * Helper class that maintains the state for handling put requests. The requests themselves are + * serviced by the {@link PutDataSetExecutor}. + * + * @author Chandrasekhar Ramakrishnan + */ +class PutDataSetService +{ + private final IEncapsulatedOpenBISService openBisService; + + private final MailClient mailClient; + + private final File incomingDir; + + PutDataSetService(IEncapsulatedOpenBISService openBisService) + { + this.openBisService = openBisService; + + PutDataSetServiceInitializer initializer = new PutDataSetServiceInitializer(); + + incomingDir = initializer.getIncomingDir(); + incomingDir.mkdir(); + + mailClient = new MailClient(initializer.getMailProperties()); + } + + void putDataSet(String sessionToken, NewDataSetDTO newDataSet, InputStream inputStream) + throws IOExceptionUnchecked, IllegalArgumentException + { + try + { + new PutDataSetExecutor(this, sessionToken, newDataSet, inputStream).execute(); + + } catch (UserFailureException e) + { + throw new IllegalArgumentException(e); + } catch (IOException e) + { + throw new IOExceptionUnchecked(e); + } finally + { + // Close the input stream now that we are done with it + try + { + inputStream.close(); + } catch (IOException ex) + { + + } + } + } + + IEncapsulatedOpenBISService getOpenBisService() + { + return openBisService; + } + + MailClient getMailClient() + { + return mailClient; + } + + File getIncomingDir() + { + return incomingDir; + } +} + +/** + * Helper class to simplify initializing the final fields of the {@link PutDataSetService}. + * + * @author Chandrasekhar Ramakrishnan + */ +class PutDataSetServiceInitializer +{ + private final Parameters params = new Parameters(); + + File getIncomingDir() + { + return new File(System.getProperty("java.io.tmpdir"), "dss_rpc_incoming"); + } + + Properties getMailProperties() + { + return Parameters.createMailProperties(params.getProperties()); + } + + IETLServerPlugin getPlugin() + { + ThreadParameters[] threadParams = params.getThreads(); + return threadParams[0].getPlugin(); + } + +} -- GitLab