Skip to content

Commit

Permalink
implementation of notes from presentation
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jul 11, 2023
1 parent 7a60f96 commit a786a27
Show file tree
Hide file tree
Showing 12 changed files with 73 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5834,7 +5834,7 @@ public static String createMappingIcon(PrismContainerDefinition<? extends Contai
return "fa fa-arrow-right-to-bracket";
} else if (QNameUtil.match(def.getItemName(), ResourceActivationDefinitionType.F_LOCKOUT_STATUS)) {
return "fa fa-user-lock";
} else if (QNameUtil.match(def.getItemName(), ResourceActivationDefinitionType.F_DISABLE_INSTEAD_DELETE)) {
} else if (QNameUtil.match(def.getItemName(), ResourceActivationDefinitionType.F_DISABLE_INSTEAD_OF_DELETE)) {
return "fa fa-user-slash";
} else if (QNameUtil.match(def.getItemName(), ResourceActivationDefinitionType.F_DELAYED_DELETE)) {
return "fa fa-clock";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -247,7 +247,8 @@ private static <C extends Containerable> boolean isUseAsEmptyValue(Item item) {

private static <C extends Containerable> boolean isUseAsEmptyValue(Class<?> typeClass) {
return typeClass != null &&
(AbstractSynchronizationActionType.class.isAssignableFrom(typeClass));
(AbstractSynchronizationActionType.class.isAssignableFrom(typeClass)
|| AbstractPredefinedActivationMappingType.class.isAssignableFrom(typeClass));
}

public static <C extends Containerable> PrismContainerValue<C> cleanupEmptyContainerValue(PrismContainerValue<C> value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public Iterator<? extends PrismContainerDefinition> internalIterator(long first,
private boolean skipContainerDefinition(PrismContainerDefinition<? extends Containerable> definition){
if (MappingDirection.INBOUND.equals(mappingDirection)) {
if (ResourceActivationDefinitionType.F_EXISTENCE.equivalent(definition.getItemName())
|| ResourceActivationDefinitionType.F_DISABLE_INSTEAD_DELETE.equivalent(definition.getItemName())
|| ResourceActivationDefinitionType.F_DISABLE_INSTEAD_OF_DELETE.equivalent(definition.getItemName())
|| ResourceActivationDefinitionType.F_DELAYED_DELETE.equivalent(definition.getItemName())
|| ResourceActivationDefinitionType.F_PRE_PROVISION.equivalent(definition.getItemName())) {
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.activation;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.MappingDirection;
Expand All @@ -25,6 +26,7 @@
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.prism.ValueStatus;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceActivationDefinitionType;

Expand All @@ -51,7 +53,7 @@ public CreateActivationMappingPopup(
String id,
MappingDirection mappingDirection,
IModel<PrismContainerValueWrapper<ResourceActivationDefinitionType>> parentModel, ResourceDetailsModel detailsModel) {
super(id, Model.of("CreateActivationMappingPopup.title"));
super(id, PageBase.createStringResourceStatic("CreateActivationMappingPopup.title"));
this.mappingDirection = mappingDirection;
this.parentModel = parentModel;
this.detailsModel = detailsModel;
Expand Down Expand Up @@ -101,7 +103,9 @@ protected Component createTile(String id, IModel<CreateActivationMappingTile> mo
return new CreateActivationMappingTilePanel(id, model) {
@Override
protected void onClick(AjaxRequestTarget target) {
createNewValue(getModelObject(), target);
if (model.getObject().canCreateNewValue()) {
createNewValue(getModelObject(), target);
}
}
};
}
Expand Down Expand Up @@ -131,6 +135,10 @@ private void createNewValue(CreateActivationMappingTile modelObject, AjaxRequest
PrismContainerValueWrapper<ResourceActivationDefinitionType> parent = parentModel.getObject();
try {
PrismContainerWrapper<Containerable> childContainer = parent.findContainer(path);
if (childContainer.isSingleValue()) {
childContainer.getValues().clear();
childContainer.getItem().clear();
}
PrismContainerValue<Containerable> newValue = childContainer.getItem().createNewValue();
PrismContainerValueWrapper<Containerable> valueWrapper = WebPrismUtil.createNewValueWrapper(
childContainer, newValue, getPageBase(), detailsModel.createWrapperContext());
Expand All @@ -156,6 +164,9 @@ private boolean defineCanCreateNewValue(PrismContainerDefinition definition) thr
if (child.getValues().isEmpty()){
return true;
}
if (ValueStatus.DELETED.equals(child.getValues().iterator().next().getStatus())) {
return true;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@

package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.activation;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismPropertyWrapper;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.basic.ResourceTilePanel;
import com.evolveum.midpoint.gui.impl.prism.panel.ItemPanelSettingsBuilder;
import com.evolveum.midpoint.prism.Containerable;

import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand All @@ -32,6 +34,7 @@
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.PropertyModel;
import org.jetbrains.annotations.NotNull;

public class MappingTilePanel extends ResourceTilePanel<PrismContainerValueWrapper<
? extends Containerable>, MappingTile<PrismContainerValueWrapper<? extends Containerable>>> {
Expand Down Expand Up @@ -94,6 +97,15 @@ public void onClick(AjaxRequestTarget target) {
}
};
configureButton.showTitleAsLabel(true);
if (getModelObject().getValue().getItems().size() == 1) {
@NotNull ItemName itemName = getModelObject().getValue().getItems().iterator().next().getItemName();
if (itemName.equivalent(MappingType.F_LIFECYCLE_STATE)) {
configureButton.add(AttributeAppender.append("class", "disabled"));
configureButton.add(AttributeAppender.append(
"title",
PageBase.createStringResourceStatic("MappingTilePanel.disabledConfiguration")));
}
}
add(configureButton);

Label help = new Label(ID_HELP);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,14 @@ protected IModel<String> getSubmitLabelModel() {
public VisibleEnableBehaviour getNextBehaviour() {
return VisibleBehaviour.ALWAYS_INVISIBLE;
}

@Override
protected ItemVisibilityHandler getVisibilityHandler() {
return wrapper -> {
if (wrapper.getItemName().equals(MappingType.F_LIFECYCLE_STATE)) {
return ItemVisibility.HIDDEN;
}
return ItemVisibility.AUTO;
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
</div>

<div wicket:id="addRuleContainer" class="row p-0 col-12 bg-light d-flex flex-column">
<span class="pt-5 pb-3 m-auto"><wicket:message key="SpecificMappingTileTable.addRule"/></span>
<span class="pt-5 pb-3 m-auto"><wicket:message key="SpecificMappingTileTable.noActivationRules"/></span>
<button class="btn btn-primary mb-5 mx-auto" wicket:id="addButton" />
</div>
</wicket:fragment>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
package com.evolveum.midpoint.gui.impl.page.admin.resource.component.wizard.objectType.activation;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.wrapper.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.MappingDirection;
Expand All @@ -19,6 +20,7 @@
import com.evolveum.midpoint.gui.impl.util.GuiDisplayNameUtil;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.path.ItemName;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
Expand Down Expand Up @@ -143,7 +145,7 @@ private String translateStrength(MappingType mapping) {
if (strengthBean == null) {
strengthBean = MappingStrengthType.NORMAL;
}
return PageBase.createStringResourceStatic(null, strengthBean).getString();
return PageBase.createStringResourceStatic(null, strengthBean).getString().toLowerCase();
}

private String createDescription(MappingType mapping) {
Expand All @@ -163,7 +165,6 @@ private String createDescription(MappingType mapping) {
String expression = ExpressionUtil.loadExpression(expressionBean, PrismContext.get(), LOGGER);
evaluatorType = ExpressionUtil.getExpressionType(expression);


} else {
evaluatorType = ExpressionUtil.ExpressionEvaluatorType.AS_IS;
}
Expand Down Expand Up @@ -234,6 +235,27 @@ protected <T extends PrismContainerValueWrapper<? extends Containerable>> void s
IModel<T> valueModel,
MappingTile.MappingDefinitionType mappingDefinitionType,
AjaxRequestTarget target) {

if (valueModel.getObject().getItems().size() == 1) {
@NotNull ItemName itemName = valueModel.getObject().getItems().iterator().next().getItemName();
if (itemName.equivalent(MappingType.F_LIFECYCLE_STATE)) {
refresh(target);
return;
}
}

boolean dontOpenConfiguration = true;
for (ItemWrapper<?, ?> item : valueModel.getObject().getItems()) {
if (item.isMandatory()) {
dontOpenConfiguration = false;
}
}

if (dontOpenConfiguration) {
refresh(target);
return;
}

if (MappingTile.MappingDefinitionType.PREDEFINED.equals(mappingDefinitionType)) {
editPredefinedMapping(
(IModel<PrismContainerValueWrapper<AbstractPredefinedActivationMappingType>>) valueModel,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2124,7 +2124,7 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="disableInsteadDelete" type="tns:AbstractPredefinedActivationMappingType" minOccurs="0">
<xsd:element name="disableInsteadOfDelete" type="tns:AbstractPredefinedActivationMappingType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
If an account is unassigned and there is no other existing assignment for an account midPoint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import com.evolveum.midpoint.model.impl.lens.projector.loader.ContextLoader;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.*;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.predefinedActivationMapping.DelayedDeleteEvaluator;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.predefinedActivationMapping.DisableInsteadDeleteEvaluator;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.predefinedActivationMapping.DisableInsteadOfDeleteEvaluator;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.predefinedActivationMapping.PreProvisionEvaluator;
import com.evolveum.midpoint.model.impl.lens.projector.mappings.predefinedActivationMapping.PredefinedActivationMappingEvaluator;
import com.evolveum.midpoint.model.impl.lens.projector.util.ProcessorExecution;
Expand Down Expand Up @@ -87,7 +87,7 @@ public class ActivationProcessor implements ProjectorProcessor {
* depends on the order
*/
private static final Collection<Class<? extends PredefinedActivationMappingEvaluator>> PREDEFINED_EVALUATORS =
List.of(PreProvisionEvaluator.class, DelayedDeleteEvaluator.class, DisableInsteadDeleteEvaluator.class);
List.of(PreProvisionEvaluator.class, DelayedDeleteEvaluator.class, DisableInsteadOfDeleteEvaluator.class);

@Autowired private ContextLoader contextLoader;
@Autowired private PrismContext prismContext;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
/**
* This evaluator delayed delete base on duration from configuration {@link DelayedDeleteActivationMappingType}.
* As reference time is used value of attribute activation/disableTimestamp from shadow.
* We should combine with {@link DisableInsteadDeleteEvaluator}.
* We should combine with {@link DisableInsteadOfDeleteEvaluator}.
*/
public class DelayedDeleteEvaluator extends PredefinedActivationMappingEvaluator {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
* This evaluator change midpoint default behaviour and disable account.
* Disabling the account instead of deleting is a common requirement.
*/
public class DisableInsteadDeleteEvaluator extends PredefinedActivationMappingEvaluator {
public class DisableInsteadOfDeleteEvaluator extends PredefinedActivationMappingEvaluator {

private static final Trace LOGGER = TraceManager.getTrace(DisableInsteadDeleteEvaluator.class);
private static final Trace LOGGER = TraceManager.getTrace(DisableInsteadOfDeleteEvaluator.class);

public DisableInsteadDeleteEvaluator(ResourceActivationDefinitionType activationDefinitionBean) {
public DisableInsteadOfDeleteEvaluator(ResourceActivationDefinitionType activationDefinitionBean) {
super(activationDefinitionBean);
}

Expand Down Expand Up @@ -73,14 +73,14 @@ public <V extends PrismValue, D extends ItemDefinition<?>, F extends FocusType>

@Override
public <F extends FocusType> boolean isConfigured(Task task) {
if (getActivationDefinitionBean().getDisableInsteadDelete() == null) {
if (getActivationDefinitionBean().getDisableInsteadOfDelete() == null) {
LOGGER.trace(
"DisableInsteadDeleteEvaluator: non-exist configuration for disableInsteadDelete in: {}, skipping",
getActivationDefinitionBean());
return false;
}

AbstractPredefinedActivationMappingType disableInsteadDeleteBean = getActivationDefinitionBean().getDisableInsteadDelete();
AbstractPredefinedActivationMappingType disableInsteadDeleteBean = getActivationDefinitionBean().getDisableInsteadOfDelete();
if (!task.canSee(disableInsteadDeleteBean.getLifecycleState())) {
LOGGER.trace("DisableInsteadDeleteEvaluator: not applicable to the execution mode, skipping");
return false;
Expand Down

0 comments on commit a786a27

Please sign in to comment.