Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
Erik Suta committed Jul 17, 2014
2 parents 130a441 + 5a165f9 commit e81146b
Show file tree
Hide file tree
Showing 20 changed files with 704 additions and 199 deletions.
Expand Up @@ -11,6 +11,7 @@
import com.evolveum.midpoint.web.component.prism.ContainerStatus;
import com.evolveum.midpoint.web.component.prism.ObjectWrapper;
import com.evolveum.midpoint.web.page.PageBase;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationPhaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType;
Expand All @@ -24,7 +25,8 @@ public static <O extends ObjectType> ObjectWrapper createObjectWrapper(String di

public static <O extends ObjectType> ObjectWrapper createObjectWrapper(String displayName, String description, PrismObject<O> object, ContainerStatus status, boolean delayContainerCreation, PageBase pageBase) {
try {
PrismContainerDefinition objectDefinitionForEditing = pageBase.getModelInteractionService().getEditObjectDefinition(object);

PrismContainerDefinition objectDefinitionForEditing = pageBase.getModelInteractionService().getEditObjectDefinition(object, AuthorizationPhaseType.REQUEST);
RefinedObjectClassDefinition objectClassDefinitionForEditing = null;
if (isShadow(object)) {
PrismReference resourceRef = object.findReference(ShadowType.F_RESOURCE_REF);
Expand All @@ -39,6 +41,7 @@ public static <O extends ObjectType> ObjectWrapper createObjectWrapper(String di
}
}


private static boolean isShadow(PrismObject object){
return (object.getCompileTimeClass() != null && ShadowType.class.isAssignableFrom(object
.getCompileTimeClass()))
Expand Down
Expand Up @@ -19,6 +19,7 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.PrettyPrinter;
import com.evolveum.midpoint.util.exception.SchemaException;

Expand All @@ -27,6 +28,7 @@
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;

Expand Down Expand Up @@ -170,6 +172,19 @@ public static <V extends PrismValue> boolean containsRealValue(Collection<V> col
return false;
}

public static <V extends PrismValue> boolean equalsRealValues(Collection<V> collection1, Collection<V> collection2) {
Comparator comparator = new Comparator<V>() {
@Override
public int compare(V v1, V v2) {
if (v1.equalsRealValue(v2)) {
return 0;
};
return 1;
}
};
return MiscUtil.unorderedCollectionEquals(collection1, collection2, comparator);
}

public abstract boolean isEmpty();

public void normalize() {
Expand Down
Expand Up @@ -584,4 +584,8 @@ public static XMLGregorianCalendar addMillis(XMLGregorianCalendar now, long dura
return createXMLGregorianCalendar(toMillis(now) + duration);
}

public static String formatDateXml(Date date) {
return createXMLGregorianCalendar(date).toXMLFormat();
}

}
Expand Up @@ -263,6 +263,13 @@ private static void applyObjectClass(PrismObject<? extends ShadowType> shadow,
objectClassDefinition, objectClassDefinition.getPrismContext());
attributesContainer.applyDefinition(racDef, true);
}

public static PrismObjectDefinition<ShadowType> applyObjectClass(PrismObjectDefinition<ShadowType> shadowDefinition,
ObjectClassComplexTypeDefinition objectClassDefinition) throws SchemaException {
PrismObjectDefinition<ShadowType> shadowDefClone = shadowDefinition.cloneWithReplacedDefinition(ShadowType.F_ATTRIBUTES,
objectClassDefinition.toResourceAttributeContainerDefinition());
return shadowDefClone;
}

/**
* Returns intent from the shadow. Backwards compatible with older accountType. May also adjust for default
Expand Down
Expand Up @@ -25,6 +25,7 @@
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
Expand Down
Expand Up @@ -32,6 +32,7 @@
import com.evolveum.midpoint.util.exception.ObjectNotFoundException;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.exception.SecurityViolationException;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationPhaseType;
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.ResourceType;
Expand Down Expand Up @@ -99,7 +100,7 @@ <F extends ObjectType> ModelContext<F> previewChanges(
* @return schema with correctly set constraint parts or null
* @throws SchemaException
*/
<O extends ObjectType> PrismObjectDefinition<O> getEditObjectDefinition(PrismObject<O> object) throws SchemaException;
<O extends ObjectType> PrismObjectDefinition<O> getEditObjectDefinition(PrismObject<O> object, AuthorizationPhaseType phase) throws SchemaException;

RefinedObjectClassDefinition getEditObjectClassDefinition(PrismObject<ShadowType> shadow, PrismObject<ResourceType> resource) throws SchemaException;

Expand Down
Expand Up @@ -83,6 +83,7 @@
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
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.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
Expand Down Expand Up @@ -539,4 +540,17 @@ public static Map<QName, Object> compileVariablesAndSources(ExpressionEvaluation
return variablesAndSources;
}

public static boolean hasExplicitTarget(List<MappingType> mappingTypes) {
for (MappingType mappingType: mappingTypes) {
if (hasExplicitTarget(mappingType)) {
return true;
}
}
return false;
}

private static boolean hasExplicitTarget(MappingType mappingType) {
return mappingType.getTarget() != null;
}

}
Expand Up @@ -116,6 +116,7 @@ public class Mapping<V extends PrismValue> implements DebugDumpable {
private ObjectResolver objectResolver = null;
private Source<?> defaultSource = null;
private ItemDefinition defaultTargetDefinition = null;
private ItemPath defaultTargetPath = null;
private ObjectDeltaObject<?> sourceContext = null;
private PrismObjectDefinition<?> targetContext = null;
private PrismValueDeltaSetTriple<V> outputTriple = null;
Expand Down Expand Up @@ -205,6 +206,14 @@ public void setDefaultTargetDefinition(ItemDefinition defaultTargetDefinition) {
this.defaultTargetDefinition = defaultTargetDefinition;
}

public ItemPath getDefaultTargetPath() {
return defaultTargetPath;
}

public void setDefaultTargetPath(ItemPath defaultTargetPath) {
this.defaultTargetPath = defaultTargetPath;
}

public ObjectDeltaObject<?> getSourceContext() {
return sourceContext;
}
Expand Down Expand Up @@ -846,6 +855,7 @@ private void parseTarget() throws SchemaException {
MappingTargetDeclarationType targetType = mappingType.getTarget();
if (targetType == null) {
outputDefinition = defaultTargetDefinition;
outputPath = defaultTargetPath;
} else {
ItemPathType itemPathType = targetType.getPath();
if (itemPathType == null) {
Expand Down
Expand Up @@ -133,6 +133,7 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ImportOptionsType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationDecisionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AuthorizationPhaseType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorHostType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ConnectorType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
Expand Down Expand Up @@ -705,7 +706,7 @@ public <F extends ObjectType> ModelContext<F> previewChanges(
}

@Override
public <O extends ObjectType> PrismObjectDefinition<O> getEditObjectDefinition(PrismObject<O> object) throws SchemaException {
public <O extends ObjectType> PrismObjectDefinition<O> getEditObjectDefinition(PrismObject<O> object, AuthorizationPhaseType phase) throws SchemaException {
PrismObjectDefinition<O> origDefinition = object.getDefinition();
// TODO: maybe we need to expose owner resolver in the interface?
ObjectSecurityConstraints securityConstraints = securityEnforcer.compileSecurityConstraints(object, null);
Expand All @@ -716,9 +717,9 @@ public <O extends ObjectType> PrismObjectDefinition<O> getEditObjectDefinition(P
return null;
}
PrismObjectDefinition<O> finalDefinition = applySecurityContraints(origDefinition, new ItemPath(), securityConstraints,
securityConstraints.getActionDecision(ModelAuthorizationAction.READ.getUrl(), null),
securityConstraints.getActionDecision(ModelAuthorizationAction.ADD.getUrl(), null),
securityConstraints.getActionDecision(ModelAuthorizationAction.MODIFY.getUrl(), null));
securityConstraints.getActionDecision(ModelAuthorizationAction.READ.getUrl(), phase),
securityConstraints.getActionDecision(ModelAuthorizationAction.ADD.getUrl(), phase),
securityConstraints.getActionDecision(ModelAuthorizationAction.MODIFY.getUrl(), phase));
return finalDefinition;
}

Expand Down
Expand Up @@ -164,6 +164,9 @@ public class LensProjectionContext extends LensElementContext<ShadowType> implem
private transient Map<QName, DeltaSetTriple<ItemValueWithOrigin<PrismPropertyValue<?>>>> squeezedAttributes;
private transient Map<QName, DeltaSetTriple<ItemValueWithOrigin<PrismContainerValue<ShadowAssociationType>>>> squeezedAssociations;

// Cached copy, to avoid constructing it over and over again
private transient PrismObjectDefinition<ShadowType> shadowDefinition = null;

private ValuePolicyType accountPasswordPolicy;


Expand Down Expand Up @@ -313,7 +316,20 @@ public void setResource(ResourceType resource) {
this.resource = resource;
}

public boolean isAssigned() {
@Override
public PrismObjectDefinition<ShadowType> getObjectDefinition() {
if (shadowDefinition == null) {
try {
shadowDefinition = ShadowUtil.applyObjectClass(super.getObjectDefinition(), getRefinedAccountDefinition());
} catch (SchemaException e) {
// This should not happen
throw new SystemException(e.getMessage(), e);
}
}
return shadowDefinition;
}

public boolean isAssigned() {
return isAssigned;
}

Expand Down
Expand Up @@ -698,6 +698,26 @@ public static <F extends ObjectType, T> PropertyDelta<T> findAPrioriDelta(LensCo
return aPrioriDelta;
}

/**
* Extracts the delta from this projection context and also from all other projection contexts that have
* equivalent discriminator.
*/
public static <F extends ObjectType, T> ObjectDelta<ShadowType> findAPrioriDelta(LensContext<F> context,
LensProjectionContext projCtx) throws SchemaException {
ObjectDelta<ShadowType> aPrioriDelta = null;
for (LensProjectionContext aProjCtx: findRelatedContexts(context, projCtx)) {
ObjectDelta<ShadowType> aProjDelta = aProjCtx.getDelta();
if (aProjDelta != null) {
if (aPrioriDelta == null) {
aPrioriDelta = aProjDelta.clone();
} else {
aPrioriDelta.merge(aProjDelta);
}
}
}
return aPrioriDelta;
}

/**
* Returns a list of context that have equivalent discriminator with the reference context. Ordered by "order" in the
* discriminator.
Expand Down

0 comments on commit e81146b

Please sign in to comment.