Skip to content

Commit

Permalink
Merge branch 'feature/linked-objects'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed May 21, 2020
2 parents 1b06e83 + 9717c0c commit 6ff32b7
Show file tree
Hide file tree
Showing 95 changed files with 7,793 additions and 5,921 deletions.
Expand Up @@ -13,7 +13,7 @@
import java.util.Collection;

/**
* @author mederly
* Note: When dealing with PolyStrings, the real values should be of PolyString, not of PolyStringType type.
*/
public interface S_ValuesEntry {

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

import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.w3c.dom.Element;

import com.evolveum.midpoint.prism.ItemDefinition;
Expand Down Expand Up @@ -85,7 +86,8 @@ public TypedValue put(String key, TypedValue typedValue) {
return variables.put(key, typedValue);
}

public void registerAlias(String alias, String realName) {
// mainVariable of "null" means the default source
public void registerAlias(String alias, @Nullable String realName) {
if (isAlias(realName)) {
throw new IllegalArgumentException("Trying to put alias definition: " + alias + "->" + realName + ", but " + realName + " is itself an alias");
}
Expand Down
Expand Up @@ -55,21 +55,30 @@ public static AssignmentType createTargetAssignment(String targetOid, QName type
return assignmentType;
}

public static String dumpAssignment(AssignmentType assignmentType) {
public static String dumpAssignment(AssignmentType assignment) {
StringBuilder sb = new StringBuilder();
if (assignmentType.getConstruction() != null) {
sb.append("Constr(").append(assignmentType.getConstruction().getDescription()).append(") ");
if (assignment.getConstruction() != null) {
sb.append("Constr(").append(assignment.getConstruction().getDescription()).append(") ");
}
if (assignmentType.getTargetRef() != null) {
if (assignment.getTargetRef() != null) {
sb.append("-[");
if (assignmentType.getTargetRef().getRelation() != null) {
sb.append(assignmentType.getTargetRef().getRelation().getLocalPart());
if (assignment.getTargetRef().getRelation() != null) {
sb.append(assignment.getTargetRef().getRelation().getLocalPart());
}
sb.append("]-> ").append(assignmentType.getTargetRef().getOid());
sb.append("]-> ").append(assignment.getTargetRef().getOid());
}
return sb.toString();
}

public static Object dumpAssignmentLazily(AssignmentType assignment) {
return new Object() {
@Override
public String toString() {
return dumpAssignment(assignment);
}
};
}

public static String dumpInducementConstraints(AssignmentType assignmentType) {
if (assignmentType.getOrder() != null) {
return assignmentType.getOrder().toString();
Expand Down
Expand Up @@ -685,12 +685,6 @@ public static boolean referenceMatches(ObjectReferenceType ref, String targetOid
return true;
}

public static OrderConstraintsType getConstraintFor(List<OrderConstraintsType> constraints, QName relation) {
return CollectionUtils.emptyIfNull(constraints).stream()
.filter(c -> QNameUtil.match(c.getRelation(), relation)) // intentionally not using default/null equivalence here
.findFirst().orElse(null);
}

public static <T extends Objectable> T asObjectable(PrismObject<T> prismObject) {
return prismObject != null ? prismObject.asObjectable() : null;
}
Expand Down
5,141 changes: 2,600 additions & 2,541 deletions infra/schema/src/main/resources/xml/ns/public/common/common-policy-3.xsd

Large diffs are not rendered by default.

Expand Up @@ -6,9 +6,6 @@
*/
package com.evolveum.midpoint.util;

import static java.util.Collections.emptySet;
import static java.util.Collections.singleton;

import java.io.*;
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadInfo;
Expand Down Expand Up @@ -43,6 +40,8 @@
import com.evolveum.midpoint.util.exception.SystemException;
import com.evolveum.midpoint.util.exception.TunnelException;

import static java.util.Collections.*;

/**
* @author semancik
*/
Expand Down Expand Up @@ -780,7 +779,11 @@ public static String readZipFile(File file, Charset charset) throws IOException
}
}

public static Set<String> singletonOrEmptySet(String value) {
public static <T> Set<T> singletonOrEmptySet(T value) {
return value != null ? singleton(value) : emptySet();
}

public static <T> List<T> singletonOrEmptyList(T value) {
return value != null ? singletonList(value) : emptyList();
}
}
Expand Up @@ -47,6 +47,10 @@ public interface EvaluatedAssignment<AH extends AssignmentHolderType> extends De

QName getNormalizedRelation(RelationRegistry relationRegistry);

/**
* TODO Define this concept. It looks like it mixes ideas of validity (activation, lifecycle state)
* and relativity mode (condition).
*/
boolean isValid();

boolean isPresentInCurrentObject();
Expand Down
Expand Up @@ -19,6 +19,7 @@
*/
public interface EvaluatedAssignmentTarget extends DebugDumpable {

@NotNull
PrismObject<? extends AssignmentHolderType> getTarget();

boolean isDirectlyAssigned();
Expand Down
Expand Up @@ -8,16 +8,21 @@
package com.evolveum.midpoint.model.api.context;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.util.ObjectTypeUtil;
import com.evolveum.midpoint.util.DebugUtil;
import com.evolveum.midpoint.util.LocalizableMessage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.jetbrains.annotations.NotNull;

import java.util.Collection;
import java.util.Objects;

import static com.evolveum.midpoint.xml.ns._public.common.common_3.TriggeredPolicyRulesStorageStrategyType.FULL;

import static java.util.Collections.emptySet;
import static java.util.Collections.singleton;

/**
* @author mederly
*/
Expand Down Expand Up @@ -98,4 +103,10 @@ public EvaluatedExclusionTriggerType toEvaluatedPolicyRuleTriggerType(PolicyRule
}
return rv;
}

@Override
public Collection<? extends PrismObject<?>> getTargetObjects() {
// conflicting target should be non-empty ... but who knows for sure?
return conflictingTarget != null ? singleton(conflictingTarget.asPrismObject()) : emptySet();
}
}
Expand Up @@ -8,18 +8,21 @@
package com.evolveum.midpoint.model.api.context;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.util.LocalizableMessage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.jetbrains.annotations.NotNull;

/**
* @author mederly
*/
import java.util.Collection;

public class EvaluatedHasAssignmentTrigger extends EvaluatedPolicyRuleTrigger<HasAssignmentPolicyConstraintType> {

@NotNull private final Collection<PrismObject<?>> matchingTargets;

public EvaluatedHasAssignmentTrigger(@NotNull PolicyConstraintKindType kind, @NotNull HasAssignmentPolicyConstraintType constraint,
LocalizableMessage message, LocalizableMessage shortMessage) {
@NotNull Collection<PrismObject<?>> matchingTargets, LocalizableMessage message, LocalizableMessage shortMessage) {
super(kind, constraint, message, shortMessage, false);
this.matchingTargets = matchingTargets;
}

@Override
Expand All @@ -29,4 +32,9 @@ public EvaluatedHasAssignmentTriggerType toEvaluatedPolicyRuleTriggerType(Policy
fillCommonContent(rv);
return rv;
}

@Override
public Collection<? extends PrismObject<?>> getTargetObjects() {
return matchingTargets;
}
}
Expand Up @@ -8,18 +8,25 @@
package com.evolveum.midpoint.model.api.context;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.util.LocalizableMessage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;

import static java.util.Collections.emptySet;
import static java.util.Collections.singleton;

/**
* @author mederly
*/
public class EvaluatedModificationTrigger extends EvaluatedPolicyRuleTrigger<ModificationPolicyConstraintType> {

@NotNull private final Collection<PrismObject<?>> matchingTargets;

public EvaluatedModificationTrigger(@NotNull PolicyConstraintKindType kind, @NotNull ModificationPolicyConstraintType constraint,
LocalizableMessage message, LocalizableMessage shortMessage) {
@Nullable PrismObject<?> targetObject, LocalizableMessage message, LocalizableMessage shortMessage) {
super(kind, constraint, message, shortMessage, false);
matchingTargets = targetObject != null ? singleton(targetObject) : emptySet();
}

@Override
Expand All @@ -29,4 +36,9 @@ public EvaluatedModificationTriggerType toEvaluatedPolicyRuleTriggerType(PolicyR
fillCommonContent(rv);
return rv;
}

@Override
public Collection<? extends PrismObject<?>> getTargetObjects() {
return matchingTargets;
}
}
Expand Up @@ -7,6 +7,7 @@
package com.evolveum.midpoint.model.api.context;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.util.LocalizationUtil;
import com.evolveum.midpoint.schema.util.PolicyRuleTypeUtil;
import com.evolveum.midpoint.util.DebugDumpable;
Expand Down Expand Up @@ -103,6 +104,7 @@ public String debugDump(int indent) {
DebugUtil.debugDumpLabelLn(sb, getClass().getSimpleName(), indent);
debugDumpCommon(sb, indent + 1);
debugDumpSpecific(sb, indent + 1);
DebugUtil.debugDumpWithLabelToStringLn(sb, "targetObjects", getTargetObjects(), indent + 1);
return sb.toString();
}

Expand Down Expand Up @@ -162,4 +164,12 @@ public Collection<EvaluatedPolicyRuleTrigger<?>> getInnerTriggers() {
public boolean isEnforcementOverride() {
return enforcementOverride;
}

/**
* @return Target object(s) that were matched by constraint that produced this trigger.
* For example: target of the assignment that was added (and that matched "assignment" constraint).
*/
public Collection<? extends PrismObject<?>> getTargetObjects() {
return Collections.emptyList();
}
}
Expand Up @@ -7,15 +7,17 @@

package com.evolveum.midpoint.model.api.context;

import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.ShortDumpable;

import org.apache.commons.collections4.MultiSet;

import javax.xml.namespace.QName;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.namespace.QName;

import org.apache.commons.collections4.MultiSet;

import com.evolveum.midpoint.util.DebugDumpable;
import com.evolveum.midpoint.util.ShortDumpable;
import com.evolveum.midpoint.xml.ns._public.common.common_3.OrderConstraintsType;

/**
* @author semancik
Expand Down Expand Up @@ -50,4 +52,6 @@ public interface EvaluationOrder extends DebugDumpable, ShortDumpable, Cloneable
boolean isValid();

boolean isOrderOne();

boolean matches(Integer assignmentOrder, List<OrderConstraintsType> assignmentOrderConstraint);
}

0 comments on commit 6ff32b7

Please sign in to comment.