diff --git a/step-automation-packages/step-automation-packages-controller/src/test/java/step/automation/packages/AutomationPackageManagerOSTest.java b/step-automation-packages/step-automation-packages-controller/src/test/java/step/automation/packages/AutomationPackageManagerOSTest.java index 534f749867..e0dc47db8a 100644 --- a/step-automation-packages/step-automation-packages-controller/src/test/java/step/automation/packages/AutomationPackageManagerOSTest.java +++ b/step-automation-packages/step-automation-packages-controller/src/test/java/step/automation/packages/AutomationPackageManagerOSTest.java @@ -36,6 +36,7 @@ import step.core.scheduler.*; import step.datapool.excel.ExcelDataPool; import step.engine.plugins.AbstractExecutionEnginePlugin; +import step.entities.activation.Activator; import step.expressions.ExpressionHandler; import step.functions.Function; import step.functions.accessor.FunctionAccessorImpl; @@ -104,7 +105,8 @@ public void before() { this.automationPackageAccessor = new AutomationPackageAccessorImpl(new InMemoryCollection<>()); this.functionAccessor = new FunctionAccessorImpl(new InMemoryCollection<>()); this.parameterAccessor = new AbstractAccessor<>(new InMemoryCollection<>()); - ParameterManager parameterManager = new ParameterManager(this.parameterAccessor, null, "groovy", new DynamicBeanResolver(new DynamicValueResolver(new ExpressionHandler()))); + ExpressionHandler expressionHandler = new ExpressionHandler(); + ParameterManager parameterManager = new ParameterManager(this.parameterAccessor, null, new DynamicBeanResolver(new DynamicValueResolver(expressionHandler)), new Activator(expressionHandler)); Configuration configuration = createTestConfiguration(); this.resourceManager = new LocalResourceManagerImpl(); diff --git a/step-automation-packages/step-automation-packages-junit-core/src/main/java/step/engine/plugins/ParameterManagerLocalPlugin.java b/step-automation-packages/step-automation-packages-junit-core/src/main/java/step/engine/plugins/ParameterManagerLocalPlugin.java index d4bc46498c..16bd0f5c4c 100644 --- a/step-automation-packages/step-automation-packages-junit-core/src/main/java/step/engine/plugins/ParameterManagerLocalPlugin.java +++ b/step-automation-packages/step-automation-packages-junit-core/src/main/java/step/engine/plugins/ParameterManagerLocalPlugin.java @@ -26,6 +26,7 @@ import step.core.execution.ExecutionEngineContext; import step.core.execution.OperationMode; import step.core.plugins.Plugin; +import step.entities.activation.Activator; import step.parameter.Parameter; import step.parameter.ParameterManager; import step.plugins.parametermanager.ParameterManagerPlugin; @@ -33,9 +34,6 @@ @Plugin(dependencies= {BasePlugin.class}) public class ParameterManagerLocalPlugin extends ParameterManagerPlugin { - public static final String STEP_PARAMTER_SCRIPT_ENGINE = "StepParamterScriptEngine"; - public static final String defaultScriptEngine = "groovy"; - public ParameterManagerLocalPlugin() { super(); } @@ -52,25 +50,11 @@ public void initializeExecutionEngineContext(AbstractExecutionEngineContext pare Accessor parameterAccessor = new AbstractAccessor<>(new InMemoryCollection<>()); EncryptionManager encryptionManager = executionEngineContext.get(EncryptionManager.class); - String scriptEngine = getScriptEngine(); - ParameterManager parameterManager = new ParameterManager(parameterAccessor, encryptionManager, scriptEngine, executionEngineContext.getDynamicBeanResolver()); + ParameterManager parameterManager = new ParameterManager(parameterAccessor, encryptionManager, + executionEngineContext.getDynamicBeanResolver(), new Activator(executionEngineContext.getExpressionHandler())); executionEngineContext.put(ParameterManager.class, parameterManager); configure(parameterManager); } - private String getScriptEngine() { - String scriptEngine = defaultScriptEngine; - String propertyVar = System.getProperty(STEP_PARAMTER_SCRIPT_ENGINE); - if (propertyVar != null && !propertyVar.isBlank()) { - scriptEngine = propertyVar; - } else { - String envVar = System.getenv(STEP_PARAMTER_SCRIPT_ENGINE); - if (envVar != null && ! envVar.isBlank()) { - scriptEngine = envVar; - } - } - return scriptEngine; - } - } diff --git a/step-commons/src/main/java/step/commons/activation/Activator.java b/step-commons/src/main/java/step/commons/activation/Activator.java deleted file mode 100644 index a9109c0a61..0000000000 --- a/step-commons/src/main/java/step/commons/activation/Activator.java +++ /dev/null @@ -1,139 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2020, exense GmbH - * - * This file is part of STEP - * - * STEP is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * STEP is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with STEP. If not, see . - ******************************************************************************/ -package step.commons.activation; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; - -import javax.script.Bindings; -import javax.script.Compilable; -import javax.script.CompiledScript; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; -import javax.script.SimpleBindings; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Activator { - - public static final String DEFAULT_SCRIPT_ENGINE = "groovy"; - - public static final Logger logger = LoggerFactory.getLogger(Activator.class); - - public static List compileActivationExpressions(List objects, String defaultScriptEngine) throws ScriptException { - for(ActivableObject object:objects) { - compileActivationExpression(object, defaultScriptEngine); - } - return objects; - } - - public static void compileActivationExpression(ActivableObject object, String defaultScriptEngine) throws ScriptException { - Expression expression = object.getActivationExpression(); - compileExpression(expression, defaultScriptEngine); - } - - protected static void compileExpression(Expression expression, String defaultScriptEngine) throws ScriptException { - if(expression!=null && expression.compiledScript==null) { - String scriptEngine = expression.scriptEngine!=null?expression.scriptEngine:defaultScriptEngine; - - if(expression.script!=null && expression.script.trim().length()>0) { - ScriptEngineManager manager = new ScriptEngineManager(); - ScriptEngine engine = manager.getEngineByName(scriptEngine); - - CompiledScript script = ((Compilable)engine).compile(expression.script); - expression.compiledScript = script; - } else { - expression.compiledScript = null; - } - } - } - - public static Boolean evaluateActivationExpression(Bindings bindings, Expression activationExpression, String defaultScriptEngine) { - Boolean expressionResult; - if(activationExpression!=null) { - try { - compileExpression(activationExpression, defaultScriptEngine); - } catch (ScriptException e1) { - logger.error("Error while evaluating expression "+activationExpression, e1); - } - CompiledScript script = activationExpression.compiledScript; - if(script!=null) { - try { - Object evaluationResult = script.eval(bindings); - if(evaluationResult instanceof Boolean) { - expressionResult = (Boolean) evaluationResult; - } else { - expressionResult = false; - } - } catch (ScriptException e) { - expressionResult = false; - } - } else { - expressionResult = true; - } - } else { - expressionResult = true; - } - return expressionResult; - } - - public static T findBestMatch(Map bindings, List objects,String defaultScriptEngine) { - return findBestMatch(bindings!=null?new SimpleBindings(bindings):null, objects, defaultScriptEngine); - } - - private static T findBestMatch(Bindings bindings, List objects, String defaultScriptEngine) { - - List matchingObjects = new ArrayList<>(objects); - matchingObjects.sort(new Comparator() { - @Override - public int compare(T o1, T o2) { - return -Integer.compare(getPriority(o1), getPriority(o2)); - } - - private int getPriority(T o1) { - return o1.getActivationExpression()==null?0:(o1.getPriority()==null?1:o1.getPriority()); - } - }); - - for(T object:matchingObjects) { - if(evaluateActivationExpression(bindings, object.getActivationExpression(), defaultScriptEngine)) { - return object; - } - } - return null; - } - - public static List findAllMatches(Map bindings, List objects, String defaultScriptEngine) { - List result = new ArrayList<>(); - for(T object:objects) { - Boolean expressionResult = evaluateActivationExpression(bindings!=null?new SimpleBindings(bindings):null, object.getActivationExpression(), defaultScriptEngine); - - if(expressionResult) { - result.add(object); - } - } - return result; - } - -} - diff --git a/step-commons/src/main/java/step/commons/activation/Expression.java b/step-commons/src/main/java/step/commons/activation/Expression.java index 4d55a5aa81..eca6f67e62 100644 --- a/step-commons/src/main/java/step/commons/activation/Expression.java +++ b/step-commons/src/main/java/step/commons/activation/Expression.java @@ -18,15 +18,12 @@ ******************************************************************************/ package step.commons.activation; -import javax.script.CompiledScript; - public class Expression { - String script; - - String scriptEngine; - - CompiledScript compiledScript; + private String script; + + // This field isn't used anymore but has been kept in order to avoid serialization exceptions + private String scriptEngine; public Expression() { super(); diff --git a/step-controller/step-controller-backend/src/test/java/step/core/export/ExportManagerTest.java b/step-controller/step-controller-backend/src/test/java/step/core/export/ExportManagerTest.java index 1c2aa9a971..66ac8d99db 100644 --- a/step-controller/step-controller-backend/src/test/java/step/core/export/ExportManagerTest.java +++ b/step-controller/step-controller-backend/src/test/java/step/core/export/ExportManagerTest.java @@ -57,6 +57,7 @@ import step.core.plans.PlanEntity; import step.core.plans.builder.PlanBuilder; import step.datapool.excel.ExcelDataPool; +import step.entities.activation.Activator; import step.expressions.ExpressionHandler; import step.functions.Function; import step.functions.accessor.FunctionAccessor; @@ -141,11 +142,13 @@ private void newContext(EncryptionManager encryptionManager) { entityManager = new EntityManager(); FileResolver fileResolver = new FileResolver(resourceManager); - SelectorHelper selectorHelper = new SelectorHelper(new DynamicJsonObjectResolver(new DynamicJsonValueResolver(new ExpressionHandler()))); - FunctionLocator functionLocator = new FunctionLocator(functionAccessor, selectorHelper); + ExpressionHandler expressionHandler = new ExpressionHandler(); + SelectorHelper selectorHelper = new SelectorHelper(new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler))); + Activator activator = new Activator(expressionHandler); + FunctionLocator functionLocator = new FunctionLocator(functionAccessor, selectorHelper, activator); entityManager .register(new Entity<>(Parameter.ENTITY_NAME, parameterAccessor, Parameter.class)) - .register(new PlanEntity(planAccessor, new PlanLocator(planAccessor, selectorHelper), entityManager)) + .register(new PlanEntity(planAccessor, new PlanLocator(planAccessor, selectorHelper, activator), entityManager)) .register(new FunctionEntity(functionAccessor, functionLocator, entityManager)) .register(new ResourceEntity(resourceAccessor, resourceManager, fileResolver, entityManager)) .register(new Entity<>(EntityManager.resourceRevisions, resourceRevisionAccessor, ResourceRevision.class)); diff --git a/step-controller/step-controller-base-plugins/src/main/java/step/plugins/parametermanager/ParameterManagerControllerPlugin.java b/step-controller/step-controller-base-plugins/src/main/java/step/plugins/parametermanager/ParameterManagerControllerPlugin.java index 3886c33838..1803563587 100644 --- a/step-controller/step-controller-base-plugins/src/main/java/step/plugins/parametermanager/ParameterManagerControllerPlugin.java +++ b/step-controller/step-controller-base-plugins/src/main/java/step/plugins/parametermanager/ParameterManagerControllerPlugin.java @@ -36,12 +36,13 @@ import step.core.plugins.AbstractControllerPlugin; import step.core.plugins.Plugin; import step.engine.plugins.ExecutionEnginePlugin; +import step.entities.activation.Activator; import step.framework.server.tables.Table; import step.framework.server.tables.TableRegistry; import step.parameter.Parameter; import step.parameter.ParameterManager; import step.plugins.encryption.EncryptionManagerDependencyPlugin; -import step.plugins.screentemplating.*; +import step.plugins.screentemplating.ScreenTemplatePlugin; import java.util.Set; import java.util.function.BiConsumer; @@ -76,7 +77,7 @@ public void serverStart(GlobalContext context) { return allFilterAttributes.contains(PARAMETER_VALUE_FIELD + ".value") ? new Equals(PARAMETER_PROTECTED_VALUE_FIELD, false) : Filters.empty(); })); - ParameterManager parameterManager = new ParameterManager(parameterAccessor, encryptionManager, context.getConfiguration(), context.getDynamicBeanResolver()); + ParameterManager parameterManager = new ParameterManager(parameterAccessor, encryptionManager, context.getDynamicBeanResolver(), new Activator(context.getExpressionHandler())); context.put(ParameterManager.class, parameterManager); this.parameterManager = parameterManager; diff --git a/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerPluginTest.java b/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerPluginTest.java index dd6cd990c8..4beac9aad5 100644 --- a/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerPluginTest.java +++ b/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerPluginTest.java @@ -18,16 +18,10 @@ ******************************************************************************/ package step.plugins.parametermanager; -import static org.junit.Assert.*; - -import java.util.HashMap; -import java.util.Map; - import ch.exense.commons.app.Configuration; import org.junit.Assert; import org.junit.Before; import org.junit.Test; - import step.core.accessors.AbstractOrganizableObject; import step.core.accessors.InMemoryAccessor; import step.core.dynamicbeans.DynamicBeanResolver; @@ -41,12 +35,19 @@ import step.core.plugins.exceptions.PluginCriticalException; import step.core.variables.VariablesManager; import step.engine.plugins.ExecutionEnginePlugin; +import step.entities.activation.Activator; import step.expressions.ExpressionHandler; import step.functions.Function; import step.parameter.Parameter; import step.parameter.ParameterManager; import step.parameter.ParameterScope; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + public class ParameterManagerPluginTest { protected InMemoryAccessor parameterAccessor = new InMemoryAccessor<>(); @@ -437,9 +438,7 @@ public LocalParameterManagerPlugin(InMemoryAccessor parameterAccessor } public LocalParameterManagerPlugin(InMemoryAccessor parameterAccessor, EncryptionManager encryptionManager, Configuration configuration) { - super(new ParameterManager(parameterAccessor, encryptionManager, configuration, new DynamicBeanResolver(new DynamicValueResolver(new ExpressionHandler())))); + super(new ParameterManager(parameterAccessor, encryptionManager, new DynamicBeanResolver(new DynamicValueResolver(new ExpressionHandler())), new Activator(new ExpressionHandler()))); } - - } } diff --git a/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerTest.java b/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerTest.java index c2dc1499d4..ee77d330b6 100644 --- a/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerTest.java +++ b/step-controller/step-controller-base-plugins/src/test/java/step/plugins/parametermanager/ParameterManagerTest.java @@ -18,45 +18,36 @@ ******************************************************************************/ package step.plugins.parametermanager; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Random; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -import javax.script.ScriptException; - import ch.exense.commons.app.Configuration; import ch.exense.commons.test.categories.PerformanceTest; import org.junit.Assert; import org.junit.Test; - import org.junit.experimental.categories.Category; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import step.commons.activation.Expression; import step.core.accessors.AbstractAccessor; +import step.core.accessors.InMemoryAccessor; import step.core.collections.Collection; import step.core.collections.Filters; import step.core.collections.mongodb.MongoDBCollectionFactory; import step.core.dynamicbeans.DynamicBeanResolver; import step.core.dynamicbeans.DynamicValueResolver; +import step.entities.activation.Activator; import step.expressions.ExpressionHandler; import step.parameter.Parameter; -import step.commons.activation.Expression; -import step.core.accessors.InMemoryAccessor; import step.parameter.ParameterManager; +import javax.script.ScriptException; +import java.util.*; +import java.util.concurrent.*; + public class ParameterManagerTest { private static final Logger logger = LoggerFactory.getLogger(ParameterManagerTest.class); private final DynamicBeanResolver resolver = new DynamicBeanResolver(new DynamicValueResolver(new ExpressionHandler())); + private final Activator activator = new Activator(new ExpressionHandler()); @Test public void testJavascript() throws ScriptException { @@ -74,7 +65,7 @@ public void testGroovy() throws ScriptException { public void test1Common(Configuration configuration) throws ScriptException { InMemoryAccessor accessor = new InMemoryAccessor<>(); - ParameterManager m = new ParameterManager(accessor, null, configuration, resolver); + ParameterManager m = new ParameterManager(accessor, null, resolver, activator); accessor.save(new Parameter(new Expression("user=='pomme'"), "key1", "pommier", "desc")); accessor.save(new Parameter(new Expression("user=='pomme'"), "key1", "pommier", "desc")); @@ -114,7 +105,7 @@ public void testPerf() throws ScriptException { Collection collection = new MongoDBCollectionFactory(properties).getCollection("perfParameters", Parameter.class); AbstractAccessor accessor = new AbstractAccessor<>(collection); accessor.getCollectionDriver().remove(Filters.empty()); - ParameterManager m = new ParameterManager(accessor, null, new Configuration(), resolver); + ParameterManager m = new ParameterManager(accessor, null, resolver, activator); int nIt = 100; for(int i=1;i<=nIt;i++) { @@ -140,8 +131,8 @@ public void testPerf() throws ScriptException { @Test public void testParallel() throws ScriptException, InterruptedException, ExecutionException { InMemoryAccessor accessor = new InMemoryAccessor<>(); - ParameterManager m = new ParameterManager(accessor, null, new Configuration(), resolver); - + ParameterManager m = new ParameterManager(accessor, null, resolver, activator); + int nIt = 100; for(int i=1;i<=nIt;i++) { accessor.save(new Parameter(new Expression("user=='user"+i+"'"), "key1", "value"+i, "desc")); diff --git a/step-controller/step-controller-server/src/main/java/step/controller/grid/services/AbtractFunctionServices.java b/step-controller/step-controller-server/src/main/java/step/controller/grid/services/AbtractFunctionServices.java index 7e82de2feb..75c3cc4a84 100644 --- a/step-controller/step-controller-server/src/main/java/step/controller/grid/services/AbtractFunctionServices.java +++ b/step-controller/step-controller-server/src/main/java/step/controller/grid/services/AbtractFunctionServices.java @@ -40,6 +40,8 @@ import step.core.miscellaneous.ReportNodeAttachmentManager; import step.core.objectenricher.ObjectPredicate; import step.core.objectenricher.ObjectPredicateFactory; +import step.entities.activation.Activator; +import step.expressions.ExpressionHandler; import step.framework.server.Session; import step.framework.server.security.Secured; import step.functions.Function; @@ -84,9 +86,10 @@ public void init() throws Exception { functionAccessor = getContext().get(FunctionAccessor.class); functionManager = getContext().get(FunctionManager.class); functionExecutionService = getContext().get(FunctionExecutionService.class); - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(getContext().getExpressionHandler())); + ExpressionHandler expressionHandler = getContext().getExpressionHandler(); + DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler)); selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - functionLocator = new FunctionLocator(functionAccessor, selectorHelper); + functionLocator = new FunctionLocator(functionAccessor, selectorHelper, new Activator(expressionHandler)); objectPredicateFactory = getContext().get(ObjectPredicateFactory.class); } diff --git a/step-controller/step-controller-server/src/main/java/step/core/Controller.java b/step-controller/step-controller-server/src/main/java/step/core/Controller.java index 3ff150a7f5..b698dd5454 100644 --- a/step-controller/step-controller-server/src/main/java/step/core/Controller.java +++ b/step-controller/step-controller-server/src/main/java/step/core/Controller.java @@ -57,6 +57,7 @@ import step.core.scheduler.ExecutionTaskAccessorImpl; import step.core.scheduler.ExecutiontTaskParameters; import step.core.scheduler.ScheduleEntity; +import step.entities.activation.Activator; import step.expressions.ExpressionHandler; import step.framework.server.ServerPluginManager; import step.framework.server.ServiceRegistrationCallback; @@ -178,12 +179,13 @@ public int getPriority() { configuration.getPropertyAsInteger("tec.expressions.warningthreshold",200), configuration.getPropertyAsInteger("tec.expressions.pool.maxtotal",1000), configuration.getPropertyAsInteger("tec.expressions.pool.maxidle",-1))); - context.setDynamicBeanResolver(new DynamicBeanResolver(new DynamicValueResolver(context.getExpressionHandler()))); + ExpressionHandler expressionHandler = context.getExpressionHandler(); + context.setDynamicBeanResolver(new DynamicBeanResolver(new DynamicValueResolver(expressionHandler))); context.setEntityManager(new EntityManager()); - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(context.getExpressionHandler())); + DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler)); SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - PlanLocator planLocator = new PlanLocator(context.getPlanAccessor(), selectorHelper); + PlanLocator planLocator = new PlanLocator(context.getPlanAccessor(), selectorHelper, new Activator(expressionHandler)); EntityManager entityManager = context.getEntityManager(); entityManager diff --git a/step-controller/step-controller-server/src/main/java/step/core/deployment/ControllerServices.java b/step-controller/step-controller-server/src/main/java/step/core/deployment/ControllerServices.java index a769a505a4..9e54134c87 100644 --- a/step-controller/step-controller-server/src/main/java/step/core/deployment/ControllerServices.java +++ b/step-controller/step-controller-server/src/main/java/step/core/deployment/ControllerServices.java @@ -46,6 +46,8 @@ import step.core.repositories.ArtefactInfo; import step.core.repositories.RepositoryObjectReference; import step.core.repositories.TestSetStatusOverview; +import step.entities.activation.Activator; +import step.expressions.ExpressionHandler; import step.framework.server.security.Secured; import java.io.File; @@ -78,9 +80,10 @@ public void init() throws Exception { currentVersion = context.getCurrentVersion(); controller = context.require(Controller.class); - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(getContext().getExpressionHandler())); + ExpressionHandler expressionHandler = getContext().getExpressionHandler(); + DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler)); SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - planLocator = new PlanLocator(getContext().getPlanAccessor(), selectorHelper); + planLocator = new PlanLocator(getContext().getPlanAccessor(), selectorHelper, new Activator(expressionHandler)); objectHooks = context.get(ObjectHookRegistry.class); objectPredicateFactory = context.get(ObjectPredicateFactory.class); diff --git a/step-controller/step-controller-server/src/main/java/step/core/plans/PlanServices.java b/step-controller/step-controller-server/src/main/java/step/core/plans/PlanServices.java index 1959d6349c..3ae0004768 100644 --- a/step-controller/step-controller-server/src/main/java/step/core/plans/PlanServices.java +++ b/step-controller/step-controller-server/src/main/java/step/core/plans/PlanServices.java @@ -42,6 +42,8 @@ import step.core.entities.EntityManager; import step.core.objectenricher.ObjectPredicate; import step.core.objectenricher.ObjectPredicateFactory; +import step.entities.activation.Activator; +import step.expressions.ExpressionHandler; import step.framework.server.security.Secured; import step.framework.server.security.SecuredContext; import step.plans.parser.yaml.YamlPlanReader; @@ -215,9 +217,7 @@ public Plan lookupPlan(@PathParam("id") String id, @PathParam("artefactid") Stri Plan result = null; PlanNavigator planNavigator = new PlanNavigator(plan); CallPlan artefact = (CallPlan) planNavigator.findArtefactById(artefactId); - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(getContext().getExpressionHandler())); - SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - PlanLocator planLocator = new PlanLocator(getContext().getPlanAccessor(), selectorHelper); + PlanLocator planLocator = getPlanLocator(); ObjectPredicate objectPredicate = objectPredicateFactory.getObjectPredicate(getSession()); try { result = planLocator.selectPlan(artefact, objectPredicate, null); @@ -233,9 +233,7 @@ public Plan lookupPlan(@PathParam("id") String id, @PathParam("artefactid") Stri @Secured(right="{entity}-read") public Plan lookupCallPlan(CallPlan callPlan) { Plan result = null; - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(getContext().getExpressionHandler())); - SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - PlanLocator planLocator = new PlanLocator(getContext().getPlanAccessor(), selectorHelper); + PlanLocator planLocator = getPlanLocator(); ObjectPredicate objectPredicate = objectPredicateFactory.getObjectPredicate(getSession()); try { result = planLocator.selectPlan(callPlan, objectPredicate, null); @@ -243,6 +241,14 @@ public Plan lookupCallPlan(CallPlan callPlan) { return result; } + private PlanLocator getPlanLocator() { + GlobalContext context = getContext(); + ExpressionHandler expressionHandler = context.getExpressionHandler(); + DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler)); + SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); + return new PlanLocator(context.getPlanAccessor(), selectorHelper, new Activator(expressionHandler)); + } + @Operation(description = "Clones the provided artefact.") @POST @Path("/artefacts/clone") diff --git a/step-controller/step-controller-server/src/main/java/step/functions/plugin/FunctionControllerPlugin.java b/step-controller/step-controller-server/src/main/java/step/functions/plugin/FunctionControllerPlugin.java index a273fd435e..739c950bf9 100644 --- a/step-controller/step-controller-server/src/main/java/step/functions/plugin/FunctionControllerPlugin.java +++ b/step-controller/step-controller-server/src/main/java/step/functions/plugin/FunctionControllerPlugin.java @@ -33,6 +33,8 @@ import step.core.objectenricher.ObjectHookRegistry; import step.core.plugins.AbstractControllerPlugin; import step.core.plugins.Plugin; +import step.entities.activation.Activator; +import step.expressions.ExpressionHandler; import step.framework.server.tables.Table; import step.framework.server.tables.TableRegistry; import step.functions.Function; @@ -83,12 +85,13 @@ public void serverStart(GlobalContext context) throws Exception { FunctionAccessor functionAccessor = new FunctionAccessorImpl(collection); FunctionManager functionManager = new FunctionManagerImpl(functionAccessor, functionTypeRegistry); FunctionExecutionService functionExecutionService = new FunctionExecutionServiceImpl(gridClient, functionTypeRegistry, context.getDynamicBeanResolver()); - - DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(context.getExpressionHandler())); + + ExpressionHandler expressionHandler = context.getExpressionHandler(); + DynamicJsonObjectResolver dynamicJsonObjectResolver = new DynamicJsonObjectResolver(new DynamicJsonValueResolver(expressionHandler)); context.put(FunctionAccessor.class, functionAccessor); SelectorHelper selectorHelper = new SelectorHelper(dynamicJsonObjectResolver); - final FunctionLocator functionLocator = new FunctionLocator(functionAccessor, selectorHelper); + final FunctionLocator functionLocator = new FunctionLocator(functionAccessor, selectorHelper, new Activator(expressionHandler)); EntityManager entityManager = context.getEntityManager(); entityManager.register(new FunctionEntity(functionAccessor, functionLocator, entityManager)); context.put(FunctionManager.class, functionManager); diff --git a/step-controller/step-controller-server/src/main/java/step/plugins/screentemplating/ScreenTemplateManager.java b/step-controller/step-controller-server/src/main/java/step/plugins/screentemplating/ScreenTemplateManager.java index 5addb32a48..20c013d2e1 100644 --- a/step-controller/step-controller-server/src/main/java/step/plugins/screentemplating/ScreenTemplateManager.java +++ b/step-controller/step-controller-server/src/main/java/step/plugins/screentemplating/ScreenTemplateManager.java @@ -18,6 +18,10 @@ ******************************************************************************/ package step.plugins.screentemplating; +import org.bson.types.ObjectId; +import step.core.objectenricher.ObjectPredicate; +import step.entities.activation.Activator; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -25,28 +29,19 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import ch.exense.commons.app.Configuration; -import org.bson.types.ObjectId; - -import step.commons.activation.Activator; -import step.core.objectenricher.ObjectPredicate; - -import javax.script.SimpleBindings; - -import static step.commons.activation.Activator.evaluateActivationExpression; public class ScreenTemplateManager { protected final List listeners = new ArrayList<>(); protected ScreenInputAccessor screenInputAccessor; - protected String defaultScriptEngine; + private final Activator activator; - public ScreenTemplateManager(ScreenInputAccessor screenInputAccessor, Configuration configuration) { + public ScreenTemplateManager(ScreenInputAccessor screenInputAccessor, Activator activator) { super(); this.screenInputAccessor = screenInputAccessor; - this.defaultScriptEngine = configuration.getProperty("tec.activator.scriptEngine", Activator.DEFAULT_SCRIPT_ENGINE); - } + this.activator = activator; + } public List getInputsForScreen(String screenId, Map contextBindings, ObjectPredicate objectPredicate) { Stream stream = screenInputAccessor.getScreenInputsByScreenId(screenId).stream(); @@ -56,12 +51,12 @@ public List getInputsForScreen(String screenId, Map contex List screenInputs = stream.map(i->i.getInput()).collect(Collectors.toList()); List result = new ArrayList<>(); - List inputs = Activator.findAllMatches(contextBindings, screenInputs, defaultScriptEngine); + List inputs = activator.findAllMatches(contextBindings, screenInputs); for(Input input:inputs) { List