Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Added DC-per-network choice in Discovery popup
......................................................................

webadmin: Added DC-per-network choice in Discovery popup

A different DC may be picked for each imported network.

Change-Id: If217cbd8938a81ab0c6c8fed2a12f96b41ad99b8
Signed-off-by: Lior Vernia <[email protected]>
---
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
7 files changed, 164 insertions(+), 58 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/25/15525/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java
new file mode 100644
index 0000000..00049ad
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxCell.java
@@ -0,0 +1,88 @@
+package org.ovirt.engine.ui.common.widget.table.column;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+import com.google.gwt.cell.client.AbstractInputCell;
+import com.google.gwt.cell.client.SelectionCell;
+import com.google.gwt.cell.client.ValueUpdater;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
+import com.google.gwt.text.shared.Renderer;
+
+/**
+ * This class may be used to display a ListBox, backed by a ListModel, in cell 
widgets. It mimics the behaviour of a
+ * SelectionCell by passing on rendering requests and browser events to a 
member delegate. The SelectionCell options are
+ * set by rendering the items of a ListModel using the renderer passed to the 
constructor. Additional functionality
+ * includes enabling/disabling the ListBox according to the IsChangeable state 
of the ListModel.
+ *
+ * @param <T>
+ *            the ListModel item type.
+ */
+public class ListModelListBoxCell<T> extends AbstractInputCell<ListModel, 
String> {
+
+    private static final String PATTERN_SELECT = "<select"; //$NON-NLS-1$
+    private static final String REPLACEMENT_SELECT = "<select disabled"; 
//$NON-NLS-1$
+
+    private SelectionCell delegate;
+    private Map<String, T> entityByName;
+    private final Renderer<T> renderer;
+
+    public ListModelListBoxCell(final Renderer<T> renderer) {
+        super("change"); //$NON-NLS-1$
+        this.renderer = renderer;
+    }
+
+    @SuppressWarnings("unchecked")
+    public void setOptions(ListModel model) {
+        entityByName = new HashMap<String, T>();
+        List<String> options = new ArrayList<String>();
+        for (T entity : (Iterable<T>) model.getItems()) {
+            String entityName = renderer.render(entity);
+            entityByName.put(entityName, entity);
+            options.add(entityName);
+        }
+        delegate = new SelectionCell(options);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void render(Context context, ListModel value, SafeHtmlBuilder sb) {
+        SafeHtmlBuilder sbDelegate = new SafeHtmlBuilder();
+        delegate.render(context, renderer.render((T) value.getSelectedItem()), 
sbDelegate);
+        if (value.getIsChangable()) {
+            sb.append(sbDelegate.toSafeHtml());
+        } else {
+            
sb.appendHtmlConstant(sbDelegate.toSafeHtml().asString().replaceFirst(PATTERN_SELECT,
 REPLACEMENT_SELECT));
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void onBrowserEvent(Context context,
+            Element parent,
+            final ListModel model,
+            NativeEvent event,
+            ValueUpdater<ListModel> valueUpdater) {
+
+        delegate.onBrowserEvent(context,
+                parent,
+                renderer.render((T) model.getSelectedItem()),
+                event,
+                new ValueUpdater<String>() {
+
+                    @Override
+                    public void update(String value) {
+                        if (value != null) {
+                            model.setSelectedItem(entityByName.get(value));
+                        }
+                    }
+                });
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java
new file mode 100644
index 0000000..6b23a6d
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ListModelListBoxColumn.java
@@ -0,0 +1,27 @@
+package org.ovirt.engine.ui.common.widget.table.column;
+
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+import com.google.gwt.text.shared.Renderer;
+import com.google.gwt.user.cellview.client.Column;
+
+/**
+ * Column for displaying a ListBox backed by ListModel using {@link 
ListModelListBoxCell}.
+ *
+ * @param <T>
+ *            the row type.
+ * @param <S>
+ *            the ListModel item type.
+ */
+public abstract class ListModelListBoxColumn<T, S> extends Column<T, 
ListModel> {
+
+    public ListModelListBoxColumn(Renderer<S> renderer) {
+        super(new ListModelListBoxCell<S>(renderer));
+    }
+
+    @SuppressWarnings("unchecked")
+    public void setOptions(ListModel model) {
+        ((ListModelListBoxCell<S>) getCell()).setOptions(model);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
index 5441d5f..1913fb7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
@@ -82,6 +82,10 @@
                     ExternalNetwork externalNetwork = new ExternalNetwork();
                     externalNetwork.setNetwork(network);
                     externalNetwork.setAttached(false);
+                    externalNetwork.getDataCenters().setIsChangable(false);
+                    Iterable<Object> dcList = getDataCenters().getItems();
+                    externalNetwork.getDataCenters().setItems(dcList);
+                    
externalNetwork.getDataCenters().setSelectedItem(Linq.firstOrDefault(dcList));
                     externalNetwork.setPublicUse(false);
                     items.add(externalNetwork);
                 }
@@ -117,10 +121,10 @@
     public void onDiscover() {
         ArrayList<VdcActionParametersBase> mulipleActionParameters =
                 new ArrayList<VdcActionParametersBase>();
-        Guid dcId = ((StoragePool) 
(getDataCenters().getSelectedItem())).getId();
 
         for (ExternalNetwork externalNetwork : (List<ExternalNetwork>) 
getNetworkList().getItems()) {
             if (externalNetwork.isAttached()) {
+                Guid dcId = ((StoragePool) 
externalNetwork.getDataCenters().getSelectedItem()).getId();
                 externalNetwork.getNetwork().setDataCenterId(dcId);
                 AddNetworkStoragePoolParameters params =
                         new AddNetworkStoragePoolParameters(dcId, 
externalNetwork.getNetwork());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
index d068a1d..0ecf79c 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
@@ -2,14 +2,17 @@
 
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 
 public class ExternalNetwork extends EntityModel {
 
     Network network;
+    ListModel dcList;
     boolean attached;
     private boolean publicUse;
 
     public ExternalNetwork() {
+        dcList = new ListModel();
     }
 
     public Network getNetwork() {
@@ -20,6 +23,10 @@
         this.network = network;
     }
 
+    public ListModel getDataCenters() {
+        return dcList;
+    }
+
     public boolean isAttached() {
         return attached;
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
index 9573fa1..064d54c 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
@@ -3,6 +3,9 @@
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.providers.DiscoverNetworksModel;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.IEventListener;
 
 import com.google.gwt.event.shared.EventBus;
 import com.google.inject.Inject;
@@ -11,6 +14,7 @@
 
     public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<DiscoverNetworksModel> {
         void setNetworkList(ListModel networkList);
+        void setDataCenterList(ListModel dcList);
     }
 
     @Inject
@@ -19,9 +23,16 @@
     }
 
     @Override
-    public void init(DiscoverNetworksModel model) {
+    public void init(final DiscoverNetworksModel model) {
         super.init(model);
         getView().setNetworkList(model.getNetworkList());
-    }
 
+        model.getDataCenters().getItemsChangedEvent().addListener(new 
IEventListener() {
+
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                getView().setDataCenterList(model.getDataCenters());
+            }
+        });
+    }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
index 168a426..71e4ebc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
@@ -3,14 +3,13 @@
 import java.util.ArrayList;
 
 import org.ovirt.engine.core.common.businessentities.StoragePool;
-import org.ovirt.engine.ui.common.idhandler.WithElementId;
 import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
 import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
 import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
 import 
org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable.SelectionMode;
-import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
 import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import org.ovirt.engine.ui.common.widget.table.column.CheckboxColumn;
+import org.ovirt.engine.ui.common.widget.table.column.ListModelListBoxColumn;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -27,7 +26,6 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.editor.client.SimpleBeanEditorDriver;
 import com.google.gwt.event.shared.EventBus;
-import com.google.gwt.resources.client.CssResource;
 import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
 import com.google.gwt.uibinder.client.UiBinder;
 import com.google.gwt.uibinder.client.UiField;
@@ -44,47 +42,20 @@
     }
 
     @UiField(provided = true)
-    @Path(value = "dataCenters.selectedItem")
-    @WithElementId("dataCenter")
-    public ListModelListBoxEditor<Object> dataCenterEditor;
-
-    @UiField(provided = true)
     @Ignore
     public final EntityModelCellTable<ListModel> networksTable;
 
-    @UiField
-    public WidgetStyle style;
+    private ListModelListBoxColumn<EntityModel, StoragePool> dcColumn;
 
     @Inject
     public DiscoverNetworkPopupView(EventBus eventBus, ApplicationResources 
resources,
             ApplicationConstants constants, ApplicationTemplates templates) {
         super(eventBus, resources);
         // Initialize Editors
-        dataCenterEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
-            @Override
-            public String renderNullSafe(Object object) {
-                return ((StoragePool) object).getname();
-            }
-        });
         this.networksTable = new 
EntityModelCellTable<ListModel>(SelectionMode.NONE, true);
         initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
         initEntityModelCellTable(constants, templates);
-        localize(constants);
-        addStyles();
         driver.initialize(this);
-    }
-
-    private void addStyles() {
-        dataCenterEditor.addWrapperStyleName(style.dcEditor());
-    }
-
-    protected void localize(ApplicationConstants constants) {
-        dataCenterEditor.setLabel(constants.networkPopupDataCenterLabel());
-    }
-
-    @Override
-    public void focusInput() {
-        dataCenterEditor.setFocus(true);
     }
 
     @SuppressWarnings("unchecked")
@@ -129,6 +100,7 @@
             public void update(int index, EntityModel model, Boolean value) {
                 ExternalNetwork externalNetwork = (ExternalNetwork) model;
                 externalNetwork.setAttached(value);
+                externalNetwork.getDataCenters().setIsChangable(value);
                 refreshNetworksTable();
             }
         }) {
@@ -149,6 +121,20 @@
             }
 
         }, assignAllHeader, "80px"); //$NON-NLS-1$
+
+        dcColumn = new ListModelListBoxColumn<EntityModel, StoragePool>(new 
NullSafeRenderer<StoragePool>() {
+            @Override
+            public String renderNullSafe(StoragePool dc) {
+                return dc.getname();
+            }
+        })
+        {
+            @Override
+            public ListModel getValue(EntityModel network) {
+                return ((ExternalNetwork) network).getDataCenters();
+            }
+        };
+        networksTable.addColumn(dcColumn);
 
         networksTable.addEntityModelColumn(new 
TextColumnWithTooltip<EntityModel>() {
             @Override
@@ -232,8 +218,9 @@
         networksTable.edit(networkList);
     }
 
-    interface WidgetStyle extends CssResource {
-        String dcEditor();
+    @Override
+    public void setDataCenterList(ListModel dcList) {
+        dcColumn.setOptions(dcList);
     }
 
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
index f401cae..a952459 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
@@ -6,29 +6,11 @@
 
        <ui:with field='constants' 
type='org.ovirt.engine.ui.webadmin.ApplicationConstants' />
 
-       <ui:style 
type="org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.DiscoverNetworkPopupView.WidgetStyle">
-               .indent {
-                       padding-left: 8px;
-                       width: 100%;
-               }
-
-               .dcEditor {
-                       width: 340px;
-               }
-       </ui:style>
-
-       <d:SimpleDialogPanel ui:field="mainPanel" width="570px" height="520px">
+       <d:SimpleDialogPanel ui:field="mainPanel" width="620px" height="520px">
                <d:content>
-                   <g:VerticalPanel>
-                               <e:ListModelListBoxEditor 
ui:field="dataCenterEditor"/>
-                               <g:VerticalPanel>
-                                       <g:HTMLPanel 
addStyleNames="{style.indent}">
-                                               <g:ScrollPanel height="160px" 
width="100%">
-                                                       <e:EntityModelCellTable 
ui:field="networksTable" />
-                                               </g:ScrollPanel>
-                                       </g:HTMLPanel>
-                               </g:VerticalPanel>
-                   </g:VerticalPanel>
+                       <g:ScrollPanel>
+                               <e:EntityModelCellTable 
ui:field="networksTable" />
+                       </g:ScrollPanel>
                </d:content>
        </d:SimpleDialogPanel>
 


-- 
To view, visit http://gerrit.ovirt.org/15525
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to