From 0a9cdf084593ed49e739de714da25945d81d8126 Mon Sep 17 00:00:00 2001 From: Katarina Valalikova Date: Wed, 18 Jul 2018 18:04:30 +0200 Subject: [PATCH] small improvements for showing multivalue containers, fixing delta creation for container adding --- .../component/prism/ContainerValuePanel.java | 25 ++++++---- .../prism/ContainerValueWrapper.java | 7 ++- .../web/component/prism/ContainerWrapper.java | 6 +-- .../prism/PrismContainerHeaderPanel.html | 3 +- .../component/prism/PrismContainerPanel.html | 1 + .../component/prism/PrismContainerPanel.java | 46 ++++++++++--------- .../prism/PrismContainerValueHeaderPanel.java | 35 ++++++++------ 7 files changed, 73 insertions(+), 50 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 8f37b557e16..6e721c05077 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 @@ -16,8 +16,11 @@ package com.evolveum.midpoint.web.component.prism; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.validator.routines.EmailValidator; import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -91,6 +94,8 @@ protected void reloadParentContainerPanel(AjaxRequestTarget target){ target.add(ContainerValuePanel.this); } }; + + header.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @@ -127,18 +132,19 @@ private void addOrReplaceProperties(IModel item) { - + item.setOutputMarkupId(true); if (item.getModel().getObject() instanceof ContainerWrapper) { - PrismContainerPanel containerPanel = new PrismContainerPanel("property", (IModel>) item.getModel(), true, form, isPanaleVisible, pageBase); + PrismContainerPanel containerPanel = new PrismContainerPanel("property", (IModel>) item.getModel(), true, form, isPanaleVisible, pageBase); containerPanel.setOutputMarkupId(true); - item.add(new VisibleEnableBehaviour(){ - private static final long serialVersionUID = 1L; - - public boolean isVisible(){ - return containerPanel.isVisible(); - } - }); item.add(containerPanel); + containerPanel.add(new VisibleEnableBehaviour() { + + @Override + public boolean isVisible() { + return (model.getObject().containsMultipleMultivalueContainer() && item.getModelObject().getItemDefinition().isMultiValue() && CollectionUtils.isEmpty(item.getModelObject().getValues())) ? false : true; + + } + }); return; } @@ -150,6 +156,7 @@ public boolean isVisible(){ } }; properties.setReuseItems(true); + properties.setOutputMarkupId(true); if (isToBeReplaced) { replace(properties); } else { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValueWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValueWrapper.java index 61b50ba55ab..cb5f504bb20 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValueWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerValueWrapper.java @@ -786,12 +786,17 @@ public ContainerValueWrapper findContainerValueWrapper(ItemPath path) { return null; } - public boolean containsMultivalueContainer(){ + public boolean containsMultipleMultivalueContainer(){ + int count = 0; for (ItemWrapper wrapper : getItems()) { if (!(wrapper instanceof ContainerWrapper)) { continue; } if (!((ContainerWrapper) wrapper).getItemDefinition().isSingleValue()){ + count++; + } + + if (count > 1) { return true; } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java index b5781675ae4..c986c806293 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/ContainerWrapper.java @@ -492,9 +492,9 @@ public boolean isVisible() { //TODO: is this correct place? shouldn't we restrict creation for multivalue containers //dirrectly in factory? this can plausible cause problems while computing deltas. - if (!getItem().isSingleValue() && (getValues() == null || getValues().size() == 0)){ - return false; - } +// if (!getItem().isSingleValue() && (getValues() == null || getValues().size() == 0)){ +// return false; +// } switch (objectStatus) { case MODIFYING: diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerHeaderPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerHeaderPanel.html index ba20aa94a54..6393aec4ef6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerHeaderPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerHeaderPanel.html @@ -18,7 +18,8 @@ - + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.html index 90c0d2cce28..e98a5ebeec3 100755 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PrismContainerPanel.html @@ -17,6 +17,7 @@ +
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 c39bfbb984a..0143fcaab48 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 @@ -22,6 +22,8 @@ import com.evolveum.midpoint.web.component.assignment.ConstructionDetailsPanelChainedModel; import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ConstructionType; + +import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; @@ -86,27 +88,27 @@ public boolean 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; -// -// @Override -// protected void onButtonClick(AjaxRequestTarget target) { -// addOrReplaceProperties(model, form, isPanelVisible, true); -// target.add(PrismContainerPanel.this.findParent(PrismPanel.class)); -// } -// -// -// }; -// header.add(new VisibleEnableBehaviour(){ -// private static final long serialVersionUID = 1L; -// -// @Override -// public boolean isVisible(){ -// return showHeader; -// } -// }); -// header.setOutputMarkupId(true); -// add(header); + PrismContainerHeaderPanel header = new PrismContainerHeaderPanel(ID_HEADER, model) { + private static final long serialVersionUID = 1L; + + @Override + protected void onButtonClick(AjaxRequestTarget target) { + addOrReplaceProperties(model, form, isPanelVisible, true); + target.add(PrismContainerPanel.this.getParent()); + } + + + }; + header.add(new VisibleEnableBehaviour(){ + private static final long serialVersionUID = 1L; + + @Override + public boolean isVisible(){ + return model.getObject().getItemDefinition().isMultiValue(); + } + }); + header.setOutputMarkupId(true); + add(header); addOrReplaceProperties(model, form, isPanelVisible, false); } @@ -158,11 +160,13 @@ protected void populateItem(ListItem> item) { ContainerValuePanel containerPanel = new ContainerValuePanel("value", item.getModel(), true, form, isPanelVisible, pageBase); containerPanel.setOutputMarkupId(true); item.add(containerPanel); + item.setOutputMarkupId(true); } }; values.setReuseItems(true); + values.setOutputMarkupId(true); if (isToBeReplaced) { replace(values); } else { 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 14c528b07cf..22b3b1a9774 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 @@ -188,14 +188,14 @@ public boolean isOn() { @Override public boolean isVisible(){ - return getModelObject().containsMultivalueContainer() && getModelObject().getContainer() != null + return getModelObject().containsMultipleMultivalueContainer() && getModelObject().getContainer() != null // && getModelObject().getContainer().isAddContainerButtonVisible() && getModelObject().getDefinition().canModify(); } }); add(addChildContainerButton); - WebMarkupContainer childContainersSelectorPanel = new WebMarkupContainer(ID_CHILD_CONTAINERS_SELECTOR_PANEL); + WebMarkupContainer childContainersSelectorPanel = new WebMarkupContainer(ID_CHILD_CONTAINERS_SELECTOR_PANEL); childContainersSelectorPanel.add(new VisibleEnableBehaviour(){ private static final long serialVersionUID = 1L; @@ -206,21 +206,26 @@ public boolean isVisible(){ }); childContainersSelectorPanel.setOutputMarkupId(true); add(childContainersSelectorPanel); - - List pathsList = getModelObject().getChildMultivalueContainersToBeAdded(); - - if(pathsList.size() != 1) { + 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); - } 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); - } + 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); +// } childContainersSelectorPanel.add(new AjaxButton(ID_ADD_BUTTON, createStringResource("prismValuePanel.add")) { private static final long serialVersionUID = 1L; @@ -298,7 +303,7 @@ protected void addNewContainerValuePerformed(AjaxRequestTarget ajaxRequestTarget isChildContainersSelectorPanelVisible = false; getModelObject().setShowEmpty(true, false); createNewContainerValue(getModelObject(), getSelectedContainerQName()); - ajaxRequestTarget.add(getChildContainersSelectorPanel().getParent()); +// ajaxRequestTarget.add(getChildContainersSelectorPanel().getParent()); } private QName getSelectedContainerQName(){ @@ -330,8 +335,8 @@ private void onShowEmptyClick(AjaxRequestTarget target) { } public void createNewContainerValue(ContainerValueWrapper containerValueWrapper, QName path){ - ContainerWrapper childContainerWrapper = containerValueWrapper.getContainer().findContainerWrapper(new ItemPath(containerValueWrapper.getPath(), - path)); + ItemPath newPath = new ItemPath(containerValueWrapper.getPath(), path); + ContainerWrapper childContainerWrapper = containerValueWrapper.getContainer().findContainerWrapper(newPath); if (childContainerWrapper == null){ return; } @@ -346,7 +351,7 @@ public void createNewContainerValue(ContainerValueWrapper containerValueWrapp ContainerWrapperFactory factory = new ContainerWrapperFactory(getPageBase()); ContainerValueWrapper newValueWrapper = factory.createContainerValueWrapper(childContainerWrapper, newContainerValue, containerValueWrapper.getObjectStatus(), - ValueStatus.ADDED, new ItemPath(path), task); + ValueStatus.ADDED, newPath, task); newValueWrapper.setShowEmpty(true, false); newValueWrapper.computeStripes(); childContainerWrapper.getValues().add(newValueWrapper);