Skip to content

Commit

Permalink
MID-8407:fix for delta of resource inherited from template
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Mar 21, 2023
1 parent 259d22b commit 5acba70
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
Expand Down Expand Up @@ -35,6 +36,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ContainerPanelConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceObjectTypeDefinitionType;

import org.apache.wicket.model.Model;
import org.jetbrains.annotations.NotNull;

/**
Expand Down Expand Up @@ -78,19 +80,18 @@ protected void onBeforeRender() {

@Override
protected void onNewValue(IModel<PrismContainerWrapper<ResourceObjectTypeDefinitionType>> containerModel, AjaxRequestTarget target) {
IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> model = () -> {
PrismContainerWrapper<ResourceObjectTypeDefinitionType> container = containerModel.getObject();
PrismContainerValue<ResourceObjectTypeDefinitionType> value = container.getItem().createNewValue();
try {
PrismContainerValueWrapper newWrapper = WebPrismUtil.createNewValueWrapper(
container, value, getPageBase(), getObjectDetailsModels().createWrapperContext());
container.getValues().add(newWrapper);
return newWrapper;
} catch (SchemaException e) {
LOGGER.error("Couldn't create new value for container " + container, e);
}
return null;
};
PageBase pageBase = getPageBase();
PrismContainerWrapper<ResourceObjectTypeDefinitionType> container = containerModel.getObject();
PrismContainerValue<ResourceObjectTypeDefinitionType> value = container.getItem().createNewValue();
PrismContainerValueWrapper newWrapper = null;
try {
newWrapper = WebPrismUtil.createNewValueWrapper(
container, value, pageBase, getObjectDetailsModels().createWrapperContext());
container.getValues().add(newWrapper);
} catch (SchemaException e) {
LOGGER.error("Couldn't create new value for container " + container, e);
}
IModel<PrismContainerValueWrapper<ResourceObjectTypeDefinitionType>> model = Model.of(newWrapper);
onCreateValue(model, target);
}
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import com.evolveum.midpoint.gui.api.prism.ItemStatus;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismReferenceWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebPrismUtil;
import com.evolveum.midpoint.prism.*;
Expand Down Expand Up @@ -124,6 +125,11 @@ private void removeIdFromContainerValue(PrismValue value) {
private Collection<ItemDelta<PrismValue, ItemDefinition<?>>> processModifyDeltas(
Collection<ItemDelta<PrismValue, ItemDefinition<?>>> deltas) throws SchemaException {

PrismReferenceWrapper superRef = findReference(ItemPath.create(ResourceType.F_SUPER, SuperResourceDeclarationType.F_RESOURCE_REF));
if (superRef != null && superRef.isEmpty()) {
return deltas;
}

Collection<ItemDelta<PrismValue, ItemDefinition<?>>> processedDeltas = new ArrayList<>();

for (ItemDelta<PrismValue, ItemDefinition<?>> delta : deltas) {
Expand Down Expand Up @@ -225,18 +231,19 @@ private PrismContainerValue<?> createParentValueForAddDelta(
if (!subPath.isEmpty() && ItemPath.isId(subPath.last())) {
subPath = subPath.allExceptLast();
}
if (valueOfExistingDelta.find(subPath) != null) {
if (subPath.isEmpty()) {
newValue = valueOfExistingDelta;
} else if (valueOfExistingDelta.find(subPath) != null) {
isItemFound = true;
newContainer = (PrismContainer) valueOfExistingDelta.find(subPath);
newValue = newContainer.getValue(origParentValue.getId());
}
}

if (newContainer == null) {
newContainer = origParentValue.getDefinition().instantiate();
}

if (newValue == null) {
if (newContainer == null) {
newContainer = origParentValue.getDefinition().instantiate();
}
newValue = newContainer.createNewValue();
newValue.setId(origParentValue.getId());
Class<?> typeClass = newValue.getComplexTypeDefinition().getTypeClass();
Expand Down Expand Up @@ -268,11 +275,13 @@ private PrismContainerValue<?> createParentValueForAddDelta(
return valueOfExistingDelta;
}

if (WebPrismUtil.isValueFromResourceTemplate(parentValue, getItem())) {
return createParentValueForAddDelta(parentValue, newContainer, valueOfExistingDelta);
}
if (newContainer != null) {
if (WebPrismUtil.isValueFromResourceTemplate(parentValue, getItem())) {
return createParentValueForAddDelta(parentValue, newContainer, valueOfExistingDelta);
}

newContainer.setParent(parentValue);
newContainer.setParent(parentValue);
}
return newValue;
}

Expand Down

0 comments on commit 5acba70

Please sign in to comment.