/** * @return mode (adding, deleting, keeping) with respect to the *current* object (not the old one) */ @NotNull public PlusMinusZero getMode() { if (assignmentIdi.getItemNew() == null || assignmentIdi.getItemNew().isEmpty()) { return MINUS; } else if (presentInCurrentObject) { return ZERO; } else { return PLUS; } }
@Override public AssignmentType getAssignmentNew() { if (assignmentIdi == null || assignmentIdi.getItemNew() == null || assignmentIdi.getItemNew().isEmpty()) { return null; } return ((PrismContainer<AssignmentType>) assignmentIdi.getItemNew()).getRealValue(); }
/** * Adds map of extra variables to the expression. * If there are variables with deltas (ObjectDeltaObject) it takes the "new" version * of the object. */ public void addVariableDefinitionsNew(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.getNewObject(); } else if (value instanceof ItemDeltaItem<?,?>) { ItemDeltaItem<?,?> idi = (ItemDeltaItem<?,?>)value; value = idi.getItemNew(); } variables.put(entry.getKey(), value); } }
public AssignmentType getAssignmentAny() { if (assignmentIdi == null) { return null; } return assignmentIdi.getItemNew() != null ? getAssignment(false) : getAssignment(true); }
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); }
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); DebugUtil.debugDumpWithLabelLn(sb, "evaluatedOld", evaluatedOld, indent + 1); DebugUtil.debugDumpWithLabelLn(sb, "target", String.valueOf(target), 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(); }
private XMLGregorianCalendar parseTimeSource(VariableBindingDefinitionType sourceType, Task task, OperationResult result) throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, SecurityViolationException, ExpressionEvaluationException { ItemPathType itemPathType = sourceType.getPath(); if (itemPathType == null) { throw new SchemaException("No path in source definition in "+getMappingContextDescription()); } ItemPath path = itemPathType.getItemPath(); if (path.isEmpty()) { throw new SchemaException("Empty source path in "+getMappingContextDescription()); } Object sourceObject = ExpressionUtil.resolvePath(path, variables, false, sourceContext, objectResolver, "reference time definition in "+getMappingContextDescription(), task, result); if (sourceObject == null) { return null; } PrismProperty<XMLGregorianCalendar> timeProperty; if (sourceObject instanceof ItemDeltaItem<?,?>) { timeProperty = (PrismProperty<XMLGregorianCalendar>) ((ItemDeltaItem<?,?>)sourceObject).getItemNew(); } else if (sourceObject instanceof Item<?,?>) { timeProperty = (PrismProperty<XMLGregorianCalendar>) sourceObject; } else { throw new IllegalStateException("Unknown resolve result "+sourceObject); } if (timeProperty == null) { return null; } return timeProperty.getRealValue(); }
@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); }
@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()); }
itemNew = ((ItemDeltaItem<IV,ID>)sourceObject).getItemNew();