Skip to content

Commit

Permalink
General edit schema mostly complete.
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Feb 17, 2015
1 parent 566b670 commit f000c99
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 34 deletions.
Expand Up @@ -27,6 +27,7 @@
import com.evolveum.midpoint.prism.schema.SchemaProcessorUtil;
import com.evolveum.midpoint.schema.processor.ObjectClassComplexTypeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceAttributeDefinition;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
Expand Down Expand Up @@ -399,12 +400,12 @@ static RefinedAttributeDefinition parse(ResourceAttributeDefinition schemaAttrDe
if (schemaHandlingAttrDefType != null) {
if (layer != LayerType.SCHEMA) {
// SCHEMA is a pseudo-layer. It cannot be overriden ... unless specified explicitly
PropertyLimitationsType genericLimitationsType = getLimitationsType(schemaHandlingAttrDefType.getLimitations(), null);
PropertyLimitationsType genericLimitationsType = MiscSchemaUtil.getLimitationsType(schemaHandlingAttrDefType.getLimitations(), null);
if (genericLimitationsType != null) {
applyLimitationsType(limitations, genericLimitationsType);
}
}
PropertyLimitationsType layerLimitationsType = getLimitationsType(schemaHandlingAttrDefType.getLimitations(), layer);
PropertyLimitationsType layerLimitationsType = MiscSchemaUtil.getLimitationsType(schemaHandlingAttrDefType.getLimitations(), layer);
if (layerLimitationsType != null) {
applyLimitationsType(limitations, layerLimitationsType);
}
Expand Down Expand Up @@ -440,31 +441,6 @@ private static void applyLimitationsType(PropertyLimitations limitations, Proper

}

private static PropertyLimitationsType getLimitationsType(List<PropertyLimitationsType> limitationsTypes, LayerType layer) throws SchemaException {
PropertyLimitationsType found = null;
for (PropertyLimitationsType limitType: limitationsTypes) {
if (contains(limitType.getLayer(),layer)) {
if (found == null) {
found = limitType;
} else {
throw new SchemaException("Duplicate definition of limitations for layer '"+layer+"'");
}
}
}
return found;
}

private static boolean contains(List<LayerType> layers, LayerType layer) {
if (layers == null || layers.isEmpty()) {
if (layer == null) {
return true;
} else {
return false;
}
}
return layers.contains(layer);
}

private static PropertyLimitations getOrCreateLimitations(Map<LayerType, PropertyLimitations> limitationsMap,
LayerType layer) {
PropertyLimitations limitations = limitationsMap.get(layer);
Expand All @@ -480,7 +456,7 @@ static boolean isIgnored(ResourceAttributeDefinitionType attrDefType) throws Sch
if (limitations == null) {
return false;
}
PropertyLimitationsType limitationsType = getLimitationsType(limitations, DEFAULT_LAYER);
PropertyLimitationsType limitationsType = MiscSchemaUtil.getLimitationsType(limitations, DEFAULT_LAYER);
if (limitationsType == null) {
return false;
}
Expand Down
Expand Up @@ -40,6 +40,7 @@
import com.evolveum.midpoint.schema.ObjectSelector;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.GetOperationOptionsType;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ImportOptionsType;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectListType;
Expand All @@ -50,10 +51,12 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentPolicyEnforcementType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CachingMetadataType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CredentialsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LayerType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PasswordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ProjectionPolicyType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyLimitationsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowKindType;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
import com.evolveum.prism.xml.ns._public.types_3.ProtectedStringType;
Expand Down Expand Up @@ -277,7 +280,34 @@ public static PrismReferenceValue objectReferenceTypeToReferenceValue(ObjectRefe
rval.setRelation(refType.getRelation());
rval.setTargetType(refType.getType());
return rval;

}

public static PropertyLimitationsType getLimitationsType(List<PropertyLimitationsType> limitationsTypes, LayerType layer) throws SchemaException {
if (limitationsTypes == null) {
return null;
}
PropertyLimitationsType found = null;
for (PropertyLimitationsType limitType: limitationsTypes) {
if (contains(limitType.getLayer(),layer)) {
if (found == null) {
found = limitType;
} else {
throw new SchemaException("Duplicate definition of limitations for layer '"+layer+"'");
}
}
}
return found;
}

private static boolean contains(List<LayerType> layers, LayerType layer) {
if (layers == null || layers.isEmpty()) {
if (layer == null) {
return true;
} else {
return false;
}
}
return layers.contains(layer);
}

}
Expand Up @@ -99,6 +99,8 @@
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectPaging;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.prism.util.PrismUtil;
import com.evolveum.midpoint.prism.xml.XsdTypeMapper;
import com.evolveum.midpoint.provisioning.api.ProvisioningOperationOptions;
import com.evolveum.midpoint.provisioning.api.ProvisioningService;
import com.evolveum.midpoint.repo.api.RepoAddOptions;
Expand Down Expand Up @@ -149,6 +151,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultStatusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationResultType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyAccessType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PropertyLimitationsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ReportType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
Expand Down Expand Up @@ -886,17 +889,37 @@ private <O extends ObjectType> void applyObjectTemplateToDefinition(PrismObjectD

List<PropertyLimitationsType> limitations = templateItemDefType.getLimitations();
if (limitations != null) {
// TODO
PropertyLimitationsType limitationsType = MiscSchemaUtil.getLimitationsType(limitations, LayerType.PRESENTATION);
if (limitationsType != null) {
if (limitationsType.getMinOccurs() != null) {
itemDef.setMinOccurs(XsdTypeMapper.multiplicityToInteger(limitationsType.getMinOccurs()));
}
if (limitationsType.getMaxOccurs() != null) {
itemDef.setMaxOccurs(XsdTypeMapper.multiplicityToInteger(limitationsType.getMaxOccurs()));
}
if (limitationsType.isIgnore() != null) {
itemDef.setIgnored(limitationsType.isIgnore());
}
PropertyAccessType accessType = limitationsType.getAccess();
if (accessType != null) {
if (accessType.isAdd() != null) {
itemDef.setCanAdd(accessType.isAdd());
}
if (accessType.isModify() != null) {
itemDef.setCanModify(accessType.isModify());
}
if (accessType.isRead() != null) {
itemDef.setCanRead(accessType.isRead());
}
}
}
}

ObjectReferenceType valueEnumerationRef = templateItemDefType.getValueEnumerationRef();
if (valueEnumerationRef != null) {
PrismReferenceValue valueEnumerationRVal = MiscSchemaUtil.objectReferenceTypeToReferenceValue(valueEnumerationRef);
itemDef.setValueEnumerationRef(valueEnumerationRVal);
}

// TODO

}
}
}

Expand Down

0 comments on commit f000c99

Please sign in to comment.