diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/GuiComponents.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/GuiComponents.java index 762fcee2e27..3e4335231ab 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/GuiComponents.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/GuiComponents.java @@ -36,7 +36,8 @@ */ public class GuiComponents { - private static final ExecutorService EXECUTOR = Executors.newFixedThreadPool(10); + private static ExecutorService EXECUTOR; + private static final String KEY_BOOLEAN_NULL = "Boolean.NULL"; private static final String KEY_BOOLEAN_TRUE = "Boolean.TRUE"; private static final String KEY_BOOLEAN_FALSE = "Boolean.FALSE"; @@ -45,6 +46,10 @@ public static void destroy() { EXECUTOR.shutdownNow(); } + public static void init() { + EXECUTOR = Executors.newFixedThreadPool(10); + } + public static Future submitCallable(Callable callable) { Validate.notNull(callable, "Callable must not be null."); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java index de23221cc9f..c64a53b1155 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/security/MidPointApplication.java @@ -118,6 +118,8 @@ public Class getHomePage() { public void init() { super.init(); + GuiComponents.init(); + getComponentInstantiationListeners().add(new SpringComponentInjector(this)); IResourceSettings resourceSettings = getResourceSettings(); diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd index 1eac52be233..b3f3bd339c8 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd @@ -5206,7 +5206,7 @@ This overrides other template definitions (system global, resource). - tns:ObjetcTemplateType + tns:ObjectTemplateType @@ -5251,7 +5251,7 @@ DEPRECATED. For compatibility only. Use objectTemplateRef in reaction instead. - tns:ObjetcTemplateType + tns:ObjectTemplateType @@ -5262,7 +5262,7 @@ DEPRECATED. For compatibility only. Use objectTemplateRef in reaction instead. - tns:ObjetcTemplateType + tns:ObjectTemplateType diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AddExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AddExecutor.java index 3de7dd53e88..b40d4a67102 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AddExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AddExecutor.java @@ -55,12 +55,14 @@ public void init() { @Override public Data execute(ActionExpressionType expression, Data input, ExecutionContext context, OperationResult result) throws ScriptExecutionException { + boolean raw = getParamRaw(expression, input, context, result); + for (Item item : input.getData()) { if (item instanceof PrismObject) { PrismObject prismObject = (PrismObject) item; ObjectType objectType = prismObject.asObjectable(); - operationsHelper.applyDelta(createAddDelta(objectType), context, result); - context.println("Added " + item.toString()); + operationsHelper.applyDelta(createAddDelta(objectType), operationsHelper.createExecutionOptions(raw), context, result); + context.println("Added " + item.toString() + rawSuffix(raw)); } else { throw new ScriptExecutionException("Item couldn't be added, because it is not a PrismObject: " + item.toString()); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AssignExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AssignExecutor.java index e264200603e..a56e3325e01 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AssignExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/AssignExecutor.java @@ -64,6 +64,8 @@ public void init() { @Override public Data execute(ActionExpressionType expression, Data input, ExecutionContext context, OperationResult result) throws ScriptExecutionException { + boolean raw = getParamRaw(expression, input, context, result); + JAXBElement resourceExpression = expressionHelper.getArgument(expression.getParameter(), PARAM_RESOURCE, false, false, NAME); JAXBElement roleExpression = expressionHelper.getArgument(expression.getParameter(), PARAM_ROLE, false, false, NAME); @@ -91,8 +93,8 @@ public Data execute(ActionExpressionType expression, Data input, ExecutionContex if (item instanceof PrismObject && ((PrismObject) item).asObjectable() instanceof FocusType) { PrismObject prismObject = (PrismObject) item; ObjectType objectType = prismObject.asObjectable(); - operationsHelper.applyDelta(createDelta(objectType, resources, roles), context, result); - context.println("Modified " + item.toString()); + operationsHelper.applyDelta(createDelta(objectType, resources, roles), operationsHelper.createExecutionOptions(raw), context, result); + context.println("Modified " + item.toString() + rawSuffix(raw)); } else { throw new ScriptExecutionException("Item could not be modified, because it is not a PrismObject of FocusType: " + item.toString()); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/BaseActionExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/BaseActionExecutor.java index 8da30afac21..ee0ec44f608 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/BaseActionExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/BaseActionExecutor.java @@ -16,14 +16,20 @@ package com.evolveum.midpoint.model.impl.scripting.actions; +import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.api.ModelService; import com.evolveum.midpoint.model.impl.scripting.ActionExecutor; +import com.evolveum.midpoint.model.impl.scripting.Data; +import com.evolveum.midpoint.model.impl.scripting.ExecutionContext; +import com.evolveum.midpoint.model.impl.scripting.ScriptExecutionException; import com.evolveum.midpoint.model.impl.scripting.ScriptingExpressionEvaluator; import com.evolveum.midpoint.model.impl.scripting.helpers.ExpressionHelper; import com.evolveum.midpoint.model.impl.scripting.helpers.OperationsHelper; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.provisioning.api.ProvisioningService; +import com.evolveum.midpoint.schema.result.OperationResult; +import com.evolveum.midpoint.xml.ns._public.model.scripting_3.ActionExpressionType; import org.springframework.beans.factory.annotation.Autowired; /** @@ -31,6 +37,8 @@ */ public abstract class BaseActionExecutor implements ActionExecutor { + private static final String PARAM_RAW = "raw"; + @Autowired protected ScriptingExpressionEvaluator scriptingExpressionEvaluator; @@ -51,4 +59,13 @@ public abstract class BaseActionExecutor implements ActionExecutor { //protected Data getArgumentValue(ActionExpressionType actionExpression, String parameterName, boolean required) throws ScriptExecutionException { + // todo move to some helper? + protected boolean getParamRaw(ActionExpressionType expression, Data input, ExecutionContext context, OperationResult result) throws ScriptExecutionException { + return expressionHelper.getArgumentAsBoolean(expression.getParameter(), PARAM_RAW, input, context, false, PARAM_RAW, result); + } + + protected String rawSuffix(boolean raw) { + return raw ? " (raw)" : ""; + } + } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/DeleteExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/DeleteExecutor.java index cfaf375c864..f2173fd2e08 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/DeleteExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/DeleteExecutor.java @@ -55,12 +55,14 @@ public void init() { @Override public Data execute(ActionExpressionType expression, Data input, ExecutionContext context, OperationResult result) throws ScriptExecutionException { + boolean raw = getParamRaw(expression, input, context, result); + for (Item item : input.getData()) { if (item instanceof PrismObject) { PrismObject prismObject = (PrismObject) item; ObjectType objectType = prismObject.asObjectable(); - operationsHelper.applyDelta(createDeleteDelta(objectType), context, result); - context.println("Deleted " + item.toString()); + operationsHelper.applyDelta(createDeleteDelta(objectType), operationsHelper.createExecutionOptions(raw), context, result); + context.println("Deleted " + item.toString() + rawSuffix(raw)); } else { throw new ScriptExecutionException("Item couldn't be deleted, because it is not a PrismObject: " + item.toString()); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/ModifyExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/ModifyExecutor.java index cca1cc5718f..be4735aecb9 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/ModifyExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/actions/ModifyExecutor.java @@ -16,6 +16,7 @@ package com.evolveum.midpoint.model.impl.scripting.actions; +import com.evolveum.midpoint.model.api.ModelExecuteOptions; import com.evolveum.midpoint.model.impl.scripting.Data; import com.evolveum.midpoint.model.impl.scripting.ExecutionContext; import com.evolveum.midpoint.model.impl.scripting.ScriptExecutionException; @@ -57,6 +58,8 @@ public void init() { @Override public Data execute(ActionExpressionType expression, Data input, ExecutionContext context, OperationResult result) throws ScriptExecutionException { + boolean raw = getParamRaw(expression, input, context, result); + JAXBElement deltaExpression = expressionHelper.getArgument(expression.getParameter(), PARAM_DELTA, true, true, NAME); Data deltaData = scriptingExpressionEvaluator.evaluateExpression(deltaExpression, input, context, result); @@ -64,8 +67,8 @@ public Data execute(ActionExpressionType expression, Data input, ExecutionContex if (item instanceof PrismObject) { PrismObject prismObject = (PrismObject) item; ObjectType objectType = prismObject.asObjectable(); - operationsHelper.applyDelta(createDelta(objectType, deltaData), context, result); - context.println("Modified " + item.toString()); + operationsHelper.applyDelta(createDelta(objectType, deltaData), operationsHelper.createExecutionOptions(raw), context, result); + context.println("Modified " + item.toString() + rawSuffix(raw)); } else { throw new ScriptExecutionException("Item could not be modified, because it is not a PrismObject: " + item.toString()); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java index 5cfe72323bf..4fb64cd978a 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/scripting/helpers/OperationsHelper.java @@ -78,4 +78,10 @@ public PrismObject getObject(Class type, String oid throw new ScriptExecutionException("Couldn't get object: " + e.getMessage(), e); } } + + public ModelExecuteOptions createExecutionOptions(boolean raw) { + ModelExecuteOptions options = new ModelExecuteOptions(); + options.setRaw(raw); + return options; + } } diff --git a/samples/resources/ad/ad-resource-groups-advanced.xml b/samples/resources/ad/ad-resource-groups-advanced.xml index 8665ed293cf..db77b9c028f 100644 --- a/samples/resources/ad/ad-resource-groups-advanced.xml +++ b/samples/resources/ad/ad-resource-groups-advanced.xml @@ -20,6 +20,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:q="http://prism.evolveum.com/xml/ns/public/query-3" xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3" + xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" xmlns:icfc="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/connector-schema-3" @@ -152,7 +153,19 @@ - + + + + ri:group + AD Group Membership + entitlement + group + objectToSubject + ri:member + icfs:name + + + 5 @@ -175,26 +188,16 @@ - - - ri:group - AD Group Membership - entitlement - group - objectToSubject - ri:member - icfs:name - entitlement - AD Group group - ri:CustomGroupObjectClass + AD Group true + ri:CustomGroupObjectClass icfs:name mr:stringIgnoreCase @@ -250,8 +253,8 @@ - true ri:AccountObjectClass + true @@ -299,11 +302,11 @@ - true ri:CustomGroupObjectClass entitlement group c:RoleType + true diff --git a/samples/resources/ad/ad-resource-groups-basic.xml b/samples/resources/ad/ad-resource-groups-basic.xml index ca499f5081a..1bfb6e3e35f 100644 --- a/samples/resources/ad/ad-resource-groups-basic.xml +++ b/samples/resources/ad/ad-resource-groups-basic.xml @@ -22,6 +22,7 @@ xmlns:c="http://midpoint.evolveum.com/xml/ns/public/common/common-3" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ri="http://midpoint.evolveum.com/xml/ns/public/resource/instance-3" + xmlns:mr="http://prism.evolveum.com/xml/ns/public/matching-rule-3" xmlns:icfc="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/connector-schema-3" xmlns:icfs="http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" xsi:schemaLocation="http://midpoint.evolveum.com/xml/ns/public/common/common-3 ../../../infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd"> @@ -152,6 +153,18 @@ + + + + ri:group + AD Group Membership + entitlement + group + objectToSubject + ri:member + icfs:name + + 5 @@ -175,26 +188,16 @@ - - - ri:group - AD Group Membership - entitlement - group - objectToSubject - ri:member - icfs:name - entitlement - AD Group group - ri:CustomGroupObjectClass + AD Group true + ri:CustomGroupObjectClass icfs:name mr:stringIgnoreCase @@ -250,8 +253,8 @@ - true ri:AccountObjectClass + true @@ -299,11 +302,11 @@ - true ri:CustomGroupObjectClass entitlement group c:RoleType + true