public PrismReference findReferenceByCompositeObjectElementName(QName elementName) { if (items == null){ return null; } for (Item item: items) { if (item instanceof PrismReference) { PrismReference ref = (PrismReference)item; PrismReferenceDefinition refDef = ref.getDefinition(); if (refDef != null) { if (elementName.equals(refDef.getCompositeObjectElementName())) { return ref; } } } } return null; }
if (definition.getCompositeObjectElementName() == null) { setMultiplicityAttribute(property, "minOccurs", 0); if (definition.getCompositeObjectElementName() == null) { return; QName elementName = definition.getCompositeObjectElementName(); attrNamespace = elementName.getNamespaceURI(); if (attrNamespace != null && attrNamespace.equals(getNamespace())) {
private PrismReferenceValue parseReferenceValueAsCompositeObject(XNodeImpl node, PrismReferenceDefinition definition, ParsingContext pc) throws SchemaException { if (!(node instanceof MapXNodeImpl)) { throw new IllegalArgumentException("Cannot parse reference composite object from " + node); } MapXNodeImpl map = (MapXNodeImpl) node; QName targetTypeName = definition.getTargetTypeName(); PrismObjectDefinition<Objectable> objectDefinition = null; if (map.getTypeQName() != null) { objectDefinition = getSchemaRegistry().findObjectDefinitionByType(map.getTypeQName()); } if (objectDefinition == null && targetTypeName != null) { objectDefinition = getSchemaRegistry().findObjectDefinitionByType(targetTypeName); } if (objectDefinition == null) { throw new SchemaException("No object definition for composite object in reference element " + definition.getCompositeObjectElementName()); } PrismObject<Objectable> compositeObject; try { compositeObject = parseObject(map, objectDefinition, pc); } catch (SchemaException e) { throw new SchemaException(e.getMessage() + " while parsing composite object in reference element " + definition.getCompositeObjectElementName(), e); } PrismReferenceValue refVal = new PrismReferenceValueImpl(); setReferenceObject(refVal, compositeObject); ((PrismReferenceDefinitionImpl) definition).setComposite(true); // TODO why do we modify the definition? is that safe? return refVal; }
PrismAsserts.assertDefinition(accountRefDef, UserType.F_LINK_REF, ObjectReferenceType.COMPLEX_TYPE, 0, -1); assertEquals("Wrong target type in accountRef", ShadowType.COMPLEX_TYPE, accountRefDef.getTargetTypeName()); assertEquals("Wrong composite object element name in accountRef", UserType.F_LINK, accountRefDef.getCompositeObjectElementName());
PrismAsserts.assertDefinition(accountRefDef, USER_ACCOUNTREF_QNAME, OBJECT_REFERENCE_TYPE_QNAME, 0, -1); assertEquals("Wrong target type in accountRef", ACCOUNT_TYPE_QNAME, accountRefDef.getTargetTypeName()); assertEquals("Wrong composite object element name in accountRef", USER_ACCOUNT_QNAME, accountRefDef.getCompositeObjectElementName());