@NotNull private PrismReference parseReference(@NotNull XNodeImpl node, @NotNull QName itemName, @NotNull PrismReferenceDefinition definition, @NotNull ParsingContext pc) throws SchemaException { PrismReference ref = definition.instantiate(); if (node instanceof ListXNodeImpl) { ListXNodeImpl listNode = (ListXNodeImpl) node; if (!definition.isMultiValue() && listNode.size() > 1) { throw new SchemaException("Attempt to store multiple values in single-valued reference " + itemName); } for (XNodeImpl subNode : listNode) { ref.add(parseReferenceValueFromXNode(subNode, definition, itemName, pc)); } } else if (node instanceof MapXNodeImpl) { ref.add(parseReferenceValueFromXNode(node, definition, itemName, pc)); } else if (node instanceof PrimitiveXNodeImpl) { // empty } else { throw new IllegalArgumentException("Cannot parse reference from " + node); } return ref; }
protected PrismReference ref(List<ObjectReferenceType> orts) { PrismReference rv = prismContext.itemFactory().createReference(new QName("dummy")); orts.forEach(ort -> { try { rv.add(ort.asReferenceValue().clone()); } catch (SchemaException e) { throw new IllegalStateException(e); } }); return rv; }
reference.add(value); } catch (SchemaException e) { throw new IllegalStateException("Couldn't add a value: " + e.getMessage(), e);
refPR.add(ObjectTypeUtil.createObjectRef("oid1", ObjectTypes.USER).asReferenceValue()); refPR.setImmutable(true);
@Test public void testObjectDeltaSummarizeAddModifySameRefValues() throws Exception { final String TEST_NAME="testObjectDeltaSummarizeAddModifySameRefValues"; displayTestTitle(TEST_NAME); // GIVEN PrismObjectDefinition<UserType> userDef = getUserTypeDefinition(); PrismObject<UserType> user = userDef.instantiate(); user.setOid(USER_FOO_OID); user.setPropertyRealValue(UserType.F_NAME, PrismTestUtil.createPolyString("foo")); PrismReference parentOrgRef = user.findOrCreateReference(UserType.F_PARENT_ORG_REF); parentOrgRef.add(new PrismReferenceValueImpl("oid1")); ObjectDelta<UserType> userDelta0 = DeltaFactory.Object.createAddDelta(user); ObjectDelta<UserType> userDelta1 = PrismTestUtil.getPrismContext().deltaFactory().object() .createModificationAddReference(UserType.class, USER_FOO_OID, UserType.F_PARENT_ORG_REF, "oid1"); System.out.println("userDelta0 = " + userDelta0.debugDump()); System.out.println("userDelta1 = " + userDelta1.debugDump()); // WHEN ObjectDelta<UserType> userDeltaSum = ObjectDeltaCollectionsUtil.summarize(userDelta0, userDelta1); System.out.println("userDeltaSum = " + userDeltaSum.debugDump()); // THEN assertEquals("Wrong OID", USER_FOO_OID, userDeltaSum.getOid()); PrismAsserts.assertIsAdd(userDeltaSum); PrismObject<UserType> userSum = userDeltaSum.getObjectToAdd(); assert user != userSum : "User was not cloned"; PrismAsserts.assertReferenceValues(userSum.findOrCreateReference(UserType.F_PARENT_ORG_REF), "oid1"); } @Test
PrismReferenceValue opponentRefValue = new PrismReferenceValueImpl(); opponentRefValue.setObject(userBarbossa); opponentRef.add(opponentRefValue);
PrismReferenceValue val11 = new PrismReferenceValueImpl("oid1"); val11.setTargetType(ACCOUNT_TYPE_QNAME); assertTrue(ref1a.add(val11)); assertFalse(ref1a.add(val12)); assertTrue(ref1b.add(val13)); assertFalse(ref1b.add(val14)); PrismReferenceValue val21 = new PrismReferenceValueImpl("oid1"); val21.setTargetType(ACCOUNT_TYPE_QNAME); assertTrue(ref2a.add(val21)); assertFalse(ref2a.add(val22)); assertTrue(ref2b.add(val23));
assertEquals(USER_ACCOUNTREF_QNAME, accountRef.getElementName()); if (assertDefinitions) PrismAsserts.assertDefinition(accountRef, OBJECT_REFERENCE_TYPE_QNAME, 0, -1); accountRef.add(new PrismReferenceValueImpl(ACCOUNT1_OID)); accountRef.add(new PrismReferenceValueImpl(ACCOUNT2_OID)); PrismReference accountRefAgain = user.findOrCreateReference(USER_ACCOUNTREF_QNAME);