Alexander Wels has uploaded a new change for review.

Change subject: webadmin: combine datacenter/cluster in host popup
......................................................................

webadmin: combine datacenter/cluster in host popup

- Combine datacenter and cluster into a single drop down.
- Removed population of partial cluster that would cause
  equals of two logical equivalents to fail causing issues
  for the drop dwon.

Change-Id: If42ada78c0b5e72509f0a5a6a5d8cfcefc3ed7d5
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=865810
Signed-off-by: Alexander Wels <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.ui.xml
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBoxEditor.java
8 files changed, 314 insertions(+), 71 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/40/41240/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListModel.java
index 43298b5..745fbb2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/ListModel.java
@@ -83,10 +83,12 @@
         return selectedItem;
     }
 
-    public void setSelectedItem(T value)
-    {
-        if (selectedItem != value)
-        {
+    public void setSelectedItem(T value) {
+        setSelectedItem(value, true);
+    }
+
+    public void setSelectedItem(T value, boolean fireEvent) {
+        if (selectedItem != value && fireEvent) {
             onSelectedItemChanging(value, selectedItem);
             selectedItem = value;
             onSelectedItemChanged();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
index d633c9a..04df2fc 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
@@ -1304,53 +1304,43 @@
                     ArrayList<VDSGroup> clusters = (ArrayList<VDSGroup>) 
result;
                     StoragePool selectedDataCenter = 
getDataCenter().getSelectedItem();
 
-                    // Update selected cluster only if the returned cluster 
list is indeed the selected datacenter's
-                    // clusters
-                    if (clusters.isEmpty()
-                            || clusters.size() > 0
-                            && clusters.get(0)
-                                    .getStoragePoolId()
-                                    .equals(selectedDataCenter.getId()))
-                    {
 
+                    if (hostModel.getIsNew()) {
+                        updateClusterList(hostModel, clusters);
+                    } else {
+                        AsyncQuery architectureQuery = new AsyncQuery();
 
-                        if (hostModel.getIsNew()) {
-                            updateClusterList(hostModel, clusters);
-                        } else {
-                            AsyncQuery architectureQuery = new AsyncQuery();
+                        architectureQuery.setModel(new Object[] { hostModel, 
clusters });
+                        architectureQuery.asyncCallback = new 
INewAsyncCallback() {
+                            @Override
+                            public void onSuccess(Object model, Object 
returnValue) {
+                                Object[] objArray = (Object[]) model;
+                                HostModel hostModel = (HostModel) objArray[0];
+                                ArrayList<VDSGroup> clusters = 
(ArrayList<VDSGroup>) objArray[1];
 
-                            architectureQuery.setModel(new Object[] { 
hostModel, clusters });
-                            architectureQuery.asyncCallback = new 
INewAsyncCallback() {
-                                @Override
-                                public void onSuccess(Object model, Object 
returnValue) {
-                                    Object[] objArray = (Object[]) model;
-                                    HostModel hostModel = (HostModel) 
objArray[0];
-                                    ArrayList<VDSGroup> clusters = 
(ArrayList<VDSGroup>) objArray[1];
+                                ArchitectureType architecture = 
(ArchitectureType) returnValue;
 
-                                    ArchitectureType architecture = 
(ArchitectureType) returnValue;
+                                ArrayList<VDSGroup> filteredClusters = new 
ArrayList<VDSGroup>();
 
-                                    ArrayList<VDSGroup> filteredClusters = new 
ArrayList<VDSGroup>();
-
-                                    for (VDSGroup cluster : clusters) {
-                                        if (architecture == 
ArchitectureType.undefined
-                                                || cluster.getArchitecture() 
== ArchitectureType.undefined
-                                                || cluster.getArchitecture() 
== architecture) {
-                                            filteredClusters.add(cluster);
-                                        }
+                                for (VDSGroup cluster : clusters) {
+                                    if (architecture == 
ArchitectureType.undefined
+                                            || cluster.getArchitecture() == 
ArchitectureType.undefined
+                                            || cluster.getArchitecture() == 
architecture) {
+                                        filteredClusters.add(cluster);
                                     }
-
-                                    updateClusterList(hostModel, 
filteredClusters);
                                 }
-                            };
 
-                            
AsyncDataProvider.getInstance().getHostArchitecture(architectureQuery, 
hostModel.getHostId());
+                                updateClusterList(hostModel, filteredClusters);
+                            }
+                        };
 
-                        }
+                        
AsyncDataProvider.getInstance().getHostArchitecture(architectureQuery, 
hostModel.getHostId());
+
                     }
                 }
             };
 
-            AsyncDataProvider.getInstance().getClusterList(_asyncQuery, 
dataCenter.getId());
+            AsyncDataProvider.getInstance().getClusterList(_asyncQuery);
         }
     }
 
@@ -1390,6 +1380,13 @@
                     updatePmTypeList(pmTypes, getPmSecondaryType());
                 }
             }), cluster.getCompatibilityVersion());
+            //Match the appropriate selected data center to the selected 
cluster, don't fire update events.
+            for (StoragePool datacenter : getDataCenter().getItems()) {
+                if (datacenter.getId().equals(cluster.getStoragePoolId())) {
+                    getDataCenter().setSelectedItem(datacenter, false);
+                    break;
+                }
+            }
         }
     }
 
@@ -1862,23 +1859,6 @@
             getIsPm().setEntity(vds.isPmEnabled());
         }
         updateModelDataCenterFromVds(dataCenters, vds);
-
-        ArrayList<VDSGroup> clusters;
-        if (getCluster().getItems() == null)
-        {
-            VDSGroup tempVar = new VDSGroup();
-            tempVar.setName(vds.getVdsGroupName());
-            tempVar.setId(vds.getVdsGroupId());
-            
tempVar.setCompatibilityVersion(vds.getVdsGroupCompatibilityVersion());
-            getCluster()
-                    .setItems(new ArrayList<VDSGroup>(Arrays.asList(new 
VDSGroup[] { tempVar })));
-        }
-        clusters = (ArrayList<VDSGroup>) getCluster().getItems();
-        updateModelClusterFromVds(clusters, vds);
-        if (getCluster().getSelectedItem() == null)
-        {
-            getCluster().setSelectedItem(Linq.firstOrDefault(clusters));
-        }
 
         if (vds.getStatus() != VDSStatus.Maintenance &&
             vds.getStatus() != VDSStatus.PendingApproval &&
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
index 7444885..d8f64e4 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationMessages.java
@@ -124,4 +124,7 @@
 
     @DefaultMessage("{0} ({1})")
     String nameId(String name, String id);
+
+    @DefaultMessage("Data Center: {0}")
+    String hostDataCenter(String storagePoolName);
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java
index b5185e3..c3d00b5 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.java
@@ -8,7 +8,6 @@
 import org.ovirt.engine.core.common.businessentities.ExternalEntityBase;
 import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.Provider;
-import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
@@ -51,6 +50,7 @@
 import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
 import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.widget.editor.DataCenterClusterListModelListBoxEditor;
 import org.ovirt.engine.ui.webadmin.widget.provider.HostNetworkProviderWidget;
 
 import com.google.gwt.core.client.GWT;
@@ -113,14 +113,9 @@
     DialogTab powerManagementTab;
 
     @UiField(provided = true)
-    @Path(value = "dataCenter.selectedItem")
-    @WithElementId("dataCenter")
-    ListModelListBoxEditor<StoragePool> dataCenterEditor;
-
-    @UiField(provided = true)
     @Path(value = "cluster.selectedItem")
     @WithElementId("cluster")
-    ListModelListBoxEditor<VDSGroup> clusterEditor;
+    DataCenterClusterListModelListBoxEditor clusterEditor;
 
     @UiField
     @Path(value = "name.entity")
@@ -541,9 +536,7 @@
         publicKeyEditor = new StringEntityModelTextAreaLabelEditor();
 
         // List boxes
-        dataCenterEditor = new ListModelListBoxEditor<>(new 
NameRenderer<StoragePool>());
-
-        clusterEditor = new ListModelListBoxEditor<>(new 
NameRenderer<VDSGroup>());
+        clusterEditor = new DataCenterClusterListModelListBoxEditor(new 
NameRenderer<VDSGroup>());
 
         externalHostNameEditor = new ListModelListBoxEditor<>(new 
NameRenderer<VDS>());
 
@@ -599,7 +592,6 @@
     void localize() {
         // General tab
         generalTab.setLabel(constants.hostPopupGeneralTabLabel());
-        dataCenterEditor.setLabel(constants.hostPopupDataCenterLabel());
         clusterEditor.setLabel(constants.hostPopupClusterLabel());
         nameEditor.setLabel(constants.hostPopupNameLabel());
         userNameEditor.setLabel(constants.hostPopupUsernameLabel());
@@ -1125,7 +1117,6 @@
     @Override
     public int setTabIndexes(int nextTabIndex) {
         // ==General Tab==
-        dataCenterEditor.setTabIndex(nextTabIndex++);
         clusterEditor.setTabIndex(nextTabIndex++);
         externalHostProviderEnabledEditor.setTabIndex(nextTabIndex++);
         providersEditor.setTabIndex(nextTabIndex++);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
index 87e8eb5..8b5f575 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
@@ -8,6 +8,7 @@
              
xmlns:ge="urn:import:org.ovirt.engine.ui.common.widget.editor.generic"
              xmlns:w="urn:import:org.ovirt.engine.ui.common.widget"
              xmlns:p="urn:import:org.ovirt.engine.ui.webadmin.widget.provider"
+             xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor"
              xmlns:b="urn:import:org.gwtbootstrap3.client.ui">
 
     <ui:with field='constants' 
type='org.ovirt.engine.ui.common.CommonApplicationConstants'/>
@@ -258,10 +259,7 @@
                         <t:content>
                             <b:Container addStyleNames="{style.container}">
                                 <b:Row 
addStyleNames="{style.generalTabTopDecorator} {style.topElement}">
-                                    <e:ListModelListBoxEditor 
ui:field="dataCenterEditor" usePatternFly="true" labelColSize="LG_5" 
widgetColSize="LG_7"/>
-                                </b:Row>
-                                <b:Row 
addStyleNames="{style.generalTabTopDecorator}">
-                                    <e:ListModelListBoxEditor 
ui:field="clusterEditor" usePatternFly="true" labelColSize="LG_5" 
widgetColSize="LG_7"/>
+                                    
<we:DataCenterClusterListModelListBoxEditor ui:field="clusterEditor" 
usePatternFly="true" labelColSize="LG_5" widgetColSize="LG_7"/>
                                 </b:Row>
                                 <b:Row 
addStyleNames="{style.generalTabTopDecorator}">
                                     <b:Column size="LG_5">
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.java
new file mode 100644
index 0000000..efef892
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.java
@@ -0,0 +1,177 @@
+package org.ovirt.engine.ui.webadmin.widget.editor;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.gwtbootstrap3.client.ui.constants.Styles;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBox;
+import org.ovirt.engine.ui.webadmin.ApplicationMessages;
+import org.ovirt.engine.ui.webadmin.gin.AssetProvider;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.OptGroupElement;
+import com.google.gwt.dom.client.OptionElement;
+import com.google.gwt.dom.client.SelectElement;
+import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.event.dom.client.ChangeHandler;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.ListBox;
+import com.google.gwt.user.client.ui.Widget;
+
+public class DataCenterClusterListModelListBox extends 
ListModelListBox<VDSGroup> {
+    interface Style extends CssResource {
+        String container();
+        String listBox();
+        String labelContainer();
+    }
+
+    interface DataCenterClusterListUiBinder extends UiBinder<FlowPanel, 
DataCenterClusterListModelListBox> {
+        DataCenterClusterListUiBinder uiBinder = 
GWT.create(DataCenterClusterListUiBinder.class);
+    }
+
+    @UiField
+    FlowPanel container;
+
+    @UiField
+    FlowPanel dataCenterLabelContainer;
+
+    @UiField
+    Label dataCenterLabel;
+
+    @UiField
+    public Style style;
+
+    List<VDSGroup> clusters = new ArrayList<VDSGroup>();
+    ApplicationMessages messages = AssetProvider.getMessages();
+
+    public DataCenterClusterListModelListBox(Renderer<VDSGroup> renderer) {
+        super(renderer);
+    }
+
+    /**
+     * Set the value, do nothing if the value is null.
+     */
+    public void setValue(VDSGroup value) {
+        if (value != null) {
+            super.setValue(value);
+        }
+    }
+
+    @Override
+    protected void initWidget(Widget widget) {
+        container = 
DataCenterClusterListUiBinder.uiBinder.createAndBindUi(this);
+        super.initWidget(container);
+        container.insert(widget, 0);
+        getListBox().addChangeHandler(new ChangeHandler() {
+            @Override
+            public void onChange(ChangeEvent event) {
+                updateDataCenterLabel();
+            }
+        });
+    }
+
+    @Override
+    protected Widget getWidget() {
+        return container.getWidget(0);
+    }
+
+    /**
+     * Set the acceptable values as well as generating the appropriate 
OptionGroups based on the data center
+     * names.
+     */
+    @Override
+    public void setAcceptableValues(Collection<VDSGroup> newValues) {
+        if (newValues instanceof List) {
+            List<VDSGroup> sortedValues = (List<VDSGroup>) newValues;
+            Collections.sort(sortedValues, new DataCenterClusterComparator());
+            //Get the internal state of the ValueListBox correct.
+            super.setAcceptableValues(sortedValues);
+            //Store the current selected index.
+            int index = getListBox().getSelectedIndex();
+
+            ListBox listBox = asListBox();
+            SelectElement selectElement = listBox.getElement().cast();
+            //Wipe out the existing options and group option elements.
+            selectElement.removeAllChildren();
+            clusters.clear();
+            //Build the group options with the associated option elements, the 
list is sorted so we can get away
+            //with simply checking for a change in the data center to 
determine if we need to add a new group
+            //element.
+            String currentDataCenter = null;
+            OptGroupElement groupElement = null;
+            for (VDSGroup nextValue : sortedValues) {
+                if (nextValue.getStoragePoolName() != null
+                        && 
!nextValue.getStoragePoolName().equals(currentDataCenter)) {
+                    groupElement = Document.get().createOptGroupElement();
+                    groupElement.setLabel(nextValue.getStoragePoolName());
+                    selectElement.appendChild(groupElement);
+                    currentDataCenter = nextValue.getStoragePoolName();
+                }
+                if (groupElement != null && nextValue.getStoragePoolName() != 
null) {
+                    OptionElement optionElement = 
Document.get().createOptionElement();
+                    optionElement.setText(nextValue.getName());
+                    groupElement.appendChild(optionElement);
+                    clusters.add(nextValue);
+                }
+            }
+            //Since the group elements don't count for index purposes, we can 
restore the index on the list box
+            //to be what it was before wiping out the original option elements.
+            getListBox().setSelectedIndex(index);
+            updateDataCenterLabel();
+        }
+    }
+
+    /**
+     * Get the {@code ListBox} widget.
+     * @return The widget.
+     */
+    public ListBox getListBox() {
+        return (ListBox) getWidget();
+    }
+
+    /**
+     * Comparator that sorts on data center name first, and then cluster name. 
Ignoring case.
+     */
+    private static final class DataCenterClusterComparator implements 
Comparator<VDSGroup> {
+
+        @Override
+        public int compare(VDSGroup cluster1, VDSGroup cluster2) {
+            if (cluster1.getStoragePoolName() != null && 
cluster2.getStoragePoolName() == null) {
+                return -1;
+            } else if (cluster2.getStoragePoolName() != null && 
cluster1.getStoragePoolName() == null) {
+                return 1;
+            } else if (cluster1.getStoragePoolName() == null && 
cluster2.getStoragePoolName() == null) {
+                return 0;
+            }
+            if 
(cluster1.getStoragePoolName().equals(cluster2.getStoragePoolName())) {
+                return 
cluster1.getName().compareToIgnoreCase(cluster2.getName());
+            } else {
+                return 
cluster1.getStoragePoolName().compareToIgnoreCase(cluster2.getStoragePoolName());
+            }
+        }
+    }
+
+    public void setUsePatternFly(boolean usePatternFly) {
+        if (usePatternFly) {
+            container.addStyleName(Styles.FORM_CONTROL);
+            container.addStyleName(style.container());
+            getWidget().addStyleName(style.listBox());
+            dataCenterLabelContainer.addStyleName(style.labelContainer());
+        }
+    }
+
+    private void updateDataCenterLabel() {
+        dataCenterLabel.setText(messages.hostDataCenter(
+                
clusters.get(getListBox().getSelectedIndex()).getStoragePoolName()));
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.ui.xml
new file mode 100644
index 0000000..93daa0d
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBox.ui.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+    xmlns:g="urn:import:com.google.gwt.user.client.ui">
+
+    <ui:style 
type="org.ovirt.engine.ui.webadmin.widget.editor.DataCenterClusterListModelListBox.Style">
+        .container {
+            height: 100%;
+            border: solid 1px gray;
+            padding: 0px;
+        }
+
+        .labelContainer_legacy {
+            text-align: left;
+        }
+
+        .labelContainer {
+            border: none;
+            border-top: solid 1px gray;
+            font-style: italic;
+        }
+
+        .listBox {
+            height: 21px;
+            width: 100%;
+            border: none;
+        }
+    </ui:style>
+
+    <g:FlowPanel ui:field="container">
+        <g:FlowPanel ui:field="dataCenterLabelContainer" 
addStyleNames="input-group-addon {style.labelContainer_legacy}">
+            <g:Label ui:field="dataCenterLabel"/>
+        </g:FlowPanel>
+    </g:FlowPanel>
+
+</ui:UiBinder>
+
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBoxEditor.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBoxEditor.java
new file mode 100644
index 0000000..9cd665c
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/editor/DataCenterClusterListModelListBoxEditor.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.ui.webadmin.widget.editor;
+
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel;
+import org.ovirt.engine.ui.common.widget.VisibilityRenderer;
+import org.ovirt.engine.ui.common.widget.editor.WidgetWithLabelEditor;
+import org.ovirt.engine.ui.common.widget.renderer.StringRenderer;
+
+import com.google.gwt.editor.client.IsEditor;
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.client.ui.ListBox;
+
+public class DataCenterClusterListModelListBoxEditor
+    extends AbstractValidatedWidgetWithLabel<VDSGroup, 
DataCenterClusterListModelListBox>
+    implements IsEditor<WidgetWithLabelEditor<VDSGroup, 
DataCenterClusterListModelListBoxEditor>>{
+
+    private final WidgetWithLabelEditor<VDSGroup, 
DataCenterClusterListModelListBoxEditor> editor;
+
+    public DataCenterClusterListModelListBoxEditor() {
+        this(new StringRenderer<VDSGroup>());
+    }
+
+    public DataCenterClusterListModelListBoxEditor(VisibilityRenderer 
visibilityRenderer) {
+        this(new StringRenderer<VDSGroup>(), visibilityRenderer);
+    }
+
+    public DataCenterClusterListModelListBoxEditor(Renderer<VDSGroup> 
renderer, VisibilityRenderer visibilityRenderer) {
+        super(new DataCenterClusterListModelListBox(renderer), 
visibilityRenderer);
+        this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), 
this);
+    }
+
+    public DataCenterClusterListModelListBoxEditor(Renderer<VDSGroup> 
renderer) {
+        this(renderer, new VisibilityRenderer.SimpleVisibilityRenderer());
+    }
+
+    public 
DataCenterClusterListModelListBoxEditor(DataCenterClusterListModelListBox 
contentWidget) {
+        super(contentWidget);
+        this.editor = WidgetWithLabelEditor.of(getContentWidget().asEditor(), 
this);
+    }
+
+    public ListBox asListBox() {
+        return getContentWidget().asListBox();
+    }
+
+    @Override
+    public WidgetWithLabelEditor<VDSGroup, 
DataCenterClusterListModelListBoxEditor> asEditor() {
+        return editor;
+    }
+
+    @Override
+    public void setUsePatternFly(boolean usePatternFly) {
+        super.setUsePatternFly(usePatternFly);
+        getContentWidget().setUsePatternFly(usePatternFly);
+    }
+}


-- 
To view, visit https://gerrit.ovirt.org/41240
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If42ada78c0b5e72509f0a5a6a5d8cfcefc3ed7d5
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alexander Wels <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to