public void setExtensionRealValues(PrismContainerValue<?> containerValue, Map<String, Object> map) throws SchemaException { PrismContainer<Containerable> ext = containerValue.findOrCreateContainer(ObjectType.F_EXTENSION); Map<QName, Object> qnameKeyedMap = new HashMap<>(); map.forEach((uri, value) -> qnameKeyedMap.put(QNameUtil.uriToQName(uri, true), value)); List<Item<?, ?>> items = ObjectTypeUtil.mapToExtensionItems(qnameKeyedMap, ext.getDefinition(), prismContext); for (Item<?, ?> item : items) { ext.getValue().addReplaceExisting(item); } }
/** * Breaks user assignment delta in the context by inserting some empty value. This may interfere with comparing the values to * existing user values. */ protected <F extends FocusType> void breakAssignmentDelta(ObjectDelta<F> userDelta) throws SchemaException { ContainerDelta<?> assignmentDelta = userDelta.findContainerDelta(UserType.F_ASSIGNMENT); PrismContainerValue<?> assignmentDeltaValue = null; if (assignmentDelta.getValuesToAdd() != null) { assignmentDeltaValue = assignmentDelta.getValuesToAdd().iterator().next(); } if (assignmentDelta.getValuesToDelete() != null) { assignmentDeltaValue = assignmentDelta.getValuesToDelete().iterator().next(); } PrismContainer<ActivationType> activationContainer = assignmentDeltaValue.findOrCreateContainer(AssignmentType.F_ACTIVATION); PrismContainerValue<ActivationType> emptyValue = prismContext.itemFactory().createContainerValue(); activationContainer.add(emptyValue); }
private static <V extends PrismValue> V cloneAndApplyMetadata(V value, boolean isAssignment, Supplier<String> originMappingNameSupplier) throws SchemaException { //noinspection unchecked V cloned = (V) value.clone(); if (isAssignment && cloned instanceof PrismContainerValue) { ((PrismContainerValue) cloned).setId(null); String originMappingName = originMappingNameSupplier.get(); LOGGER.trace("cloneAndApplyMetadata: originMappingName = {}", originMappingName); if (originMappingName != null) { //noinspection unchecked PrismContainer<MetadataType> metadataContainer = ((PrismContainerValue) cloned).findOrCreateContainer(AssignmentType.F_METADATA); metadataContainer.getValue().asContainerable().setOriginMappingName(originMappingName); } } return cloned; }
@SuppressWarnings("unchecked") private static void resolveLocalReferences(PolicyConstraintsType pc, ConstraintResolver resolver) throws ObjectNotFoundException, SchemaException { for (PolicyConstraintReferenceType ref : pc.getRef()) { String refName = ref != null ? ref.getName() : null; if (StringUtils.isEmpty(refName)) { throw new SchemaException("Illegal empty reference: " + ref); } List<String> pathToRoot = getPathToRoot(pc); if (pathToRoot.contains(refName)) { throw new SchemaException("Trying to resolve cyclic reference to constraint '" + refName + "'. Contained in: " + pathToRoot); } JAXBElement<? extends AbstractPolicyConstraintType> resolved = resolver.resolve(refName); QName constraintName = resolved.getName(); AbstractPolicyConstraintType constraintValue = resolved.getValue(); PrismContainer<? extends AbstractPolicyConstraintType> container = pc.asPrismContainerValue().findOrCreateContainer(constraintName); container.add(constraintValue.asPrismContainerValue().clone()); } pc.getRef().clear(); }
@Test public void singleValuedItems() throws Exception { System.out.println("===[ singleValuedItems ]==="); UserType userBean = getPrismContext().createObjectable(UserType.class) .beginAssignment() .id(1L) .targetRef(new ObjectReferenceType().oid("123456").type(RoleType.COMPLEX_TYPE)) .end(); //noinspection unchecked PrismContainerValue<AssignmentType> assignmentPcv = userBean.getAssignment().get(0).asPrismContainerValue(); PrismContainer<Containerable> limitContentPc = assignmentPcv .findOrCreateContainer(AssignmentType.F_LIMIT_TARGET_CONTENT); PrismContainerValue<Containerable> val1 = limitContentPc.createNewValue(); val1.setId(1L); PrismContainerValue<Containerable> val2 = val1.clone(); val2.setId(2L); try { limitContentPc.add(val2); fail("unexpected success"); } catch (SchemaException e) { System.out.println("Got expected exception: " + e); } }