From 6f0fa5d5f890f086a94d0e14efdc433002f78f0c Mon Sep 17 00:00:00 2001 From: lskublik Date: Tue, 2 Mar 2021 07:18:11 +0100 Subject: [PATCH] adding 'Select object' button to reference search popup panel --- .../gui/api/component/ObjectBrowserPanel.java | 20 +++++++- .../ReferenceValueSearchPopupPanel.html | 6 +-- .../ReferenceValueSearchPopupPanel.java | 46 +++++++++++++++++++ 3 files changed, 67 insertions(+), 5 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java index b420df779f2..92771d7b850 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectBrowserPanel.java @@ -12,6 +12,7 @@ import javax.xml.namespace.QName; import com.evolveum.midpoint.gui.api.component.result.MessagePanel; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.query.ObjectFilter; import com.evolveum.midpoint.prism.query.ObjectQuery; @@ -80,6 +81,16 @@ public ObjectBrowserPanel(String id, final Class defaultType, List< this.parentPage = parentPage; this.queryFilter = queryFilter; this.selectedObjectsList = selectedData; + if (defaultType == null) { + if (supportedTypes == null || supportedTypes.isEmpty()) { + this.defaultType = (Class) ObjectType.class; + } + this.defaultType = + (Class) WebComponentUtil.qnameToClass(parentPage.getPrismContext(), + supportedTypes.iterator().next()); + } else { + this.defaultType = defaultType; + } typeModel = new LoadableModel<>(false) { private static final long serialVersionUID = 1L; @@ -92,9 +103,14 @@ protected ObjectTypes load() { return ObjectTypes.getObjectType(defaultType); } + @Override + public void setObject(ObjectTypes object) { + if (object == null) { + object = ObjectTypes.getObjectType(ObjectBrowserPanel.this.defaultType); + } + super.setObject(object); + } }; - - this.defaultType = defaultType; this.supportedTypes = supportedTypes; this.multiselect = multiselect; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.html index e431325560b..2adc442b95a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.html @@ -37,9 +37,9 @@
-
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.java index 983a5ff804e..70bf6be52a4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/search/ReferenceValueSearchPopupPanel.java @@ -8,13 +8,21 @@ import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.function.Function; import javax.xml.namespace.QName; +import com.evolveum.midpoint.gui.api.component.ObjectBrowserPanel; +import com.evolveum.midpoint.gui.api.component.PopupObjectListPanel; +import com.evolveum.midpoint.prism.query.ObjectFilter; +import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.form.MidpointForm; +import com.evolveum.midpoint.web.component.form.ValueChoosePanel; import com.evolveum.midpoint.web.component.input.DropDownChoicePanel; import com.evolveum.midpoint.web.component.util.EnableBehaviour; +import org.apache.commons.collections4.CollectionUtils; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.form.TextField; @@ -39,6 +47,7 @@ public class ReferenceValueSearchPopupPanel extends Popove private static final String ID_NAME = "name"; private static final String ID_TYPE = "type"; private static final String ID_RELATION = "relation"; + private static final String ID_SELECT_OBJECT_BUTTON = "selectObject"; public ReferenceValueSearchPopupPanel(String id, IModel model) { super(id, model); @@ -134,6 +143,43 @@ public boolean isEnabled() { }); relation.getBaseFormComponent().add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); midpointForm.add(relation); + + AjaxButton selectObject = new AjaxButton(ID_SELECT_OBJECT_BUTTON, + createStringResource("ReferenceValueSearchPopupPanel.selectObject")) { + + private static final long serialVersionUID = 1L; + + @Override + public void onClick(AjaxRequestTarget target) { + List supportedTypes = getSupportedTargetList(); + if (CollectionUtils.isEmpty(supportedTypes)) { + supportedTypes = WebComponentUtil.createObjectTypeList(); + } + ObjectBrowserPanel objectBrowserPanel = new ObjectBrowserPanel( + getPageBase().getMainPopupBodyId(), null, supportedTypes, false, getPageBase(), + null) { + private static final long serialVersionUID = 1L; + + @Override + protected void onSelectPerformed(AjaxRequestTarget target, O object) { + getPageBase().hideMainPopup(target); + if (ReferenceValueSearchPopupPanel.this.getModel().getObject() == null) { + ReferenceValueSearchPopupPanel.this.getModel().setObject(new ObjectReferenceType()); + } + ReferenceValueSearchPopupPanel.this.getModelObject().setOid(object.getOid()); + ReferenceValueSearchPopupPanel.this.getModelObject().setTargetName(object.getName()); + ReferenceValueSearchPopupPanel.this.getModelObject().setType( + object.asPrismObject().getComplexTypeDefinition().getTypeName()); + target.add(oidField); + target.add(nameField); + target.add(type); + } + }; + + getPageBase().showMainPopup(objectBrowserPanel, target); + } + }; + midpointForm.add(selectObject); } protected List getAllowedRelations() {