diff --git a/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd b/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd index e4e0e21f5b8..7fb9fd2108b 100644 --- a/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd +++ b/infra/schema/src/main/resources/xml/ns/public/common/common-3.xsd @@ -7248,18 +7248,36 @@ - - - - Definition of default object templates for a individual object type. The templates will be used - "universally" during all operations with specified object types - unless the templates are overriden - in other definitions (e.g. in resource). - - - - - + + + + Definition of default object templates for a individual object type. The templates will be used + "universally" during all operations with specified object types - unless the templates are overriden + in other definitions (e.g. in resource). + + DEPRECATED. Use defaultFocusPolicy instead. + + + + true + + + + + + + + Definition of default object policy for a individual object type. The definition of this policy + contains object template and other similar settings. The policy will be used + "universally" during all operations with specified object types - unless it is overriden + in other definitions (e.g. in resource or org). + + + + + + @@ -7302,10 +7320,12 @@ - + - Definition of default object templates for a specific object type. + Definition of policy for a specific object type. It defines object template + and similar settings that apply to the object alone. This policy settings + apply to the object internal structure without regard to other objects. @@ -7329,11 +7349,42 @@ + A mode in which OID and name of the speciefied object are the same. + + true + + + + + + + + + + Definition of a property constraints. + + + + + + + + + + + + + The property value will be bound to OID. This property will be set to the value + of OID and it cannot be changed. + + + true + diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/ChangeExecutor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/ChangeExecutor.java index b9c7759aba6..388c2b14a85 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/ChangeExecutor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/ChangeExecutor.java @@ -32,6 +32,7 @@ import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.PrismPropertyDefinition; import com.evolveum.midpoint.prism.PrismPropertyValue; import com.evolveum.midpoint.prism.PrismReference; @@ -148,22 +149,16 @@ public void executeChanges(LensContext syncContext, Ta LensFocusContext focusContext = syncContext.getFocusContext(); if (focusContext != null) { - ObjectDelta userDelta = focusContext.getWaveDelta(syncContext.getExecutionWave()); - if (userDelta != null) { + ObjectDelta focusDelta = focusContext.getWaveDelta(syncContext.getExecutionWave()); + if (focusDelta != null) { - ObjectTypeTemplateType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); - if (objectPolicyConfigurationType != null && BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { - PrismObject objectNew = focusContext.getObjectNew(); - if (userDelta.isAdd() && objectNew.getOid() == null) { - String name = objectNew.asObjectable().getName().getOrig(); - focusContext.setOid(name); - } - } + ObjectPolicyConfigurationType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); + applyObjectPolicy(focusContext, focusDelta, objectPolicyConfigurationType); OperationResult subResult = result.createSubresult(OPERATION_EXECUTE_FOCUS+"."+focusContext.getObjectTypeClass().getSimpleName()); try { - executeDelta(userDelta, focusContext, syncContext, null, null, task, subResult); + executeDelta(focusDelta, focusContext, syncContext, null, null, task, subResult); subResult.computeStatus(); @@ -313,6 +308,31 @@ public void executeChanges(LensContext syncContext, Ta } + private void applyObjectPolicy(LensFocusContext focusContext, ObjectDelta focusDelta, + ObjectPolicyConfigurationType objectPolicyConfigurationType) { + if (objectPolicyConfigurationType == null) { + return; + } + PrismObject objectNew = focusContext.getObjectNew(); + if (focusDelta.isAdd() && objectNew.getOid() == null) { + + for (PropertyConstraintType propertyConstraintType: objectPolicyConfigurationType.getPropertyConstraint()) { + if (BooleanUtils.isTrue(propertyConstraintType.isOidBound())) { + ItemPath itemPath = propertyConstraintType.getPath().getItemPath(); + PrismProperty prop = objectNew.findProperty(itemPath); + String stringValue = prop.getRealValue().toString(); + focusContext.setOid(stringValue); + } + } + + // deprecated + if (BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { + String name = objectNew.asObjectable().getName().getOrig(); + focusContext.setOid(name); + } + } + } + private

void recordProjectionExecutionException(Exception e, LensProjectionContext accCtx, OperationResult subResult, SynchronizationPolicyDecision decision) { subResult.recordFatalError(e); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensFocusContext.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensFocusContext.java index 1a1963f341f..96863a58a32 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensFocusContext.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensFocusContext.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Evolveum + * Copyright (c) 2010-2014 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -37,9 +37,9 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ValuePolicyType; import com.evolveum.midpoint.xml.ns._public.model.model_context_3.LensFocusContextType; @@ -56,7 +56,7 @@ public class LensFocusContext extends LensElementContext secondaryDeltas = new ObjectDeltaWaves(); transient private ValuePolicyType orgPasswordPolicy; - transient private ObjectTypeTemplateType objectPolicyConfigurationType; + transient private ObjectPolicyConfigurationType objectPolicyConfigurationType; private int getProjectionWave() { return getLensContext().getProjectionWave(); @@ -70,11 +70,11 @@ public ValuePolicyType getOrgPasswordPolicy() { return orgPasswordPolicy; } - public ObjectTypeTemplateType getObjectPolicyConfigurationType() { + public ObjectPolicyConfigurationType getObjectPolicyConfigurationType() { return objectPolicyConfigurationType; } - public void setObjectPolicyConfigurationType(ObjectTypeTemplateType objectPolicyConfigurationType) { + public void setObjectPolicyConfigurationType(ObjectPolicyConfigurationType objectPolicyConfigurationType) { this.objectPolicyConfigurationType = objectPolicyConfigurationType; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java index 388271a1ba0..0c15d2f70c5 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/LensUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Evolveum + * Copyright (c) 2010-2014 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -87,11 +87,12 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.LayerType; import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingStrengthType; import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyConstraintType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectTypeDefinitionType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ScriptExpressionReturnTypeType; @@ -1118,26 +1119,61 @@ public static void checkContextSanity(LensContext cont if (namePolyType == null) { throw new SchemaException("Focus "+focusObjectNew+" does not have a name after "+activityDescription); } - ObjectTypeTemplateType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); - if (objectPolicyConfigurationType != null && BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { - ObjectDelta focusDelta = focusContext.getDelta(); - if (focusDelta != null) { - if (focusDelta.isAdd()) { - if (namePolyType != null) { - // name delta is OK, but it has to match - if (focusObjectNew.getOid() != null) { - if (!focusObjectNew.getOid().equals(namePolyType.getOrig())) { - throw new PolicyViolationException("Cannot set name to a value different than OID in name-oid bound mode"); - } + ObjectPolicyConfigurationType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); + checkObjectPolicy(focusContext, objectPolicyConfigurationType); + } + } + } + + private static void checkObjectPolicy(LensFocusContext focusContext, ObjectPolicyConfigurationType objectPolicyConfigurationType) throws SchemaException, PolicyViolationException { + if (objectPolicyConfigurationType == null) { + return; + } + PrismObject focusObjectNew = focusContext.getObjectNew(); + ObjectDelta focusDelta = focusContext.getDelta(); + + for (PropertyConstraintType propertyConstraintType: objectPolicyConfigurationType.getPropertyConstraint()) { + ItemPath itemPath = propertyConstraintType.getPath().getItemPath(); + if (BooleanUtils.isTrue(propertyConstraintType.isOidBound())) { + if (focusDelta != null) { + if (focusDelta.isAdd()) { + PrismProperty propNew = focusObjectNew.findProperty(itemPath); + if (propNew != null) { + // prop delta is OK, but it has to match + if (focusObjectNew.getOid() != null) { + if (!focusObjectNew.getOid().equals(propNew.getRealValue().toString())) { + throw new PolicyViolationException("Cannot set "+itemPath+" to a value different than OID in oid bound mode"); } } - } else { - PropertyDelta nameDelta = focusDelta.findPropertyDelta(FocusType.F_NAME); - if (nameDelta != null) { - throw new PolicyViolationException("Cannot change name in name-oid bound mode"); + } + } else { + PropertyDelta nameDelta = focusDelta.findPropertyDelta(itemPath); + if (nameDelta != null) { + throw new PolicyViolationException("Cannot change "+itemPath+" in oid bound mode"); + } + } + } + } + } + + // Deprecated + if (BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { + if (focusDelta != null) { + if (focusDelta.isAdd()) { + PolyStringType namePolyType = focusObjectNew.asObjectable().getName(); + if (namePolyType != null) { + // name delta is OK, but it has to match + if (focusObjectNew.getOid() != null) { + if (!focusObjectNew.getOid().equals(namePolyType.getOrig())) { + throw new PolicyViolationException("Cannot set name to a value different than OID in name-oid bound mode"); } } } + } else { + PropertyDelta nameDelta = focusDelta.findPropertyDelta(FocusType.F_NAME); + if (nameDelta != null) { + throw new PolicyViolationException("Cannot change name in name-oid bound mode"); + } } } } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java index ee45f891b81..47298f686ca 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/ContextLoader.java @@ -387,15 +387,33 @@ private PrismObject determineFocusTem Class focusType = focusContext.getObjectTypeClass(); ObjectReferenceType templateRef = null; - for (ObjectTypeTemplateType policyConfigurationType: systemConfigurationType.getObjectTemplate()) { - QName typeQName = policyConfigurationType.getType(); + ObjectPolicyConfigurationType policyConfigurationType = null; + for (ObjectPolicyConfigurationType aPolicyConfigurationType: systemConfigurationType.getDefaultObjectPolicyConfiguration()) { + QName typeQName = aPolicyConfigurationType.getType(); ObjectTypes objectType = ObjectTypes.getObjectTypeFromTypeQName(typeQName); if (objectType == null) { - throw new ConfigurationException("Unknown type "+typeQName+" in object template definition in system configuration"); + throw new ConfigurationException("Unknown type "+typeQName+" in default object policy definition in system configuration"); } if (objectType.getClassDefinition() == focusType) { - templateRef = policyConfigurationType.getObjectTemplateRef(); - focusContext.setObjectPolicyConfigurationType(policyConfigurationType); + templateRef = aPolicyConfigurationType.getObjectTemplateRef(); + focusContext.setObjectPolicyConfigurationType(aPolicyConfigurationType); + policyConfigurationType = aPolicyConfigurationType; + } + } + + if (policyConfigurationType == null) { + // Deprecated + for (ObjectPolicyConfigurationType aPolicyConfigurationType: systemConfigurationType.getObjectTemplate()) { + QName typeQName = aPolicyConfigurationType.getType(); + ObjectTypes objectType = ObjectTypes.getObjectTypeFromTypeQName(typeQName); + if (objectType == null) { + throw new ConfigurationException("Unknown type "+typeQName+" in object template definition in system configuration"); + } + if (objectType.getClassDefinition() == focusType) { + templateRef = aPolicyConfigurationType.getObjectTemplateRef(); + focusContext.setObjectPolicyConfigurationType(aPolicyConfigurationType); + policyConfigurationType = aPolicyConfigurationType; + } } } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java index 52647ef9532..cdb87d6cd6d 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/FocusProcessor.java @@ -64,6 +64,7 @@ import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.PrismObjectDefinition; +import com.evolveum.midpoint.prism.PrismProperty; import com.evolveum.midpoint.prism.PrismPropertyDefinition; import com.evolveum.midpoint.prism.PrismPropertyValue; import com.evolveum.midpoint.prism.PrismValue; @@ -98,13 +99,14 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.IterationSpecificationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingStrengthType; import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateMappingEvaluationPhaseType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateMappingType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyConstraintType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; import com.evolveum.midpoint.xml.ns._public.common.common_3.StringPolicyType; import com.evolveum.midpoint.xml.ns._public.common.common_3.TimeIntervalStatusType; @@ -210,27 +212,8 @@ private void processFocusFocus(LensContext context, Str while (true) { - ObjectTypeTemplateType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); - if (objectPolicyConfigurationType != null && BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { - // Generate the name now - unless it is already present - PrismObject focusNew = focusContext.getObjectNew(); - if (focusNew != null) { - PolyStringType focusNewName = focusNew.asObjectable().getName(); - if (focusNewName == null) { - String newName = focusNew.getOid(); - if (newName == null) { - newName = OidUtil.generateOid(); - } - LOGGER.trace("Generating new name (bound to OID): {}", newName); - PrismObjectDefinition focusDefinition = focusContext.getObjectDefinition(); - PrismPropertyDefinition focusNameDef = focusDefinition.findPropertyDefinition(FocusType.F_NAME); - PropertyDelta nameDelta = focusNameDef.createEmptyDelta(new ItemPath(FocusType.F_NAME)); - nameDelta.setValueToReplace(new PrismPropertyValue(new PolyString(newName), OriginType.USER_POLICY, null)); - focusContext.swallowToSecondaryDelta(nameDelta); - focusContext.recompute(); - } - } - } + ObjectPolicyConfigurationType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType(); + applyObjectPolicyConstraints(focusContext, objectPolicyConfigurationType); ExpressionVariables variables = Utils.getDefaultExpressionVariables(focusContext.getObjectNew(), null, null, null, context.getSystemConfiguration()); if (iterationToken == null) { @@ -395,6 +378,68 @@ private void processFocusFocus(LensContext context, Str } + private void applyObjectPolicyConstraints(LensFocusContext focusContext, ObjectPolicyConfigurationType objectPolicyConfigurationType) throws SchemaException { + if (objectPolicyConfigurationType == null) { + return; + } + + PrismObject focusNew = focusContext.getObjectNew(); + if (focusNew == null) { + // This is delete. Nothing to do. + return; + } + + for (PropertyConstraintType propertyConstraintType: objectPolicyConfigurationType.getPropertyConstraint()) { + ItemPath itemPath = propertyConstraintType.getPath().getItemPath(); + if (BooleanUtils.isTrue(propertyConstraintType.isOidBound())) { + PrismProperty prop = focusNew.findProperty(itemPath); + if (prop == null || prop.isEmpty()) { + String newValue = focusNew.getOid(); + if (newValue == null) { + newValue = OidUtil.generateOid(); + } + LOGGER.trace("Generating new OID-bound value for {}: {}", itemPath, newValue); + PrismObjectDefinition focusDefinition = focusContext.getObjectDefinition(); + PrismPropertyDefinition propDef = focusDefinition.findPropertyDefinition(itemPath); + if (propDef == null) { + throw new SchemaException("No definition for property "+itemPath+" in "+focusDefinition+" as specified in object policy"); + } + PropertyDelta propDelta = propDef.createEmptyDelta(itemPath); + if (String.class.isAssignableFrom(propDef.getTypeClass())) { + propDelta.setValueToReplace(new PrismPropertyValue(newValue, OriginType.USER_POLICY, null)); + } else if (PolyString.class.isAssignableFrom(propDef.getTypeClass())) { + propDelta.setValueToReplace(new PrismPropertyValue(new PolyString(newValue), OriginType.USER_POLICY, null)); + } else { + throw new SchemaException("Unsupported type "+propDef.getTypeName()+" for property "+itemPath+" in "+focusDefinition+" as specified in object policy, only string and polystring properties are supported for OID-bound mode"); + } + focusContext.swallowToSecondaryDelta(propDelta); + focusContext.recompute(); + } + } + } + + // Deprecated + if (BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) { + // Generate the name now - unless it is already present + if (focusNew != null) { + PolyStringType focusNewName = focusNew.asObjectable().getName(); + if (focusNewName == null) { + String newValue = focusNew.getOid(); + if (newValue == null) { + newValue = OidUtil.generateOid(); + } + LOGGER.trace("Generating new name (bound to OID): {}", newValue); + PrismObjectDefinition focusDefinition = focusContext.getObjectDefinition(); + PrismPropertyDefinition focusNameDef = focusDefinition.findPropertyDefinition(FocusType.F_NAME); + PropertyDelta nameDelta = focusNameDef.createEmptyDelta(new ItemPath(FocusType.F_NAME)); + nameDelta.setValueToReplace(new PrismPropertyValue(new PolyString(newValue), OriginType.USER_POLICY, null)); + focusContext.swallowToSecondaryDelta(nameDelta); + focusContext.recompute(); + } + } + } + } + private boolean willResetIterationCounter(LensFocusContext focusContext) throws SchemaException { ObjectDelta focusDelta = focusContext.getDelta(); if (focusDelta == null) { diff --git a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java index aaf526e438e..1f96acc6b7b 100644 --- a/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java +++ b/model/model-test/src/main/java/com/evolveum/midpoint/model/test/AbstractModelIntegrationTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010-2013 Evolveum + * Copyright (c) 2010-2014 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -109,11 +109,11 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectPolicyConfigurationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectSynchronizationType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTypeTemplateType; import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; @@ -1484,27 +1484,27 @@ protected void setDefaultObjectTemplate(QName objectType, String userTemplateOid PrismObject systemConfig = repositoryService.getObject(SystemConfigurationType.class, SystemObjectsType.SYSTEM_CONFIGURATION.value(), null, parentResult); - PrismContainerValue deleteValue = null; - for (ObjectTypeTemplateType objectTemplate: systemConfig.asObjectable().getObjectTemplate()) { - if (objectType.equals(objectTemplate)) { - deleteValue = objectTemplate.asPrismContainerValue(); + PrismContainerValue deleteValue = null; + for (ObjectPolicyConfigurationType focusPolicyType: systemConfig.asObjectable().getDefaultObjectPolicyConfiguration()) { + if (objectType.equals(focusPolicyType.getType())) { + deleteValue = focusPolicyType.asPrismContainerValue(); } } Collection modifications = new ArrayList(); if (deleteValue != null) { - ContainerDelta deleteDelta = ContainerDelta.createModificationDelete(SystemConfigurationType.F_OBJECT_TEMPLATE, + ContainerDelta deleteDelta = ContainerDelta.createModificationDelete(SystemConfigurationType.F_DEFAULT_OBJECT_POLICY_CONFIGURATION, SystemConfigurationType.class, prismContext, deleteValue); ((Collection)modifications).add(deleteDelta); } - ObjectTypeTemplateType newTemplateType = new ObjectTypeTemplateType(); - newTemplateType.setType(objectType); + ObjectPolicyConfigurationType newFocusPolicyType = new ObjectPolicyConfigurationType(); + newFocusPolicyType.setType(objectType); ObjectReferenceType templateRef = new ObjectReferenceType(); templateRef.setOid(userTemplateOid); - newTemplateType.setObjectTemplateRef(templateRef); - ContainerDelta addDelta = ContainerDelta.createModificationAdd(SystemConfigurationType.F_OBJECT_TEMPLATE, - SystemConfigurationType.class, prismContext, newTemplateType); + newFocusPolicyType.setObjectTemplateRef(templateRef); + ContainerDelta addDelta = ContainerDelta.createModificationAdd(SystemConfigurationType.F_DEFAULT_OBJECT_POLICY_CONFIGURATION, + SystemConfigurationType.class, prismContext, newFocusPolicyType); ((Collection)modifications).add(addDelta); repositoryService.modifyObject(SystemConfigurationType.class, diff --git a/testing/story/src/test/resources/uuid/system-configuration.xml b/testing/story/src/test/resources/uuid/system-configuration.xml index f611f0429d2..1a1f79e3f7f 100644 --- a/testing/story/src/test/resources/uuid/system-configuration.xml +++ b/testing/story/src/test/resources/uuid/system-configuration.xml @@ -36,9 +36,12 @@ true - + UserType - true - + + name + true + +