Skip to content

Commit

Permalink
Refacting the ResourceItemItemDefinition - for the use in ObjectTempl…
Browse files Browse the repository at this point in the history
…ateType.
  • Loading branch information
semancik committed Feb 5, 2015
1 parent 814547c commit 325ef38
Show file tree
Hide file tree
Showing 16 changed files with 76 additions and 37 deletions.
Expand Up @@ -18,11 +18,13 @@

import com.evolveum.midpoint.common.StaticExpressionUtil;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ExpressionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceAttributeDefinitionType;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import com.evolveum.prism.xml.ns._public.types_3.RawType;

import org.apache.commons.lang.StringUtils;
Expand Down Expand Up @@ -129,7 +131,7 @@ public ResourceAttributeDefinitionType getConstruction() throws SchemaException
}

ResourceAttributeDefinitionType attrConstruction = new ResourceAttributeDefinitionType();
attrConstruction.setRef(definition.getName());
attrConstruction.setRef(new ItemPathType(new ItemPath(definition.getName())));
MappingType outbound = construction != null && construction.getOutbound() != null ? construction.getOutbound().clone() : new MappingType();
attrConstruction.setOutbound(outbound);

Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.common.refinery.RefinedResourceSchema;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.EqualFilter;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
Expand All @@ -42,6 +43,7 @@
import com.evolveum.midpoint.web.page.admin.dto.ObjectViewDto;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -629,7 +631,7 @@ private ResourceAttributeDefinitionType findOrCreateValueConstruction(PrismPrope
}

ResourceAttributeDefinitionType construction = new ResourceAttributeDefinitionType();
construction.setRef(attrDef.getName());
construction.setRef(new ItemPathType(new ItemPath(attrDef.getName())));

return construction;
}
Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.util.logging.LoggingUtils;
import com.evolveum.midpoint.util.logging.Trace;
Expand All @@ -39,8 +40,8 @@
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.web.util.WebModelUtils;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -63,6 +64,7 @@
import org.apache.wicket.util.string.Strings;

import javax.xml.namespace.QName;

import java.util.*;

