diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index 7f66eb9473a..e01ead7273c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -2580,6 +2580,14 @@ public Breadcrumb getLastBreadcrumb() { return getBreadcrumbs().get(getBreadcrumbs().size() - 1); } + public Breadcrumb getPreviousBreadcrumb() { + if (getBreadcrumbs().isEmpty() || getBreadcrumbs().size() < 2) { + return null; + } + + return getBreadcrumbs().get(getBreadcrumbs().size() - 2); + } + public void clearBreadcrumbs() { getBreadcrumbs().clear(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemActionsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemActionsPanel.java index 19b024549c6..5e836384733 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemActionsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemActionsPanel.java @@ -80,7 +80,7 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { OperationResult completionResult = new OperationResult(OPERATION_COMPLETE_WORK_ITEM); WebComponentUtil.workItemApproveActionPerformed(ajaxRequestTarget, getCaseWorkItemModelObject(), getWorkItemOutput(true), getCustomForm(), getPowerDonor(), true, completionResult, getPageBase()); - CaseWorkItemActionsPanel.this.getPageBase().redirectBack(); + afterActionFinished(ajaxRequestTarget); } }; @@ -96,7 +96,7 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { OperationResult completionResult = new OperationResult(OPERATION_COMPLETE_WORK_ITEM); WebComponentUtil.workItemApproveActionPerformed(ajaxRequestTarget, getCaseWorkItemModelObject(), getWorkItemOutput(false), getCustomForm(), getPowerDonor(), false, completionResult, getPageBase()); - CaseWorkItemActionsPanel.this.getPageBase().redirectBack(); + afterActionFinished(ajaxRequestTarget); } }; workItemRejectButton.setOutputMarkupId(true); @@ -195,7 +195,7 @@ private void forwardConfirmedPerformed(AjaxRequestTarget target, UserType delega LoggingUtils.logUnexpectedException(LOGGER, "Couldn't forward work item", ex); } getPageBase().processResult(target, result, false); - getPageBase().redirectBack(); + afterActionFinished(target); } private void claimWorkItemPerformed(AjaxRequestTarget target){ @@ -203,6 +203,10 @@ private void claimWorkItemPerformed(AjaxRequestTarget target){ } + protected void afterActionFinished(AjaxRequestTarget target){ + getPageBase().redirectBack(); + } + protected Component getCustomForm() { return null; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java index 6ca2ad58e37..133802f254a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/CaseWorkItemListWithDetailsPanel.java @@ -26,6 +26,8 @@ import com.evolveum.midpoint.util.logging.Trace; import com.evolveum.midpoint.util.logging.TraceManager; import com.evolveum.midpoint.web.component.AjaxButton; +import com.evolveum.midpoint.web.component.breadcrumbs.Breadcrumb; +import com.evolveum.midpoint.web.component.breadcrumbs.BreadcrumbPageInstance; import com.evolveum.midpoint.web.component.data.column.ColumnUtils; import com.evolveum.midpoint.web.component.data.column.LinkColumn; import com.evolveum.midpoint.web.component.search.SearchItemDefinition; @@ -44,6 +46,7 @@ import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn; import org.apache.wicket.extensions.markup.html.repeater.data.table.export.AbstractExportableColumn; import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.repeater.Item; @@ -119,7 +122,16 @@ protected Component getCustomForm(){ return workItemDetails != null ? workItemDetails.getCustomForm() : null; } - + @Override + protected void afterActionFinished(AjaxRequestTarget target){ + Breadcrumb previousBreadcrumb = getPageBase().getPreviousBreadcrumb(); + if (previousBreadcrumb instanceof BreadcrumbPageInstance && + ((BreadcrumbPageInstance)previousBreadcrumb).getPage() instanceof PageCaseWorkItem){ + getPageBase().redirectBack(3); + } else { + getPageBase().redirectBack(); + } + } }; actionsPanel.setOutputMarkupId(true); actionsPanel.add(new VisibleBehaviour(() -> {