From 87770867cceb6443f218ee9c6328af6598e06a8d Mon Sep 17 00:00:00 2001 From: jakubs <jakubs> Date: Mon, 29 Oct 2012 10:48:03 +0000 Subject: [PATCH] SP-358 BIS-227 add unfiltered hierarchical content to aggregation services SVN: 27390 --- .../jython/PluginScriptRunnerFactory.java | 136 ++++++++++++------ .../shared/DataSetProcessingContext.java | 5 + 2 files changed, 95 insertions(+), 46 deletions(-) diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java index a176de1e19f..24835dc6aaf 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/server/plugins/jython/PluginScriptRunnerFactory.java @@ -68,6 +68,9 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory private static final String CONTENT_PROVIDER_VARIABLE_NAME = "contentProvider"; + private static final String CONTENT_PROVIDER_UNFILTERED_VARIABLE_NAME = + "contentProviderUnfiltered"; + private static final String SESSION_WORKSPACE_PROVIDER_NAME = "sessionWorkspaceProvider"; private static final String USER_ID = "userId"; @@ -91,11 +94,10 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory String scriptString = extractScriptFromPath(scriptPath); try { - Evaluator evaluator = createEvaluator(scriptString, context); - DataSetContentProvider contentProvider = - new DataSetContentProvider(context.getHierarchicalContentProvider()); - evaluator.set(CONTENT_PROVIDER_VARIABLE_NAME, contentProvider); - return new AggregationServiceReportingPluginScriptRunner(evaluator, contentProvider); + AbstractAggregationServiceReportingPluginScriptRunner.InputData inputData = + createInputDataForReportingPluginScriptRunner(context, scriptString); + + return new AggregationServiceReportingPluginScriptRunner(inputData); } catch (EvaluatorException ex) { throw new EvaluatorException(ex.getMessage() + " [" + scriptPath + "]"); @@ -109,18 +111,34 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory String scriptString = extractScriptFromPath(scriptPath); try { - Evaluator evaluator = createEvaluator(scriptString, context); - DataSetContentProvider contentProvider = - new DataSetContentProvider(context.getHierarchicalContentProvider()); - evaluator.set(CONTENT_PROVIDER_VARIABLE_NAME, contentProvider); - return new DbModifyingAggregationServiceReportingPluginScriptRunner(evaluator, - contentProvider); + AbstractAggregationServiceReportingPluginScriptRunner.InputData inputData = + createInputDataForReportingPluginScriptRunner(context, scriptString); + + return new DbModifyingAggregationServiceReportingPluginScriptRunner(inputData); } catch (EvaluatorException ex) { throw new EvaluatorException(ex.getMessage() + " [" + scriptPath + "]"); } } + private AbstractAggregationServiceReportingPluginScriptRunner.InputData createInputDataForReportingPluginScriptRunner( + DataSetProcessingContext context, String scriptString) + { + Evaluator evaluator = createEvaluator(scriptString, context); + + DataSetContentProvider contentProvider = + new DataSetContentProvider(context.getHierarchicalContentProvider()); + evaluator.set(CONTENT_PROVIDER_VARIABLE_NAME, contentProvider); + + DataSetContentProvider contentProviderUnfiltered = + new DataSetContentProvider(context.getHierarchicalContentProviderUnfiltered()); + evaluator.set(CONTENT_PROVIDER_UNFILTERED_VARIABLE_NAME, contentProviderUnfiltered); + + AbstractAggregationServiceReportingPluginScriptRunner.InputData inputData = + new AbstractAggregationServiceReportingPluginScriptRunner.InputData(evaluator, + contentProvider, contentProviderUnfiltered); + return inputData; + } /** * Factory method for creating an IReportingPluginScriptRunner for a given processing context. */ @@ -255,27 +273,67 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory } } - private static class AggregationServiceReportingPluginScriptRunner implements - IAggregationServiceReportingPluginScriptRunner + private abstract static class AbstractAggregationServiceReportingPluginScriptRunner { - private final static String FUNCTION_NAME = "aggregate"; + static class InputData + { + private final Evaluator evaluator; - private final Evaluator evaluator; + private final DataSetContentProvider[] contentProviders; + + public InputData(Evaluator evaluator, DataSetContentProvider... contentProviders) + { + this.evaluator = evaluator; + this.contentProviders = contentProviders; + } + } + + final Evaluator evaluator; + + final DataSetContentProvider[] contentProviders; - private final DataSetContentProvider contentProvider; + protected abstract String getFunctionName(); - AggregationServiceReportingPluginScriptRunner(Evaluator evaluator, - DataSetContentProvider contentProvider) + public AbstractAggregationServiceReportingPluginScriptRunner(InputData inputData) { - this.evaluator = evaluator; - this.contentProvider = contentProvider; - if (false == evaluator.hasFunction(FUNCTION_NAME)) + this.evaluator = inputData.evaluator; + this.contentProviders = inputData.contentProviders; + + if (false == evaluator.hasFunction(getFunctionName())) { - throw new EvaluatorException("Function '" + FUNCTION_NAME + throw new EvaluatorException("Function '" + getFunctionName() + "' was not defined in the reporting plugin script"); } } + public void releaseResources() + { + for (DataSetContentProvider contentProvider : contentProviders) + { + contentProvider.closeContents(); + } + evaluator.releaseResources(); + } + } + + private static class AggregationServiceReportingPluginScriptRunner extends + AbstractAggregationServiceReportingPluginScriptRunner implements + IAggregationServiceReportingPluginScriptRunner + { + private final static String FUNCTION_NAME = "aggregate"; + + @Override + protected String getFunctionName() + { + return FUNCTION_NAME; + } + + AggregationServiceReportingPluginScriptRunner( + AbstractAggregationServiceReportingPluginScriptRunner.InputData inputData) + { + super(inputData); + } + @Override public void aggregate(Map<String, Object> parameters, ISimpleTableModelBuilderAdaptor tableBuilder) throws EvaluatorException @@ -283,33 +341,25 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory evaluator.evalFunction(FUNCTION_NAME, parameters, tableBuilder); } - @Override - public void releaseResources() - { - contentProvider.closeContents(); - evaluator.releaseResources(); - } } - private static class DbModifyingAggregationServiceReportingPluginScriptRunner implements + private static class DbModifyingAggregationServiceReportingPluginScriptRunner extends + AbstractAggregationServiceReportingPluginScriptRunner implements IDbModifyingAggregationServiceReportingPluginScriptRunner { private final static String FUNCTION_NAME = "process"; - private final Evaluator evaluator; - private final DataSetContentProvider contentProvider; + DbModifyingAggregationServiceReportingPluginScriptRunner( + AbstractAggregationServiceReportingPluginScriptRunner.InputData inputData) + { + super(inputData); + } - DbModifyingAggregationServiceReportingPluginScriptRunner(Evaluator evaluator, - DataSetContentProvider contentProvider) + @Override + protected String getFunctionName() { - this.evaluator = evaluator; - this.contentProvider = contentProvider; - if (false == evaluator.hasFunction(FUNCTION_NAME)) - { - throw new EvaluatorException("Function '" + FUNCTION_NAME - + "' was not defined in the reporting plugin script"); - } + return FUNCTION_NAME; } @Override @@ -320,12 +370,6 @@ public class PluginScriptRunnerFactory implements IPluginScriptRunnerFactory evaluator.evalFunction(FUNCTION_NAME, transaction, parameters, tableBuilder); } - @Override - public void releaseResources() - { - contentProvider.closeContents(); - evaluator.releaseResources(); - } } private static class ReportingPluginScriptRunner implements IReportingPluginScriptRunner diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetProcessingContext.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetProcessingContext.java index 0ad76312b11..c1334a1a34a 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetProcessingContext.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/DataSetProcessingContext.java @@ -195,6 +195,11 @@ public class DataSetProcessingContext }; } + public IHierarchicalContentProvider getHierarchicalContentProviderUnfiltered() + { + return hierarchicalContentProvider; + } + private void assertAuthorization(String dataSetCode) { if (sessionTokenOrNull == null) -- GitLab