Skip to content
Snippets Groups Projects
Commit e6b2a5fc authored by cramakri's avatar cramakri
Browse files

LMS-1503 Refactoring put implementation.

SVN: 16225
parent f65f92f1
No related branches found
No related tags found
No related merge requests found
......@@ -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()
......
......@@ -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();
}
}
/*
* 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();
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment