From 850bec385e291cc8bf325991f3e9c649bf55b151 Mon Sep 17 00:00:00 2001 From: Pavol Mederly Date: Fri, 1 Jul 2016 01:15:49 +0200 Subject: [PATCH] Fixed MID-3241: Saving with no changes and "Keep displaying results" results in a messy screen --- .../component/progress/ProgressReporter.java | 4 +- .../progress/ProgressReportingAwarePage.java | 2 +- .../web/page/admin/PageAdminFocus.java | 43 ++++++++++--------- .../page/admin/PageAdminObjectDetails.java | 24 ++++++++--- .../localization/Midpoint.properties | 2 + 5 files changed, 44 insertions(+), 31 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java index 6e18a193e3d..377f70a80e2 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReporter.java @@ -160,7 +160,7 @@ private void executeChangesSync(Collection> de result.recordFatalError(e.getMessage(), e); } } - parentPage.finishProcessing(target, result); + parentPage.finishProcessing(target, result, false); } private void executeChangesAsync(final Collection> deltas, final boolean previewOnly, @@ -227,7 +227,7 @@ protected void onPostProcessTarget(AjaxRequestTarget target) { stopRefreshingProgressPanel(); - parentPage.finishProcessing(target, asyncOperationResult); + parentPage.finishProcessing(target, asyncOperationResult, true); asyncOperationResult = null; } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReportingAwarePage.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReportingAwarePage.java index 8ee9514f92a..cc5cb8caa00 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReportingAwarePage.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/progress/ProgressReportingAwarePage.java @@ -41,7 +41,7 @@ public interface ProgressReportingAwarePage { void startProcessing(AjaxRequestTarget target, OperationResult result); - void finishProcessing(AjaxRequestTarget target, OperationResult result); + void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync); // things from PageBase (todo factor this out eventually) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java index 276521c6dd9..f171bec8316 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminFocus.java @@ -170,7 +170,7 @@ protected ObjectWrapper loadFocusWrapper(PrismObject userToEdit) { } @Override - public void finishProcessing(AjaxRequestTarget target, OperationResult result) { + public void finishProcessing(AjaxRequestTarget target, OperationResult result, boolean returningFromAsync) { if (previewRequested) { finishPreviewProcessing(target, result); @@ -187,32 +187,33 @@ public void finishProcessing(AjaxRequestTarget target, OperationResult result) { setTimeZone(WebModelServiceUtils.getTimezone(user)); LOGGER.debug("Using {} as time zone", WebSession.get().getClientInfo().getProperties().getTimeZone()); } - boolean userAdded = getDelta() != null && getDelta().isAdd() && StringUtils.isNotEmpty(getDelta().getOid()); - if (!isKeepDisplayingResults() && getProgressReporter().isAllSuccess() - && (userAdded || !result.isFatalError())) { // TODO + boolean focusAddAttempted = getDelta() != null && getDelta().isAdd(); + boolean focusAddSucceeded = focusAddAttempted && StringUtils.isNotEmpty(getDelta().getOid()); + + // we don't want to allow resuming editing if a new focal object was created (on second 'save' there would be a conflict with itself) + // and also in case of partial errors, like those related to projections (many deltas would be already executed, and this could cause problems on second 'save'). + boolean canContinueEditing = !focusAddSucceeded && result.isFatalError(); + + boolean canExitPage; + if (returningFromAsync) { + canExitPage = getProgressReporter().isAllSuccess(); // if there's at least a warning in the progress table, we would like to keep the table open + } else { + canExitPage = !canContinueEditing; // no point in staying on page if we cannot continue editing (in synchronous case i.e. no progress table present) + } + + if (!isKeepDisplayingResults() && canExitPage) { showResult(result); - // todo refactor this...what is this for? why it's using some - // "shadow" param from result??? - PrismObject focus = getObjectWrapper().getObject(); - F focusType = focus.asObjectable(); - for (ObjectReferenceType ref : focusType.getLinkRef()) { - Object o = findParam("shadow", ref.getOid(), result); - if (o != null && o instanceof ShadowType) { - ShadowType accountType = (ShadowType) o; - OperationResultType fetchResult = accountType.getFetchResult(); - showResult(OperationResult.createOperationResult(fetchResult), false); - - } - } redirectBack(); } else { - getProgressReporter().showBackButton(target); - getProgressReporter().hideAbortButton(target); + if (returningFromAsync) { + getProgressReporter().showBackButton(target); + getProgressReporter().hideAbortButton(target); + } showResult(result); target.add(getFeedbackPanel()); - if (!userAdded && result.isFatalError()) { - getProgressReporter().hideBackButton(target); // not to confuse the user + if (canContinueEditing) { + getProgressReporter().hideBackButton(target); getProgressReporter().showContinueEditingButton(target); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java index 05a0419a94d..bacb7b202a6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/PageAdminObjectDetails.java @@ -487,6 +487,7 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res } catch (Exception ex) { result.recordFatalError(getString("pageFocus.message.cantCreateFocus"), ex); LoggingUtils.logUnexpectedException(LOGGER, "Create user failed", ex); + showResult(result); } break; @@ -532,7 +533,15 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res } progressReporter.executeChanges(deltas, previewOnly, options, task, result, target); } else { - result.recordSuccess(); + progressReporter.clearProgressPanel(); // from previous attempts (useful only if we would call finishProcessing at the end, but that's not the case now) + if (!previewOnly) { + result.recordWarning(getString("PageAdminObjectDetails.noChangesSave")); + showResult(result); + redirectBack(); + } else { + warn(getString("PageAdminObjectDetails.noChangesPreview")); + target.add(getFeedbackPanel()); + } } } catch (Exception ex) { @@ -542,6 +551,7 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res } else { result.recomputeStatus(); } + showResult(result); } break; // support for add/delete containers (e.g. delete credentials) @@ -549,12 +559,12 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res error(getString("pageAdminFocus.message.unsupportedState", objectWrapper.getStatus())); } - result.recomputeStatus(); - - if (!result.isInProgress()) { - LOGGER.trace("Result NOT in progress, calling finishProcessing"); - finishProcessing(target, result); - } +// result.recomputeStatus(); +// +// if (!result.isInProgress()) { +// LOGGER.trace("Result NOT in progress, calling finishProcessing"); +// finishProcessing(target, result, false); +// } LOGGER.trace("returning from saveOrPreviewPerformed"); } diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index 24f02eec332..41a648faa4e 100644 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -1019,6 +1019,8 @@ PageAdminObjectDetails.title.editServiceType=Edit service '{0}' PageAdminObjectDetails.title.newRoleType=Create new role PageAdminObjectDetails.title.editOrgType=Edit organization '{0}' PageAdminObjectDetails.title.newOrgType=Create new organization +PageAdminObjectDetails.noChangesSave=There were no changes to be saved. +PageAdminObjectDetails.noChangesPreview=There are no changes to be previewed. pageAdminFocus.message.cantEditFocus=Unknown error occurred, can't edit focus object. pageAdminFocus.message.cantNewFocus=Unknown error occurred, can't create new focus object. pageAdminFocus.message.illegalAccountState=Illegal shadow state '{0}'.