Skip to content

Commit

Permalink
Merge remote-tracking branch 'refs/remotes/origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Sep 6, 2023
2 parents 94765a6 + 7f6c5fd commit 903f91d
Show file tree
Hide file tree
Showing 33 changed files with 486 additions and 66 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.impl.util.GuiImplUtil;
import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.model.api.authentication.GuiProfileCompilable;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import com.evolveum.midpoint.repo.common.ObjectOperationPolicyHelper;

import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.result.OperationResultStatus;

import com.evolveum.midpoint.security.api.SecurityContextManager.ResultAwareCheckedProducer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory;
import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.ModelInteractionService;
import com.evolveum.midpoint.model.api.ModelService;
import com.evolveum.midpoint.model.api.authentication.CompiledGuiProfile;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.ModelServiceLocator;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public PageEmailNonce() {

private boolean alreadyHasNonce() {
UserType user = searchUser();
if (user.getCredentials() == null) {
if (user == null || user.getCredentials() == null) {
return false;
}
NonceType nonceType = user.getCredentials().getNonce();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import java.util.Locale;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.authentication.api.util.AuthUtil;

import com.evolveum.midpoint.model.api.correlation.CorrelationService;
Expand All @@ -25,9 +25,6 @@

import org.apache.wicket.Component;
import org.apache.wicket.Page;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.behavior.AbstractAjaxBehavior;
import org.apache.wicket.behavior.Behavior;
//import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
import org.apache.wicket.util.tester.WicketTester;
import org.jetbrains.annotations.NotNull;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import com.evolveum.midpoint.gui.api.factory.wrapper.PrismObjectWrapperFactory;
import com.evolveum.midpoint.gui.api.factory.wrapper.WrapperContext;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.correlation.CorrelationService;
import com.evolveum.midpoint.model.api.simulation.SimulationResultManager;
import com.evolveum.midpoint.prism.Item;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/*
* Copyright (c) 2021 Evolveum and contributors
* Copyright (C) 2010-2023 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;
package com.evolveum.midpoint.schema.merger;

import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismObject;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
/*
* Copyright (c) 2021 Evolveum and contributors
* Copyright (C) 2010-2023 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.impl.controller;
package com.evolveum.midpoint.schema.merger;

import java.util.ArrayList;
import java.util.Collections;
Expand All @@ -28,7 +28,6 @@
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Controller;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.util.CloneUtil;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ static Map<Class<?>, Supplier<ItemMerger>> createStandardTypeSpecificMergersMap(
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(SynchronizationReactionType.F_NAME))),
entry(
AbstractSynchronizationActionType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(AbstractSynchronizationActionType.F_NAME)))
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(AbstractSynchronizationActionType.F_NAME))),
entry(
LookupTableRowType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(LookupTableRowType.F_KEY)))
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* Copyright (C) 2010-2023 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.schema.merger.object;

import com.evolveum.midpoint.schema.merger.BaseMergeOperation;
import com.evolveum.midpoint.schema.merger.GenericItemMerger;
import com.evolveum.midpoint.schema.merger.OriginMarker;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SecurityPolicyType;

import org.jetbrains.annotations.NotNull;

import java.util.Map;

public class LookupTableMergeOperation extends BaseMergeOperation<LookupTableType> {

public LookupTableMergeOperation(
@NotNull LookupTableType target,
@NotNull LookupTableType source) {

super(target,
source,
new GenericItemMerger(
OriginMarker.forOid(source.getOid(), SecurityPolicyType.COMPLEX_TYPE),
createPathMap(Map.of(

))));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/*
* Copyright (C) 2010-2023 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.schema.merger;

import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.AbstractSchemaTest;
import com.evolveum.midpoint.schema.merger.object.LookupTableMergeOperation;

import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;

import org.assertj.core.api.Assertions;
import org.testng.annotations.Test;

import java.io.File;

import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext;

public class TestMerger extends AbstractSchemaTest {

private static final File TEST_ROOT_DIR = new File("./src/test/resources/merger");

@Test
public void testLookupTableMergeOperation() throws Exception {
PrismObject<LookupTableType> source = getPrismContext().parseObject(new File(TEST_ROOT_DIR, "lookup-table-source.xml"));
PrismObject<LookupTableType> target = getPrismContext().parseObject(new File(TEST_ROOT_DIR, "lookup-table-target.xml"));
PrismObject<LookupTableType> result = getPrismContext().parseObject(new File(TEST_ROOT_DIR, "lookup-table-result.xml"));

LookupTableMergeOperation operation = new LookupTableMergeOperation(target.asObjectable(), source.asObjectable());
operation.execute();

System.out.println("Merged object:\n" + target.debugDump());
// TODO

Assertions.assertThat(target)
.matches(t -> t.equivalent(result));
}
}
35 changes: 35 additions & 0 deletions infra/schema/src/test/resources/merger/lookup-table-result.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (C) 2010-2023 Evolveum and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<lookupTable oid="00000000-0000-0000-0000-000000000240"
xmlns='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>

<name>States</name>

<row id="1">
<key>open</key>
<label>Open</label>
</row>
<row id="2">
<key>closed</key>
<label>Closed</label>
</row>
<row id="3">
<key>executing</key>
<label>custom executing</label>
</row>
<row>
<key>created</key>
<label>Created</label>
</row>
<row>
<key>closing</key>
<label>Closing</label>
</row>

</lookupTable>
32 changes: 32 additions & 0 deletions infra/schema/src/test/resources/merger/lookup-table-source.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2017 Evolveum, AMI Praha and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<lookupTable oid="00000000-0000-0000-0000-000000000240"
xmlns="http://midpoint.evolveum.com/xml/ns/public/common/common-3">
<name>States</name>
<row id="1">
<key>created</key>
<label>Created</label>
</row>
<row id="2">
<key>open</key>
<label>Open</label>
</row>
<row id="3">
<key>closing</key>
<label>Closing</label>
</row>
<row id="4">
<key>executing</key>
<label>Executing</label>
</row>
<row id="5">
<key>closed</key>
<label>Closed</label>
</row>
</lookupTable>
27 changes: 27 additions & 0 deletions infra/schema/src/test/resources/merger/lookup-table-target.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2017 Evolveum, AMI Praha and contributors
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<lookupTable oid="00000000-0000-0000-0000-000000000240"
xmlns='http://midpoint.evolveum.com/xml/ns/public/common/common-3'>

<name>States</name>

<row id="1">
<key>open</key>
<label>Open</label>
</row>
<row id="2">
<key>closed</key>
<label>Closed</label>
</row>
<row id="3">
<key>executing</key>
<label>custom executing</label>
</row>

</lookupTable>
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

package com.evolveum.midpoint.model.common.archetypes;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.ItemPathType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.api.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.schema.merger.AdminGuiConfigurationMergeManager;
import com.evolveum.midpoint.model.api.authentication.*;
import com.evolveum.midpoint.model.api.context.EvaluatedAssignment;
import com.evolveum.midpoint.model.api.context.EvaluatedAssignmentTarget;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1129,8 +1129,7 @@ public void expandConfigurationObject(
.build();
try {
ObjectType objectBean = configurationObject.asObjectable();
if (objectBean instanceof ResourceType) {
ResourceType resource = (ResourceType) objectBean;
if (objectBean instanceof ResourceType resource) {
LOGGER.trace("Starting expanding {}", configurationObject);
resourceManager.expandResource(resource, result);
LOGGER.trace("Finished expanding {}", configurationObject);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,13 @@ class ResourceCompletionOperation {
result = parentResult.createMinorSubresult(OP_COMPLETE_RESOURCE);
try {
expand(resource);

if (ResourceTypeUtil.isAbstract(resource)) {
// TODO or should we also try to apply connector schema and expressions?
LOGGER.trace("Not continuing with resource completion because it's abstract: {}", resource);
return resource;
}

applyConnectorSchemaAndExpressions();

ResourceType completed;
Expand All @@ -144,11 +151,18 @@ class ResourceCompletionOperation {
/**
* Expands the resource by resolving super-resource references.
*/
private void expand(@NotNull ResourceType resource)
throws SchemaException, ConfigurationException, ObjectNotFoundException {
private void expand(@NotNull ResourceType resource) throws StopException {
if (resource.getSuper() != null) {
lastExpansionOperation = new ResourceExpansionOperation(resource, beans);
lastExpansionOperation.execute(result);
try {
lastExpansionOperation.execute(result);
} catch (SchemaException | ConfigurationException | ObjectNotFoundException | RuntimeException e) {
String message =
"An error occurred while expanding super-resource references of " + resource + ": " + e.getMessage();
result.recordPartialError(message, e);
LOGGER.warn(message, e);
throw new StopException();
}
} else {
// We spare some CPU cycles by not instantiating the expansion operation object.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,9 @@ class ResourceExpansionOperation {
this.beans = beans;
}

/**
* Executes the expansion operation. Fails hard if e.g. `connectorRef` cannot be resolved.
*/
public void execute(OperationResult parentResult) throws SchemaException, ConfigurationException, ObjectNotFoundException {
OperationResult result = parentResult.createMinorSubresult(OP_EXPAND);
try {
Expand Down

0 comments on commit 903f91d

Please sign in to comment.