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

BIS-62 SP-92 : Moved additional functionality into AbstractDbModifyingAggregationService.

SVN: 26134
parent af0f0267
No related branches found
No related tags found
No related merge requests found
...@@ -19,10 +19,12 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard; ...@@ -19,10 +19,12 @@ package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel;
import ch.systemsx.cisd.common.filesystem.FileOperations; import ch.systemsx.cisd.common.filesystem.FileOperations;
import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.filesystem.FileUtilities;
import ch.systemsx.cisd.common.mail.IMailClient; import ch.systemsx.cisd.common.mail.IMailClient;
...@@ -39,15 +41,21 @@ import ch.systemsx.cisd.etlserver.ThreadParameters; ...@@ -39,15 +41,21 @@ import ch.systemsx.cisd.etlserver.ThreadParameters;
import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState; import ch.systemsx.cisd.etlserver.TopLevelDataSetRegistratorGlobalState;
import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.NoOpDelegate; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.NoOpDelegate;
import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState; import ch.systemsx.cisd.etlserver.registrator.AbstractOmniscientTopLevelDataSetRegistrator.OmniscientTopLevelDataSetRegistratorState;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext.IHolder;
import ch.systemsx.cisd.etlserver.registrator.DataSetFile; import ch.systemsx.cisd.etlserver.registrator.DataSetFile;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationPreStagingBehavior;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService; import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService;
import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithmRunner;
import ch.systemsx.cisd.etlserver.registrator.DefaultDataSetRegistrationDetailsFactory; import ch.systemsx.cisd.etlserver.registrator.DefaultDataSetRegistrationDetailsFactory;
import ch.systemsx.cisd.etlserver.registrator.IDataSetOnErrorActionDecision; import ch.systemsx.cisd.etlserver.registrator.IDataSetOnErrorActionDecision;
import ch.systemsx.cisd.etlserver.registrator.IDataSetRegistrationDetailsFactory; import ch.systemsx.cisd.etlserver.registrator.IDataSetRegistrationDetailsFactory;
import ch.systemsx.cisd.etlserver.registrator.IOmniscientEntityRegistrator; import ch.systemsx.cisd.etlserver.registrator.IOmniscientEntityRegistrator;
import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransaction;
import ch.systemsx.cisd.etlserver.registrator.api.v1.SecondaryTransactionFailure;
import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageRecoveryManager; import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageRecoveryManager;
import ch.systemsx.cisd.etlserver.validation.DataSetValidator; import ch.systemsx.cisd.etlserver.validation.DataSetValidator;
import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
import ch.systemsx.cisd.openbis.dss.generic.shared.DataSourceQueryService; import ch.systemsx.cisd.openbis.dss.generic.shared.DataSourceQueryService;
import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService; import ch.systemsx.cisd.openbis.dss.generic.shared.IEncapsulatedOpenBISService;
import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider; import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
...@@ -131,6 +139,32 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf ...@@ -131,6 +139,32 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf
"serialized"); "serialized");
} }
@Override
public final TableModel createAggregationReport(Map<String, Object> parameters,
DataSetProcessingContext context)
{
try
{
DataSetRegistrationService<T> service = createRegistrationService(parameters);
IDataSetRegistrationTransaction transaction = service.transaction();
TableModel tableModel = process(transaction, parameters, context);
service.commit();
return tableModel;
} catch (Exception e)
{
logInvocationError(parameters, e);
return errorTableModel(parameters, e);
}
}
/**
* Do the processing using the user-provided parameters. Subclasses must implement.
*/
protected abstract TableModel process(IDataSetRegistrationTransaction transaction,
Map<String, Object> parameters, DataSetProcessingContext context);
/** /**
* Return the share that this service should use to store its data sets. * Return the share that this service should use to store its data sets.
* *
...@@ -164,40 +198,45 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf ...@@ -164,40 +198,45 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf
} }
protected DataSetRegistrationService<T> createRegistrationService(Map<String, Object> parameters) protected DataSetRegistrationService<T> createRegistrationService(Map<String, Object> parameters)
throws IOException
{ {
// Create a file that represents the parameters // Create a file that represents the parameters
final File mockIncomingDataSetFile = createMockIncomingFile(parameters); try
DataSetFile incoming = new DataSetFile(mockIncomingDataSetFile); {
final File mockIncomingDataSetFile = createMockIncomingFile(parameters);
// Create a clean-up action DataSetFile incoming = new DataSetFile(mockIncomingDataSetFile);
IDelegatedActionWithResult<Boolean> cleanUpAction =
new AbstractDelegatedActionWithResult<Boolean>(true)
{
@Override // Create a clean-up action
public Boolean execute() IDelegatedActionWithResult<Boolean> cleanUpAction =
new AbstractDelegatedActionWithResult<Boolean>(true)
{ {
mockIncomingDataSetFile.delete();
return true;
}
};
DataSetRegistrationPreStagingBehavior preStagingUsage = @Override
DataSetRegistrationPreStagingBehavior.USE_ORIGINAL; public Boolean execute()
{
mockIncomingDataSetFile.delete();
return true;
}
};
DataSetRegistrationPreStagingBehavior preStagingUsage =
DataSetRegistrationPreStagingBehavior.USE_ORIGINAL;
NoOpDelegate delegate = new NoOpDelegate(preStagingUsage); NoOpDelegate delegate = new NoOpDelegate(preStagingUsage);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
IDataSetRegistrationDetailsFactory<T> registrationDetailsFactory = IDataSetRegistrationDetailsFactory<T> registrationDetailsFactory =
(IDataSetRegistrationDetailsFactory<T>) new DefaultDataSetRegistrationDetailsFactory( (IDataSetRegistrationDetailsFactory<T>) new DefaultDataSetRegistrationDetailsFactory(
getRegistratorState(), null); getRegistratorState(), null);
DataSetRegistrationService<T> service = DataSetRegistrationService<T> service =
new DataSetRegistrationService<T>(this, incoming, registrationDetailsFactory, new DataSetRegistrationService<T>(this, incoming, registrationDetailsFactory,
cleanUpAction, delegate); cleanUpAction, delegate);
return service; return service;
} catch (IOException e)
{
throw CheckedExceptionTunnel.wrapIfNecessary(e);
}
} }
/** /**
...@@ -337,4 +376,53 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf ...@@ -337,4 +376,53 @@ public abstract class AbstractDbModifyingAggregationService<T extends DataSetInf
operationLog.error(sb.toString(), e); operationLog.error(sb.toString(), e);
} }
/**
* Callback when a transaction is rolledback. Subclasses may override.
*/
@Override
public void didRollbackTransaction(DataSetRegistrationService<T> dataSetRegistrationService,
DataSetRegistrationTransaction<T> transaction,
DataSetStorageAlgorithmRunner<T> algorithm, Throwable ex)
{
}
/**
* Callback when a transaction is committed. Subclasses may override.
*/
@Override
public void didCommitTransaction(DataSetRegistrationService<T> dataSetRegistrationService,
DataSetRegistrationTransaction<T> transaction)
{
}
/**
* Callback when a transaction is prepared to be registered. Subclasses may override.
*/
@Override
public void didPreRegistration(DataSetRegistrationService<T> service,
IHolder registrationContextHolder)
{
}
/**
* Callback when a transaction has been committed with the AS. Subclasses may override.
*/
@Override
public void didPostRegistration(DataSetRegistrationService<T> service,
IHolder registrationContextHolder)
{
}
/**
* Callback when secondary problems are encountered. Subclasses may override.
*/
@Override
public void didEncounterSecondaryTransactionErrors(
DataSetRegistrationService<T> dataSetRegistrationService,
DataSetRegistrationTransaction<T> transaction,
List<SecondaryTransactionFailure> secondaryErrors)
{
}
} }
...@@ -17,16 +17,10 @@ ...@@ -17,16 +17,10 @@
package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard; package ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard;
import java.io.File; import java.io.File;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Properties; import java.util.Properties;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationContext.IHolder;
import ch.systemsx.cisd.etlserver.registrator.DataSetRegistrationService;
import ch.systemsx.cisd.etlserver.registrator.DataSetStorageAlgorithmRunner;
import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransaction; import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransaction;
import ch.systemsx.cisd.etlserver.registrator.api.v1.SecondaryTransactionFailure;
import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.DataSetRegistrationTransaction;
import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext; import ch.systemsx.cisd.openbis.dss.generic.shared.DataSetProcessingContext;
import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation; import ch.systemsx.cisd.openbis.dss.generic.shared.dto.DataSetInformation;
import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
...@@ -41,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.util.SimpleTableModelBuilder; ...@@ -41,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.shared.util.SimpleTableModelBuilder;
public class ExampleDbModifyingAggregationService extends public class ExampleDbModifyingAggregationService extends
AbstractDbModifyingAggregationService<DataSetInformation> AbstractDbModifyingAggregationService<DataSetInformation>
{ {
private static final long serialVersionUID = 1L;
/** /**
* @param properties * @param properties
...@@ -51,60 +46,12 @@ public class ExampleDbModifyingAggregationService extends ...@@ -51,60 +46,12 @@ public class ExampleDbModifyingAggregationService extends
super(properties, storeRoot); super(properties, storeRoot);
} }
private static final long serialVersionUID = 1L;
@Override
public void didRollbackTransaction(
DataSetRegistrationService<DataSetInformation> dataSetRegistrationService,
DataSetRegistrationTransaction<DataSetInformation> transaction,
DataSetStorageAlgorithmRunner<DataSetInformation> algorithm, Throwable ex)
{
}
@Override
public void didCommitTransaction(
DataSetRegistrationService<DataSetInformation> dataSetRegistrationService,
DataSetRegistrationTransaction<DataSetInformation> transaction)
{
}
@Override
public void didPreRegistration(DataSetRegistrationService<DataSetInformation> service,
IHolder registrationContextHolder)
{
}
@Override
public void didPostRegistration(DataSetRegistrationService<DataSetInformation> service,
IHolder registrationContextHolder)
{
}
@Override
public void didEncounterSecondaryTransactionErrors(
DataSetRegistrationService<DataSetInformation> dataSetRegistrationService,
DataSetRegistrationTransaction<DataSetInformation> transaction,
List<SecondaryTransactionFailure> secondaryErrors)
{
}
@Override @Override
public TableModel createAggregationReport(Map<String, Object> parameters, public TableModel process(IDataSetRegistrationTransaction transaction,
DataSetProcessingContext context) Map<String, Object> parameters, DataSetProcessingContext context)
{ {
try transaction.createNewSpace("NewDummySpace", null);
{
DataSetRegistrationService<DataSetInformation> service =
createRegistrationService(parameters);
IDataSetRegistrationTransaction transaction = service.transaction();
transaction.createNewSpace("NewDummySpace", null);
service.commit();
} catch (Exception e)
{
logInvocationError(parameters, e);
return errorTableModel(parameters, e);
}
SimpleTableModelBuilder builder = new SimpleTableModelBuilder(true); SimpleTableModelBuilder builder = new SimpleTableModelBuilder(true);
builder.addHeader("String"); builder.addHeader("String");
builder.addHeader("Integer"); builder.addHeader("Integer");
......
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