// region Serializing references - specific functionality private XNode serializeReferenceValue( PrismReferenceValue value, PrismReferenceDefinition definition, SerializationContext ctx) throws SchemaException { MapXNode xmap = new MapXNode(); boolean containsOid = false; String namespace = definition != null ? definition.getNamespace() : null; // namespace for filter and description if (StringUtils.isNotBlank(value.getOid())) { containsOid = true; xmap.put(XNode.KEY_REFERENCE_OID, createPrimitiveXNodeStringAttr(value.getOid())); } QName relation = value.getRelation(); if (relation != null) { xmap.put(XNode.KEY_REFERENCE_RELATION, createPrimitiveXNodeAttr(relation, DOMUtil.XSD_QNAME)); } QName targetType = value.getTargetType(); if (targetType != null) { xmap.put(XNode.KEY_REFERENCE_TYPE, createPrimitiveXNodeAttr(targetType, DOMUtil.XSD_QNAME)); } String description = value.getDescription(); if (description != null) { xmap.put( createReferenceQName(XNode.KEY_REFERENCE_DESCRIPTION, namespace), createPrimitiveXNode(description, DOMUtil.XSD_STRING)); } SearchFilterType filter = value.getFilter(); if (filter != null) { XNode xsubnode = filter.serializeToXNode(); xmap.put(createReferenceQName(XNode.KEY_REFERENCE_FILTER, namespace), xsubnode); } if (value.getTargetName() != null) { if (SerializationContext.isSerializeReferenceNames(ctx)) { XNode xsubnode = createPrimitiveXNode(value.getTargetName(), PolyStringType.COMPLEX_TYPE); xmap.put(createReferenceQName(XNode.KEY_REFERENCE_TARGET_NAME, namespace), xsubnode); } else { String commentValue = " " + value.getTargetName().getOrig() + " "; xmap.setComment(commentValue); } } boolean isComposite = false; if (definition != null) { isComposite = definition.isComposite(); } if ((serializeCompositeObjects || isComposite || !containsOid) && value.getObject() != null) { XNode xobjnode = serializeObjectContent(value.getObject(), ctx); xmap.put(createReferenceQName(XNode.KEY_REFERENCE_OBJECT, namespace), xobjnode); } return xmap; }
private AssignmentItemDto createAssignmentItem( PrismObject<UserType> user, PrismContainerValue assignment, Task task, OperationResult result) { PrismReference targetRef = assignment.findReference(AssignmentType.F_TARGET_REF); if (targetRef == null || targetRef.isEmpty()) { // account construction PrismContainer construction = assignment.findContainer(AssignmentType.F_CONSTRUCTION); String name = null; String description = null; if (construction.getValue().asContainerable() != null && !construction.isEmpty()) { ConstructionType constr = (ConstructionType) construction.getValue().asContainerable(); description = (String) construction.getPropertyRealValue(ConstructionType.F_DESCRIPTION, String.class); if (constr.getResourceRef() != null) { ObjectReferenceType resourceRef = constr.getResourceRef(); PrismObject resource = WebModelUtils.loadObject( ResourceType.class, resourceRef.getOid(), this, task, result); name = WebMiscUtil.getName(resource); } } return new AssignmentItemDto( AssignmentEditorDtoType.ACCOUNT_CONSTRUCTION, name, description, null); } PrismReferenceValue refValue = targetRef.getValue(); PrismObject value = refValue.getObject(); if (value == null) { // resolve reference value = WebModelUtils.loadObject(ObjectType.class, refValue.getOid(), this, task, result); } if (value == null) { // we couldn't resolve assignment details return new AssignmentItemDto(null, null, null, null); } String name = WebMiscUtil.getName(value); AssignmentEditorDtoType type = AssignmentEditorDtoType.getType(value.getCompileTimeClass()); String relation = refValue.getRelation() != null ? refValue.getRelation().getLocalPart() : null; String description = null; if (RoleType.class.isAssignableFrom(value.getCompileTimeClass())) { description = (String) value.getPropertyRealValue(RoleType.F_DESCRIPTION, String.class); } return new AssignmentItemDto(type, name, description, relation); }