diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismContext.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismContext.java index 56dc965e908..5a353468eaa 100644 --- a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismContext.java +++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismContext.java @@ -407,4 +407,7 @@ default PrismQueryLanguageParser createQueryParser() { PrismQuerySerializer querySerializer(); + static PrismContext get() { + return PrismService.get().prismContext(); + } } diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismService.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismService.java new file mode 100644 index 00000000000..a2cfe1d882b --- /dev/null +++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/PrismService.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2010-2021 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ + +package com.evolveum.midpoint.prism; + +/** + * Statically holds an instance of PrismContext (and maybe other beans later). + */ +public class PrismService { + + private static final PrismService INSTANCE = new PrismService(); + + private static PrismContext prismContext; + + private PrismService() { + } + + public static PrismService get() { + return INSTANCE; + } + + public PrismContext prismContext() { + return prismContext; + } + + public void prismContext(PrismContext prismContext) { + PrismService.prismContext = prismContext; + } +} diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/ItemDeltaItem.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/ItemDeltaItem.java index 47ba98ca88f..2d58bbf8c56 100644 --- a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/ItemDeltaItem.java +++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/ItemDeltaItem.java @@ -8,6 +8,7 @@ import static com.evolveum.midpoint.prism.path.ItemPath.CompareResult; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.Objects; @@ -33,7 +34,7 @@ * * @author Radovan Semancik */ -public class ItemDeltaItem implements DebugDumpable { +public class ItemDeltaItem implements DebugDumpable, Serializable { private Item itemOld; private ItemDelta delta; diff --git a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java index b7f127ec97a..bb316d64420 100644 --- a/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java +++ b/infra/prism-api/src/main/java/com/evolveum/midpoint/prism/util/PrismAsserts.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.IOException; +import java.io.Serializable; import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/PrismContextImpl.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/PrismContextImpl.java index ea62b292799..30192506439 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/PrismContextImpl.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/PrismContextImpl.java @@ -154,6 +154,8 @@ private PrismContextImpl(@NotNull SchemaRegistryImpl schemaRegistry) { // Should not happen throw new SystemException(e.getMessage(), e); } + + PrismService.get().prismContext(this); } public static PrismContextImpl create(@NotNull SchemaRegistryImpl schemaRegistry) { diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/SchemaService.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/SchemaService.java index e5c35460aef..b1012ba1a98 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/SchemaService.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/SchemaService.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.schema; +import javax.annotation.PostConstruct; import javax.xml.namespace.QName; import org.jetbrains.annotations.NotNull; @@ -28,6 +29,17 @@ public class SchemaService { @Autowired private PrismContext prismContext; @Autowired private RelationRegistry relationRegistry; + private static SchemaService instance; + + @PostConstruct + public void init() { + instance = this; + } + + public static SchemaService get() { + return instance; + } + public PrismContext prismContext() { return prismContext; } diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionEvaluatorProfile.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionEvaluatorProfile.java index a984c5e3e97..7fdbdcc6d68 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionEvaluatorProfile.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionEvaluatorProfile.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.schema.expression; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -17,7 +18,7 @@ * @author Radovan Semancik * */ -public class ExpressionEvaluatorProfile { +public class ExpressionEvaluatorProfile implements Serializable { private final QName type; private AccessDecision decision; diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionPermissionProfile.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionPermissionProfile.java index 7f6f0acec81..e34be2a0aba 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionPermissionProfile.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionPermissionProfile.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.schema.expression; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -20,7 +21,7 @@ * * @author Radovan Semancik */ -public class ExpressionPermissionProfile { +public class ExpressionPermissionProfile implements Serializable { private final String identifier; private AccessDecision decision; diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionProfile.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionProfile.java index 51e4f122f06..d54280aa2f5 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionProfile.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ExpressionProfile.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.schema.expression; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; @@ -20,7 +21,7 @@ * @author Radovan Semancik * */ -public class ExpressionProfile { // TODO: DebugDumpable +public class ExpressionProfile implements Serializable { // TODO: DebugDumpable private final String identifier; private AccessDecision decision; diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ScriptExpressionProfile.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ScriptExpressionProfile.java index 252c3a0e3f1..7d263c92610 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ScriptExpressionProfile.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/expression/ScriptExpressionProfile.java @@ -8,11 +8,13 @@ import com.evolveum.midpoint.schema.AccessDecision; +import java.io.Serializable; + /** * @author semancik * */ -public class ScriptExpressionProfile { +public class ScriptExpressionProfile implements Serializable { private final String language; private AccessDecision decision; diff --git a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/AbstractSpringTest.java b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/AbstractSpringTest.java index f85bdd7dee0..8153ad24256 100644 --- a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/AbstractSpringTest.java +++ b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/AbstractSpringTest.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.test.util; +import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.Modifier; diff --git a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java index 7ce2f15129c..6334d92a71b 100644 --- a/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java +++ b/infra/test-util/src/main/java/com/evolveum/midpoint/test/util/MidPointAsserts.java @@ -9,9 +9,12 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.testng.AssertJUnit.*; +import java.io.Serializable; import java.util.Collection; import javax.xml.namespace.QName; +import com.evolveum.midpoint.util.SerializationUtil; + import org.apache.commons.lang.StringUtils; import org.testng.AssertJUnit; @@ -111,4 +114,14 @@ public static void assertUriMatches(String current, String desc, String expected .isNotNull() .matches(s -> QNameUtil.matchUri(s, expected), "is " + expected); } + + public static void assertSerializable(Serializable serializable) { + try { + String s = SerializationUtil.toString(serializable); + System.out.println("Checked that " + serializable.getClass() + " is really serializable: size is " + s.length()); + } catch (Throwable e) { + e.printStackTrace(); + fail(serializable.getClass() + " is not serializable: " + e.getMessage()); + } + } } diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPath.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPath.java index b2a4df3b302..8a5dbe5e66d 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPath.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPath.java @@ -20,6 +20,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.OrderConstraintsType; import org.jetbrains.annotations.NotNull; +import java.io.Serializable; import java.util.List; /** @@ -31,7 +32,7 @@ * @author semancik * @author mederly */ -public interface AssignmentPath extends DebugDumpable, ShortDumpable, Cloneable { +public interface AssignmentPath extends DebugDumpable, ShortDumpable, Cloneable, Serializable { List getSegments(); @@ -46,8 +47,6 @@ public interface AssignmentPath extends DebugDumpable, ShortDumpable, Cloneable int size(); -// EvaluationOrder getEvaluationOrder(); - AssignmentPathSegment last(); // beforeLast(0) means last() diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPathSegment.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPathSegment.java index cd11b45c3ac..f79b698c9d1 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPathSegment.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/AssignmentPathSegment.java @@ -17,6 +17,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.OrderConstraintsType; import org.jetbrains.annotations.NotNull; +import java.io.Serializable; import java.util.List; /** @@ -27,7 +28,7 @@ * @author semancik * @author mederly */ -public interface AssignmentPathSegment extends DebugDumpable, ShortDumpable { +public interface AssignmentPathSegment extends DebugDumpable, ShortDumpable, Serializable { // Returns version of the assignment (old/new) that was evaluated AssignmentType getAssignment(); diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java index 7990dcdef39..9b26c7ac750 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignment.java @@ -6,6 +6,7 @@ */ package com.evolveum.midpoint.model.api.context; +import java.io.Serializable; import java.util.Collection; import javax.xml.namespace.QName; @@ -17,6 +18,7 @@ import com.evolveum.midpoint.security.api.Authorization; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.DebugDumpable; +import com.evolveum.midpoint.util.ShortDumpable; import com.evolveum.midpoint.util.exception.ObjectNotFoundException; import com.evolveum.midpoint.util.exception.SchemaException; import com.evolveum.midpoint.xml.ns._public.common.common_3.AdminGuiConfigurationType; @@ -24,7 +26,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import org.jetbrains.annotations.NotNull; -public interface EvaluatedAssignment extends DebugDumpable { +public interface EvaluatedAssignment extends ShortDumpable, DebugDumpable, Serializable { AssignmentType getAssignmentType(); diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignmentTarget.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignmentTarget.java index 05d7047096d..379dbc21013 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignmentTarget.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedAssignmentTarget.java @@ -13,11 +13,13 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import org.jetbrains.annotations.NotNull; +import java.io.Serializable; + /** * @author semancik * */ -public interface EvaluatedAssignmentTarget extends DebugDumpable { +public interface EvaluatedAssignmentTarget extends DebugDumpable, Serializable { @NotNull PrismObject getTarget(); diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedPolicyRuleTrigger.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedPolicyRuleTrigger.java index 57804079066..8efefd71f51 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedPolicyRuleTrigger.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedPolicyRuleTrigger.java @@ -16,6 +16,7 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.*; import org.jetbrains.annotations.NotNull; +import java.io.Serializable; import java.util.Collection; import java.util.Collections; import java.util.Objects; @@ -25,7 +26,7 @@ * * @author semancik */ -public abstract class EvaluatedPolicyRuleTrigger implements DebugDumpable { +public abstract class EvaluatedPolicyRuleTrigger implements DebugDumpable, Serializable { @NotNull private final PolicyConstraintKindType constraintKind; @NotNull private final CT constraint; diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedResourceObjectConstruction.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedResourceObjectConstruction.java index 65f9a62416f..36c5ba867b4 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedResourceObjectConstruction.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluatedResourceObjectConstruction.java @@ -14,6 +14,8 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.Serializable; + /** * Facade interface that provides insight about construction that was evaluated by projector code. * It is used for several purposes, e.g. to display all evaluated assignments, both direct and indirect. @@ -25,7 +27,7 @@ * @author mederly * @author Radovan Semancik */ -public interface EvaluatedResourceObjectConstruction extends DebugDumpable { +public interface EvaluatedResourceObjectConstruction extends DebugDumpable, Serializable { /** * Resource on which the object is to be constructed. diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluationOrder.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluationOrder.java index 3681e615368..e5b01d6e1eb 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluationOrder.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/EvaluationOrder.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.model.api.context; +import java.io.Serializable; import java.util.Collection; import java.util.List; import java.util.Map; @@ -23,7 +24,7 @@ * @author semancik * @author mederly */ -public interface EvaluationOrder extends DebugDumpable, ShortDumpable, Cloneable { +public interface EvaluationOrder extends DebugDumpable, ShortDumpable, Cloneable, Serializable { int getSummaryOrder(); diff --git a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/Mapping.java b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/Mapping.java index 1a7acaea3fc..c5fec4c9fa4 100644 --- a/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/Mapping.java +++ b/model/model-api/src/main/java/com/evolveum/midpoint/model/api/context/Mapping.java @@ -1,33 +1,35 @@ -/* - * Copyright (c) 2018-2019 Evolveum and contributors - * - * This work is dual-licensed under the Apache License 2.0 - * and European Union Public License. See LICENSE file for details. - */ -package com.evolveum.midpoint.model.api.context; - -import com.evolveum.midpoint.prism.ItemDefinition; -import com.evolveum.midpoint.prism.PrismValue; -import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple; -import com.evolveum.midpoint.prism.path.ItemPath; -import com.evolveum.midpoint.util.exception.SchemaException; - -/** - * @author semancik - * - */ -public interface Mapping { - - /** - * Returns elapsed time in milliseconds. - */ - Long getEtime(); - - T getStateProperty(String propertyName); - - T setStateProperty(String propertyName, T value); - - PrismValueDeltaSetTriple getOutputTriple(); - - ItemPath getOutputPath() throws SchemaException; -} +/* + * Copyright (c) 2018-2019 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.model.api.context; + +import com.evolveum.midpoint.prism.ItemDefinition; +import com.evolveum.midpoint.prism.PrismValue; +import com.evolveum.midpoint.prism.delta.PrismValueDeltaSetTriple; +import com.evolveum.midpoint.prism.path.ItemPath; +import com.evolveum.midpoint.util.exception.SchemaException; + +import java.io.Serializable; + +/** + * @author semancik + * + */ +public interface Mapping extends Serializable { + + /** + * Returns elapsed time in milliseconds. + */ + Long getEtime(); + + T getStateProperty(String propertyName); + + T setStateProperty(String propertyName, T value); + + PrismValueDeltaSetTriple getOutputTriple(); + + ItemPath getOutputPath() throws SchemaException; +} diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/AbstractMappingImpl.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/AbstractMappingImpl.java index 0d883defc2b..c2b9933d829 100644 --- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/AbstractMappingImpl.java +++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/AbstractMappingImpl.java @@ -12,6 +12,7 @@ import static com.evolveum.midpoint.prism.equivalence.EquivalenceStrategy.REAL_VALUE; import static com.evolveum.midpoint.schema.util.ProvenanceMetadataUtil.hasMappingSpec; +import java.io.Serializable; import java.util.Objects; import java.util.*; import java.util.stream.Collectors; @@ -57,9 +58,13 @@ * * TODO document evaluation of time constraints ... * - *

* Configuration properties are unmodifiable. They are to be set via Mapping.Builder. * + * Serializability: + * + * The mapping is technically serializable. However, it is NOT expected to be evaluable after deserialization. + * Only already computed results are to be fetched from such mapping object. + * * @param type of mapping output value * @param type of mapping output value definition (property, container, ...) * @param mapping bean type: MappingType or MetadataMappingType @@ -92,8 +97,10 @@ public abstract class AbstractMappingImpl> typedSourceContext; + transient private TypedValue> typedSourceContext; /** * One of the sources can be denoted as default. @@ -178,7 +185,7 @@ public abstract class AbstractMappingImpl variableProducer; /** * This is sometimes used to identify the element that mapping produces @@ -271,9 +280,9 @@ public abstract class AbstractMappingImpl expression; + transient private Expression expression; /** * Result of the mapping evaluation: values that will be added, deleted and kept in the target item. @@ -343,17 +352,17 @@ public abstract class AbstractMappingImpl stateProperties; + private Map stateProperties; /** * Task stored during the evaluation, removed afterwards. */ - Task task; + transient Task task; /** * Value metadata computer to be used when expression is evaluated. */ - private TransformationValueMetadataComputer valueMetadataComputer; + transient private TransformationValueMetadataComputer valueMetadataComputer; //endregion //region Constructors and (relatively) simple getters @@ -569,13 +578,13 @@ public QName getMappingQName() { } @Override - public T getStateProperty(String propertyName) { + public T getStateProperty(String propertyName) { //noinspection unchecked return stateProperties != null ? (T) stateProperties.get(propertyName) : null; } @Override - public T setStateProperty(String propertyName, T value) { + public T setStateProperty(String propertyName, T value) { if (stateProperties == null) { stateProperties = new HashMap<>(); } diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/MappingParser.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/MappingParser.java index f6b860ff133..8653c7ad677 100644 --- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/MappingParser.java +++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/MappingParser.java @@ -29,12 +29,13 @@ import org.jetbrains.annotations.NotNull; import javax.xml.namespace.QName; +import java.io.Serializable; import java.util.Collection; /** * TODO better name, clean up the code; maybe move operation result management code here */ -class MappingParser { +class MappingParser implements Serializable { private final AbstractMappingImpl m; diff --git a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/TimeConstraintsEvaluation.java b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/TimeConstraintsEvaluation.java index 6fbdbe2b57f..acfd5ff4d42 100644 --- a/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/TimeConstraintsEvaluation.java +++ b/model/model-common/src/main/java/com/evolveum/midpoint/model/common/mapping/TimeConstraintsEvaluation.java @@ -24,12 +24,13 @@ import javax.xml.datatype.DatatypeConstants; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; +import java.io.Serializable; import java.util.Objects; /** * Evaluates mapping time constraints. */ -class TimeConstraintsEvaluation { +class TimeConstraintsEvaluation implements Serializable { private static final Trace LOGGER = TraceManager.getTrace(TimeConstraintsEvaluation.class); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelBeans.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelBeans.java index 4f1e7020f3f..cf110624396 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelBeans.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/ModelBeans.java @@ -29,6 +29,8 @@ import com.evolveum.midpoint.repo.api.RepositoryService; import com.evolveum.midpoint.util.annotation.Experimental; +import javax.annotation.PostConstruct; + /** * Commonly-used beans for model-impl module. * @@ -40,6 +42,17 @@ @Component public class ModelBeans { + private static ModelBeans instance; + + @PostConstruct + public void init() { + instance = this; + } + + public static ModelBeans get() { + return instance; + } + @Autowired public PrismContext prismContext; @Autowired public ModelObjectResolver modelObjectResolver; @Autowired @Qualifier("cacheRepositoryService") public RepositoryService cacheRepositoryService; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java index ff172430a6e..4e9922a659c 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/CollectionProcessor.java @@ -103,14 +103,12 @@ private EvaluatedPolicyRule evaluatePolicyRule( OperationResult result) throws SchemaException, ObjectNotFoundException, SecurityViolationException, ConfigurationException, CommunicationException, ExpressionEvaluationException { - AssignmentPathImpl assignmentPath = new AssignmentPathImpl(prismContext); + AssignmentPathImpl assignmentPath = new AssignmentPathImpl(); AssignmentPathSegmentImpl assignmentPathSegment = new AssignmentPathSegmentImpl.Builder() .source(collection.asObjectable()) .sourceDescription("object collection " + collection) .assignment(assignmentType) .isAssignment(true) - .relationRegistry(relationRegistry) - .prismContext(prismContext) .evaluationOrder(EvaluationOrderImpl.zero(relationRegistry)) .evaluationOrderForTarget(EvaluationOrderImpl.zero(relationRegistry)) .direct(true) // to be reconsidered - but assignment path is empty, so we consider this to be directly assigned @@ -119,7 +117,7 @@ private EvaluatedPolicyRule evaluatePolicyRule( .build(); assignmentPath.add(assignmentPathSegment); - EvaluatedPolicyRuleImpl evaluatedPolicyRule = new EvaluatedPolicyRuleImpl(policyRuleType.clone(), assignmentPath, null, prismContext); + EvaluatedPolicyRuleImpl evaluatedPolicyRule = new EvaluatedPolicyRuleImpl(policyRuleType.clone(), assignmentPath, null); PolicyConstraintsType policyConstraints = policyRuleType.getPolicyConstraints(); if (policyConstraints == null) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathVariables.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathVariables.java index d618bec11ff..0e574125a24 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathVariables.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathVariables.java @@ -14,11 +14,13 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; +import java.io.Serializable; + /** * @author semancik * */ -public class AssignmentPathVariables { +public class AssignmentPathVariables implements Serializable { private AssignmentPathImpl assignmentPath; private ItemDeltaItem,PrismContainerDefinition> magicAssignment; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedPolicyRuleImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedPolicyRuleImpl.java index 0f05f607869..58a7c256f24 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedPolicyRuleImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedPolicyRuleImpl.java @@ -77,7 +77,6 @@ public class EvaluatedPolicyRuleImpl implements EvaluatedPolicyRule { */ @Nullable private final AssignmentPath assignmentPath; @Nullable private final ObjectType directOwner; - private final transient PrismContext prismContextForDebugDump; // if null, nothing serious happens /** * Evaluated assignment that brought this policy rule to the focus or target. @@ -92,12 +91,10 @@ public class EvaluatedPolicyRuleImpl implements EvaluatedPolicyRule { public EvaluatedPolicyRuleImpl(@NotNull PolicyRuleType policyRuleType, @Nullable AssignmentPath assignmentPath, - @Nullable EvaluatedAssignmentImpl evaluatedAssignment, - PrismContext prismContext) { + @Nullable EvaluatedAssignmentImpl evaluatedAssignment) { this.policyRuleType = policyRuleType; this.assignmentPath = assignmentPath; this.evaluatedAssignment = evaluatedAssignment; - this.prismContextForDebugDump = prismContext; this.directOwner = computeDirectOwner(); this.policyRuleId = computePolicyRuleId(); } @@ -110,9 +107,9 @@ private String computePolicyRuleId() { return directOwner.getOid() + policyRuleType.asPrismContainerValue().getId(); } + @SuppressWarnings("MethodDoesntCallSuperMethod") public EvaluatedPolicyRuleImpl clone() { - return new EvaluatedPolicyRuleImpl(CloneUtil.clone(policyRuleType), CloneUtil.clone(assignmentPath), evaluatedAssignment, - prismContextForDebugDump); + return new EvaluatedPolicyRuleImpl(CloneUtil.clone(policyRuleType), CloneUtil.clone(assignmentPath), evaluatedAssignment); } private ObjectType computeDirectOwner() { @@ -310,7 +307,8 @@ public String debugDump(int indent) { debugDumpWithLabelLn(sb, "name", getName(), indent + 1); debugDumpLabelLn(sb, "policyRuleType", indent + 1); indentDebugDump(sb, indent + 2); - PrismPrettyPrinter.debugDumpValue(sb, indent + 2, policyRuleType, prismContextForDebugDump, PolicyRuleType.COMPLEX_TYPE, PrismContext.LANG_XML); + PrismPrettyPrinter.debugDumpValue(sb, indent + 2, policyRuleType, PrismContext.get(), + PolicyRuleType.COMPLEX_TYPE, PrismContext.LANG_XML); sb.append('\n'); debugDumpWithLabelLn(sb, "assignmentPath", assignmentPath, indent + 1); debugDumpWithLabelLn(sb, "triggers", triggers, indent + 1); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentEvaluator.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentEvaluator.java index 6bdb563e757..5fedc781d84 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentEvaluator.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentEvaluator.java @@ -169,7 +169,7 @@ public EvaluatedAssignmentImpl evaluate( EvaluationContext ctx = new EvaluationContext<>( evaluatedAssignment, - new AssignmentPathImpl(prismContext), + new AssignmentPathImpl(), primaryAssignmentMode, evaluateOld, task, this); evaluatedAssignmentTargetCache.resetForNextAssignment(); @@ -180,8 +180,6 @@ public EvaluatedAssignmentImpl evaluate( .assignmentIdi(assignmentIdi) .isAssignment(true) .evaluateOld(evaluateOld) - .relationRegistry(relationRegistry) - .prismContext(prismContext) .evaluationOrder(getInitialEvaluationOrder(assignmentIdi, ctx)) .evaluationOrderForTarget(EvaluationOrderImpl.zero(relationRegistry)) .pathToSourceValid(true) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathImpl.java index ff1528c6fc2..3c0f2914703 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathImpl.java @@ -17,6 +17,7 @@ import com.evolveum.midpoint.model.api.util.AssignmentPathUtil; import com.evolveum.midpoint.model.api.util.DeputyUtils; import com.evolveum.midpoint.prism.PrismContext; +import com.evolveum.midpoint.prism.PrismService; import com.evolveum.midpoint.schema.RelationRegistry; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.exception.SchemaException; @@ -33,11 +34,6 @@ public class AssignmentPathImpl implements AssignmentPath { @NotNull private final List segments = new ArrayList<>(); - @NotNull private final PrismContext prismContext; - - public AssignmentPathImpl(@NotNull PrismContext prismContext) { - this.prismContext = prismContext; - } @NotNull @Override @@ -165,7 +161,7 @@ public AssignmentPathImpl clone() { @Override public AssignmentPathImpl cloneFirst(int n) { - AssignmentPathImpl clone = new AssignmentPathImpl(prismContext); + AssignmentPathImpl clone = new AssignmentPathImpl(); clone.segments.addAll(this.segments.subList(0, n)); return clone; } @@ -246,12 +242,12 @@ public AssignmentPathType toAssignmentPathType(boolean includeAssignmentsContent @NotNull public PrismContext getPrismContext() { - return prismContext; + return PrismService.get().prismContext(); } @Override public ExtensionType collectExtensions(int startAt) throws SchemaException { - return AssignmentPathUtil.collectExtensions(this, startAt, prismContext); + return AssignmentPathUtil.collectExtensions(this, startAt, getPrismContext()); } @Override diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathSegmentImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathSegmentImpl.java index 9abc7fca064..46c2de79668 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathSegmentImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/AssignmentPathSegmentImpl.java @@ -15,6 +15,8 @@ import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.PlusMinusZero; +import com.evolveum.midpoint.schema.SchemaService; + import org.jetbrains.annotations.NotNull; import com.evolveum.midpoint.model.api.context.AssignmentPathSegment; @@ -42,10 +44,6 @@ public class AssignmentPathSegmentImpl implements AssignmentPathSegment, Freezab private boolean immutable; - @NotNull private final RelationRegistry relationRegistry; - - @NotNull private final PrismContext prismContext; - //region Description of the situation: source, assignment, target /** * Source object for this assignment path. @@ -218,8 +216,6 @@ public class AssignmentPathSegmentImpl implements AssignmentPathSegment, Freezab //endregion private AssignmentPathSegmentImpl(Builder builder) { - relationRegistry = builder.relationRegistry; - prismContext = builder.prismContext; source = builder.source; sourceDescription = builder.sourceDescription; assignmentIdi = builder.assignmentIdi; @@ -228,7 +224,7 @@ private AssignmentPathSegmentImpl(Builder builder) { } evaluateOld = builder.evaluateOld; assignment = getAssignment(assignmentIdi, evaluateOld); - relation = getRelation(assignment, relationRegistry); + relation = getRelation(assignment, getRelationRegistry()); isAssignment = builder.isAssignment; target = builder.target; direct = builder.direct; @@ -251,8 +247,6 @@ private boolean computeMatchingOrder(EvaluationOrder evaluationOrder, Assignment } private AssignmentPathSegmentImpl(AssignmentPathSegmentImpl origin, ObjectType target) { - this.relationRegistry = origin.relationRegistry; - this.prismContext = origin.prismContext; this.source = origin.source; this.sourceDescription = origin.sourceDescription; this.assignmentIdi = origin.assignmentIdi; @@ -412,7 +406,7 @@ public boolean isMatchingOrderForTarget() { @Override public boolean isDelegation() { - return relationRegistry.isDelegation(relation); + return getRelationRegistry().isDelegation(relation); } @Override @@ -558,11 +552,11 @@ public AssignmentPathSegmentType toAssignmentPathSegmentType(boolean includeAssi rv.setAssignmentId(assignment.getId()); } if (source != null) { - rv.setSourceRef(ObjectTypeUtil.createObjectRef(source, prismContext)); + rv.setSourceRef(ObjectTypeUtil.createObjectRef(source, getPrismContext())); rv.setSourceDisplayName(ObjectTypeUtil.getDisplayName(source)); } if (target != null) { - rv.setTargetRef(ObjectTypeUtil.createObjectRef(target, prismContext)); + rv.setTargetRef(ObjectTypeUtil.createObjectRef(target, getPrismContext())); rv.setTargetDisplayName(ObjectTypeUtil.getDisplayName(target)); } rv.setMatchingOrder(isMatchingOrder); @@ -584,7 +578,7 @@ public boolean matches(@NotNull List orderConstraints) { @SuppressWarnings("SimplifiableIfStatement") @Override public boolean equivalent(AssignmentPathSegment otherSegment) { - if (!prismContext.relationsEquivalent(relation, otherSegment.getRelation())) { + if (!getPrismContext().relationsEquivalent(relation, otherSegment.getRelation())) { return false; } if (target == null && otherSegment.getTarget() == null) { @@ -611,9 +605,15 @@ public Long getAssignmentId() { return assignment != null ? assignment.getId() : null; } + @NotNull private RelationRegistry getRelationRegistry() { + return SchemaService.get().relationRegistry(); + } + + @NotNull private PrismContext getPrismContext() { + return PrismService.get().prismContext(); + } + public static final class Builder { - private RelationRegistry relationRegistry; - private PrismContext prismContext; private AssignmentHolderType source; private String sourceDescription; private ItemDeltaItem, PrismContainerDefinition> assignmentIdi; @@ -633,16 +633,6 @@ public static final class Builder { public Builder() { } - public Builder relationRegistry(@NotNull RelationRegistry val) { - relationRegistry = val; - return this; - } - - public Builder prismContext(@NotNull PrismContext val) { - prismContext = val; - return this; - } - public Builder source(AssignmentHolderType val) { source = val; return this; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/ConditionState.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/ConditionState.java index f786df57600..215f561bd50 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/ConditionState.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/ConditionState.java @@ -10,11 +10,13 @@ import com.evolveum.midpoint.prism.delta.PlusMinusZero; import com.evolveum.midpoint.util.annotation.Experimental; +import java.io.Serializable; + /** * Describes the evaluation state of assignment / object condition. */ @Experimental -public class ConditionState { +public class ConditionState implements Serializable { /** * State of the condition corresponding to old state of the focal object. diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluatedAssignmentImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluatedAssignmentImpl.java index 60066ab13e4..27d4ce2f893 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluatedAssignmentImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluatedAssignmentImpl.java @@ -30,7 +30,6 @@ import com.evolveum.midpoint.security.api.Authorization; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.DebugUtil; -import com.evolveum.midpoint.util.ShortDumpable; import com.evolveum.midpoint.util.annotation.Experimental; import com.evolveum.midpoint.util.exception.CommunicationException; import com.evolveum.midpoint.util.exception.ConfigurationException; @@ -54,7 +53,7 @@ * * @author Radovan Semancik */ -public class EvaluatedAssignmentImpl implements EvaluatedAssignment, ShortDumpable { +public class EvaluatedAssignmentImpl implements EvaluatedAssignment { @NotNull private final ItemDeltaItem,PrismContainerDefinition> assignmentIdi; private final boolean evaluatedOld; @@ -125,8 +124,6 @@ public class EvaluatedAssignmentImpl implements */ @NotNull private final AssignmentOrigin origin; - private final PrismContext prismContext; - public EvaluatedAssignmentImpl( @NotNull ItemDeltaItem, PrismContainerDefinition> assignmentIdi, boolean evaluatedOld, @NotNull AssignmentOrigin origin, PrismContext prismContext) { @@ -135,7 +132,6 @@ public EvaluatedAssignmentImpl( this.constructionTriple = prismContext.deltaFactory().createDeltaSetTriple(); this.personaConstructionTriple = prismContext.deltaFactory().createDeltaSetTriple(); this.roles = prismContext.deltaFactory().createDeltaSetTriple(); - this.prismContext = prismContext; this.origin = origin; } @@ -196,7 +192,8 @@ public DeltaSetTriple> getConstructionTri @Override @NotNull public DeltaSetTriple getEvaluatedConstructions(@NotNull Task task, @NotNull OperationResult result) { - DeltaSetTriple> rv = prismContext.deltaFactory().createDeltaSetTriple(); + DeltaSetTriple> rv = + PrismContext.get().deltaFactory().createDeltaSetTriple(); for (AssignedResourceObjectConstruction construction : constructionTriple.getPlusSet()) { for (EvaluatedAssignedResourceObjectConstructionImpl evaluatedConstruction : construction.getEvaluatedConstructionTriple().getNonNegativeValues()) { rv.addToPlusSet(evaluatedConstruction); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluationOrderImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluationOrderImpl.java index 71e19a3210b..9946a9994fd 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluationOrderImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/EvaluationOrderImpl.java @@ -15,6 +15,7 @@ import com.evolveum.midpoint.model.api.context.EvaluationOrder; import com.evolveum.midpoint.prism.xml.XsdTypeMapper; import com.evolveum.midpoint.schema.RelationRegistry; +import com.evolveum.midpoint.schema.SchemaService; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.util.QNameUtil; import com.evolveum.midpoint.util.logging.Trace; @@ -36,10 +37,9 @@ public class EvaluationOrderImpl implements EvaluationOrder { static final EvaluationOrder UNDEFINED = new UndefinedEvaluationOrderImpl(); @NotNull private final HashMap orderMap; // see checkConsistence - @NotNull private final RelationRegistry relationRegistry; public static EvaluationOrder zero(RelationRegistry relationRegistry) { - EvaluationOrderImpl eo = new EvaluationOrderImpl(relationRegistry); + EvaluationOrderImpl eo = new EvaluationOrderImpl(); eo.orderMap.put(relationRegistry.getDefaultRelation(), 0); return eo; } @@ -61,18 +61,20 @@ private void checkConsistence() { } private boolean isNotNormalized(QName relation) { - return relation == null || !relation.equals(relationRegistry.normalizeRelation(relation)); + return relation == null || !relation.equals(getRelationRegistry().normalizeRelation(relation)); + } + + private RelationRegistry getRelationRegistry() { + return SchemaService.get().relationRegistry(); } private static final boolean CHECK_CONSISTENCE = true; - private EvaluationOrderImpl(@NotNull RelationRegistry relationRegistry) { - this.relationRegistry = relationRegistry; + private EvaluationOrderImpl() { orderMap = new HashMap<>(); } private EvaluationOrderImpl(EvaluationOrderImpl that) { - this.relationRegistry = that.relationRegistry; this.orderMap = new HashMap<>(that.orderMap); } @@ -80,7 +82,7 @@ private EvaluationOrderImpl(EvaluationOrderImpl that) { public int getSummaryOrder() { int rv = 0; for (Entry entry : orderMap.entrySet()) { - if (!relationRegistry.isDelegation(entry.getKey())) { + if (!getRelationRegistry().isDelegation(entry.getKey())) { rv += entry.getValue(); } } @@ -112,7 +114,7 @@ public EvaluationOrder decrease(MultiSet relations) { // must always be private: public interface will not allow to modify object state! private void advanceThis(QName relation, int amount) { - @NotNull QName normalizedRelation = relationRegistry.normalizeRelation(relation); + @NotNull QName normalizedRelation = getRelationRegistry().normalizeRelation(relation); orderMap.put(normalizedRelation, getMatchingRelationOrder(normalizedRelation) + amount); } @@ -122,13 +124,13 @@ public int getMatchingRelationOrder(QName relation) { if (relation == null) { return getSummaryOrder(); } - return orderMap.getOrDefault(relationRegistry.normalizeRelation(relation), 0); + return orderMap.getOrDefault(getRelationRegistry().normalizeRelation(relation), 0); } @Override public EvaluationOrder resetOrder(QName relation, int newOrder) { EvaluationOrderImpl clone = clone(); - clone.orderMap.put(relationRegistry.normalizeRelation(relation), newOrder); + clone.orderMap.put(getRelationRegistry().normalizeRelation(relation), newOrder); clone.checkConsistence(); return clone; } @@ -219,7 +221,7 @@ public void shortDump(StringBuilder sb) { @Override public Collection getExtraRelations() { return orderMap.entrySet().stream() - .filter(e -> !relationRegistry.isAutomaticallyMatched(e.getKey()) && e.getValue() > 0) + .filter(e -> !getRelationRegistry().isAutomaticallyMatched(e.getKey()) && e.getValue() > 0) .map(e -> e.getKey()) .collect(Collectors.toSet()); } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/PayloadEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/PayloadEvaluation.java index 4e8d454463e..f2d0de4b791 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/PayloadEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/PayloadEvaluation.java @@ -100,7 +100,6 @@ private void populateConstructionBuilder( .source(segment.source) .lensContext(ctx.ae.lensContext) .now(ctx.ae.now) - .modelBeans(ctx.ae.beans) .originType(OriginType.ASSIGNMENTS) .valid(segment.isFullPathActive() && segment.getOverallConditionState().isNewTrue()); } @@ -150,7 +149,7 @@ private void collectTargetPolicyRule() { @NotNull private EvaluatedPolicyRuleImpl createEvaluatedPolicyRule(PolicyRuleType policyRuleBean) { - return new EvaluatedPolicyRuleImpl(policyRuleBean.clone(), ctx.assignmentPath.clone(), ctx.evalAssignment, ctx.ae.prismContext); + return new EvaluatedPolicyRuleImpl(policyRuleBean.clone(), ctx.assignmentPath.clone(), ctx.evalAssignment); } private boolean appliesDirectly(AssignmentPathImpl assignmentPath) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetAssignmentEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetAssignmentEvaluation.java index 0cce232f714..d9f9fa37a9e 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetAssignmentEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetAssignmentEvaluation.java @@ -73,8 +73,6 @@ void evaluate() throws SchemaException, ObjectNotFoundException, ExpressionEvalu .sourceDescription(segment.target+" in "+segment.sourceDescription) .assignment(nextAssignment) .isAssignment(true) - .relationRegistry(ctx.ae.relationRegistry) - .prismContext(ctx.ae.prismContext) .evaluationOrder(nextEvaluationOrder) .evaluationOrderForTarget(nextEvaluationOrderForTarget) .pathToSourceValid(targetActivation.pathAndTargetActive) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetInducementEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetInducementEvaluation.java index fbbb45600a9..162e667ec43 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetInducementEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/assignments/TargetInducementEvaluation.java @@ -84,8 +84,6 @@ void evaluate() throws SchemaException, ObjectNotFoundException, ExpressionEvalu .assignment(inducement) .isAssignment(false) .isHierarchy(archetypeHierarchy) - .relationRegistry(ctx.ae.relationRegistry) - .prismContext(ctx.ae.prismContext) .pathToSourceValid(targetActivation.pathAndTargetActive) .pathToSourceConditionState(targetOverallConditionState) .evaluationOrder(adjustment.evaluationOrder) diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AbstractConstruction.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AbstractConstruction.java index eba904835c2..fe1c4fcdfed 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AbstractConstruction.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AbstractConstruction.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.Nullable; import javax.xml.datatype.XMLGregorianCalendar; +import java.io.Serializable; import java.util.Objects; /** @@ -48,7 +49,7 @@ * @author Radovan Semancik */ public abstract class AbstractConstruction> - implements DebugDumpable { + implements DebugDumpable, Serializable { /** * Definition of the assigned construction. @@ -96,11 +97,6 @@ public abstract class AbstractConstruction focusOdoAbsolute; - /** - * Components (Spring beans) needed for construction processing. - */ - @NotNull protected final ModelBeans beans; - /** * TODO * Again, not clear if relevant for persona constructions. @@ -134,7 +130,6 @@ public abstract class AbstractConstruction lensContext; XMLGregorianCalendar now; - ModelBeans modelBeans; boolean valid; public RT constructionBean(ACT val) { @@ -65,11 +63,6 @@ public RT now(XMLGregorianCalendar val) { return typedThis(); } - public RT modelBeans(ModelBeans val) { - modelBeans = val; - return typedThis(); - } - public RT valid(boolean val) { valid = val; return typedThis(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AssignedResourceObjectConstruction.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AssignedResourceObjectConstruction.java index 91a8b8172dd..62ed7b93593 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AssignedResourceObjectConstruction.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/AssignedResourceObjectConstruction.java @@ -13,6 +13,7 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.common.refinery.RefinedResourceSchema; import com.evolveum.midpoint.common.refinery.RefinedResourceSchemaImpl; +import com.evolveum.midpoint.model.impl.ModelBeans; import com.evolveum.midpoint.model.impl.lens.assignments.AssignmentPathImpl; import com.evolveum.midpoint.schema.ResourceShadowDiscriminator; import com.evolveum.midpoint.schema.result.OperationResult; @@ -72,7 +73,7 @@ protected void initializeDefinitions() throws SchemaException { assert constructionBean != null; RefinedResourceSchema refinedSchema = RefinedResourceSchemaImpl.getRefinedSchema(resource, - LayerType.MODEL, beans.prismContext); + LayerType.MODEL, getBeans().prismContext); if (refinedSchema == null) { // Refined schema may be null in some error-related border cases throw new SchemaException("No (refined) schema for " + resource); @@ -105,6 +106,10 @@ protected void initializeDefinitions() throws SchemaException { } } + protected ModelBeans getBeans() { + return ModelBeans.get(); + } + @Override protected EvaluatedAssignedResourceObjectConstructionImpl createEvaluatedConstruction(ResourceShadowDiscriminator rsd) { return new EvaluatedAssignedResourceObjectConstructionImpl<>(this, rsd); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ConstructionResourceResolver.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ConstructionResourceResolver.java index 72f2e6d203f..d39658fb923 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ConstructionResourceResolver.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ConstructionResourceResolver.java @@ -10,6 +10,7 @@ import com.evolveum.midpoint.model.impl.ModelBeans; import com.evolveum.midpoint.model.impl.lens.LensUtil; import com.evolveum.midpoint.model.impl.util.ModelImplUtils; +import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.repo.common.expression.ExpressionUtil; @@ -38,13 +39,11 @@ class ConstructionResourceResolver { private static final Trace LOGGER = TraceManager.getTrace(ConstructionResourceResolver.class); private final ResourceObjectConstruction construction; - private final ModelBeans beans; private final Task task; private final OperationResult result; ConstructionResourceResolver(ResourceObjectConstruction construction, Task task, OperationResult result) { this.construction = construction; - this.beans = construction.beans; this.task = task; this.result = result; } @@ -67,7 +66,7 @@ class ConstructionResourceResolver { resource = resolveResourceRefFilter(" resolving resource ", task, result); } else { resource = LensUtil.getResourceReadOnly(construction.lensContext, resourceRef.getOid(), - beans.modelObjectResolver, task, result); + ModelBeans.get().modelObjectResolver, task, result); } return new ResolvedConstructionResource(resource); } catch (ObjectNotFoundException e) { @@ -115,17 +114,17 @@ private ResourceType resolveResourceRefFilter(String sourceDescription, Task tas CommunicationException, ConfigurationException, SecurityViolationException { VariablesMap variables = ModelImplUtils .getDefaultVariablesMap(construction.getFocusOdoAbsolute().getNewObject().asObjectable(), - null, null, null, beans.prismContext); - ModelImplUtils.addAssignmentPathVariables(construction.getAssignmentPathVariables(), variables, beans.prismContext); + null, null, null, PrismContext.get()); + ModelImplUtils.addAssignmentPathVariables(construction.getAssignmentPathVariables(), variables, PrismContext.get()); LOGGER.debug("Expression variables for filter evaluation: {}", variables); assert construction.constructionBean != null; - ObjectFilter origFilter = beans.prismContext.getQueryConverter() + ObjectFilter origFilter = PrismContext.get().getQueryConverter() .parseFilter(construction.constructionBean.getResourceRef().getFilter(), ResourceType.class); LOGGER.debug("Orig filter {}", origFilter); ObjectFilter evaluatedFilter = ExpressionUtil.evaluateFilterExpressions(origFilter, variables, - construction.expressionProfile, beans.mappingFactory.getExpressionFactory(), beans.prismContext, + construction.expressionProfile, ModelBeans.get().commonBeans.expressionFactory, PrismContext.get(), " evaluating resource filter expression ", task, result); LOGGER.debug("evaluatedFilter filter {}", evaluatedFilter); @@ -139,8 +138,8 @@ private ResourceType resolveResourceRefFilter(String sourceDescription, Task tas LOGGER.debug("Found object {}", object); return results.add(object); }; - beans.modelObjectResolver.searchIterative(ResourceType.class, - beans.prismContext.queryFactory().createQuery(evaluatedFilter), + ModelBeans.get().modelObjectResolver.searchIterative(ResourceType.class, + PrismContext.get().queryFactory().createQuery(evaluatedFilter), null, handler, task, result); // TODO consider referential integrity settings diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedAbstractConstruction.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedAbstractConstruction.java index cef3c464ece..30d87719f49 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedAbstractConstruction.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedAbstractConstruction.java @@ -9,12 +9,14 @@ import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; +import java.io.Serializable; + /** * Facade interface for evaluated resource object and persona constructions. * * @author Radovan Semancik */ -public interface EvaluatedAbstractConstruction { +public interface EvaluatedAbstractConstruction extends Serializable { AbstractConstruction getConstruction(); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedPersonaConstructionImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedPersonaConstructionImpl.java index 18ea104c6f1..69b94536d3c 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedPersonaConstructionImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedPersonaConstructionImpl.java @@ -9,17 +9,13 @@ import org.jetbrains.annotations.NotNull; -import com.evolveum.midpoint.util.logging.Trace; -import com.evolveum.midpoint.util.logging.TraceManager; -import com.evolveum.midpoint.xml.ns._public.common.common_3.*; +import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; /** * @author Radovan Semancik */ public class EvaluatedPersonaConstructionImpl implements EvaluatedAbstractConstruction { - private static final Trace LOGGER = TraceManager.getTrace(EvaluatedPersonaConstructionImpl.class); - private final PersonaConstruction construction; EvaluatedPersonaConstructionImpl(@NotNull final PersonaConstruction construction) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedResourceObjectConstructionImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedResourceObjectConstructionImpl.java index 562cea0bc48..7f458b4cec5 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedResourceObjectConstructionImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/EvaluatedResourceObjectConstructionImpl.java @@ -12,6 +12,7 @@ import java.util.List; import javax.xml.namespace.QName; +import com.evolveum.midpoint.model.impl.ModelBeans; import com.evolveum.midpoint.model.impl.lens.LensUtil; import com.evolveum.midpoint.prism.util.ObjectDeltaObject; import com.evolveum.midpoint.util.logging.Trace; @@ -64,7 +65,8 @@ public abstract class EvaluatedResourceObjectConstructionImpl, ? extends PrismPropertyDefinition>> attributeMappings = new ArrayList<>(); + @NotNull protected final Collection, ? extends PrismPropertyDefinition>> + attributeMappings = new ArrayList<>(); /** * Mappings for the resource object associations. @@ -82,7 +84,7 @@ public abstract class EvaluatedResourceObjectConstructionImpl evaluation; + protected transient ConstructionEvaluation evaluation; /** * Precondition: {@link ResourceObjectConstruction} is already evaluated and not ignored (has resource). @@ -230,7 +232,8 @@ public NextRecompute evaluate(Task task, OperationResult parentResult) throws Co .setMinor() .build(); if (result.isTracingAny(ResourceObjectConstructionEvaluationTraceType.class)) { - ResourceObjectConstructionEvaluationTraceType trace = new ResourceObjectConstructionEvaluationTraceType(construction.beans.prismContext); + ResourceObjectConstructionEvaluationTraceType trace = + new ResourceObjectConstructionEvaluationTraceType(PrismContext.get()); trace.setConstruction(construction.constructionBean); trace.setResourceShadowDiscriminator(LensUtil.createDiscriminatorBean(rsd, construction.lensContext)); if (construction.assignmentPath != null && result.isTracingNormal(ResourceObjectConstructionEvaluationTraceType.class)) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ItemEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ItemEvaluation.java index 443d8f78955..c622c502465 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ItemEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ItemEvaluation.java @@ -10,6 +10,7 @@ import com.evolveum.midpoint.common.refinery.RefinedObjectClassDefinition; import com.evolveum.midpoint.model.common.mapping.MappingBuilder; import com.evolveum.midpoint.model.common.mapping.MappingImpl; +import com.evolveum.midpoint.model.impl.ModelBeans; import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.model.impl.lens.LensProjectionContext; import com.evolveum.midpoint.model.impl.lens.LensUtil; @@ -220,7 +221,7 @@ public ValuePolicyType get(OperationResult result) { if (object instanceof GenerateExpressionEvaluatorType && ((GenerateExpressionEvaluatorType) object).getValuePolicyRef() != null) { ObjectReferenceType ref = ((GenerateExpressionEvaluatorType) object).getValuePolicyRef(); try { - ValuePolicyType valuePolicyType = construction.beans.modelObjectResolver.resolve(ref, ValuePolicyType.class, + ValuePolicyType valuePolicyType = ModelBeans.get().modelObjectResolver.resolve(ref, ValuePolicyType.class, null, "resolving value policy for generate attribute "+ outputDefinition.getItemName()+"value", constructionEvaluation.task, result); if (valuePolicyType != null) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/PersonaConstruction.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/PersonaConstruction.java index fedef16ca33..dc9cb22084a 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/PersonaConstruction.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/PersonaConstruction.java @@ -7,6 +7,7 @@ package com.evolveum.midpoint.model.impl.lens.construction; import com.evolveum.midpoint.model.impl.lens.assignments.AssignmentPathImpl; +import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.delta.DeltaSetTriple; import com.evolveum.midpoint.util.DebugUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentHolderType; @@ -39,7 +40,10 @@ public class PersonaConstruction public DeltaSetTriple> getEvaluatedConstructionTriple() { EvaluatedPersonaConstructionImpl evaluatedConstruction = new EvaluatedPersonaConstructionImpl<>(this); - return beans.prismContext.deltaFactory().createDeltaSetTriple(Collections.singleton(evaluatedConstruction), Collections.emptyList(), Collections.emptyList()); + return PrismContext.get().deltaFactory().createDeltaSetTriple( + Collections.singleton(evaluatedConstruction), + Collections.emptyList(), + Collections.emptyList()); } @Override diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResolvedConstructionResource.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResolvedConstructionResource.java index 0922b986c8b..9dea1c7cf9a 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResolvedConstructionResource.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResolvedConstructionResource.java @@ -12,13 +12,14 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.Serializable; import java.util.Objects; /** * Information on the resource referenced by particular {@link ResourceObjectConstruction} - the object * as well as information what to do in case it couldn't be resolved. */ -public class ResolvedConstructionResource { +public class ResolvedConstructionResource implements Serializable { /** * Resolved form of the object. @@ -30,12 +31,12 @@ public class ResolvedConstructionResource { */ public final boolean warning; - public ResolvedConstructionResource(@NotNull ResourceType resource) { + ResolvedConstructionResource(@NotNull ResourceType resource) { this.resource = resource; this.warning = false; } - public ResolvedConstructionResource(boolean warning) { + ResolvedConstructionResource(boolean warning) { this.resource = null; this.warning = warning; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResourceObjectConstruction.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResourceObjectConstruction.java index 7b3ef03fc3d..40ceb0c1d61 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResourceObjectConstruction.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/construction/ResourceObjectConstruction.java @@ -16,6 +16,7 @@ import com.evolveum.midpoint.model.common.mapping.MappingBuilder; import com.evolveum.midpoint.model.common.mapping.MappingFactory; import com.evolveum.midpoint.model.common.mapping.MappingImpl; +import com.evolveum.midpoint.model.impl.ModelBeans; import com.evolveum.midpoint.model.impl.lens.LensProjectionContext; import com.evolveum.midpoint.model.impl.lens.LensUtil; import com.evolveum.midpoint.model.impl.lens.projector.mappings.MappingEvaluator; @@ -127,8 +128,8 @@ public NextRecompute evaluate(Task task, OperationResult parentResult) } } - protected void createEvaluatedConstructions(Task task, OperationResult result) throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException { - evaluatedConstructionTriple = beans.prismContext.deltaFactory().createDeltaSetTriple(); + private void createEvaluatedConstructions(Task task, OperationResult result) throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException { + evaluatedConstructionTriple = PrismContext.get().deltaFactory().createDeltaSetTriple(); PrismValueDeltaSetTriple> tagTriple = evaluateTagTriple(task, result); if (tagTriple == null) { @@ -159,7 +160,7 @@ private PrismValueDeltaSetTriple> evaluateTagTriple(T } MappingBuilder, PrismPropertyDefinition> builder = - beans.mappingFactory.createMappingBuilder(tagMappingBean, "for outbound tag mapping in " + getSource()); + getMappingFactory().createMappingBuilder(tagMappingBean, "for outbound tag mapping in " + getSource()); builder = initializeMappingBuilder(builder, ShadowType.F_TAG, ShadowType.F_TAG, createTagDefinition(), null); if (builder == null) { @@ -167,7 +168,7 @@ private PrismValueDeltaSetTriple> evaluateTagTriple(T } MappingImpl, PrismPropertyDefinition> mapping = builder.build(); - beans.mappingEvaluator.evaluateMapping(mapping, getLensContext(), null, task, result); + getMappingEvaluator().evaluateMapping(mapping, getLensContext(), null, task, result); return mapping.getOutputTriple(); } @@ -175,7 +176,7 @@ private PrismValueDeltaSetTriple> evaluateTagTriple(T @NotNull private MutablePrismPropertyDefinition createTagDefinition() { MutablePrismPropertyDefinition outputDefinition = - beans.mappingFactory.getExpressionFactory().getPrismContext().definitionFactory() + getMappingFactory().getExpressionFactory().getPrismContext().definitionFactory() .createPropertyDefinition(ExpressionConstants.OUTPUT_ELEMENT_NAME, PrimitiveType.STRING.getQname()); outputDefinition.setMaxOccurs(-1); return outputDefinition; @@ -247,7 +248,7 @@ > MappingBuilder initial assocTargetObjectClassDefinition, RefinedObjectClassDefinition.class); } builder = builder.addVariableDefinition(ExpressionConstants.VAR_RESOURCE, getResource(), ResourceType.class); - builder = LensUtil.addAssignmentPathVariables(builder, getAssignmentPathVariables(), beans.prismContext); + builder = LensUtil.addAssignmentPathVariables(builder, getAssignmentPathVariables(), PrismContext.get()); builder = builder.addVariableDefinition(ExpressionConstants.VAR_CONFIGURATION, lensContext.getSystemConfiguration(), SystemConfigurationType.class); // TODO: other variables ? @@ -369,11 +370,11 @@ public String toString() { } public MappingFactory getMappingFactory() { - return beans.mappingFactory; + return ModelBeans.get().mappingFactory; } public MappingEvaluator getMappingEvaluator() { - return beans.mappingEvaluator; + return ModelBeans.get().mappingEvaluator; } public XMLGregorianCalendar getNow() { @@ -494,7 +495,7 @@ public RefinedAssociationDefinition findAssociationDefinition(QName associationN public PrismContainerDefinition getAssociationContainerDefinition() { if (associationContainerDefinition == null) { - PrismObjectDefinition shadowDefinition = beans.prismContext.getSchemaRegistry() + PrismObjectDefinition shadowDefinition = PrismContext.get().getSchemaRegistry() .findObjectDefinitionByCompileTimeClass(ShadowType.class); associationContainerDefinition = shadowDefinition.findContainerDefinition(ShadowType.F_ASSOCIATION); } @@ -506,7 +507,7 @@ public PrismContainerDefinition getAssociationContainerDe protected void loadFullShadow(LensProjectionContext projectionContext, String desc, Task task, OperationResult result) throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException { - beans.contextLoader.loadFullShadow(getLensContext(), projectionContext, desc, task, result); + ModelBeans.get().contextLoader.loadFullShadow(getLensContext(), projectionContext, desc, task, result); } //endregion } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentOrigin.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentOrigin.java index b0517b50c0a..a3a54dc881e 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentOrigin.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/AssignmentOrigin.java @@ -11,6 +11,7 @@ import com.evolveum.midpoint.prism.delta.AddDeleteReplace; import com.evolveum.midpoint.prism.delta.PlusMinusZero; +import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -18,7 +19,7 @@ /** * Describes assignment origin e.g. if it's in object old, current, or in delta; if it's virtual or not. */ -public class AssignmentOrigin extends AbstractFreezable { +public class AssignmentOrigin extends AbstractFreezable implements Serializable { /** * Assignment is virtual i.e. not really present in the focus object. diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/OutboundProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/OutboundProcessor.java index 075f11b4705..4069eca8665 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/OutboundProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/OutboundProcessor.java @@ -61,7 +61,6 @@ void processOutbound(LensContext context, LensProjectionContext projCtx, Tas .source(projCtx.getResource()) .lensContext(context) .now(clock.currentTimeXMLGregorianCalendar()) // todo - .modelBeans(modelBeans) .originType(OriginType.ASSIGNMENTS) // fixme .valid(true); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/focus/InboundMappingsEvaluation.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/focus/InboundMappingsEvaluation.java index 7e96c27d199..fbdffa84ca6 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/focus/InboundMappingsEvaluation.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/focus/InboundMappingsEvaluation.java @@ -61,9 +61,10 @@ * Evaluation of inbound mappings. * * Responsibility of this class: - * 1) collects inbound mappings to be evaluated - * 2) evaluates them - * 3) consolidates the results into deltas + * + * 1. collects inbound mappings to be evaluated + * 2. evaluates them + * 3. consolidates the results into deltas */ @Experimental class InboundMappingsEvaluation { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/AutoassignRoleMappingEvaluationRequest.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/AutoassignRoleMappingEvaluationRequest.java index 0f72cc743ac..cef60fc6fa3 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/AutoassignRoleMappingEvaluationRequest.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/AutoassignRoleMappingEvaluationRequest.java @@ -26,7 +26,8 @@ /** * */ -public class AutoassignRoleMappingEvaluationRequest extends FocalMappingEvaluationRequest { +public class AutoassignRoleMappingEvaluationRequest + extends FocalMappingEvaluationRequest { // Internal state private PrismContainerDefinition assignmentDef; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/FocalMappingEvaluationRequest.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/FocalMappingEvaluationRequest.java index d1af98a3cd4..2502fb601ec 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/FocalMappingEvaluationRequest.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/FocalMappingEvaluationRequest.java @@ -6,25 +6,20 @@ */ package com.evolveum.midpoint.model.impl.lens.projector.mappings; +import java.io.Serializable; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + import com.evolveum.midpoint.model.common.mapping.MappingPreExpression; import com.evolveum.midpoint.model.impl.lens.AssignmentPathVariables; import com.evolveum.midpoint.prism.ItemDefinition; import com.evolveum.midpoint.prism.PrismValue; import com.evolveum.midpoint.prism.util.ObjectDeltaObject; -import com.evolveum.midpoint.repo.common.expression.ExpressionEvaluationContext; import com.evolveum.midpoint.repo.common.expression.Source; -import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.ShortDumpable; -import com.evolveum.midpoint.util.exception.CommunicationException; -import com.evolveum.midpoint.util.exception.ConfigurationException; -import com.evolveum.midpoint.util.exception.ExpressionEvaluationException; -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.*; -import org.jetbrains.annotations.NotNull; - -import java.util.stream.Collectors; /** * Contains some of the information necessary to evaluate a mapping. It is used when mappings are collected e.g. from @@ -34,13 +29,14 @@ * * @author semancik */ -public abstract class FocalMappingEvaluationRequest implements ShortDumpable { +public abstract class FocalMappingEvaluationRequest + implements ShortDumpable, Serializable { @NotNull protected final MT mapping; @NotNull protected final MappingKindType mappingKind; @NotNull protected final OO originObject; - private String mappingInfo; // lazily computed + private String mappingInfo; // lazily computed FocalMappingEvaluationRequest(@NotNull MT mapping, @NotNull MappingKindType mappingKind, @NotNull OO originObject) { this.mapping = mapping; diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/TemplateMappingEvaluationRequest.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/TemplateMappingEvaluationRequest.java index 3ab5593d572..5d56caaecb1 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/TemplateMappingEvaluationRequest.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/mappings/TemplateMappingEvaluationRequest.java @@ -18,7 +18,8 @@ /** * */ -public class TemplateMappingEvaluationRequest extends FocalMappingEvaluationRequest { +public class TemplateMappingEvaluationRequest + extends FocalMappingEvaluationRequest { public TemplateMappingEvaluationRequest(@NotNull ObjectTemplateMappingType mapping, @NotNull ObjectTemplateType objectTemplate) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/policy/PolicyRuleProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/policy/PolicyRuleProcessor.java index d27ab038409..b577b7c4109 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/policy/PolicyRuleProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/projector/policy/PolicyRuleProcessor.java @@ -302,7 +302,7 @@ private void collectGlobalObjectRules(List void addGlobalPolicyRulesToAssignments(L continue; } EvaluatedPolicyRuleImpl evaluatedRule = new EvaluatedPolicyRuleImpl(globalPolicyRule.clone(), - target.getAssignmentPath().clone(), evaluatedAssignment, prismContext); + target.getAssignmentPath().clone(), evaluatedAssignment); boolean direct = target.isDirectlyAssigned(); if (direct) { evaluatedAssignment.addThisTargetPolicyRule(evaluatedRule); diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/tasks/scanner/FocusValidityScannerItemProcessor.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/tasks/scanner/FocusValidityScannerItemProcessor.java index dea2c7ea5b1..e57db8cbbdf 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/tasks/scanner/FocusValidityScannerItemProcessor.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/tasks/scanner/FocusValidityScannerItemProcessor.java @@ -14,13 +14,11 @@ import com.evolveum.midpoint.model.impl.lens.LensContext; import com.evolveum.midpoint.prism.PrismContext; import com.evolveum.midpoint.prism.PrismObject; -import com.evolveum.midpoint.prism.util.CloneUtil; import com.evolveum.midpoint.repo.api.PreconditionViolationException; import com.evolveum.midpoint.repo.common.task.ItemProcessingRequest; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; import com.evolveum.midpoint.task.api.RunningTask; -import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.util.LocalizableMessageBuilder; import com.evolveum.midpoint.util.exception.*; import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType; @@ -84,8 +82,7 @@ private void addTriggeredPolicyRuleToContext(PrismObject focus, LensC SchemaException, CommunicationException, ConfigurationException, SecurityViolationException { PrismContext prismContext = taskHandler.getPrismContext(); TimeValidityPolicyConstraintType constraint = taskExecution.getValidityConstraint(); - EvaluatedPolicyRuleImpl policyRule = new EvaluatedPolicyRuleImpl(workerTask.getPolicyRule(), - null, null, prismContext); + EvaluatedPolicyRuleImpl policyRule = new EvaluatedPolicyRuleImpl(workerTask.getPolicyRule(), null, null); policyRule.computeEnabledActions(null, focus, taskHandler.getExpressionFactory(), prismContext, workerTask, result); EvaluatedPolicyRuleTrigger evaluatedTrigger = new EvaluatedTimeValidityTrigger( Boolean.TRUE.equals(constraint.isAssignment()) ? PolicyConstraintKindType.ASSIGNMENT_TIME_VALIDITY : PolicyConstraintKindType.OBJECT_TIME_VALIDITY, diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAbstractAssignmentEvaluator.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAbstractAssignmentEvaluator.java index ca1ee678b43..d2f216121ac 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAbstractAssignmentEvaluator.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAbstractAssignmentEvaluator.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.model.impl.lens; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.*; import static com.evolveum.midpoint.prism.delta.PlusMinusZero.*; @@ -40,7 +42,6 @@ import com.evolveum.midpoint.model.impl.lens.assignments.AssignmentEvaluator; import com.evolveum.midpoint.model.impl.lens.assignments.EvaluatedAssignmentImpl; import com.evolveum.midpoint.model.impl.lens.construction.ResourceObjectConstruction; -import com.evolveum.midpoint.model.impl.lens.construction.EvaluatedResourceObjectConstructionImpl; import com.evolveum.midpoint.model.impl.lens.projector.AssignmentOrigin; import com.evolveum.midpoint.model.impl.lens.projector.ContextLoader; import com.evolveum.midpoint.model.impl.lens.projector.Projector; @@ -853,6 +854,8 @@ public void test400UserFred() throws Exception { assertEquals("Wrong # of evaluated assignments zero set", 0, triple.getZeroSet().size()); assertEquals("Wrong # of evaluated assignments plus set", 1, triple.getPlusSet().size()); assertEquals("Wrong # of evaluated assignments minus set", 1, triple.getMinusSet().size()); + + assertSerializable(lensContext); } protected void assertNoConstruction(EvaluatedAssignmentImpl evaluatedAssignment, diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor.java index 8da6e3a60c7..ea6fdc01fe1 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.model.impl.lens; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.*; import static com.evolveum.midpoint.prism.delta.PlusMinusZero.*; @@ -82,6 +84,8 @@ public void test001OutboundEmpty() throws Exception { assertNull(context.getFocusContext().getPrimaryDelta()); assertNull(context.getFocusContext().getSecondaryDelta()); assertTrue(context.getProjectionContexts().isEmpty()); + + assertSerializable(context); } @Test @@ -142,6 +146,7 @@ public void test002ModifyUser() throws Exception { assertMinusAttributeValues(zeroEvaluatedAccountConstruction, getDummyResourceController().getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_LOCATION_NAME), "Caribbean"); + assertSerializable(context); } @Test @@ -181,6 +186,8 @@ public void test011AddAssignmentAddAccountDirect() throws Exception { assertNoDecision(accContext); assertLegal(accContext); + + assertSerializable(context); } @Test @@ -249,6 +256,7 @@ public void test012AddAssignmentAddAccountDirectAssignmentWithAttrs() throws Exc assertNoMinusAttributeValues(plusAccountConstruction, getDummyResourceController().getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_LOCATION_NAME)); + assertSerializable(context); } @Test @@ -345,6 +353,8 @@ public void test021AddAssignmentModifyAccountAssignment() throws Exception { assertTrue("Legal variable for projection context is not true", accContext.isLegal()); assertTrue("Old assigned variable for projection context is not true", accContext.isAssignedOld()); assertTrue("Assigned variable for projection context is not true", accContext.isAssigned()); + + assertSerializable(context); } @Test @@ -427,6 +437,7 @@ public void test031DeleteAssignmentModifyAccount() throws Exception { assertNoMinusAttributeValues(minusAccountConstruction, getDummyResourceController().getAttributeQName(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_WEAPON_NAME)); + assertSerializable(context); } @Test @@ -473,6 +484,7 @@ public void test032ModifyUserLegalizeAccount() throws Exception { assertNoDecision(accContext); assertLegal(accContext); + assertSerializable(context); } @Test @@ -532,6 +544,8 @@ public void test100AddAssignmentWithConditionalMetarole() throws Exception { assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, ZERO, "Caribbean"); assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, PLUS); assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, MINUS); + + assertSerializable(context); } /** @@ -608,6 +622,8 @@ public void test102EnableConditionalMetarole() throws Exception { assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, ZERO); assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, PLUS); assertAttributeValues(accountConstructionDeltaSetTriple.getPlusSet(), LOCATION_QNAME, MINUS); + + assertSerializable(context); } /** @@ -663,6 +679,8 @@ public void test200AssignVisitor() throws Exception { assertEquals("Wrong # of focus policy rules", 0, evaluatedAssignment.getFocusPolicyRules().size()); Collection targetPolicyRules = evaluatedAssignment.getAllTargetsPolicyRules(); assertEquals("Wrong # of target policy rules", 2, targetPolicyRules.size()); + + assertSerializable(context); } /** @@ -717,6 +735,8 @@ public void test210AssignEngineer() throws Exception { assertEquals("Wrong # of this target policy rules", 2, evaluatedAssignment.getThisTargetPolicyRules().size()); Collection policyRules = evaluatedAssignment.getAllTargetsPolicyRules(); assertEquals("Wrong # of target policy rules", 5, policyRules.size()); + + assertSerializable(context); } private void assertAttributeValues(Collection> accountConstructions, QName attrName, PlusMinusZero attrSet, T... expectedValue) { @@ -740,25 +760,6 @@ private Set getAttributeValues(Collection Set getAttributeValues(Collection> accountConstructions, QName attrName, PlusMinusZero attributeSet) { -// Set retval = new HashSet<>(); -// for (PrismPropertyValue>> constructionPropVal : accountConstructions) { -// constructionPropVal.getValue().getEvaluatedConstructionTriple().foreach( evaluatedConstruction -> { -// MappingImpl, ? extends PrismPropertyDefinition> mapping = evaluatedConstruction.getAttributeMapping(attrName); -// if (mapping != null && mapping.getOutputTriple() != null) { -// Collection> values = (Collection) mapping.getOutputTriple().getSet(attributeSet); -// if (values != null) { -// for (PrismPropertyValue value : values) { -// retval.add(value.getValue()); -// } -// } -// } -// }); -// } -// return retval; -// } - - private EvaluatedAssignedResourceObjectConstructionImpl getSingleEvaluatedConstruction(ResourceObjectConstruction> construction) { DeltaSetTriple> evaluatedConstructionTriple = construction.getEvaluatedConstructionTriple(); assertEquals("Unexpected evaluatedConstructionTriple size", 1, evaluatedConstructionTriple.size()); diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor2.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor2.java index da882bb00a3..2dc446b530e 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor2.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestAssignmentProcessor2.java @@ -60,6 +60,8 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNull; @@ -215,6 +217,8 @@ public void test010AssignR1ToJack() throws Exception { "R4-0 R5-0 R6-0 R2-0 O3-0 MR2-1"); assertAuthorizations(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); assertGuiConfig(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); + + assertSerializable(context); } private void processAssignments(LensContext context, OperationResult result, Task task) @@ -277,6 +281,8 @@ public void test020AssignMR1ToR1() throws Exception { assertTargetPolicyRules(evaluatedAssignment, "MR1-0 MMR1-1", "MR3-0 MR4-0"); assertAuthorizations(evaluatedAssignment, "MR1 MR3 MR4"); assertGuiConfig(evaluatedAssignment, "MR1 MR3 MR4"); + + assertSerializable(context); } @Test(enabled = FIRST_PART) @@ -302,6 +308,8 @@ public void test030AssignR1ToJackProjectorDisabled() throws Exception { context.getFocusContext().getObjectNew().asObjectable().getParentOrgRef().size()); assertEquals("Wrong # of roleMembershipRef entries", 0, context.getFocusContext().getObjectNew().asObjectable().getRoleMembershipRef().size()); + + assertSerializable(context); } /** @@ -342,6 +350,8 @@ public void test040AssignR1ToJackAsApprover() throws Exception { assertTargetPolicyRules(evaluatedAssignment, "R1-0 MR1-1 MMR1-2 MR4-1 MR3-1", "R2-0 MR2-1 O3-0 R4-0 R5-0 R6-0"); assertAuthorizations(evaluatedAssignment, ""); assertGuiConfig(evaluatedAssignment, ""); + + assertSerializable(context); } /** @@ -421,6 +431,8 @@ public void test050JackDeputyOfBarbossa() throws Exception { ""); assertAuthorizations(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); assertGuiConfig(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); + + assertSerializable(context); } /** @@ -501,6 +513,8 @@ public void test060JackDeputyOfGuybrushDeputyOfBarbossa() throws Exception { "barbossa-0 R1-1 R2-1 MR2-2 O3-1 MR1-2 MR3-2 R5-1 R4-1 MMR1-3 MR4-2 R6-1"); assertAuthorizations(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); assertGuiConfig(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); + + assertSerializable(context); } // goes through assignmentEvaluator in order to employ login mode @@ -574,6 +588,8 @@ public void test062JackDeputyOfGuybrushDeputyOfBarbossaInLoginMode() throws Exce assertTargetPolicyRules(evaluatedAssignment, (String) null, null); assertAuthorizations(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); assertGuiConfig(evaluatedAssignment, "R1 R2 O3 R4 R5 R6"); + + assertSerializable(context); } /** @@ -650,6 +666,8 @@ public void test070JackDeputyOfBarbossaApproverOfR1() throws Exception { assertTargetPolicyRules(evaluatedAssignment, "barbossa-0", ""); assertAuthorizations(evaluatedAssignment, ""); assertGuiConfig(evaluatedAssignment, ""); + + assertSerializable(context); } @@ -723,6 +741,7 @@ public void test110AssignR1ToJack() throws Exception { assertAuthorizations(evaluatedAssignment, "R1"); assertGuiConfig(evaluatedAssignment, "R1"); + assertSerializable(context); } /** @@ -792,6 +811,7 @@ public void test160AssignR1ToJack() throws Exception { assertAuthorizations(evaluatedAssignment, "R1 R4"); assertGuiConfig(evaluatedAssignment, "R1 R4"); + assertSerializable(context); } /** @@ -873,6 +893,8 @@ public void test210AssignR1ToJack() throws Exception { assertTargetPolicyRules(evaluatedAssignment, "R1-0 MR1-1 MMR1-2", ""); assertAuthorizations(evaluatedAssignment, "R1"); assertGuiConfig(evaluatedAssignment, "R1"); + + assertSerializable(context); } /** @@ -1012,6 +1034,8 @@ public void test300AssignR7ToJack() throws Exception { "R8-0 R9-0 R9-0 MR8-1 MR9-1 MMR7-2"); assertAuthorizations(evaluatedAssignment, "R7 R8 R9"); assertGuiConfig(evaluatedAssignment, "R7 R8 R9"); + + assertSerializable(context); } /** @@ -1279,6 +1303,8 @@ public void test400AssignJackPirate() throws Exception { .assertThisObject("Human") .assertImmediateRole("MetarolePerson") .assertAssignmentPath(6); + + assertSerializable(context); } private void dump(String runName, int index) { @@ -1541,6 +1567,8 @@ public void test500AssignJackOrg11() throws Exception { "Admin-0"); assertAuthorizations(evaluatedAssignment, "org11 Admin"); assertGuiConfig(evaluatedAssignment, "org11 Admin"); + + assertSerializable(context); } /** @@ -1597,6 +1625,8 @@ public void test505AssignJackOrg11AsManager() throws Exception { "Admin-0"); assertAuthorizations(evaluatedAssignment, "org11 Admin"); assertGuiConfig(evaluatedAssignment, "org11 Admin"); + + assertSerializable(context); } /** @@ -1651,6 +1681,8 @@ public void test507AssignJackOrg11AsApprover() throws Exception { "Admin-0"); assertAuthorizations(evaluatedAssignment, ""); assertGuiConfig(evaluatedAssignment, ""); + + assertSerializable(context); } /** @@ -1707,6 +1739,8 @@ public void test510AssignJackOrg21() throws Exception { ""); assertAuthorizations(evaluatedAssignment, "org21"); assertGuiConfig(evaluatedAssignment, "org21"); + + assertSerializable(context); } /** @@ -1760,6 +1794,8 @@ public void test515AssignJackOrg21AsManager() throws Exception { "Admin-0"); assertAuthorizations(evaluatedAssignment, "org21 Admin"); assertGuiConfig(evaluatedAssignment, "org21 Admin"); + + assertSerializable(context); } /** @@ -1827,6 +1863,8 @@ public void test520AssignJackOrg41AsApprover() throws Exception { ""); assertAuthorizations(evaluatedAssignment, "Admin"); assertGuiConfig(evaluatedAssignment, "Admin"); + + assertSerializable(context); } /** @@ -1900,6 +1938,8 @@ public void test600AssignA1ToJack() throws Exception { "A8-0"); // a bit questionable but seems OK assertAuthorizations(evaluatedAssignment, ""); assertGuiConfig(evaluatedAssignment, ""); + + assertSerializable(context); } //region ============================================================= helper methods (preparing scenarios) diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules.java index 77ee7effe9e..2d147be9121 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules.java @@ -37,6 +37,8 @@ import java.util.List; import java.util.Locale; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.*; /** @@ -106,6 +108,8 @@ public void test005JackAttemptAssignRoleJudge() throws Exception { assertTargetTriggers(context, PolicyConstraintKindType.OBJECT_STATE, 2); assertTargetTriggers(context, PolicyConstraintKindType.ASSIGNMENT_MODIFICATION, 4); assertTargetTriggers(context, null, 6); + + assertSerializable(context); } @Test(enabled = false) @@ -139,8 +143,9 @@ public void test007JackAttemptAssignRoleJudgeAsOwner() throws Exception { assertEvaluatedTargetPolicyRules(context, 4); assertTargetTriggers(context, PolicyConstraintKindType.ASSIGNMENT_MODIFICATION, 0); - } + assertSerializable(context); + } /** * Mostly preparation for other tests. But good check for no exclusion conflict. @@ -200,8 +205,9 @@ public void test020JackUnassignRoleJudge() throws Exception { assertEvaluatedTargetPolicyRules(context, 7); assertTargetTriggers(context, PolicyConstraintKindType.ASSIGNMENT_MODIFICATION, 2); assertTargetTriggers(context, null, 2); - } + assertSerializable(context); + } /** * No exclusion here. The assignment should go smoothly. @@ -237,6 +243,8 @@ public void test100AssignRoleMutineerToJack() throws Exception { dumpPolicySituations(context); assertEvaluatedTargetPolicyRules(context, 7); assertTargetTriggers(context, null, 0); + + assertSerializable(context); } @Test(enabled = false) // after MID-4797 the projector.project now raises PolicyViolationException on conflicting roles @@ -272,6 +280,8 @@ public void test110AssignRolePirateToJack() throws Exception { EvaluatedExclusionTrigger trigger = (EvaluatedExclusionTrigger) assertTriggeredTargetPolicyRule(context, null, PolicyConstraintKindType.EXCLUSION, 1, true); assertNotNull("No conflicting assignment in trigger", trigger.getConflictingAssignment()); assertEquals("Wrong conflicting assignment in trigger", ROLE_PIRATE_OID, trigger.getConflictingAssignment().getTarget().getOid()); + + assertSerializable(context); } /** @@ -319,6 +329,8 @@ public void test112AssignRolePirateWithExceptionToJack() throws Exception { assertEquals("Wrong number of exceptions", 1, exceptions.size()); PolicyExceptionType policyException = exceptions.iterator().next(); assertEquals("Wrong rule name in policy exception", ROLE_JUDGE_POLICY_RULE_EXCLUSION_NAME, policyException.getRuleName()); + + assertSerializable(context); } @Test @@ -367,6 +379,8 @@ public void test120AssignRoleConstableToJack() throws Exception { PrismAsserts.assertPropertyDelete(accountSecondaryDelta, getDummyResourceController().getAttributePath(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME), "Honorable Justice"); + + assertSerializable(context); } /** @@ -417,6 +431,8 @@ public void test150AssignRoleThiefToJack() throws Exception { EvaluatedExclusionTrigger sourceTrigger = (EvaluatedExclusionTrigger) sourceRule.getTriggers().iterator().next(); assertNotNull("No conflicting assignment in source trigger", sourceTrigger.getConflictingAssignment()); assertEquals("Wrong conflicting assignment in source trigger", ROLE_JUDGE_OID, sourceTrigger.getConflictingAssignment().getTarget().getOid()); + + assertSerializable(context); } /** @@ -482,6 +498,8 @@ public void test210AssignRoleEmployeeToJack() throws Exception { EvaluatedExclusionTrigger trigger = (EvaluatedExclusionTrigger) assertTriggeredTargetPolicyRule(context, ROLE_CORP_EMPLOYEE_OID, PolicyConstraintKindType.EXCLUSION, 1, false); assertNotNull("No conflicting assignment in trigger", trigger.getConflictingAssignment()); assertEquals("Wrong conflicting assignment in trigger", ROLE_CORP_CONTRACTOR_OID, trigger.getConflictingAssignment().getTarget().getOid()); + + assertSerializable(context); } /** @@ -541,6 +559,8 @@ public void test220AssignRoleEngineerToJack() throws Exception { displayDumpable("Contractor: conflictingPath", contractorTrigger.getConflictingPath()); assertAssignmentPath(contractorRule.getAssignmentPath(), ROLE_CORP_CONTRACTOR_OID, null); assertAssignmentPath(contractorTrigger.getConflictingPath(), ROLE_CORP_ENGINEER_OID, ROLE_CORP_EMPLOYEE_OID); + + assertSerializable(context); } /** @@ -641,6 +661,8 @@ public void test400AssignRoleLocalized() throws Exception { System.out.println("Trigger message translated (SK): " + messageSk); assertEquals("Wrong US message", messageUs, "Assignment of role \"Localized role\" (relation default) is to be added"); assertEquals("Wrong SK message", messageSk, "Priradenie pre rola \"Lokalizovana rola\" (vztah default) ma byt pridane"); + + assertSerializable(context); } private ObjectDelta assertAssignAccountToJack(LensContext context) { diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules2.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules2.java index 351eb4d6d03..ae8226f149f 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules2.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestPolicyRules2.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.model.impl.lens; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; @@ -161,6 +163,8 @@ public void test100JackAttemptAssignRoleStudent() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 2); + + assertSerializable(context); } /** @@ -203,6 +207,8 @@ public void test110JoeAttemptAssignRoleStudent() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 4); + + assertSerializable(context); } /** @@ -250,6 +256,8 @@ public void test120JackAttemptToMoveTo1900AndAssignRoleStudent() throws Exceptio assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } /** @@ -300,6 +308,8 @@ public void test130JackMoveTo1900AndAssignRoleStudent() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } @Test @@ -344,6 +354,8 @@ public void test135JackChangeValidTo() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } @Test @@ -382,6 +394,8 @@ public void test140JackNoChange() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } @Test @@ -439,6 +453,8 @@ public void test142JackNoChangeButTaskExists() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } @Test @@ -484,6 +500,8 @@ public void test150FrankAttemptToAssignRoleStudentButDisabled() throws Exception assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 3); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 2); + + assertSerializable(context); } @Test @@ -521,6 +539,8 @@ public void test160AttemptToAddPeter() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.HAS_ASSIGNMENT, 4); assertFocusTriggers(context, PolicyConstraintKindType.HAS_NO_ASSIGNMENT, 1); assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, 3); + + assertSerializable(context); } @Test @@ -562,6 +582,8 @@ public void test170AddPeter() throws Exception { assertFocusTriggers(context, PolicyConstraintKindType.TRANSITION, "cc-from-1900-false-true", "has-student-assignment-false-true", "has-student-assignment-false-any"); + + assertSerializable(context); } /** @@ -598,6 +620,8 @@ public void test180StudentRecompute() throws Exception { assertEvaluatedFocusPolicyRules(context, 5); assertFocusTriggers(context, null, 2); assertFocusTriggers(context, PolicyConstraintKindType.OBJECT_STATE, 2); + + assertSerializable(context); } @Test @@ -624,6 +648,8 @@ public void test200AddUnresolvable() throws Exception { fail("Exception message was not as expected: " + e.getMessage()); } } + + assertSerializable(context); } @Test @@ -651,6 +677,8 @@ public void test210AddCyclic() throws Exception { fail("Exception message was not as expected: " + e.getMessage()); } } + + assertSerializable(context); } @Test @@ -708,6 +736,8 @@ public void test220AddChained() throws Exception { PolicyConstraintsType pc4 = rule4.getPolicyConstraints(); assertEquals(1, pc4.getModification().size()); assertEquals("mod-inducement", pc4.getModification().get(0).getName()); + + assertSerializable(context); } @Test @@ -735,6 +765,8 @@ public void test230AddAmbiguous() throws Exception { fail("Exception message was not as expected: " + e.getMessage()); } } + + assertSerializable(context); } // MID-4270 @@ -766,6 +798,8 @@ public void test300ModifyInducement() throws Exception { fail("Exception message was not as expected: " + getTranslatedMessage(e)); } } + + assertSerializable(context); } // MID-4270 @@ -790,6 +824,8 @@ public void test310ModifyInducementPass() throws Exception { then(); result.computeStatus(); assertSuccess("unexpected failure", result); + + assertSerializable(context); } // MID-4270 @@ -814,6 +850,8 @@ public void test320ModifyInducementPass2() throws Exception { then(); result.computeStatus(); assertSuccess("unexpected failure", result); + + assertSerializable(context); } // MID-4270 @@ -845,6 +883,8 @@ public void test330AddInducement() throws Exception { fail("Exception message was not as expected: " + getTranslatedMessage(e)); } } + + assertSerializable(context); } // MID-4270 @@ -876,6 +916,7 @@ public void test340AddInducementViaExpression() throws Exception { fail("Exception message was not as expected: " + getTranslatedMessage(e)); } } - } + assertSerializable(context); + } } diff --git a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java index 3b638466674..2b720aac51a 100644 --- a/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java +++ b/model/model-impl/src/test/java/com/evolveum/midpoint/model/impl/lens/TestProjector.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.model.impl.lens; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static org.testng.AssertJUnit.*; import static com.evolveum.midpoint.schema.constants.SchemaConstants.PATH_ACTIVATION_ADMINISTRATIVE_STATUS; @@ -219,6 +221,8 @@ public void test100AddAccountToJackDirect() throws Exception { getDummyResourceController().getAttributeFullnameQName(), "Jack Sparrow"); IntegrationTestTools.assertAttribute(accountNew, getDummyResourceController().getAttributeWeaponQName(), "mouth", "pistol"); + + assertSerializable(context); } @Test @@ -242,6 +246,8 @@ public void test110AssignAccountToJack() throws Exception { // THEN assertAssignAccountToJack(context); + + assertSerializable(context); } /** @@ -271,6 +277,8 @@ public void test111AssignAccountToJackBroken() throws Exception { // THEN assertAssignAccountToJack(context); + + assertSerializable(context); } private void assertAssignAccountToJack(LensContext context) { @@ -349,6 +357,7 @@ public void test250ModifyUserBarbossaLocality() throws Exception { PrismAsserts.assertOrigin(accountSecondaryDelta, OriginType.ASSIGNMENTS, OriginType.OUTBOUND); + assertSerializable(context); } /** @@ -398,6 +407,8 @@ public void test251ModifyUserBarbossaFullname() throws Exception { PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(getFullNameAttributePath()), OriginType.OUTBOUND); PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(getWeaponAttributePath()), OriginType.ASSIGNMENTS); + + assertSerializable(context); } /** @@ -458,6 +469,8 @@ public void test254ModifyUserBarbossaDisable() throws Exception { XMLGregorianCalendar end = clock.currentTimeXMLGregorianCalendar(); end.add(XmlTypeConverter.createDuration(true, 0, 0, 35, 0, 0, 0)); TestUtil.assertBetween("Wrong trigger timestamp", start, end, triggerType.getTimestamp()); + + assertSerializable(context); } /** @@ -509,6 +522,8 @@ public void test255ModifyUserBarbossaAssignment() throws Exception { PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(getQuoteAttributePath()), OriginType.ASSIGNMENTS); PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(ShadowType.F_ITERATION), OriginType.OUTBOUND); PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(ShadowType.F_ITERATION_TOKEN), OriginType.OUTBOUND); + + assertSerializable(context); } /** @@ -541,6 +556,8 @@ public void test260ModifyAccountBarbossaDrinkReplace() throws Exception { // THEN then(); assertPartialError(result); + + assertSerializable(context); } /** @@ -601,6 +618,8 @@ public void test261ModifyAccountBarbossaQuoteReplace() throws Exception { PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(getWeaponAttributePath()), OriginType.ASSIGNMENTS); PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(ShadowType.F_ITERATION), OriginType.OUTBOUND); PrismAsserts.assertOrigin(accountSecondaryDelta.findItemDelta(ShadowType.F_ITERATION_TOKEN), OriginType.OUTBOUND); + + assertSerializable(context); } /** @@ -637,6 +656,7 @@ public void test269DeleteBarbossaDummyAccount() throws Exception { displayExpectedException(e); } + assertSerializable(context); } @Test @@ -680,6 +700,8 @@ public void test270AddUserBarbossaAssignmentBrethren() throws Exception { assertEquals(ChangeType.MODIFY, accountSecondaryDelta.getChangeType()); // iteration & iterationToken & sword assertEquals("Unexpected number of account secondary changes", 3, accountSecondaryDelta.getModifications().size()); + + assertSerializable(context); } @Test @@ -725,6 +747,8 @@ public void test275DeleteUserBarbossaAssignmentBrethren() throws Exception { LensProjectionContext accContext = accountContexts.iterator().next(); assertNull(accContext.getPrimaryDelta()); assertEquals(SynchronizationPolicyDecision.KEEP, accContext.getSynchronizationPolicyDecision()); + + assertSerializable(context); } @Test @@ -770,6 +794,8 @@ public void test280AddUserBarbossaAssignmentMutineer() throws Exception { getDummyResourceController().getAttributePath(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_TITLE_NAME), "Damned mutineer"); PrismAsserts.assertOrigin(accountSecondaryDelta, OriginType.ASSIGNMENTS); + + assertSerializable(context); } @Test @@ -816,6 +842,8 @@ public void test301AssignConflictingAccountToJack() throws Exception { assertEquals(ChangeType.MODIFY, accountSecondaryDelta.getChangeType()); PrismAsserts.assertPropertyReplace(accountSecondaryDelta, getDummyResourceController().getAttributeFullnamePath(), "Jack Sparrow"); + + assertSerializable(context); } @Test @@ -871,6 +899,8 @@ public void test400ImportHermanDummy() throws Exception { } } assertOriginWithSideEffectChanges(userSecondaryDelta, OriginType.INBOUND); + + assertSerializable(context); } @Test @@ -915,6 +945,8 @@ public void test401ImportHermanDummy() throws Exception { assertEquals("Unexpected number of account secondary changes", 2, accountSecondaryDelta.getModifications().size()); assertOriginWithSideEffectChanges(userSecondaryDelta, OriginType.INBOUND); + + assertSerializable(context); } @Test @@ -947,6 +979,8 @@ public void test450GuybrushInboundFromDelta() throws Exception { PrismAsserts.assertPropertyAdd(userSecondaryDelta, UserType.F_ORGANIZATIONAL_UNIT, PrismTestUtil.createPolyString("The crew of Black Pearl")); assertOriginWithSideEffectChanges(userSecondaryDelta, OriginType.INBOUND); + + assertSerializable(context); } @Test @@ -985,6 +1019,8 @@ public void test451GuybrushInboundFromAbsolute() throws Exception { PrismAsserts.assertPropertyAdd(userSecondaryDelta, UserType.F_ORGANIZATIONAL_UNIT, PrismTestUtil.createPolyString("The crew of The Sea Monkey")); assertOriginWithSideEffectChanges(userSecondaryDelta, OriginType.INBOUND); + + assertSerializable(context); } @Test @@ -1044,6 +1080,8 @@ public void test500ReconcileGuybrushDummy() throws Exception { // now the value is applied by the IvwoConsolidator, not waiting for the reconciliation PrismAsserts.assertOrigin(locationDelta, OriginType.OUTBOUND); + + assertSerializable(context); } /** @@ -1085,6 +1123,8 @@ public void test600AddLargo() throws Exception { PrismTestUtil.createPolyString("Largo LaGrande")); PrismAsserts.assertPropertyReplace(userSecondaryDelta, UserType.F_NICK_NAME, PrismTestUtil.createPolyString("Largo LaGrande")); // MID-2149 + + assertSerializable(context); } private void assertNoJackShadow() throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, ExpressionEvaluationException { diff --git a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java index 3caed98d5e9..b66326e36e7 100644 --- a/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java +++ b/model/model-intest/src/test/java/com/evolveum/midpoint/model/intest/TestPreviewChanges.java @@ -6,6 +6,8 @@ */ package com.evolveum.midpoint.model.intest; +import static com.evolveum.midpoint.test.util.MidPointAsserts.assertSerializable; + import static java.util.Collections.singleton; import static org.testng.AssertJUnit.*; @@ -57,13 +59,13 @@ public class TestPreviewChanges extends AbstractInitializedModelIntegrationTest public static final File TEST_DIR = new File("src/test/resources/preview"); // LEMON dummy resource has a STRICT dependency on default dummy resource - protected static final File RESOURCE_DUMMY_LEMON_FILE = new File(TEST_DIR, "resource-dummy-lemon.xml"); + private static final File RESOURCE_DUMMY_LEMON_FILE = new File(TEST_DIR, "resource-dummy-lemon.xml"); protected static final String RESOURCE_DUMMY_LEMON_OID = "10000000-0000-0000-0000-000000000504"; - protected static final String RESOURCE_DUMMY_LEMON_NAME = "lemon"; + private static final String RESOURCE_DUMMY_LEMON_NAME = "lemon"; - static final File USER_ROGERS_FILE = new File(TEST_DIR, "user-rogers.xml"); - static final File ACCOUNT_ROGERS_DUMMY_DEFAULT_FILE = new File(TEST_DIR, "account-rogers-dummy-default.xml"); - static final File ACCOUNT_ROGERS_DUMMY_LEMON_FILE = new File(TEST_DIR, "account-rogers-dummy-lemon.xml"); + private static final File USER_ROGERS_FILE = new File(TEST_DIR, "user-rogers.xml"); + private static final File ACCOUNT_ROGERS_DUMMY_DEFAULT_FILE = new File(TEST_DIR, "account-rogers-dummy-default.xml"); + private static final File ACCOUNT_ROGERS_DUMMY_LEMON_FILE = new File(TEST_DIR, "account-rogers-dummy-lemon.xml"); private String accountGuybrushOid; @@ -107,25 +109,17 @@ public void test100ModifyUserAddAccountBundle() throws Exception { public void test101ModifyUserAddAccountNoAttributesBundle() throws Exception { assumeAssignmentPolicy(AssignmentPolicyEnforcementType.NONE); - ObjectSource> accountSource = new ObjectSource>() { - @Override - public PrismObject get() { - try { - PrismObject account = PrismTestUtil.parseObject(ACCOUNT_JACK_DUMMY_FILE); - account.removeContainer(ShadowType.F_ATTRIBUTES); - return account; - } catch (SchemaException | IOException e) { - throw new IllegalStateException(e.getMessage(), e); - } + ObjectSource> accountSource = () -> { + try { + PrismObject account = PrismTestUtil.parseObject(ACCOUNT_JACK_DUMMY_FILE); + account.removeContainer(ShadowType.F_ATTRIBUTES); + return account; + } catch (SchemaException | IOException e) { + throw new IllegalStateException(e.getMessage(), e); } }; - ObjectChecker> checker = new ObjectChecker>() { - @Override - public void check(ModelContext modelContext) { - assertAddAccount(modelContext, true); - } - }; + ObjectChecker> checker = modelContext -> assertAddAccount(modelContext, true); modifyUserAddAccountImplicit(accountSource, checker); modifyUserAddAccountExplicit(accountSource, checker); @@ -338,6 +332,8 @@ private void doPreviewFail( private void assertAddAccount(ModelContext modelContext, boolean expectFullNameDelta) { assertNotNull("Null model context", modelContext); + assertSerializable(modelContext); + ModelElementContext focusContext = modelContext.getFocusContext(); assertNotNull("Null model focus context", focusContext); assertNull("Unexpected focus primary delta: " + focusContext.getPrimaryDelta(), focusContext.getPrimaryDelta()); @@ -400,6 +396,8 @@ public void test130GetCompiledGuiProfile() throws Exception { assertEquals("Bad link targetUrl", "/foo", link.getTargetUrl()); assertEquals("Bad timezone targetUrl", "Jamaica", compiledGuiProfile.getDefaultTimezone()); + + assertSerializable(compiledGuiProfile); } @Test @@ -469,6 +467,7 @@ public void test200ModifyUserGuybrushDeleteAccount() throws Exception { ObjectDelta accountPrimaryDelta = accContext.getPrimaryDelta(); assertEquals(ChangeType.DELETE, accountPrimaryDelta.getChangeType()); + assertSerializable(modelContext); } @Test @@ -517,6 +516,8 @@ public void test210GuybrushAddAccount() throws Exception { ObjectDelta accountSecondaryDelta = accContext.getSecondaryDelta(); PrismAsserts.assertModifications(accountSecondaryDelta, 1); + + assertSerializable(modelContext); } @Test @@ -568,6 +569,8 @@ public void test212ModifyUserAddAccountRef() throws Exception { dummyResourceCtl.getAttributePath(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_DRINK_NAME), "rum"); PrismAsserts.assertPropertyAdd(accountSecondaryDelta, dummyResourceCtl.getAttributePath(DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_QUOTE_NAME), "Arr!"); + + assertSerializable(modelContext); } /** @@ -593,6 +596,7 @@ public void test220PreviewJackAssignRolePirate() throws Exception { assertSuccess(result); assertPreviewJackAssignRolePirate(modelContext); + assertSerializable(modelContext); } /** @@ -622,6 +626,7 @@ public void test221PreviewJackAssignRolePirateReconcile() throws Exception { assertSuccess(result); assertPreviewJackAssignRolePirate(modelContext); + assertSerializable(modelContext); } private void assertPreviewJackAssignRolePirate(ModelContext modelContext) { @@ -775,6 +780,7 @@ public void test231PreviewGuybrushModifyAccountFullName() throws Exception { new String[] { "Mighty Pirate Guybrush Threepwood" }); // replace PrismAsserts.assertModifications(accContext.getPrimaryDelta(), 1); + assertSerializable(modelContext); } /** @@ -826,6 +832,7 @@ public void test232PreviewGuybrushModifyAccountShip() throws Exception { new String[] { "The Mad Monkey" }); // replace PrismAsserts.assertModifications(accContext.getPrimaryDelta(), 1); + assertSerializable(modelContext); } /** @@ -890,6 +897,7 @@ public void test233PreviewGuybrushAddRolePirate() throws Exception { null); // replace PrismAsserts.assertModifications(accountSecondaryDelta, 3); + assertSerializable(modelContext); } /** @@ -956,6 +964,7 @@ public void test234PreviewGuybrushAddRolePirateRecon() throws Exception { null); // replace PrismAsserts.assertModifications(accountSecondaryDelta, 3); + assertSerializable(modelContext); } /** @@ -1007,6 +1016,7 @@ public void test236PreviewGuybrushAddRoleSailor() throws Exception { null); // replace PrismAsserts.assertModifications(accountSecondaryDelta, 1); + assertSerializable(modelContext); } /** @@ -1045,6 +1055,7 @@ public void test238PreviewGuybrushAddRoleSailorOwner() throws Exception { EvaluatedAssignment evaluatedAssignment = evaluatedAssignmentTriple.getPlusSet().iterator().next(); assertNotNull("Target of evaluated assignment is null", evaluatedAssignment.getTarget()); assertEquals("Wrong # of zero-set roles in evaluated assignment", 1, evaluatedAssignment.getRoles().getZeroSet().size()); + assertSerializable(modelContext); } @Test @@ -1156,6 +1167,7 @@ public void test242PreviewGuybrushAddRolePirateRelative() throws Exception { null); // replace PrismAsserts.assertModifications(accountSecondaryDelta, 3); + assertSerializable(modelContext); } /** @@ -1221,6 +1233,7 @@ public void test244PreviewGuybrushAddRolePirateRelativeRecon() throws Exception null); // replace PrismAsserts.assertModifications(accountSecondaryDelta, 3); + assertSerializable(modelContext); } @Test @@ -1242,6 +1255,7 @@ public void test249GuybrushUnAssignAccountDummyRelative() throws Exception { assertNoDummyAccount(RESOURCE_DUMMY_RELATIVE_NAME, USER_GUYBRUSH_USERNAME); } + @SuppressWarnings("SameParameterValue") private void assertAccountDefaultDummyAttributeModify(ObjectDelta accountDelta, String attrName, T[] expectedOldValues, T[] expectedAddValues, T[] expectedDeleteValues, T[] expectedReplaceValues) { @@ -1249,6 +1263,7 @@ private void assertAccountDefaultDummyAttributeModify(ObjectDelta void assertAccountDummyAttributeModify(ObjectDelta accountDelta, String dummyName, String attrName, T[] expectedOldValues, T[] expectedAddValues, T[] expectedDeleteValues, T[] expectedReplaceValues) { @@ -1319,6 +1334,7 @@ ACCOUNT_SHADOW_ELAINE_DUMMY_OID, getDummyResourceObject(), DummyResourceContolle ObjectDelta accountSecondaryDelta = accContext.getSecondaryDelta(); assertNull("Unexpected account secondary delta: " + accountSecondaryDelta, accountSecondaryDelta); + assertSerializable(modelContext); } /** @@ -1374,6 +1390,7 @@ public void test301ModifyElaineAccountDummyDeleteAdd() throws Exception { ObjectDelta accountSecondaryDelta = accContext.getSecondaryDelta(); assertNull("Unexpected account secondary delta: " + accountSecondaryDelta, accountSecondaryDelta); + assertSerializable(modelContext); } /** @@ -1402,6 +1419,7 @@ ACCOUNT_SHADOW_ELAINE_DUMMY_RED_OID, getDummyResourceObject(RESOURCE_DUMMY_RED_N then(); displayDumpable("Preview context", modelContext); assertPartialError(result); + assertSerializable(modelContext); } /** @@ -1432,6 +1450,7 @@ public void test401ModifyElaineAccountDummyRedDeleteAdd() throws Exception { // THEN then(); assertPartialError(result); + assertSerializable(modelContext); } // the test5xx is testing mappings with blue dummy resource. It has WEAK mappings. @@ -1487,6 +1506,7 @@ ACCOUNT_SHADOW_ELAINE_DUMMY_BLUE_OID, getDummyResourceObject(RESOURCE_DUMMY_BLUE ObjectDelta accountSecondaryDelta = accContext.getSecondaryDelta(); assertNull("Unexpected account secondary delta: " + accountSecondaryDelta, accountSecondaryDelta); + assertSerializable(modelContext); } /** @@ -1547,6 +1567,7 @@ public void test501ModifyElaineAccountDummyBlueDeleteAdd() throws Exception { ObjectDelta accountSecondaryDelta = accContext.getSecondaryDelta(); assertNull("Unexpected account secondary delta: " + accountSecondaryDelta, accountSecondaryDelta); + assertSerializable(modelContext); } /** @@ -1637,6 +1658,7 @@ public void test600ModifyElaineUserDummyReplace() throws Exception { PrismAsserts.assertPropertyDelete(accountSecondaryDelta, getAttributePath(getDummyResourceObject(RESOURCE_DUMMY_BLUE_NAME), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_QUOTE_NAME), "null -- Elaine Marley"); + assertSerializable(modelContext); } /** @@ -1654,10 +1676,6 @@ public void test610ModifyElaineUserAccountDummyReplace() throws Exception { ObjectDelta accountDelta = createModifyAccountShadowReplaceAttributeDelta( ACCOUNT_SHADOW_ELAINE_DUMMY_OID, getDummyResourceObject(), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME, "Elaine LeChuck"); - // Cannot change the attribute on RED resource. It would conflict with the strong mapping and therefore fail. -// ObjectDelta accountDeltaRed = createModifyAccountShadowReplaceAttributeDelta( -// ACCOUNT_SHADOW_ELAINE_DUMMY_RED_OID, resourceDummyRed, -// DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME, "Elaine LeChuck"); ObjectDelta accountDeltaBlue = createModifyAccountShadowReplaceAttributeDelta( ACCOUNT_SHADOW_ELAINE_DUMMY_BLUE_OID, getDummyResourceObject(RESOURCE_DUMMY_BLUE_NAME), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME, "Elaine LeChuck"); @@ -1741,6 +1759,7 @@ ACCOUNT_SHADOW_ELAINE_DUMMY_BLUE_OID, getDummyResourceObject(RESOURCE_DUMMY_BLUE PrismAsserts.assertPropertyDelete(accountSecondaryDelta, getAttributePath(getDummyResourceObject(RESOURCE_DUMMY_BLUE_NAME), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_QUOTE_NAME), "null -- Elaine Marley"); + assertSerializable(modelContext); } @Test @@ -1828,6 +1847,7 @@ public void test620AddUserCapsize() throws Exception { PrismAsserts.assertNoItemDelta(accountSecondaryDelta, getAttributePath(getDummyResourceObject(RESOURCE_DUMMY_BLUE_NAME), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_FULLNAME_NAME)); assertPasswordDelta(accountSecondaryDelta); + assertSerializable(modelContext); } // testing multiple resources with dependencies (dummy -> dummy lemon) @@ -1918,6 +1938,7 @@ public void test630AddUserRogers() throws Exception { PrismAsserts.assertPropertyReplace(accountSecondaryDelta, getAttributePath(getDummyResourceObject(RESOURCE_DUMMY_LEMON_NAME), DummyResourceContoller.DUMMY_ACCOUNT_ATTRIBUTE_WATER_NAME), "pirate Rum Rogers Sr. drinks only rum!"); + assertSerializable(modelContext); } // The 7xx tests try to do various non-common cases @@ -1995,6 +2016,7 @@ public void test700DisableElaineAccountTwoResources() throws Exception { accountSecondaryDeltaBlue.findPropertyDelta(PATH_ACTIVATION_DISABLE_TIMESTAMP)); PrismAsserts.assertPropertyReplace(accountSecondaryDeltaBlue, SchemaConstants.PATH_ACTIVATION_DISABLE_REASON, SchemaConstants.MODEL_DISABLE_REASON_EXPLICIT); + assertSerializable(modelContext); } /** @@ -2034,6 +2056,6 @@ public void test710PreviewGuybrushHavingRoleSailorOwner() throws Exception { EvaluatedAssignment evaluatedAssignment = evaluatedAssignmentTriple.getZeroSet().iterator().next(); assertNotNull("Target of evaluated assignment is null", evaluatedAssignment.getTarget()); assertEquals("Wrong # of zero-set roles in evaluated assignment", 1, evaluatedAssignment.getRoles().getZeroSet().size()); + assertSerializable(modelContext); } - }