Skip to content

Commit

Permalink
(Hopefully) backported fix for MID-3283: variables inaccessible in pa…
Browse files Browse the repository at this point in the history
…ssword outbound mapping
  • Loading branch information
mederly committed Jul 26, 2016
1 parent 39fd840 commit a8929c1
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 7 deletions.
Expand Up @@ -52,13 +52,6 @@ public class ExpressionVariables implements DebugDumpable {
public void addVariableDefinitions(Map<QName, Object> extraVariables) {
for (Entry<QName, Object> entry : extraVariables.entrySet()) {
Object value = entry.getValue();
if (value instanceof ObjectDeltaObject<?>) {
ObjectDeltaObject<?> odo = (ObjectDeltaObject<?>)value;
if (odo.getObjectDelta() != null) {
throw new IllegalArgumentException("Cannot use variables with deltas in addVariableDefinitions, use addVariableDefinitionsOld or addVariableDefinitionsNew");
}
value = odo.getOldObject();
}
variables.put(entry.getKey(), value);
}
}
Expand Down
Expand Up @@ -33,6 +33,7 @@
import com.evolveum.midpoint.model.impl.lens.LensFocusContext;
import com.evolveum.midpoint.model.impl.lens.LensProjectionContext;
import com.evolveum.midpoint.model.impl.lens.LensUtil;
import com.evolveum.midpoint.model.impl.util.Utils;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.Item;
import com.evolveum.midpoint.prism.ItemDefinition;
Expand Down Expand Up @@ -193,6 +194,7 @@ private <F extends FocusType> void processProjectionPassword(LensContext<F> cont
ItemDeltaItem<PrismPropertyValue<PasswordType>,PrismPropertyDefinition<ProtectedStringType>> userPasswordIdi = focusContext.getObjectDeltaObject().findIdi(SchemaConstants.PATH_PASSWORD_VALUE);
Source<PrismPropertyValue<PasswordType>,PrismPropertyDefinition<ProtectedStringType>> source = new Source<>(userPasswordIdi, ExpressionConstants.VAR_INPUT);
passwordMapping.setDefaultSource(source);
passwordMapping.addVariableDefinitions(Utils.getDefaultExpressionVariables(context, accCtx).getMap());
passwordMapping.setOriginType(OriginType.OUTBOUND);
passwordMapping.setOriginObject(accCtx.getResource());

Expand Down
Expand Up @@ -33,6 +33,7 @@
import com.evolveum.midpoint.model.impl.importer.ObjectImporter;
import com.evolveum.midpoint.model.impl.lens.LensContext;
import com.evolveum.midpoint.model.impl.lens.LensFocusContext;
import com.evolveum.midpoint.model.impl.lens.LensProjectionContext;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
Expand Down Expand Up @@ -501,6 +502,22 @@ public static boolean isDryRun(Task task) throws SchemaException{
return dryRun.booleanValue();
}

public static ExpressionVariables getDefaultExpressionVariables(LensContext<?> context, LensProjectionContext projCtx) throws SchemaException {
ExpressionVariables variables = new ExpressionVariables();
if (context.getFocusContext() != null) {
variables.addVariableDefinition(ExpressionConstants.VAR_FOCUS, context.getFocusContext().getObjectDeltaObject());
variables.addVariableDefinition(ExpressionConstants.VAR_USER, context.getFocusContext().getObjectDeltaObject());
}
if (projCtx != null) {
variables.addVariableDefinition(ExpressionConstants.VAR_PROJECTION, projCtx.getObjectDeltaObject());
variables.addVariableDefinition(ExpressionConstants.VAR_SHADOW, projCtx.getObjectDeltaObject());
variables.addVariableDefinition(ExpressionConstants.VAR_ACCOUNT, projCtx.getObjectDeltaObject());
variables.addVariableDefinition(ExpressionConstants.VAR_RESOURCE, projCtx.getResource());
}
variables.addVariableDefinition(ExpressionConstants.VAR_CONFIGURATION, context.getSystemConfiguration());
return variables;
}

public static ExpressionVariables getDefaultExpressionVariables(ObjectType focusType,
ShadowType shadowType, ResourceType resourceType, SystemConfigurationType configurationType) {
PrismObject<? extends ObjectType> focus = null;
Expand Down

0 comments on commit a8929c1

Please sign in to comment.