Skip to content

Commit

Permalink
adding some small improvements in resource wizard (default for streng…
Browse files Browse the repository at this point in the history
…th of new mapping, default for lifecycle of new resource, ...)
  • Loading branch information
skublik committed Aug 11, 2023
1 parent 160b692 commit 73c0388
Show file tree
Hide file tree
Showing 16 changed files with 114 additions and 129 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,6 @@
import com.evolveum.midpoint.wf.api.ChangesByState;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.CapabilityCollectionType;
import com.evolveum.prism.xml.ns._public.query_3.QueryType;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationType;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;
Expand Down Expand Up @@ -3072,19 +3071,18 @@ public static void switchResourceMaintenance(@NotNull PrismObject<ResourceType>
target.add(pageBase.getFeedbackPanel());
}

public static void switchObjectMode(
public static void saveObjectLifeCycle(
@NotNull PrismObject<ResourceType> resource,
String operation,
AjaxRequestTarget target,
PageBase pageBase,
String lifecycleState) {
PageBase pageBase) {
Task task = pageBase.createSimpleTask(operation);
OperationResult parentResult = new OperationResult(operation);

try {
ObjectDelta<ResourceType> objectDelta = pageBase.getPrismContext().deltaFactory().object()
.createModificationReplaceProperty(
ResourceType.class, resource.getOid(), ResourceType.F_LIFECYCLE_STATE, lifecycleState);
ResourceType.class, resource.getOid(), ResourceType.F_LIFECYCLE_STATE, resource.asObjectable().getLifecycleState());

pageBase.getModelService().executeChanges(MiscUtil.createCollection(objectDelta), null, task, parentResult);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,20 @@ protected IModel<?> getTitleModel() {
protected WrapperContext createWrapperContext() {
return getDetailsModel().createWrapperContext();
}

@Override
protected boolean isVisibleSubContainer(PrismContainerWrapper c) {
return AbstractFormWizardStepPanel.this.isVisibleSubContainer(c);
}
};
panel.setOutputMarkupId(true);
add(panel);
}

protected boolean isVisibleSubContainer(PrismContainerWrapper c) {
return false;
}

protected IModel<? extends PrismContainerWrapper> getContainerFormModel() {
return this.getDetailsModel().getObjectWrapperModel();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@
<legend><wicket:message key="ResourceOperationalButtonsPanel.buttons.resource"/></legend>
<a class="mr-2 btn btn-default btn-sm" wicket:id="resourceButtons"/>
</fieldset>
<wicket:enclosure child="modeButtons">
<wicket:enclosure child="lifecycleStatePanel">
<fieldset class="objectButtons">
<legend><wicket:message key="OperationalButtonsPanel.buttons.mode"/></legend>
<a class="mr-2 btn btn-default btn-sm" wicket:id="modeButtons"/>
<legend><wicket:message key="ObjectType.lifecycleState"/></legend>
<div class="mr-2" wicket:id="lifecycleStatePanel"/>
</fieldset>
</wicket:enclosure>
</wicket:extend>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@

import com.evolveum.midpoint.gui.api.GuiStyleConstants;

import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.LifecycleStatePanel;
import com.evolveum.midpoint.web.component.AjaxIconButton;

import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import com.evolveum.midpoint.web.model.PrismPropertyWrapperModel;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.Model;

Expand All @@ -28,17 +30,15 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;
import com.evolveum.midpoint.xml.ns._public.resource.capabilities_3.SchemaCapabilityType;

import org.jetbrains.annotations.NotNull;

public abstract class ResourceOperationalButtonsPanel extends AssignmentHolderOperationalButtonsPanel<ResourceType> {

private static final String DOT_CLASS = ResourceOperationalButtonsPanel.class.getName() + ".";
private static final String OPERATION_REFRESH_SCHEMA = DOT_CLASS + "refreshSchema";
private static final String OPERATION_SET_MAINTENANCE = DOT_CLASS + "setMaintenance";
private static final String OPERATION_SET_MODE = DOT_CLASS + "setSimulationMode";
private static final String OPERATION_SET_LIFECYCLE_STATE = DOT_CLASS + "setLifecycleState";

private static final String ID_RESOURCE_BUTTONS = "resourceButtons";
private static final String ID_MODE_BUTTONS = "modeButtons";
private static final String ID_LIFECYCLE_STATE_PANEL = "lifecycleStatePanel";

public ResourceOperationalButtonsPanel(String id, LoadableModel<PrismObjectWrapper<ResourceType>> model) {
super(id, model);
Expand All @@ -54,10 +54,7 @@ private void initLayout() {
RepeatingView resourceButtons = new RepeatingView(ID_RESOURCE_BUTTONS);
add(resourceButtons);
initResourceButtons(resourceButtons);
RepeatingView modeButtons = new RepeatingView(ID_MODE_BUTTONS);
add(modeButtons);
modeButtons.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
initModeButtons(modeButtons);
initLifecycleStatePanel(ID_LIFECYCLE_STATE_PANEL);
}

private void initResourceButtons(RepeatingView resourceButtons) {
Expand Down Expand Up @@ -115,48 +112,26 @@ public boolean isVisible() {
resourceButtons.add(refreshSchema);
}

private void initModeButtons(RepeatingView modeButtons) {
AjaxIconButton toggleToProduction = new AjaxIconButton(modeButtons.newChildId(),
Model.of(GuiStyleConstants.CLASS_ICON_TOOGLE),
createStringResource("OperationalButtonsPanel.button.toggleToProduction")) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
WebComponentUtil.switchObjectMode(
getPrismObject(), OPERATION_SET_MODE, target, getPageBase(), SchemaConstants.LIFECYCLE_ACTIVE);
refreshStatus(target);
}
};
toggleToProduction.showTitleAsLabel(true);
toggleToProduction.add(new VisibleBehaviour(() -> isToggleModeButtonVisible(SchemaConstants.LIFECYCLE_ACTIVE)));
modeButtons.add(toggleToProduction);

AjaxIconButton toggleToDevelopment = new AjaxIconButton(modeButtons.newChildId(),
Model.of(GuiStyleConstants.CLASS_ICON_TOOGLE),
createStringResource("OperationalButtonsPanel.button.toggleToDevelopment")) {
private static final long serialVersionUID = 1L;

private void initLifecycleStatePanel(String id) {
PrismPropertyWrapperModel<ResourceType, String> model =
PrismPropertyWrapperModel.fromContainerWrapper(getModel(), ResourceType.F_LIFECYCLE_STATE);
LifecycleStatePanel lifecycleStatePanel = new LifecycleStatePanel(id, model) {
@Override
public void onClick(AjaxRequestTarget target) {
WebComponentUtil.switchObjectMode(
getPrismObject(), OPERATION_SET_MODE, target, getPageBase(), SchemaConstants.LIFECYCLE_PROPOSED);
refreshStatus(target);
protected void onInitialize() {
super.onInitialize();
getBaseFormPanel().add(new OnChangeAjaxBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget target) {
WebComponentUtil.saveObjectLifeCycle(
getPrismObject(), OPERATION_SET_LIFECYCLE_STATE, target, getPageBase());
refreshStatus(target);
}
});
}
};
toggleToDevelopment.showTitleAsLabel(true);
toggleToDevelopment.add(new VisibleBehaviour(() -> isToggleModeButtonVisible(SchemaConstants.LIFECYCLE_PROPOSED)));
modeButtons.add(toggleToDevelopment);

}

private boolean isToggleModeButtonVisible(@NotNull String expectedLifecycleState) {
String lifecycleState = getPrismObject().asObjectable().getLifecycleState();
if (StringUtils.isEmpty(lifecycleState)) {
lifecycleState = SchemaConstants.LIFECYCLE_ACTIVE;
}
add(lifecycleStatePanel);

return !expectedLifecycleState.equals(lifecycleState);
lifecycleStatePanel.add(new VisibleBehaviour(() -> isEditingObject() && canEdit(getObjectType())));
}

private void testConnectionPerformed(AjaxRequestTarget target) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.evolveum.midpoint.util.DisplayableValue;

import com.evolveum.midpoint.web.component.input.DisplayableValueChoiceRenderer;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnChangeAjaxFormUpdatingBehavior;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType;
Expand All @@ -25,6 +26,7 @@
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.markup.html.form.FormComponent;
import org.apache.wicket.markup.html.form.IChoiceRenderer;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -257,45 +259,7 @@ private List getChoices() {
return choices;
}

private IModel<String> createLabelModel() {
return () -> {
String key = "SimulationMode.undefined";
try {
String lifecycle = getModelObject().getValue().getRealValue();
if (StringUtils.isEmpty(lifecycle)) {
lifecycle = SchemaConstants.LIFECYCLE_ACTIVE;
}

if (SchemaConstants.LIFECYCLE_ACTIVE.equals(lifecycle)
|| SchemaConstants.LIFECYCLE_PROPOSED.equals(lifecycle)) {
key = "SimulationMode." + lifecycle;
}
} catch (SchemaException e) {
LOGGER.error("Couldn't get value from " + getModelObject(), e);
}
return getString(key);
};
}

private void updateState(String lifecycleActive) {
try {
getModelObject().getValue().setRealValue(lifecycleActive);
} catch (SchemaException e) {
LOGGER.error("Couldn't get value from " + getModelObject(), e);
}
}

private boolean isToggleModeButtonVisible(@NotNull String expectedLifecycleState) {
try {
String lifecycleState = getModelObject().getValue().getRealValue();
if (StringUtils.isEmpty(lifecycleState)) {
lifecycleState = SchemaConstants.LIFECYCLE_ACTIVE;
}

return !expectedLifecycleState.equals(lifecycleState);
} catch (SchemaException e) {
LOGGER.error("Couldn't get value from " + getModelObject(), e);
}
return false;
protected FormComponent getBaseFormPanel(){
return (FormComponent) get(ID_PANEL);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.schema.GetOperationOptionsBuilder;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.util.ObjectQueryUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
import com.evolveum.midpoint.web.application.PanelType;
Expand All @@ -45,6 +46,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.function.Consumer;

@PanelType(name = "resourceUncategorized")
@PanelInstance(identifier = "resourceUncategorized", applicableForOperation = OperationTypeType.MODIFY, applicableForType = ResourceType.class,
Expand Down Expand Up @@ -117,6 +119,7 @@ protected ISelectableDataProvider<SelectableBean<ShadowType>> createProvider() {
provider.setEmptyListOnNullQuery(true);
provider.setSort(null);
provider.setDefaultCountIfNull(Integer.MAX_VALUE);
provider.setTaskConsumer(createProviderSearchTaskCustomizer());
return provider;
// return ResourceUncategorizedPanel.this.createProvider(getSearchModel(), (CompiledShadowCollectionView) getObjectCollectionView());
}
Expand Down Expand Up @@ -162,6 +165,10 @@ protected List<InlineMenuItem> createInlineMenu() {
add(shadowTablePanel);
}

protected Consumer<Task> createProviderSearchTaskCustomizer() {
return null;
}

protected boolean isEnabledInlineMenu() {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.page.admin.resource.ResourceDetailsModel;
import com.evolveum.midpoint.gui.impl.page.admin.resource.component.ResourceUncategorizedPanel;
import com.evolveum.midpoint.schema.TaskExecutionMode;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.shadows.ShadowTablePanel;
Expand All @@ -18,6 +20,9 @@
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import java.io.Serializable;
import java.util.function.Consumer;

/**
* @author lskublik
*/
Expand Down Expand Up @@ -66,6 +71,11 @@ protected boolean isShadowDetailsEnabled() {
protected boolean isEnabledInlineMenu() {
return false;
}

@Override
protected Consumer<Task> createProviderSearchTaskCustomizer() {
return (Consumer<Task> & Serializable) (task) -> task.setExecutionMode(TaskExecutionMode.SIMULATED_SHADOWS_DEVELOPMENT);
}
};
table.setOutputMarkupId(true);
form.add(table);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ protected ItemVisibilityHandler getVisibilityHandler() {
if (wrapper.getItemName().equals(ResourceType.F_CONNECTOR_REF)
|| wrapper.getItemName().equals(ResourceType.F_TEMPLATE)
|| wrapper.getItemName().equals(ResourceType.F_ABSTRACT)
|| wrapper.getItemName().equals(ResourceType.F_LIFECYCLE_STATE)){
|| wrapper.getItemName().equals(ResourceType.F_SCRIPTS)){
return ItemVisibility.HIDDEN;
}
return ItemVisibility.AUTO;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.PrismObjectDefinition;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.ConfigurationException;
Expand Down Expand Up @@ -147,12 +148,14 @@ private void onTemplateSelectionPerformed(TemplateTile<ResourceTemplate> tile, A
@Nullable PrismObject<ResourceType> resource =
WebModelServiceUtils.loadObject(ResourceType.class, resourceTemplate.getOid(), getPageBase(), task, result);
PrismObject<ResourceType> obj = resource.cloneComplex(CloneStrategy.REUSE);
obj.findOrCreateProperty(ResourceType.F_LIFECYCLE_STATE).addRealValue(SchemaConstants.LIFECYCLE_PROPOSED);
onTemplateSelectionPerformed(obj, target);
return;
}

PrismObjectDefinition<ResourceType> def = PrismContext.get().getSchemaRegistry().findObjectDefinitionByType(getType());
PrismObject<ResourceType> obj = def.instantiate();
obj.asObjectable().lifecycleState(SchemaConstants.LIFECYCLE_PROPOSED);

if (resourceTemplate != null) {
if (TemplateType.CONNECTOR.equals(resourceTemplate.getTemplateType())) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;

import com.evolveum.midpoint.gui.impl.page.admin.resource.component.ResourceUncategorizedPanel;
import com.evolveum.midpoint.schema.TaskExecutionMode;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.form.MidpointForm;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.shadows.ShadowTablePanel;
Expand All @@ -24,6 +26,8 @@
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.io.Serializable;
import java.util.function.Consumer;

/**
* @author lskublik
Expand Down Expand Up @@ -93,6 +97,11 @@ protected QName getDefaultObjectClass() {
protected boolean isEnabledInlineMenu() {
return false;
}

@Override
protected Consumer<Task> createProviderSearchTaskCustomizer() {
return (Consumer<Task> & Serializable) (task) -> task.setExecutionMode(TaskExecutionMode.SIMULATED_SHADOWS_DEVELOPMENT);
}
};
table.setOutputMarkupId(true);
form.add(table);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public AttributeMappingsTable(
super(id, valueModel, config, MappingType.class);
}

protected PrismContainerValueWrapper createNewValue(AjaxRequestTarget target) {
protected final PrismContainerValueWrapper createNewValue(AjaxRequestTarget target) {
try {
PrismContainerWrapper<ResourceAttributeDefinitionType> mappingAttributeContainer =
getValueModel().getObject().findContainer(ResourceObjectTypeDefinitionType.F_ATTRIBUTE);
Expand All @@ -85,6 +85,8 @@ protected PrismContainerValueWrapper createNewValue(AjaxRequestTarget target) {
newValueWrapper = wrapper.getValue();
}

newValueWrapper.findProperty(MappingType.F_STRENGTH).getValue().setRealValue(MappingStrengthType.STRONG);

createVirtualItemInMapping(newValueWrapper);

return newValueWrapper;
Expand Down

0 comments on commit 73c0388

Please sign in to comment.