From 222879ce9132f9d42530444f6c068c528a77a09f Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Wed, 18 Jul 2018 21:01:40 +0200 Subject: [PATCH 1/2] fixing visibility behaviour --- .../component/prism/ContainerValuePanel.java | 8 ++++- .../component/prism/PrismContainerPanel.java | 32 +++++++++++-------- .../prism/PrismContainerValueHeaderPanel.java | 2 -- 3 files changed, 25 insertions(+), 17 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java index 6e721c05077..6b8d0325151 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java @@ -141,7 +141,13 @@ protected void populateItem(final ListItem item) { @Override public boolean isVisible() { - return (model.getObject().containsMultipleMultivalueContainer() && item.getModelObject().getItemDefinition().isMultiValue() && CollectionUtils.isEmpty(item.getModelObject().getValues())) ? false : true; + if (model.getObject().containsMultipleMultivalueContainer() + && item.getModelObject().getItemDefinition().isMultiValue() + && CollectionUtils.isEmpty(item.getModelObject().getValues())) { + return false; + } + + return containerPanel.isPanelVisible(isPanaleVisible, (IModel>) item.getModel()); } }); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.java index 0143fcaab48..73b8c797dd0 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.java @@ -66,20 +66,7 @@ public PrismContainerPanel(String id, final IModel> model, b @Override public boolean isVisible() { - if (isPanelVisible != null && model.getObject() != null) { - ItemVisibility visible = isPanelVisible.isVisible(model.getObject()); - if (visible != null) { - switch (visible) { - case VISIBLE: - return true; - case HIDDEN: - return false; - default: - // automatic, go on ... - } - } - } - return model.getObject() != null && model.getObject().isVisible(); + return isPanelVisible(isPanelVisible, model); } }); @@ -87,6 +74,23 @@ public boolean isVisible() { } + public boolean isPanelVisible(ItemVisibilityHandler isPanelVisible, IModel> model) { + if (isPanelVisible != null && model.getObject() != null) { + ItemVisibility visible = isPanelVisible.isVisible(model.getObject()); + if (visible != null) { + switch (visible) { + case VISIBLE: + return true; + case HIDDEN: + return false; + default: + // automatic, go on ... + } + } + } + return model.getObject() != null && model.getObject().isVisible(); + } + private void initLayout(final IModel> model, final Form form, ItemVisibilityHandler isPanelVisible, boolean showHeader) { PrismContainerHeaderPanel header = new PrismContainerHeaderPanel(ID_HEADER, model) { private static final long serialVersionUID = 1L; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java index 22b3b1a9774..b45346b9464 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java @@ -237,8 +237,6 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { }); - - ToggleIconButton removeContainerButton = new ToggleIconButton(ID_REMOVE_CONTAINER, GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER, GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER) { private static final long serialVersionUID = 1L; From 3b1af7512753223e13385b0ebb7125a60b0e2d26 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Wed, 18 Jul 2018 22:46:00 +0200 Subject: [PATCH 2/2] fixing toggle icon button behaviour, small code cleanup --- .../togglebutton/ToggleIconButton.java | 36 ++++----- .../component/prism/ContainerValuePanel.java | 16 +--- .../prism/PrismContainerValueHeaderPanel.java | 78 ++++++------------- 3 files changed, 44 insertions(+), 86 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/togglebutton/ToggleIconButton.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/togglebutton/ToggleIconButton.java index 3b59d0a8d26..1e164e9562d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/togglebutton/ToggleIconButton.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/togglebutton/ToggleIconButton.java @@ -15,8 +15,7 @@ */ package com.evolveum.midpoint.gui.api.component.togglebutton; -import org.apache.wicket.ajax.markup.html.AjaxLink; -import org.apache.wicket.ajax.markup.html.form.AjaxButton; +import org.apache.wicket.ajax.markup.html.form.AjaxSubmitLink; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; @@ -26,7 +25,7 @@ * * @author semancik */ -public abstract class ToggleIconButton extends AjaxButton{ +public abstract class ToggleIconButton extends AjaxSubmitLink { private static final long serialVersionUID = 1L; private String cssClassOff; @@ -45,12 +44,12 @@ public ToggleIconButton(String id, String cssClassOff, String cssClassOn) { } public ToggleIconButton(String id, IModel model) { - super(id, model); + super(id); initLayout(); } public ToggleIconButton(String id, IModel model, String cssClassOff, String cssClassOn) { - super(id, model); + super(id); this.cssClassOff = cssClassOff; this.cssClassOn = cssClassOn; initLayout(); @@ -58,20 +57,21 @@ public ToggleIconButton(String id, IModel model, String cssClassOff, String cssC private void initLayout() { setEscapeModelStrings(false); -// setBody(new Model(){ -// private static final long serialVersionUID = 1L; -// -// @Override -// public String getObject() { -// if (isOn()) { -// return ""; -// } else { -// return ""; -// } -// } -// }); - } + + setBody(new Model(){ + private static final long serialVersionUID = 1L; + @Override + public String getObject() { + if (isOn()) { + return ""; + } else { + return ""; + } + } + }); + } + public abstract boolean isOn(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java index 6b8d0325151..ef3efe9f85c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValuePanel.java @@ -59,7 +59,8 @@ public ContainerValuePanel(String id, final IModel> mod this.pageBase = pageBase; add(new VisibleEnableBehaviour() { - + + private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return model.getObject().isVisible(); @@ -82,17 +83,6 @@ protected void onButtonClick(AjaxRequestTarget target) { target.add(getPageBase().getFeedbackPanel()); } - @Override - protected void addNewContainerValuePerformed(AjaxRequestTarget ajaxRequestTarget){ - super.addNewContainerValuePerformed(ajaxRequestTarget); - addOrReplaceProperties(model, form, isPanelVisible, true); - ajaxRequestTarget.add(ContainerValuePanel.this); - } - - - protected void reloadParentContainerPanel(AjaxRequestTarget target){ - target.add(ContainerValuePanel.this); - } }; @@ -139,6 +129,8 @@ protected void populateItem(final ListItem item) { item.add(containerPanel); containerPanel.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; + @Override public boolean isVisible() { if (model.getObject().containsMultipleMultivalueContainer() diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java index b45346b9464..80d287105e8 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerValueHeaderPanel.java @@ -9,6 +9,7 @@ import org.apache.commons.lang.StringUtils; 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; @@ -102,6 +103,7 @@ public Object getObject() { })); showMetadataButton.add(new VisibleEnableBehaviour() { + private static final long serialVersionUID = 1L; @Override public boolean isVisible() { for (ItemWrapper wrapper : getModelObject().getItems()) { @@ -163,24 +165,13 @@ public boolean isOn() { sortPropertiesButton.add(buttonsVisibleBehaviour); add(sortPropertiesButton); - ToggleIconButton addChildContainerButton = new ToggleIconButton(ID_ADD_CHILD_CONTAINER, - GuiStyleConstants.CLASS_PLUS_CIRCLE_SUCCESS, GuiStyleConstants.CLASS_PLUS_CIRCLE_SUCCESS) { + AjaxLink addChildContainerButton = new AjaxLink(ID_ADD_CHILD_CONTAINER) { private static final long serialVersionUID = 1L; - @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + @Override + public void onClick(AjaxRequestTarget target) { isChildContainersSelectorPanelVisible = true; target.add(PrismContainerValueHeaderPanel.this); - } - - @Override - protected void onError(AjaxRequestTarget target, Form form) { - target.add(getPageBase().getFeedbackPanel()); - } - - @Override - public boolean isOn() { - return true; } }; addChildContainerButton.add(new VisibleEnableBehaviour(){ @@ -195,39 +186,28 @@ public boolean isVisible(){ }); add(addChildContainerButton); + List pathsList = getModelObject().getChildMultivalueContainersToBeAdded(); + WebMarkupContainer childContainersSelectorPanel = new WebMarkupContainer(ID_CHILD_CONTAINERS_SELECTOR_PANEL); childContainersSelectorPanel.add(new VisibleEnableBehaviour(){ private static final long serialVersionUID = 1L; @Override public boolean isVisible(){ - return isChildContainersSelectorPanelVisible; + return pathsList.size() > 1 && isChildContainersSelectorPanelVisible; } }); childContainersSelectorPanel.setOutputMarkupId(true); add(childContainersSelectorPanel); - List pathsList = getModelObject().getChildMultivalueContainersToBeAdded(); -// if(pathsList.size() != 1) { - DropDownChoicePanel multivalueContainersList = new DropDownChoicePanel<>(ID_CHILD_CONTAINERS_LIST, - Model.of(pathsList.size() > 0 ? pathsList.get(0) : null), Model.ofList(pathsList), - new QNameIChoiceRenderer(getModelObject().getDefinition().getCompileTimeClass().getSimpleName())); - multivalueContainersList.setOutputMarkupId(true); - multivalueContainersList.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); - childContainersSelectorPanel.add(multivalueContainersList); - multivalueContainersList.add(new VisibleEnableBehaviour() { - - @Override - public boolean isVisible() { - return pathsList.size() > 1; - } - }); -// } else { -// Label containerName = new Label(ID_CHILD_CONTAINERS_LIST, getPathDisplayName(pathsList.get(0))); -//// TextField containerName = new TextField(ID_CHILD_CONTAINERS_LIST, Model.of(getPathDisplayName(pathsList.get(0)))); -// childContainersSelectorPanel.add(containerName); -// } + + DropDownChoicePanel multivalueContainersList = new DropDownChoicePanel<>(ID_CHILD_CONTAINERS_LIST, + Model.of(pathsList.size() > 0 ? pathsList.get(0) : null), Model.ofList(pathsList), + new QNameIChoiceRenderer(getModelObject().getDefinition().getCompileTimeClass().getSimpleName())); + multivalueContainersList.setOutputMarkupId(true); + multivalueContainersList.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); + childContainersSelectorPanel.add(multivalueContainersList); childContainersSelectorPanel.add(new AjaxButton(ID_ADD_BUTTON, createStringResource("prismValuePanel.add")) { - + private static final long serialVersionUID = 1L; @Override @@ -236,27 +216,14 @@ public void onClick(AjaxRequestTarget ajaxRequestTarget) { } }); - - ToggleIconButton removeContainerButton = new ToggleIconButton(ID_REMOVE_CONTAINER, - GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER, GuiStyleConstants.CLASS_MINUS_CIRCLE_DANGER) { + AjaxLink removeContainerButton = new AjaxLink(ID_REMOVE_CONTAINER) { private static final long serialVersionUID = 1L; @Override - protected void onSubmit(AjaxRequestTarget target, Form form) { + public void onClick(AjaxRequestTarget target) { ContainerValueWrapper containerValueWrapper = PrismContainerValueHeaderPanel.this.getModelObject(); containerValueWrapper.setStatus(ValueStatus.DELETED); - target.add(PrismContainerValueHeaderPanel.this); - PrismContainerValueHeaderPanel.this.reloadParentContainerPanel(target); - } - - @Override - protected void onError(AjaxRequestTarget target, Form form) { - target.add(getPageBase().getFeedbackPanel()); - } - - @Override - public boolean isOn() { - return true; + onButtonClick(target); } }; removeContainerButton.add(new VisibleEnableBehaviour(){ @@ -283,6 +250,7 @@ protected void initHeaderLabel(){ } StringResourceModel headerLabelModel = createStringResource(displayName); AjaxButton labelComponent = new AjaxButton(ID_LABEL, headerLabelModel) { + private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { onShowEmptyClick(target); @@ -294,14 +262,12 @@ public void onClick(AjaxRequestTarget target) { } - protected void reloadParentContainerPanel(AjaxRequestTarget target){ - } - protected void addNewContainerValuePerformed(AjaxRequestTarget ajaxRequestTarget){ isChildContainersSelectorPanelVisible = false; getModelObject().setShowEmpty(true, false); createNewContainerValue(getModelObject(), getSelectedContainerQName()); -// ajaxRequestTarget.add(getChildContainersSelectorPanel().getParent()); + onButtonClick(ajaxRequestTarget); + ajaxRequestTarget.add(getChildContainersSelectorPanel().getParent()); } private QName getSelectedContainerQName(){