Skip to content

Commit

Permalink
MID-8807: fix for activation description handler use dalta for effect…
Browse files Browse the repository at this point in the history
…ive and administrative status and value object by path of container value
  • Loading branch information
skublik committed Sep 25, 2023
1 parent 5e31da8 commit 244fcb9
Showing 1 changed file with 50 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,16 @@

package com.evolveum.midpoint.model.impl.visualizer;

import com.evolveum.midpoint.prism.ItemDefinition;
import com.evolveum.midpoint.prism.PrismValue;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.delta.ItemDelta;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;

import com.evolveum.midpoint.util.exception.SchemaException;

import org.springframework.stereotype.Component;

import com.evolveum.midpoint.model.impl.visualizer.output.VisualizationImpl;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
Expand All @@ -43,59 +40,63 @@ public boolean match(VisualizationImpl visualization, VisualizationImpl parentVi
}

if (parentVisualization != null && parentVisualization.getSourceDelta() != null) {
ItemDelta<PrismValue, ItemDefinition<?>> deltaItem = parentVisualization.getSourceDelta().findItemDelta(ItemPath.create(
visualization.getSourceRelPath(), ActivationType.F_EFFECTIVE_STATUS));
try {
if(deltaItem != null && deltaItem.getItemNew() != null && deltaItem.getItemNew().getRealValue() != null) {
return true;
}
} catch (SchemaException e) {
//ignore it and try sourceValue
if (existDelta(visualization, parentVisualization, ActivationType.F_EFFECTIVE_STATUS)) {
return true;
}
if (existDelta(visualization, parentVisualization, ActivationType.F_ADMINISTRATIVE_STATUS)) {
return true;
}
}

if (ActivationType.class.equals(value.getCompileTimeClass())) {
// if there's password
return value.findProperty(ActivationType.F_EFFECTIVE_STATUS) != null;
}

// we're modifying/deleting password
return ActivationType.F_EFFECTIVE_STATUS.equivalent(value.getPath());
return false;
}

private boolean existDelta(VisualizationImpl visualization, VisualizationImpl parentVisualization, ItemName path) {
ActivationStatusType status = getRealValueForDelta(visualization, parentVisualization, path);
if (status != null) {
return true;
}
return false;
}

@Override
public void apply(VisualizationImpl visualization, VisualizationImpl parentVisualization, Task task, OperationResult result) {
ActivationStatusType status = null;
if (parentVisualization != null && parentVisualization.getSourceDelta() != null) {
ItemDelta<PrismValue, ItemDefinition<?>> deltaItem = parentVisualization.getSourceDelta().findItemDelta(ItemPath.create(
visualization.getSourceRelPath(), ActivationType.F_EFFECTIVE_STATUS));
try {
if(deltaItem != null && deltaItem.getItemNew() != null) {
status = (ActivationStatusType) deltaItem.getItemNew().getRealValue();
}
} catch (SchemaException e) {
//ignore it and try sourceValue
}
}

PrismContainerValue<?> value = visualization.getSourceValue();
status = getRealValueForDelta(visualization, parentVisualization, ActivationType.F_EFFECTIVE_STATUS);

if (status == null) {
PrismProperty<ActivationStatusType> effectiveStatus = value.findProperty(ActivationType.F_EFFECTIVE_STATUS);
status = effectiveStatus.getRealValue();
status = getRealValueForDelta(visualization, parentVisualization, ActivationType.F_ADMINISTRATIVE_STATUS);
}

if (status == null) {
return;
}

String typeKey = null;
PrismContainerValue<?> value = visualization.getSourceValue();

PrismContainerValue root = value.getRootValue();
PrismContainerDefinition rootDef = root.getDefinition();
Class clazz = root.getCompileTimeClass();

ItemPath path = value.getPath();
//different as '/activationContainerPath'
if (rootDef != null && path.size() > 1) {
path = path.allExceptLast();
path = path.removeIds();
PrismContainerDefinition findDef = rootDef.findContainerDefinition(path);
if (findDef != null) {
rootDef = findDef;
clazz = findDef.getCompileTimeClass();
}
}

String typeKey;
if (clazz != null && ObjectType.class.isAssignableFrom(clazz)) {
typeKey = "ObjectTypes." + ObjectTypes.getObjectType(clazz).name();
} else {
typeKey = root.getDefinition() != null ? root.getDefinition().getDisplayName() : null;
typeKey = rootDef != null ? rootDef.getDisplayName() : null;
}

if (typeKey == null) {
Expand All @@ -109,4 +110,18 @@ public void apply(VisualizationImpl visualization, VisualizationImpl parentVisua
})
);
}

private ActivationStatusType getRealValueForDelta(
VisualizationImpl visualization, VisualizationImpl parentVisualization, ItemName path) {
ItemDelta<PrismValue, ItemDefinition<?>> deltaItem = parentVisualization.getSourceDelta().findItemDelta(ItemPath.create(
visualization.getSourceRelPath(), path));
try {
if (deltaItem != null && deltaItem.getItemNew() != null) {
return (ActivationStatusType) deltaItem.getItemNew().getRealValue();
}
} catch (SchemaException e) {
//ignore it and try sourceValue
}
return null;
}
}

0 comments on commit 244fcb9

Please sign in to comment.