Skip to content

Commit

Permalink
Implementing name-oid bound mode + tests (tests still work in progres…
Browse files Browse the repository at this point in the history
…s). Also fixing tests from previous commit.
  • Loading branch information
semancik committed Jun 4, 2014
1 parent a4b9f7b commit 24d7139
Show file tree
Hide file tree
Showing 13 changed files with 803 additions and 6 deletions.
@@ -0,0 +1,30 @@
/**
* Copyright (c) 2014 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.evolveum.midpoint.schema.util;

import java.util.UUID;

/**
* @author semancik
*
*/
public class OidUtil {

public static String generateOid() {
return UUID.randomUUID().toString();
}

}
Expand Up @@ -7231,6 +7231,13 @@
<a:objectReferenceTargetType>tns:ObjectTemplateType</a:objectReferenceTargetType>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="oidNameBoundMode" type="xsd:boolean" minOccurs="0" default="false">
<xsd:annotation>
<xsd:documentation>
A mode in which OID and name of the speciefied object are the same.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
Expand Down
Expand Up @@ -75,6 +75,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.RawType;

import org.apache.commons.lang.BooleanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
Expand Down Expand Up @@ -149,6 +150,15 @@ public <O extends ObjectType> void executeChanges(LensContext<O> syncContext, Ta
if (focusContext != null) {
ObjectDelta<O> userDelta = focusContext.getWaveDelta(syncContext.getExecutionWave());
if (userDelta != null) {

ObjectTypeTemplateType objectPolicyConfigurationType = focusContext.getObjectPolicyConfigurationType();
if (objectPolicyConfigurationType != null && BooleanUtils.isTrue(objectPolicyConfigurationType.isOidNameBoundMode())) {
PrismObject<O> objectNew = focusContext.getObjectNew();
if (userDelta.isAdd() && objectNew.getOid() == null) {
String name = objectNew.asObjectable().getName().getOrig();
focusContext.setOid(name);
}
}

OperationResult subResult = result.createSubresult(OPERATION_EXECUTE_FOCUS+"."+focusContext.getObjectTypeClass().getSimpleName());
try {
Expand Down
Expand Up @@ -39,6 +39,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
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;

Expand All @@ -55,6 +56,7 @@ public class LensFocusContext<O extends ObjectType> extends LensElementContext<O
private ObjectDeltaWaves<O> secondaryDeltas = new ObjectDeltaWaves<O>();

transient private ValuePolicyType orgPasswordPolicy;
transient private ObjectTypeTemplateType objectPolicyConfigurationType;

private int getProjectionWave() {
return getLensContext().getProjectionWave();
Expand All @@ -67,7 +69,14 @@ public void setOrgPasswordPolicy(ValuePolicyType orgPasswordPolicy) {
public ValuePolicyType getOrgPasswordPolicy() {
return orgPasswordPolicy;
}


public ObjectTypeTemplateType getObjectPolicyConfigurationType() {
return objectPolicyConfigurationType;
}

public void setObjectPolicyConfigurationType(ObjectTypeTemplateType objectPolicyConfigurationType) {
this.objectPolicyConfigurationType = objectPolicyConfigurationType;
}

public LensFocusContext(Class<O> objectTypeClass, LensContext<O> lensContext) {
super(objectTypeClass, lensContext);
Expand Down
Expand Up @@ -387,14 +387,15 @@ private <F extends ObjectType> PrismObject<ObjectTemplateType> determineFocusTem
Class<F> focusType = focusContext.getObjectTypeClass();

ObjectReferenceType templateRef = null;
for (ObjectTypeTemplateType objectTemplate: systemConfigurationType.getObjectTemplate()) {
QName typeQName = objectTemplate.getType();
for (ObjectTypeTemplateType policyConfigurationType: systemConfigurationType.getObjectTemplate()) {
QName typeQName = policyConfigurationType.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 = objectTemplate.getObjectTemplateRef();
templateRef = policyConfigurationType.getObjectTemplateRef();
focusContext.setObjectPolicyConfigurationType(policyConfigurationType);
}
}

Expand Down
Expand Up @@ -30,6 +30,7 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import org.apache.commons.lang.BooleanUtils;
import org.apache.xpath.FoundIndex;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
Expand Down Expand Up @@ -73,10 +74,12 @@
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.delta.PropertyDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.polystring.PolyString;
import com.evolveum.midpoint.repo.api.RepositoryService;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.OidUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.CommunicationException;
import com.evolveum.midpoint.util.exception.ConfigurationException;
Expand All @@ -100,6 +103,7 @@
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.ShadowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.StringPolicyType;
Expand Down Expand Up @@ -205,6 +209,25 @@ private <F extends FocusType> void processFocusFocus(LensContext<F> 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<F> focusNew = focusContext.getObjectNew();
if (focusNew != null) {
PolyStringType focusNewName = focusNew.asObjectable().getName();
if (focusNewName == null) {
String newName = OidUtil.generateOid();
LOGGER.trace("Generating new name (bound to OID): {}", newName);
PrismObjectDefinition<F> focusDefinition = focusContext.getObjectDefinition();
PrismPropertyDefinition<PolyString> focusNameDef = focusDefinition.findPropertyDefinition(FocusType.F_NAME);
PropertyDelta<PolyString> nameDelta = focusNameDef.createEmptyDelta(new ItemPath(FocusType.F_NAME));
nameDelta.setValueToReplace(new PrismPropertyValue<PolyString>(new PolyString(newName), OriginType.USER_POLICY, null));
focusContext.swallowToSecondaryDelta(nameDelta);
focusContext.recompute();
}
}
}

ExpressionVariables variables = Utils.getDefaultExpressionVariables(focusContext.getObjectNew(), null, null, null, context.getSystemConfiguration());
if (iterationToken == null) {
Expand Down
Expand Up @@ -962,7 +962,7 @@ public void test600ModifyElaineUserDummyReplace() throws Exception {
assertNull("Unexpected account primary delta (blue)", accountPrimaryDelta);

accountSecondaryDelta = accContext.getSecondaryDelta();
PrismAsserts.assertModifications(accountSecondaryDelta, 1);
PrismAsserts.assertModifications(accountSecondaryDelta, 2);
PrismAsserts.assertPropertyAdd(accountSecondaryDelta,
getAttributePath(resourceDummyBlue, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_GOSSIP_NAME),
"SystemConfiguration");
Expand Down Expand Up @@ -1153,7 +1153,7 @@ public void test620AddUserCapsize() throws Exception {

accountSecondaryDelta = accContext.getSecondaryDelta();
assertNotNull("No account secondary delta (default)", accountSecondaryDelta);
PrismAsserts.assertModifications(accountSecondaryDelta, 6);
PrismAsserts.assertModifications(accountSecondaryDelta, 7);
PrismAsserts.assertNoItemDelta(accountSecondaryDelta,
getAttributePath(resourceDummyBlue, DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME));

Expand Down

0 comments on commit 24d7139

Please sign in to comment.