/** * Adds map of extra variables to the expression. * If there are variables with deltas (ObjectDeltaObject) it takes the "old" version * of the object. */ public void addVariableDefinitionsOld(Map<QName, Object> extraVariables) { for (Entry<QName, Object> entry : extraVariables.entrySet()) { Object value = entry.getValue(); if (value instanceof ObjectDeltaObject<?>) { ObjectDeltaObject<?> odo = (ObjectDeltaObject<?>)value; value = odo.getOldObject(); } else if (value instanceof ItemDeltaItem<?,?>) { ItemDeltaItem<?,?> idi = (ItemDeltaItem<?,?>)value; value = idi.getItemOld(); } variables.put(entry.getKey(), value); } }
public ItemDeltaItem(ItemDeltaItem<V,D> idi) { super(); this.itemOld = idi.getItemOld(); this.itemNew = idi.getItemNew(); this.delta = idi.getDelta(); }
private static void mergeExtension(ItemDeltaItem<PrismContainerValue<AssignmentType>,PrismContainerDefinition<AssignmentType>> destIdi, ItemDeltaItem<PrismContainerValue<AssignmentType>,PrismContainerDefinition<AssignmentType>> srcIdi) throws SchemaException { mergeExtension(destIdi.getItemOld(), srcIdi.getItemOld()); mergeExtension(destIdi.getItemNew(), srcIdi.getItemNew()); if (srcIdi.getDelta() != null || srcIdi.getSubItemDeltas() != null) { throw new UnsupportedOperationException("Merge of IDI with deltas not supported"); } }
private static <O extends ObjectType> void mergeExtension(ItemDeltaItem<PrismContainerValue<AssignmentType>,PrismContainerDefinition<AssignmentType>> destIdi, PrismObject<O> srcObject) throws SchemaException { if (srcObject == null) { return; } PrismContainer<Containerable> srcExtension = srcObject.findContainer(ObjectType.F_EXTENSION); mergeExtensionContainers(destIdi.getItemNew(), srcExtension); mergeExtensionContainers(destIdi.getItemOld(), srcExtension); }
public <X> ItemDeltaItem<PrismPropertyValue<X>,PrismPropertyDefinition<X>> resolveStructuredProperty( ItemPath resolvePath, PrismPropertyDefinition outputDefinition, ItemPath outputPath, PrismContext prismContext) { ItemDeltaItem<PrismPropertyValue<Structured>,PrismPropertyDefinition<Structured>> thisIdi = (ItemDeltaItem<PrismPropertyValue<Structured>,PrismPropertyDefinition<Structured>>)this; PrismProperty<X> outputPropertyNew = resolveStructuredPropertyItem((PrismProperty<Structured>) thisIdi.getItemNew(), resolvePath, outputDefinition); PrismProperty<X> outputPropertyOld = resolveStructuredPropertyItem((PrismProperty<Structured>) thisIdi.getItemOld(), resolvePath, outputDefinition); PropertyDelta<X> outputDelta = resolveStructuredPropertyDelta((PropertyDelta<Structured>) thisIdi.getDelta(), resolvePath, outputDefinition, outputPath, prismContext); return new ItemDeltaItem<>(outputPropertyOld, outputDelta, outputPropertyNew); }
StringBuilder sb = new StringBuilder(); DebugUtil.debugDumpLabelLn(sb, "EvaluatedAssignment", indent); DebugUtil.debugDumpWithLabelLn(sb, "assignment old", String.valueOf(assignmentIdi.getItemOld()), indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "assignment delta", String.valueOf(assignmentIdi.getDelta()), indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "assignment new", String.valueOf(assignmentIdi.getItemNew()), indent + 1);
@Override public String debugDump(int indent) { StringBuilder sb = new StringBuilder(); DebugUtil.debugDumpLabel(sb, "AssignmentPathSegment", indent); sb.append("\n"); DebugUtil.debugDumpWithLabelLn(sb, "source", source==null?"null":source.toString(), indent + 1); String assignmentOrInducement = isAssignment ? "assignment" : "inducement"; if (assignmentIdi != null) { DebugUtil.debugDumpWithLabelLn(sb, assignmentOrInducement + " old", String.valueOf(assignmentIdi.getItemOld()), indent + 1); DebugUtil.debugDumpWithLabelLn(sb, assignmentOrInducement + " delta", String.valueOf(assignmentIdi.getDelta()), indent + 1); DebugUtil.debugDumpWithLabelLn(sb, assignmentOrInducement + " new", String.valueOf(assignmentIdi.getItemNew()), indent + 1); } else { DebugUtil.debugDumpWithLabelLn(sb, assignmentOrInducement, "null", indent + 1); } DebugUtil.debugDumpWithLabelLn(sb, "target", target==null?"null":target.toString(), indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "evaluationOrder", evaluationOrder, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "isMatchingOrder", isMatchingOrder, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "isMatchingOrderForTarget", isMatchingOrderForTarget, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "relation", relation, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "pathToSourceValid", pathToSourceValid, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "validityOverride", validityOverride, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "processMembership", processMembership, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "lastEqualOrderSegmentIndex", lastEqualOrderSegmentIndex, indent + 1); DebugUtil.debugDumpWithLabel(sb, "varThisObject", varThisObject==null?"null":varThisObject.toString(), indent + 1); return sb.toString(); }
@Test public void testResolvePathPolyStringOdoOrig() throws Exception { final String TEST_NAME = "testResolvePathPolyStringOdoOrig"; System.out.println("\n===[ "+TEST_NAME+" ]===\n"); // GIVEN // WHEN ItemDeltaItem<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> idi = resolvePathOdo("$user/fullName/t:orig", TEST_NAME); // THEN assertEquals("Wrong resolved idi old value", PrismTestUtil.createPolyString("Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemOld()).getRealValue()); assertEquals("Wrong resolved idi new value", PrismTestUtil.createPolyString("Captain Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemNew()).getRealValue()); PrismAsserts.assertPathEquivalent("Wrong residual path", PolyString.F_ORIG, idi.getResidualPath()); }
@Test public void testResolvePathPolyStringOdoNorm() throws Exception { final String TEST_NAME = "testResolvePathPolyStringOdoNorm"; System.out.println("\n===[ "+TEST_NAME+" ]===\n"); // GIVEN // WHEN ItemDeltaItem<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> idi = resolvePathOdo("$user/fullName/t:norm", TEST_NAME); // THEN assertEquals("Wrong resolved idi old value", PrismTestUtil.createPolyString("Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemOld()).getRealValue()); assertEquals("Wrong resolved idi new value", PrismTestUtil.createPolyString("Captain Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemNew()).getRealValue()); PrismAsserts.assertPathEquivalent("Wrong residual path", PolyString.F_NORM, idi.getResidualPath()); }
private static void convertToLegacy( ItemDeltaItem<PrismContainerValue<AssignmentType>, PrismContainerDefinition<AssignmentType>> idi) { if (idi == null || idi.getDelta() == null || idi.getSubItemDeltas() != null) { return; } // Legacy approach (when adding/removing assignments) was: itemOld+itemNew = value, delta = null // This was recently changed, to provide precise information (add = null->itemNew, delete = itemOld->null). // However, to not break scripts before 3.6 release we provide imitation of old behavior here. // (Moreover, for magic assignment the delta is not correct anyway.) if (idi.getDelta().isAdd() || idi.getDelta().isReplace()) { idi.setItemOld(idi.getItemNew().clone()); } else { idi.setItemNew(idi.getItemOld().clone()); } idi.setDelta(null); }
PrismValueDeltaSetTriple<V> outputTriple = ItemDeltaUtil.toDeltaSetTriple((Item<V,D>)resolveContext.getItemOld(), (ItemDelta<V,D>)resolveContext.getDelta(), prismContext);
@Test public void testResolvePathPolyStringOdo() throws Exception { final String TEST_NAME = "testResolvePathPolyStringOdo"; System.out.println("\n===[ "+TEST_NAME+" ]===\n"); // GIVEN // WHEN ItemDeltaItem<PrismPropertyValue<PolyString>,PrismPropertyDefinition<PolyString>> idi = resolvePathOdo("$user/fullName", TEST_NAME); // THEN assertEquals("Wrong resolved idi old value", PrismTestUtil.createPolyString("Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemOld()).getRealValue()); assertEquals("Wrong resolved idi new value", PrismTestUtil.createPolyString("Captain Jack Sparrow"), ((PrismProperty<PolyString>)idi.getItemNew()).getRealValue()); assertTrue("Wrong residual path: "+idi.getResidualPath(), idi.getResidualPath() == null || idi.getResidualPath().isEmpty()); }
if (sourceObject instanceof ItemDeltaItem<?,?>) { itemOld = ((ItemDeltaItem<IV,ID>)sourceObject).getItemOld();
specialAttributeDelta = sourceIdi.getDelta(); Source<PrismPropertyValue<?>,PrismPropertyDefinition<?>> source = new Source<>(sourceIdi.getItemOld(), specialAttributeDelta, sourceIdi.getItemOld(), ExpressionConstants.VAR_INPUT); builder = builder.defaultSource(source) .addVariableDefinition(ExpressionConstants.VAR_USER, newUser)