Skip to content

Commit

Permalink
"raw" parameter for bulk actions: add, modify, delete, assign.
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Jun 26, 2014
1 parent e0c8390 commit 1a49a11
Show file tree
Hide file tree
Showing 6 changed files with 40 additions and 8 deletions.
Expand Up @@ -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<? extends ObjectType> 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());
}
Expand Down
Expand Up @@ -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);

Expand Down Expand Up @@ -91,8 +93,8 @@ public Data execute(ActionExpressionType expression, Data input, ExecutionContex
if (item instanceof PrismObject && ((PrismObject) item).asObjectable() instanceof FocusType) {
PrismObject<? extends ObjectType> 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());
}
Expand Down
Expand Up @@ -16,21 +16,29 @@

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;

/**
* @author mederly
*/
public abstract class BaseActionExecutor implements ActionExecutor {

private static final String PARAM_RAW = "raw";

@Autowired
protected ScriptingExpressionEvaluator scriptingExpressionEvaluator;

Expand All @@ -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)" : "";
}

}
Expand Up @@ -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<? extends ObjectType> 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());
}
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -57,15 +58,17 @@ 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);

for (Item item : input.getData()) {
if (item instanceof PrismObject) {
PrismObject<? extends ObjectType> 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());
}
Expand Down
Expand Up @@ -78,4 +78,10 @@ public <T extends ObjectType> PrismObject<T> getObject(Class<T> 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;
}
}

0 comments on commit 1a49a11

Please sign in to comment.