Skip to content

Commit

Permalink
fix bugs from testing flow on members panels of role wizard
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Jan 26, 2023
1 parent 678bf5d commit ea40771
Show file tree
Hide file tree
Showing 7 changed files with 113 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5528,22 +5528,27 @@ public static AdminLTESkin getMidPointSkin() {
}

public static void createToastForUpdateObject(AjaxRequestTarget target, QName type) {
createToastForResource("AbstractWizardPanel.updateObject", type, target);
createToastForObject("AbstractWizardPanel.updateObject", type, target);
}

public static void createToastForCreateObject(AjaxRequestTarget target, QName type) {
createToastForResource("AbstractWizardPanel.createObject", type, target);
createToastForObject("AbstractWizardPanel.createObject", type, target);
}

private static void createToastForResource(String key, QName type, AjaxRequestTarget target) {
String typeLabel = translateMessage(ObjectTypeUtil.createTypeDisplayInformation(type, false));
private static void createToastForObject(String key, QName type, AjaxRequestTarget target) {
new Toast()
.success()
.title(PageBase.createStringResourceStatic(key, typeLabel).getString())
.title(PageBase.createStringResourceStatic(
key,
translateMessage(ObjectTypeUtil.createTypeDisplayInformation(type, true)))
.getString())
.icon("fas fa-circle-check")
.autohide(true)
.delay(5_000)
.body(PageBase.createStringResourceStatic(key + ".text", typeLabel).getString())
.body(PageBase.createStringResourceStatic(
key + ".text",
translateMessage(ObjectTypeUtil.createTypeDisplayInformation(type, false)))
.getString())
.show(target);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,17 @@
*/
package com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component;

import java.time.Duration;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.component.result.OpResult;
import com.evolveum.midpoint.gui.impl.component.search.CollectionPanelType;

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

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -95,6 +100,8 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.prism.xml.ns._public.types_3.PolyStringType;

import static com.evolveum.midpoint.util.MiscUtil.sleepWatchfully;

@PanelType(name = "members")
@PanelInstance(identifier = "roleMembers",
applicableForType = RoleType.class,
Expand Down Expand Up @@ -524,6 +531,35 @@ protected Task executeMemberOperation(AbstractRoleType targetObject, ObjectQuery
protected void processTaskAfterOperation(Task task, AjaxRequestTarget target) {
}

protected void waitWhileTaskFinish(Task task, AjaxRequestTarget target) {
getSession().getFeedbackMessages().clear(message -> message.getMessage() instanceof OpResult
&& OperationResultStatus.IN_PROGRESS.equals(((OpResult) message.getMessage()).getStatus()));

AtomicReference<OperationResult> result = new AtomicReference<>();
long until = System.currentTimeMillis() + Duration.ofSeconds(3).toMillis();
sleepWatchfully( until, 100, () -> {
try {
result.set(getPageBase().getTaskManager().getTaskWithResult(
task.getOid(), new OperationResult("reload task")).getResult());
} catch (Throwable e) {
//ignore exception
}
return result.get() == null ? false : result.get().isInProgress();
});
if (!result.get().isSuccess() && !result.get().isInProgress()) {
getPageBase().showResult(result.get());
} else if (result.get().isInProgress()) {
getPageBase().showResult(task.getResult());
} else {
OperationResult showedResult = new OperationResult(task.getResult().getOperation());
showedResult.setStatus(result.get().getStatus());
getPageBase().showResult(showedResult);
}

refreshTable(target);
target.add(getFeedback());
}

protected AjaxIconButton createUnassignButton(String buttonId) {
AjaxIconButton assignButton = new AjaxIconButton(buttonId, new Model<>(GuiStyleConstants.EVO_ASSIGNMENT_ICON),
createStringResource("TreeTablePanel.menu.removeMembers")) {
Expand Down Expand Up @@ -1121,13 +1157,17 @@ protected void executeDelete(AssignmentHolderType object, AjaxRequestTarget targ
} catch (Throwable e) {
result.recordFatalError("Cannot delete object" + object + ", " + e.getMessage(), e);
LOGGER.error("Error while deleting object {}, {}", object, e.getMessage(), e);
target.add(getPageBase().getFeedbackPanel());
target.add(getFeedback());
}
result.computeStatusIfUnknown();
getPageBase().showResult(result);
refreshTable(target);
}

protected WebMarkupContainer getFeedback() {
return getPageBase().getFeedbackPanel();
}

protected void executeRecompute(AssignmentHolderType object, AjaxRequestTarget target) {
OperationResult result = new OperationResult(OPERATION_RECOMPUTE_OBJECT);
try {
Expand All @@ -1136,7 +1176,7 @@ protected void executeRecompute(AssignmentHolderType object, AjaxRequestTarget t
} catch (Throwable e) {
result.recordFatalError("Cannot recompute object" + object + ", " + e.getMessage(), e);
LOGGER.error("Error while recomputing object {}, {}", object, e.getMessage(), e);
target.add(getPageBase().getFeedbackPanel());
target.add(getFeedback());
}
result.computeStatusIfUnknown();
getPageBase().showResult(result);
Expand Down Expand Up @@ -1164,7 +1204,7 @@ protected void executeUnassign(AssignmentHolderType object, AjaxRequestTarget ta
subResult.recomputeStatus();
subResult.recordFatalError("Cannot unassign object" + object + ", " + e.getMessage(), e);
LOGGER.error("Error while unassigned object {}, {}", object, e.getMessage(), e);
target.add(getPageBase().getFeedbackPanel());
target.add(getFeedback());
}
}
result.computeStatusComposite();
Expand Down Expand Up @@ -1236,7 +1276,7 @@ protected void okPerformed(QName type, Collection<QName> relations, AjaxRequestT
if (type == null) {
getSession().warn("No type was selected. Cannot create member");
target.add(this);
target.add(getPageBase().getFeedbackPanel());
target.add(getFeedback());
return;
}
if (checkRelationNotSelected(relations, "No relation was selected. Cannot create member", target)) {
Expand Down Expand Up @@ -1305,7 +1345,7 @@ private boolean checkRelationNotSelected(Collection<QName> relations, String mes
}
getSession().warn(message);
target.add(this);
target.add(getPageBase().getFeedbackPanel());
target.add(getFeedback());
return true;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -391,30 +391,19 @@ protected void refreshTable(AjaxRequestTarget target) {

@Override
protected void processTaskAfterOperation(Task task, AjaxRequestTarget target) {
getSession().getFeedbackMessages().clear(message -> message.getMessage() instanceof OpResult
&& OperationResultStatus.IN_PROGRESS.equals(((OpResult) message.getMessage()).getStatus()));

AtomicReference<OperationResult> result = new AtomicReference<>();
long until = System.currentTimeMillis() + Duration.ofSeconds(3).toMillis();
sleepWatchfully( until, 100, () -> {
try {
result.set(getPageBase().getTaskManager().getTaskWithResult(
task.getOid(), new OperationResult("reload task")).getResult());
} catch (Throwable e) {
//ignore exception
}
return result.get() == null ? false : result.get().isInProgress();
});
if (!result.get().isSuccess()) {
getPageBase().showResult(result.get());
}
refreshTable(target);
target.add(getPageBase().getFeedbackPanel());
waitWhileTaskFinish(task, target);
}

@Override
protected void unassignMembersPerformed(IModel<?> rowModel, AjaxRequestTarget target) {
super.unassignMembersPerformed(rowModel, target);
target.add(getFeedback());
}

@Override
protected void executeUnassign(AssignmentHolderType object, AjaxRequestTarget target) {
super.executeUnassign(object, target);
target.add(getFeedback());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,14 @@ public AccessApplicationRoleStepPanel(FocusDetailsModels<RoleType> model) {
super(model);
}

@Override
protected void onInitialize() {
super.onInitialize();
if (getTable().getTilesModel().getObject().size() == 0) {
getPageBase().info(getPageBase().createStringResource("AccessApplicationRoleStepPanel.skip").getString());
}
}

@Override
protected IModel<List<AbstractMap.SimpleEntry<String, String>>> getSelectedItemsModel() {
return selectedItems;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ public AccessApplicationStepPanel(FocusDetailsModels<RoleType> model) {
super(model);
}

@Override
protected void onInitialize() {
super.onInitialize();
if (getTable().getTilesModel().getObject().size() == 0) {
getPageBase().info(getPageBase().createStringResource("AccessApplicationStepPanel.skip").getString());
}
}

@Override
protected ItemPath getPathForValueContainer() {
return RoleType.F_INDUCEMENT;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

Expand Down Expand Up @@ -77,6 +78,11 @@ protected List<InlineMenuItem> createToolbarMenuActions() {
protected String getTileCssClasses() {
return "col-xs-5i col-sm-5i col-md-5i col-lg-4 col-xl-3 col-xxl-3 px-4 mb-3";
}

@Override
protected WebMarkupContainer getFeedback() {
return GovernanceMembersWizardPanel.this.getFeedback();
}
};
table.setOutputMarkupId(true);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,21 @@
import com.evolveum.midpoint.gui.impl.component.wizard.AbstractWizardBasicPanel;
import com.evolveum.midpoint.gui.impl.page.admin.abstractrole.component.AbstractRoleMemberPanel;
import com.evolveum.midpoint.gui.impl.page.admin.assignmentholder.FocusDetailsModels;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.AjaxIconButton;
import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItem;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.model.IModel;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
Expand Down Expand Up @@ -79,6 +84,28 @@ protected AjaxIconButton createUnassignButton(String buttonId) {
button.showTitleAsLabel(true);
return button;
}

@Override
protected void processTaskAfterOperation(Task task, AjaxRequestTarget target) {
waitWhileTaskFinish(task, target);
}

@Override
protected WebMarkupContainer getFeedback() {
return MembersWizardPanel.this.getFeedback();
}

@Override
protected void unassignMembersPerformed(IModel rowModel, QName type, QueryScope scope, Collection relations, AjaxRequestTarget target) {
super.unassignMembersPerformed(rowModel, type, scope, relations, target);
target.add(getFeedback());
}

@Override
protected void executeUnassign(AssignmentHolderType object, AjaxRequestTarget target) {
super.executeUnassign(object, target);
target.add(getFeedback());
}
};
table.setOutputMarkupId(true);

Expand Down

0 comments on commit ea40771

Please sign in to comment.