diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html index 5b81f636cc7..fe98c96c213 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.html @@ -6,10 +6,9 @@ --> +
- -

diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java index a4d92cbfa38..8670f75c317 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/AssignmentPopup.java @@ -7,26 +7,23 @@ package com.evolveum.midpoint.gui.api.component; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.xml.namespace.QName; -import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; -import com.evolveum.midpoint.web.component.util.SelectableBean; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.extensions.markup.html.tabs.ITab; import org.apache.wicket.markup.html.WebMarkupContainer; -import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.IModel; import org.apache.wicket.model.StringResourceModel; +import com.evolveum.midpoint.gui.api.component.result.MessagePanel; import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab; +import com.evolveum.midpoint.gui.api.component.tabs.PanelTab; import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; @@ -36,14 +33,9 @@ import com.evolveum.midpoint.web.component.TabbedPanel; import com.evolveum.midpoint.web.component.dialog.Popupable; import com.evolveum.midpoint.web.component.util.EnableBehaviour; -import com.evolveum.midpoint.web.component.util.SelectableBeanImpl; +import com.evolveum.midpoint.web.component.util.SelectableBean; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; -import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.OrgType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType; -import com.evolveum.midpoint.xml.ns._public.common.common_3.ServiceType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.*; /** * Created by honchar. @@ -77,10 +69,10 @@ protected void onInitialize(){ tabPanel.setOutputMarkupPlaceholderTag(true); form.add(tabPanel); - Label warningMessage = new Label(ID_WARNING_MESSAGE, this :: getWarningMessageModel); + MessagePanel warningMessage = new MessagePanel(ID_WARNING_MESSAGE, MessagePanel.MessagePanelType.WARN, getWarningMessageModel()); warningMessage.setOutputMarkupId(true); warningMessage.add(new VisibleBehaviour(() -> getWarningMessageModel() != null)); - form.add(warningMessage); + add(warningMessage); AjaxButton cancelButton = new AjaxButton(ID_CANCEL_BUTTON, createStringResource("userBrowserDialog.button.cancelButton")) { @@ -109,18 +101,18 @@ public void onClick(AjaxRequestTarget target) { if (assignmentPanel == null){ return; } - - (((AbstractAssignmentPopupTabPanel) assignmentPanel).getSelectedAssignmentsMap()).forEach((k, v) -> - selectedAssignmentsMap.putIfAbsent((String)k, (AssignmentType) v)); - - + if (AbstractAssignmentPopupTabPanel.class.isAssignableFrom(assignmentPanel.getClass())) { + Map map = (((AbstractAssignmentPopupTabPanel) assignmentPanel).getSelectedAssignmentsMap()); + map.forEach(selectedAssignmentsMap::putIfAbsent); + } }); List assignments = new ArrayList<>(selectedAssignmentsMap.values()); + getPageBase().hideMainPopup(target); addPerformed(target, assignments); } }; addButton.add(AttributeAppender.append("title", getAddButtonTitleModel())); - addButton.add(new EnableBehaviour(() -> isAssignButtonEnabled())); + addButton.add(new EnableBehaviour(this::isAssignButtonEnabled)); addButton.setOutputMarkupId(true); form.add(addButton); } @@ -401,7 +393,7 @@ protected boolean isEntitlementAssignment(){ } private int getTabPanelSelectedCount(WebMarkupContainer panel){ - if (panel != null && panel instanceof AbstractAssignmentPopupTabPanel){ + if (panel instanceof AbstractAssignmentPopupTabPanel){ return ((AbstractAssignmentPopupTabPanel) panel).getSelectedObjectsList().size(); } return 0; @@ -428,7 +420,6 @@ private TabbedPanel getTabbedPanel(){ } protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { - getPageBase().hideMainPopup(target); } private IModel getAddButtonTitleModel(){ diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.html new file mode 100644 index 00000000000..7aa9763b109 --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.html @@ -0,0 +1,25 @@ + + + + +

+ + + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.java new file mode 100644 index 00000000000..91a20a4459b --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/MessagePanel.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2020 Evolveum and contributors + * + * This work is dual-licensed under the Apache License 2.0 + * and European Union Public License. See LICENSE file for details. + */ +package com.evolveum.midpoint.gui.api.component.result; + +import java.io.Serializable; + +import org.apache.wicket.AttributeModifier; +import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; +import org.apache.wicket.behavior.AttributeAppender; +import org.apache.wicket.markup.html.WebMarkupContainer; +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.model.IModel; +import org.apache.wicket.model.PropertyModel; + +import com.evolveum.midpoint.gui.api.component.BasePanel; + +public class MessagePanel extends BasePanel { + + private static final String ID_MESSAGE = "message"; + + public enum MessagePanelType {INFO, WARN, SUCCESS, ERROR} + + private MessagePanelType type; + + public MessagePanel(String id, MessagePanelType type, IModel model) { + super(id, model); + this.type = type; + + } + + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); + } + + public void initLayout() { + + WebMarkupContainer detailsBox = new WebMarkupContainer("detailsBox"); + detailsBox.setOutputMarkupId(true); + detailsBox.add(AttributeModifier.append("class", createHeaderCss())); + add(detailsBox); + + initHeader(detailsBox); + + } + + private IModel createHeaderCss() { + + return (IModel) () -> { + switch (type) { + case INFO: + return " box-info"; + case SUCCESS: + return " box-success"; + case ERROR: + return " box-danger"; + case WARN: // TODO: + default: + return " box-warning"; + } + }; + } + + private void initHeader(WebMarkupContainer box) { + WebMarkupContainer iconType = new WebMarkupContainer("iconType"); + iconType.setOutputMarkupId(true); + iconType.add(new AttributeAppender("class", (IModel) () -> { + + switch (type) { + case INFO: + return " fa-info"; + case SUCCESS: + return " fa-check"; + case ERROR: + return " fa-ban"; + case WARN: + default: + return " fa-warning"; + } + })); + + box.add(iconType); + + Label message = new Label(ID_MESSAGE, getModel()); + box.add(message); + + AjaxLink close = new AjaxLink("close") { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + close(target); + + } + }; + + box.add(close); + } + + public void close(AjaxRequestTarget target){ + this.setVisible(false); + target.add(this); + } +} diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java index 4d8f5595469..6f65b27b04b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPanel.java @@ -15,18 +15,13 @@ import java.util.List; import java.util.Locale; -import com.evolveum.midpoint.common.LocalizationService; -import com.evolveum.midpoint.gui.api.page.PageBase; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.Component; -import org.apache.wicket.Page; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; -import org.apache.wicket.feedback.FeedbackMessage; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.DownloadLink; @@ -37,8 +32,10 @@ import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.StringResourceModel; +import com.evolveum.midpoint.common.LocalizationService; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.gui.api.model.LoadableModel; +import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.schema.constants.ObjectTypes; import com.evolveum.midpoint.schema.util.ObjectTypeUtil; @@ -70,13 +67,17 @@ public class OperationResultPanel extends BasePanel implements Popupab private static final Trace LOGGER = TraceManager.getTrace(OperationResultPanel.class); - public OperationResultPanel(String id, IModel model, Page parentPage) { + public OperationResultPanel(String id, IModel model) { super(id, model); + } - initLayout(parentPage); + @Override + protected void onInitialize() { + super.onInitialize(); + initLayout(); } - public void initLayout(Page parentPage) { + public void initLayout() { WebMarkupContainer detailsBox = new WebMarkupContainer(ID_DETAILS_BOX); detailsBox.setOutputMarkupId(true); @@ -84,7 +85,7 @@ public void initLayout(Page parentPage) { add(detailsBox); initHeader(detailsBox); - initDetails(detailsBox, parentPage); + initDetails(detailsBox); } private void initHeader(WebMarkupContainer box) { @@ -248,17 +249,11 @@ public void onClick(AjaxRequestTarget target) { public File getObject() { String home = getPageBase().getMidpointConfiguration().getMidpointHome(); File f = new File(home, "result"); - DataOutputStream dos = null; - try { - dos = new DataOutputStream(new FileOutputStream(f)); - + try (DataOutputStream dos = new DataOutputStream(new FileOutputStream(f))){ dos.writeBytes(OperationResultPanel.this.getModel().getObject().getXml()); } catch (IOException e) { LOGGER.error("Could not download result: {}", e.getMessage(), e); - } finally { - IOUtils.closeQuietly(dos); } - return f; } @@ -273,43 +268,39 @@ public void close(AjaxRequestTarget target) { } private Label createMessage() { - Label message = new Label(ID_MESSAGE_LABEL, new IModel() { - - @Override - public String getObject() { - OpResult result = OperationResultPanel.this.getModel().getObject(); + Label message = new Label(ID_MESSAGE_LABEL, (IModel) () -> { + OpResult result = OperationResultPanel.this.getModel().getObject(); - PageBase page = getPageBase(); + PageBase page = getPageBase(); - String msg = null; - if (result.getUserFriendlyMessage() != null) { + String msg = null; + if (result.getUserFriendlyMessage() != null) { - //TODO: unify with WebModelServiceUtil.translateMessage() - LocalizationService service = page.getLocalizationService(); - Locale locale = page.getSession().getLocale(); + //TODO: unify with WebModelServiceUtil.translateMessage() + LocalizationService service = page.getLocalizationService(); + Locale locale = page.getSession().getLocale(); - msg = service.translate(result.getUserFriendlyMessage(), locale); - } - - if (StringUtils.isNotBlank(msg)) { - return msg; - } + msg = service.translate(result.getUserFriendlyMessage(), locale); + } - msg = result.getMessage(); - if (StringUtils.isNotBlank(msg)) { - return msg; - } + if (StringUtils.isNotBlank(msg)) { + return msg; + } - String resourceKey = OPERATION_RESOURCE_KEY_PREFIX + result.getOperation(); - return page.getString(resourceKey, null, resourceKey); + msg = result.getMessage(); + if (StringUtils.isNotBlank(msg)) { + return msg; } + + String resourceKey = OPERATION_RESOURCE_KEY_PREFIX + result.getOperation(); + return page.getString(resourceKey, null, resourceKey); }); message.setOutputMarkupId(true); return message; } - private void initDetails(WebMarkupContainer box, Page parentPage) { + private void initDetails(WebMarkupContainer box) { final WebMarkupContainer details = new WebMarkupContainer("details", getModel()); details.setOutputMarkupId(true); @@ -337,7 +328,7 @@ protected String load() { details.add(operationPanel); Label operationLabel = new Label("operationLabel", - parentPage.getString("FeedbackAlertMessageDetails.operation")); + createStringResource("FeedbackAlertMessageDetails.operation")); operationLabel.setOutputMarkupId(true); operationPanel.add(operationLabel); @@ -355,7 +346,7 @@ protected Object load() { operation.setOutputMarkupId(true); operationPanel.add(operation); - Label count = new Label("countLabel", parentPage.getString("FeedbackAlertMessageDetails.count")); + Label count = new Label("countLabel", createStringResource("FeedbackAlertMessageDetails.count")); count.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -385,7 +376,7 @@ public boolean isVisible() { operationPanel.add(message); - Label messageLabel = new Label("messageLabel", parentPage.getString("FeedbackAlertMessageDetails.message")); + Label messageLabel = new Label("messageLabel", createStringResource("FeedbackAlertMessageDetails.message")); messageLabel.setOutputMarkupId(true); messageLabel.add(new VisibleEnableBehaviour() { @@ -399,14 +390,14 @@ public boolean isVisible() { operationPanel.add(messageLabel); - initParams(operationPanel, getModel(), parentPage); - initContexts(operationPanel, getModel(), parentPage); - initError(operationPanel, getModel(), parentPage); + initParams(operationPanel, getModel()); + initContexts(operationPanel, getModel()); + initError(operationPanel, getModel()); } - private void initParams(WebMarkupContainer operationContent, final IModel model, Page parentPage) { + private void initParams(WebMarkupContainer operationContent, final IModel model) { - Label paramsLabel = new Label("paramsLabel", parentPage.getString("FeedbackAlertMessageDetails.params")); + Label paramsLabel = new Label("paramsLabel", createStringResource("FeedbackAlertMessageDetails.params")); paramsLabel.setOutputMarkupId(true); paramsLabel.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -445,7 +436,7 @@ public boolean isVisible() { @Override protected void populateItem(final ListItem item) { - Panel subresult = new OperationResultPanel("subresult", item.getModel(), getPage()); + Panel subresult = new OperationResultPanel("subresult", item.getModel()); subresult.setOutputMarkupId(true); item.add(subresult); } @@ -464,9 +455,9 @@ public boolean isVisible() { } - private void initContexts(WebMarkupContainer operationContent, final IModel model, Page parentPage) { + private void initContexts(WebMarkupContainer operationContent, final IModel model) { - Label contextsLabel = new Label("contextsLabel", parentPage.getString("FeedbackAlertMessageDetails.contexts")); + Label contextsLabel = new Label("contextsLabel", createStringResource("FeedbackAlertMessageDetails.contexts")); contextsLabel.setOutputMarkupId(true); contextsLabel.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -500,8 +491,8 @@ public boolean isVisible() { operationContent.add(contexts); } - private void initError(WebMarkupContainer operationPanel, final IModel model, Page parentPage) { - Label errorLabel = new Label("errorLabel", parentPage.getString("FeedbackAlertMessageDetails.error")); + private void initError(WebMarkupContainer operationPanel, final IModel model) { + Label errorLabel = new Label("errorLabel", createStringResource("FeedbackAlertMessageDetails.error")); errorLabel.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -693,52 +684,6 @@ private String getLabelCss(final IModel model) { } } - private String getIconCss(final IModel model) { - OpResult result = model.getObject(); - - if (result == null || result.getStatus() == null) { - return "fa-warning text-warning"; - } - - switch (result.getStatus()) { - case IN_PROGRESS: - case NOT_APPLICABLE: - return "fa-info-circle text-info"; - case SUCCESS: - return "fa-check-circle-o text-success"; - case FATAL_ERROR: - - return "fa-times-circle-o text-danger"; - case UNKNOWN: - case PARTIAL_ERROR: - case HANDLED_ERROR: // TODO: - case WARNING: - default: - return "fa-warning text-warning"; - } - } - - static String createMessageTooltip(final IModel model) { - FeedbackMessage message = model.getObject(); - switch (message.getLevel()) { - case FeedbackMessage.INFO: - return "info"; - case FeedbackMessage.SUCCESS: - return "success"; - case FeedbackMessage.ERROR: - return "partialError"; - case FeedbackMessage.FATAL: - return "fatalError"; - case FeedbackMessage.UNDEFINED: - return "undefined"; - case FeedbackMessage.DEBUG: - return "debug"; - case FeedbackMessage.WARNING: - default: - return "warn"; - } - } - @Override public int getWidth() { return 900; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPopupPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPopupPanel.java index 477f8f10c1a..cbf85fd2fc0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPopupPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/result/OperationResultPopupPanel.java @@ -32,7 +32,7 @@ protected void onInitialize(){ super.onInitialize(); OperationResultPanel operationResultPanel = new OperationResultPanel(ID_OPERATION_RESULTS_PANEL, - Model.of(OpResult.getOpResult(getPageBase(), getModelObject())), getPageBase()); + Model.of(OpResult.getOpResult(getPageBase(), getModelObject()))); operationResultPanel.setOutputMarkupId(true); add(operationResultPanel); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/message/FeedbackListView.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/message/FeedbackListView.java index f43d3438c49..148c1bbcdae 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/message/FeedbackListView.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/message/FeedbackListView.java @@ -40,7 +40,7 @@ protected void populateItem(final ListItem item) { if (message.getMessage() instanceof OpResult) { final OpResult opResult = (OpResult) message.getMessage(); - OperationResultPanel panel = new OperationResultPanel("message", Model.of(opResult), getPage()) { + OperationResultPanel panel = new OperationResultPanel("message", Model.of(opResult)) { private static final long serialVersionUID = 1L; 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 4c33bf4775b..1e2a14bab76 100755 --- 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 @@ -7,6 +7,7 @@ package com.evolveum.midpoint.web.page.admin; import java.util.*; +import java.util.stream.Collectors; import javax.xml.namespace.QName; @@ -15,6 +16,7 @@ import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper; import com.evolveum.midpoint.gui.api.util.WebPrismUtil; import com.evolveum.midpoint.model.api.context.ModelContext; +import com.evolveum.midpoint.prism.PrismContainer; import com.evolveum.midpoint.prism.PrismContainerValue; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; @@ -462,39 +464,40 @@ private void changeArchetypeButtonClicked(AjaxRequestTarget target){ private static final long serialVersionUID = 1L; @Override - protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { - super.addPerformed(target, newAssignmentsList); + protected void addPerformed(AjaxRequestTarget target, List newAssignmentsList) { + OperationResult result = new OperationResult(OPERATION_EXECUTE_ARCHETYPE_CHANGES); + if (newAssignmentsList.size() > 1) { + result.recordWarning(getString("PageAdminObjectDetails.change.archetype.more.than.one.selected")); + showResult(result); + target.add(PageAdminObjectDetails.this.getFeedbackPanel()); + return; + } + + AssignmentType oldArchetypAssignment = getOldArchetypeAssignment(result); + if (oldArchetypAssignment == null) { + showResult(result); + target.add(PageAdminObjectDetails.this.getFeedbackPanel()); + return; + } + try { - PrismContainerWrapper assignmentsWrapper = getObjectWrapper().findContainer(FocusType.F_ASSIGNMENT); - ((List) newAssignmentsList).forEach(assignment -> { - PrismContainerValue newAssignment = assignmentsWrapper.getItem().createNewValue(); - assignmentsWrapper.getValues().forEach(assignmentValue -> { - if (assignmentValue.getRealValue().getTargetRef() != null - && assignmentValue.getRealValue().getTargetRef().getType() != null - && QNameUtil.match(assignmentValue.getRealValue().getTargetRef().getType(), ArchetypeType.COMPLEX_TYPE)){ - assignmentValue.setStatus(ValueStatus.DELETED); - } - }); - AssignmentType assignmentType = newAssignment.asContainerable(); - assignmentType.setTargetRef(assignment.getTargetRef()); - WebPrismUtil.createNewValueWrapper(assignmentsWrapper, newAssignment, PageAdminObjectDetails.this, target); - OperationResult result = new OperationResult(OPERATION_EXECUTE_ARCHETYPE_CHANGES); - Task task = createSimpleTask(OPERATION_EXECUTE_ARCHETYPE_CHANGES); - try { - ObjectDelta archetypeDelta = getObjectWrapper().getObjectDelta(); - if (!archetypeDelta.isEmpty()) { - archetypeDelta.revive(getPrismContext()); - getModelService().executeChanges(MiscUtil.createCollection(archetypeDelta), null, task, result); - result.computeStatus(); - } - } catch (Exception e) { - LOGGER.error("Cannot save archetype assignment changes: {}", e.getMessage()); - } - showResult(result); - }); - } catch (SchemaException e) { - LOGGER.error("Cannot find assignment wrapper: {}", e.getMessage()); + ObjectDelta delta = getPrismContext().deltaFor(getCompileTimeClass()) + .item(AssignmentHolderType.F_ASSIGNMENT) + .delete(oldArchetypAssignment.clone()) + .asObjectDelta(getObjectWrapper().getOid()); + delta.addModificationAddContainer(AssignmentHolderType.F_ASSIGNMENT, newAssignmentsList.iterator().next()); + + Task task = createSimpleTask(OPERATION_EXECUTE_ARCHETYPE_CHANGES); + getModelService().executeChanges(MiscUtil.createCollection(delta), null, task, result); + + + } catch (Exception e) { + LOGGER.error("Cannot find assignment wrapper: {}", e.getMessage(), e); + result.recordFatalError(getString("PageAdminObjectDetails.change.archetype.failed", e.getMessage()), e); + } + result.computeStatusIfUnknown(); + showResult(result); target.add(PageAdminObjectDetails.this.getFeedbackPanel()); refresh(target); } @@ -581,6 +584,27 @@ protected IModel getWarningMessageModel(){ } + private AssignmentType getOldArchetypeAssignment(OperationResult result) { + PrismContainer assignmentContainer = getObjectWrapper().getObjectOld().findContainer(AssignmentHolderType.F_ASSIGNMENT); + if (assignmentContainer == null) { + //should not happen either + result.recordWarning(getString("PageAdminObjectDetails.archetype.change.not.supported")); + return null; + } + + List oldAssignments = assignmentContainer.getRealValues().stream().filter(a -> WebComponentUtil.isArchetypeAssignment(a)).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(oldAssignments)) { + result.recordWarning(getString("PageAdminObjectDetails.archetype.change.not.supported")); + return null; + } + + if (oldAssignments.size() > 1) { + result.recordFatalError(getString("PageAdminObjectDetails.archetype.change.no.single.archetype")); + return null; + } + return oldAssignments.iterator().next(); + } + private List getArchetypeOidsListToAssign(){ List archetypeOidsList = getFilteredArchetypeOidsList(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/component/TestConnectionMessagesPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/component/TestConnectionMessagesPanel.java index 9ba5ba5a628..7ac1e05d872 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/component/TestConnectionMessagesPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/component/TestConnectionMessagesPanel.java @@ -145,7 +145,7 @@ protected void populateItem(ListItem item) { public void initResultsPanel(RepeatingView resultView, List opresults, Page parentPage) { for (OpResult result : opresults) { - OperationResultPanel resultPanel = new OperationResultPanel(resultView.newChildId(), new Model<>(result), parentPage); + OperationResultPanel resultPanel = new OperationResultPanel(resultView.newChildId(), new Model<>(result)); resultPanel.setOutputMarkupId(true); resultView.add(resultPanel); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskResultTabPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskResultTabPanel.java index 2400531f627..866e1006c70 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskResultTabPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/server/TaskResultTabPanel.java @@ -84,8 +84,7 @@ public void onClick(Optional optionalTarget) { OperationResult opResult = OperationResult.createOperationResult(taskType.getResult()); OperationResultPanel body = new OperationResultPanel( getPageBase().getMainPopupBodyId(), - new Model<>(OpResult.getOpResult(getPageBase(), opResult)), - getPageBase()); + new Model<>(OpResult.getOpResult(getPageBase(), opResult))); body.setOutputMarkupId(true); getPageBase().showMainPopup(body, target); }