/**
Expand Down Expand Up @@ -369,7 +371,7 @@ public String getObject() {
StringBuilder sb = new StringBuilder();

if(model.getObject().getRef() != null){
sb.append(model.getObject().getRef().getLocalPart());
sb.append(ItemPathUtil.getOnlySegmentQName(model.getObject().getRef()).getLocalPart());
} else {
return null;
}
Expand Down Expand Up @@ -420,7 +422,7 @@ public String getObject() {
StringBuilder sb = new StringBuilder();

if(model.getObject().getRef() != null){
sb.append(model.getObject().getRef().getLocalPart());
sb.append(ItemPathUtil.getOnlySegmentQName(model.getObject().getRef()).getLocalPart());
} else {
return null;
}
Expand Down
Expand Up @@ -17,6 +17,7 @@
package com.evolveum.midpoint.web.component.wizard.resource.component.schemahandling;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
Expand All @@ -37,6 +38,7 @@
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
Expand All @@ -50,6 +52,7 @@
import org.w3c.dom.Element;

import javax.xml.namespace.QName;

import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -122,7 +125,7 @@ public String getObject() {
if(association.getDisplayName() == null && association.getRef() == null){
return getString("ResourceAssociationEditor.label.new");
} else {
return getString("ResourceAssociationEditor.label.edit", association.getRef().getLocalPart());
return getString("ResourceAssociationEditor.label.edit", ItemPathUtil.getOnlySegmentQName(association.getRef()).getLocalPart());
}
}
});
Expand Down
Expand Up @@ -16,6 +16,7 @@
package com.evolveum.midpoint.web.component.wizard.resource.component.schemahandling;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
Expand All @@ -36,6 +37,7 @@
import com.evolveum.midpoint.web.util.InfoTooltipBehavior;
import com.evolveum.midpoint.web.util.WebMiscUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
Expand All @@ -52,6 +54,7 @@
import org.w3c.dom.Element;

import javax.xml.namespace.QName;

import java.util.ArrayList;
import java.util.List;

Expand Down Expand Up @@ -117,7 +120,7 @@ public String getObject() {
if(attribute.getDisplayName() == null && attribute.getRef() == null){
return getString("ResourceAttributeEditor.label.new");
} else {
return getString("ResourceAttributeEditor.label.edit", attribute.getRef().getLocalPart());
return getString("ResourceAttributeEditor.label.edit", ItemPathUtil.getOnlySegmentQName(attribute.getRef()).getLocalPart());
}
}
});
Expand Down
Expand Up @@ -19,6 +19,7 @@

import org.apache.commons.lang.BooleanUtils;

import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationDirectionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectAssociationType;
Expand Down Expand Up @@ -50,7 +51,7 @@ public void setAssociationTarget(RefinedObjectClassDefinition associationTarget)
}

public QName getName() {
return resourceObjectAssociationType.getRef();
return ItemPathUtil.getOnlySegmentQName(resourceObjectAssociationType.getRef());
}

public ShadowKindType getKind() {
Expand Down
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.prism.parser.QueryConvertor;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.schema.constants.MidPointConstants;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.processor.*;
Expand All @@ -40,6 +41,7 @@
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CountObjectsCapabilityType;
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.PagedSearchCapabilityType;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

import javax.xml.namespace.QName;

Expand Down Expand Up @@ -374,6 +376,11 @@ public void add(RefinedAttributeDefinition refinedAttributeDefinition) {
attributeDefinitions.add(refinedAttributeDefinition);
}

public boolean containsAttributeDefinition(ItemPathType pathType) {
QName segmentQName = ItemPathUtil.getOnlySegmentQName(pathType);
return containsAttributeDefinition(segmentQName);
}

public boolean containsAttributeDefinition(QName attributeName) {
for (RefinedAttributeDefinition rAttributeDef : attributeDefinitions) {
if (QNameUtil.match(rAttributeDef.getName(), attributeName)) {
Expand Down Expand Up @@ -592,11 +599,12 @@ private static ResourceAttributeDefinitionType findAttributeDefinitionType(QName
ResourceAttributeDefinitionType foundAttrDefType = null;
for (ResourceAttributeDefinitionType attrDefType : rOcDefType.getAttribute()) {
if (attrDefType.getRef() != null) {
if (QNameUtil.match(attrDefType.getRef(), attrName)) {
QName ref = ItemPathUtil.getOnlySegmentQName(attrDefType.getRef());
if (QNameUtil.match(ref, attrName)) {
if (foundAttrDefType == null) {
foundAttrDefType = attrDefType;
} else {
throw new SchemaException("Duplicate definition of attribute " + attrDefType.getRef() + " in "+typeDesc+" type "
throw new SchemaException("Duplicate definition of attribute " + ref + " in "+typeDesc+" type "
+ rOcDefType.getIntent() + ", in " + contextDescription);
}
}
Expand Down
@@ -1,6 +1,10 @@
package com.evolveum.midpoint.prism.util;

import javax.xml.namespace.QName;

import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.path.ItemPathSegment;
import com.evolveum.midpoint.prism.path.NameItemPathSegment;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;

public class ItemPathUtil {
Expand All @@ -23,4 +27,26 @@ public static boolean isDefault(ItemPathType itemPathType){
return itemPath.isEmpty();
}

public static QName getOnlySegmentQName(ItemPathType pathType) {
if (pathType == null) {
return null;
}
return getOnlySegmentQName(pathType.getItemPath());
}

public static QName getOnlySegmentQName(ItemPath path) {
if (path == null) {
return null;
}
if (path.size() != 1) {
throw new IllegalArgumentException("Expected a single-segment path, bug got "+path);
}
ItemPathSegment segment = path.first();
if (segment instanceof NameItemPathSegment) {
return ((NameItemPathSegment)segment).getName();
} else {
throw new IllegalArgumentException("Expected a path with a name segment, bug got "+path);
}
}

}
Expand Up @@ -69,7 +69,7 @@ public static String toStringValue(PrismPropertyValue propertyValue) {
return value.toString();
} else if (value instanceof ResourceAttributeDefinitionType) {
ResourceAttributeDefinitionType radt = (ResourceAttributeDefinitionType) value;
return "(a value or a more complex mapping for the '" + radt.getRef().getLocalPart() + "' attribute)";
return "(a value or a more complex mapping for the '" + radt.getRef() + "' attribute)";
} else if (value instanceof QName) {
QName qname = (QName) value;
if (StringUtils.isNotEmpty(qname.getNamespaceURI())) {
Expand Down
Expand Up @@ -3570,11 +3570,11 @@
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="ref" type="xsd:QName">
<xsd:element name="ref" type="t:ItemPathType">
<xsd:annotation>
<xsd:documentation>
Name of the attribute (XSD element) or association that this
definition describes. It must point to the
Path of the item or association that this
definition describes. It must point to property or the
attribute in the resource schema that belongs to an
object class that is being described here.
</xsd:documentation>
Expand Down
Expand Up @@ -31,6 +31,7 @@
import com.evolveum.midpoint.prism.query.ExpressionWrapper;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.prism.util.PrismAsserts;
import com.evolveum.midpoint.prism.util.JaxbTestUtil;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
Expand All @@ -44,19 +45,6 @@
import com.evolveum.midpoint.util.DOMUtil;
import com.evolveum.midpoint.util.PrettyPrinter;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConditionalSearchFilterType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.MappingType;
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.ResourceAttributeDefinitionType;
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.SchemaHandlingType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SynchronizationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.XmlSchemaType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.query_3.SearchFilterType;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
Expand Down Expand Up @@ -573,15 +561,15 @@ private void assertResourceJaxb(ResourceType resourceType, boolean isSimple) thr
boolean foundDescription = false;
boolean foundDepartmentNumber = false;
for (ResourceAttributeDefinitionType attributeDefinitionType : accountType.getAttribute()) {
if ("description".equals(attributeDefinitionType.getRef().getLocalPart())) {
if ("description".equals(ItemPathUtil.getOnlySegmentQName(attributeDefinitionType.getRef()).getLocalPart())) {
foundDescription = true;
MappingType outbound = attributeDefinitionType.getOutbound();
JAXBElement<?> valueEvaluator = outbound.getExpression().getExpressionEvaluator().get(0);
System.out.println("value evaluator for description = " + valueEvaluator);
assertNotNull("no expression evaluator for description", valueEvaluator);
assertEquals("wrong expression evaluator element name for description", SchemaConstantsGenerated.C_VALUE, valueEvaluator.getName());
assertEquals("wrong expression evaluator actual type for description", RawType.class, valueEvaluator.getValue().getClass());
} else if ("departmentNumber".equals(attributeDefinitionType.getRef().getLocalPart())) {
} else if ("departmentNumber".equals(ItemPathUtil.getOnlySegmentQName(attributeDefinitionType.getRef()).getLocalPart())) {
foundDepartmentNumber = true;
MappingType outbound = attributeDefinitionType.getOutbound();
MappingSourceDeclarationType source = outbound.getSource().get(0);
Expand Down
Expand Up @@ -43,6 +43,7 @@
import com.evolveum.midpoint.prism.OriginType;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple;
import com.evolveum.midpoint.prism.util.ItemPathUtil;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand Down Expand Up @@ -322,7 +323,7 @@ private void evaluateAttributes(Task task, OperationResult result) throws Expres
// LOGGER.trace("Assignments used for account construction for {} ({}): {}", new Object[]{this.resource,
// assignments.size(), assignments});
for (ResourceAttributeDefinitionType attribudeDefinitionType : constructionType.getAttribute()) {
QName attrName = attribudeDefinitionType.getRef();
QName attrName = ItemPathUtil.getOnlySegmentQName(attribudeDefinitionType.getRef());
if (attrName == null) {
throw new SchemaException("No attribute name (ref) in attribute definition in account construction in "+source);
}
Expand All @@ -343,7 +344,7 @@ private void evaluateAttributes(Task task, OperationResult result) throws Expres
private Mapping<? extends PrismPropertyValue<?>> evaluateAttribute(ResourceAttributeDefinitionType attribudeDefinitionType,
Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
QName attrName = attribudeDefinitionType.getRef();
QName attrName = ItemPathUtil.getOnlySegmentQName(attribudeDefinitionType.getRef());
if (attrName == null) {
throw new SchemaException("Missing 'ref' in attribute construction in account construction in "+ObjectTypeUtil.toShortString(source));
}
Expand Down Expand Up @@ -386,7 +387,7 @@ public boolean hasValueForAttribute(QName attributeName) {
private void evaluateAssociations(Task task, OperationResult result) throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
associationMappings = new ArrayList<Mapping<PrismContainerValue<ShadowAssociationType>>>();
for (ResourceObjectAssociationType associationDefinitionType : constructionType.getAssociation()) {
QName assocName = associationDefinitionType.getRef();
QName assocName = ItemPathUtil.getOnlySegmentQName(associationDefinitionType.getRef());
if (assocName == null) {
throw new SchemaException("No association name (ref) in association definition in construction in "+source);
}
Expand All @@ -404,7 +405,7 @@ private void evaluateAssociations(Task task, OperationResult result) throws Expr
private Mapping<PrismContainerValue<ShadowAssociationType>> evaluateAssociation(ResourceObjectAssociationType associationDefinitionType,
Task task, OperationResult result)
throws ExpressionEvaluationException, ObjectNotFoundException, SchemaException {
QName assocName = associationDefinitionType.getRef();
QName assocName = ItemPathUtil.getOnlySegmentQName(associationDefinitionType.getRef());
if (assocName == null) {
throw new SchemaException("Missing 'ref' in association in construction in "+source);
}
Expand Down

0 comments on commit 325ef38

Please sign in to comment.