@NotNull private PrismReferenceValue parseReferenceValueFromXNode(@NotNull XNodeImpl node, @NotNull PrismReferenceDefinition definition, @NotNull QName itemName, @NotNull ParsingContext pc) throws SchemaException { /* * We distinguish between "real" references and composite objects by * (1) looking at type QName of XNode passed (whether it's ObjectType or ObjectReferenceType) * (2) comparing itemName and name from reference definition - e.g. linkRef vs. link */ boolean isComposite; if (node.getTypeQName() != null) { QName typeName = node.getTypeQName(); ItemDefinition contentDefinition = getSchemaRegistry().findItemDefinitionByType(typeName); isComposite = contentDefinition instanceof PrismObjectDefinition; } else { isComposite = !QNameUtil.match(itemName, definition.getName()); } if (isComposite) { return parseReferenceValueAsCompositeObject(node, definition, pc); // This is a composite object (complete object stored inside reference) } else { // TODO fix this hack: for delta values of ObjectReferenceType we will not // insist on having reference type (because the target definition could be such that it won't require it) boolean allowMissingRefTypesOverride = node.isExplicitTypeDeclaration(); return parseReferenceValueAsReference(node, definition, pc, allowMissingRefTypesOverride); // This is "real" reference (oid, and nothing more) } }
public static void assertRefFilter(ObjectFilter objectFilter, QName expectedFilterDef, QName expectedTypeName, ItemPath path) { assertTrue("Wrong filter class: " + objectFilter.getClass(), objectFilter instanceof RefFilter); RefFilter filter = (RefFilter) objectFilter; assertEquals("Wrong filter definition element name", expectedFilterDef, filter.getDefinition().getName()); assertEquals("Wrong filter definition type", expectedTypeName, filter.getDefinition().getTypeName()); assertPathEquivalent("Wrong filter path", path, filter.getFullPath()); }
String attrNamespace = definition.getName().getNamespaceURI(); if (attrNamespace != null && attrNamespace.equals(getNamespace())) { setAttribute(property, "name", definition.getName().getLocalPart()); setQNameAttribute(property, "type", definition.getTypeName()); } else { setQNameAttribute(property, "ref", definition.getName()); annotation.appendChild(appinfo); addAnnotation(A_OBJECT_REFERENCE, definition.getName(), appinfo); if (definition.isComposite()) { addAnnotation(A_COMPOSITE, definition.isComposite(), appinfo);
type = definition.getTargetTypeName(); if (type == null) { throw new SchemaException("Target type in reference " + definition.getName() + " not specified in reference nor in the schema"); if (defTargetType != null) { if (!(prismContext.getSchemaRegistry().isAssignableFrom(defTargetType, type))) { throw new SchemaException("Target type specified in reference " + definition.getName() + " (" + type + ") does not match target type in schema (" + defTargetType + ")");