Hello Alona Kaplan,

I'd like you to do a code review.  Please visit

    http://gerrit.ovirt.org/15843

to review the following change.

Change subject: webadmin: Discover Network
......................................................................

webadmin: Discover Network

Added discover networks popup window, in which a provider's network may
be discovered and then chosen to be imported into a data center. This
will be triggered from a button in the Provider/Networks subtab.

Change-Id: I438c806a341742bd97a9d0948764007061354204
Signed-off-by: Alona Kaplan <alkap...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java
12 files changed, 578 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/15843/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index 5ec56a0..f428e69 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -3006,4 +3006,21 @@
             return 
ConstantsManager.getInstance().getConstants().vmUnknownPriority();
         }
     }
+
+    public static void GetExternalNetworkList(AsyncQuery aQuery, Guid 
providerId) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                if (source == null)
+                {
+                    return new ArrayList<Network>();
+                }
+                return source;
+            }
+        };
+        Frontend.RunQuery(VdcQueryType.GetAllExternalNetworksOnProvider,
+                new IdQueryParameters(providerId),
+                aQuery);
+    }
 }
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
new file mode 100644
index 0000000..5441d5f
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/DiscoverNetworksModel.java
@@ -0,0 +1,147 @@
+package org.ovirt.engine.ui.uicommonweb.models.providers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.Provider;
+import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.StringHelper;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+@SuppressWarnings("deprecation")
+public class DiscoverNetworksModel extends Model {
+
+    private static final String CMD_DISCOVER = "OnDiscover"; //$NON-NLS-1$
+    private static final String CMD_CANCEL = "Cancel"; //$NON-NLS-1$
+
+    private final ListModel sourceListModel;
+    private final Provider provider;
+
+    private ListModel dataCenters;
+    private ListModel networkList;
+
+    public ListModel getDataCenters() {
+        return dataCenters;
+    }
+
+    private void setDataCenters(ListModel dc) {
+        this.dataCenters = dc;
+    }
+
+    public ListModel getNetworkList() {
+        return networkList;
+    }
+
+    private void setNetworkList(ListModel networkList) {
+        this.networkList = networkList;
+    }
+
+    public DiscoverNetworksModel(ListModel sourceListModel, Provider provider) 
{
+        this.sourceListModel = sourceListModel;
+        this.provider = provider;
+
+        
setTitle(ConstantsManager.getInstance().getConstants().discoverNetworksTitle());
+        setHashName("discover_networks"); //$NON-NLS-1$
+
+        setDataCenters(new ListModel());
+        setNetworkList(new ListModel());
+
+        UICommand tempVar = new UICommand(CMD_DISCOVER, this);
+        
tempVar.setTitle(ConstantsManager.getInstance().getConstants().importNetworksTitle());
+        tempVar.setIsDefault(true);
+        getCommands().add(tempVar);
+        UICommand tempVar2 = new UICommand(CMD_CANCEL, this);
+        
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        tempVar2.setIsCancel(true);
+        getCommands().add(tempVar2);
+    }
+
+    public void initBackendData() {
+        final AsyncQuery networkQuery = new AsyncQuery();
+        networkQuery.asyncCallback = new INewAsyncCallback() {
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public void onSuccess(Object model, Object returnValue) {
+                List<Network> networks = (ArrayList<Network>) returnValue;
+                List<ExternalNetwork> items = new ArrayList<ExternalNetwork>();
+                for (Network network : networks) {
+                    ExternalNetwork externalNetwork = new ExternalNetwork();
+                    externalNetwork.setNetwork(network);
+                    externalNetwork.setAttached(false);
+                    externalNetwork.setPublicUse(false);
+                    items.add(externalNetwork);
+                }
+                getNetworkList().setItems(items);
+
+                stopProgress();
+            }
+        };
+
+        final AsyncQuery dcQuery = new AsyncQuery();
+        dcQuery.asyncCallback = new INewAsyncCallback() {
+
+            @SuppressWarnings("unchecked")
+            @Override
+            public void onSuccess(Object model, Object returnValue) {
+                ArrayList<StoragePool> dataCenters = (ArrayList<StoragePool>) 
returnValue;
+                getDataCenters().setItems(dataCenters);
+                
getDataCenters().setSelectedItem(Linq.firstOrDefault(dataCenters));
+
+                AsyncDataProvider.GetExternalNetworkList(networkQuery, 
provider.getId());
+            }
+        };
+
+        startProgress(null);
+        AsyncDataProvider.getDataCenterList(dcQuery);
+    }
+
+    public void cancel() {
+        sourceListModel.setWindow(null);
+    }
+
+    @SuppressWarnings("unchecked")
+    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()) {
+                externalNetwork.getNetwork().setDataCenterId(dcId);
+                AddNetworkStoragePoolParameters params =
+                        new AddNetworkStoragePoolParameters(dcId, 
externalNetwork.getNetwork());
+                params.setPublicUse(externalNetwork.isPublicUse());
+                mulipleActionParameters.add(params);
+            }
+        }
+
+        Frontend.RunMultipleAction(VdcActionType.AddNetwork, 
mulipleActionParameters);
+        cancel();
+    }
+
+    @Override
+    public void executeCommand(UICommand command) {
+        super.executeCommand(command);
+
+        if (StringHelper.stringsEqual(command.getName(), CMD_DISCOVER)) {
+            onDiscover();
+        } else if (StringHelper.stringsEqual(command.getName(), CMD_CANCEL)) {
+            cancel();
+        }
+    }
+
+}
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
new file mode 100644
index 0000000..d068a1d
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ExternalNetwork.java
@@ -0,0 +1,39 @@
+package org.ovirt.engine.ui.uicommonweb.models.providers;
+
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+
+public class ExternalNetwork extends EntityModel {
+
+    Network network;
+    boolean attached;
+    private boolean publicUse;
+
+    public ExternalNetwork() {
+    }
+
+    public Network getNetwork() {
+        return network;
+    }
+
+    public void setNetwork(Network network) {
+        this.network = network;
+    }
+
+    public boolean isAttached() {
+        return attached;
+    }
+
+    public void setAttached(boolean attached) {
+        this.attached = attached;
+    }
+
+    public boolean isPublicUse() {
+        return publicUse;
+    }
+
+    public void setPublicUse(boolean publicUse) {
+        this.publicUse = publicUse;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java
index 27dc96a..34774d7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderNetworkListModel.java
@@ -3,14 +3,28 @@
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 
 public class ProviderNetworkListModel extends SearchableListModel {
 
+    private static final String CMD_DISCOVER = "Discover"; //$NON-NLS-1$
+
+    private UICommand privateDiscoverCommand;
+
     public ProviderNetworkListModel() {
         
setTitle(ConstantsManager.getInstance().getConstants().providerNetworksTitle());
         setHashName("provider_networks"); //$NON-NLS-1$
+        setDiscoverCommand(new UICommand(CMD_DISCOVER, this));
+    }
+
+    public UICommand getDiscoverCommand() {
+        return privateDiscoverCommand;
+    }
+
+    private void setDiscoverCommand(UICommand value) {
+        privateDiscoverCommand = value;
     }
 
     @Override
@@ -42,4 +56,22 @@
         super.syncSearch(VdcQueryType.GetAllNetworksForProvider, new 
IdQueryParameters(provider.getId()));
     }
 
+    private void discover() {
+        if (getWindow() != null) {
+            return;
+        }
+        DiscoverNetworksModel discoverModel = new DiscoverNetworksModel(this, 
getEntity());
+        setWindow(discoverModel);
+        discoverModel.initBackendData();
+    }
+
+    @Override
+    public void executeCommand(UICommand command) {
+        super.executeCommand(command);
+
+        if (command == getDiscoverCommand()) {
+            discover();
+        }
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index b962b90..8efd335 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -1885,6 +1885,12 @@
     @DefaultStringValue("Provider(s)")
     String providersMsg();
 
+    @DefaultStringValue("Discover Networks")
+    String discoverNetworksTitle();
+
+    @DefaultStringValue("Import")
+    String importNetworksTitle();
+
     // Gluster Hook
     @DefaultStringValue("Please select a resolve action to continue")
     String noResolveActionSelectedGlusterHook();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index cdce6b3..ab14f52 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -2746,4 +2746,19 @@
     // Provider Network
     @DefaultStringValue("External ID")
     String externalIdProviderNetwork();
+
+    @DefaultStringValue("Discover")
+    String discoverProviderNetwork();
+
+    @DefaultStringValue("Name")
+    String nameNetworkHeader();
+
+    @DefaultStringValue("ID")
+    String idNetworkHeader();
+
+    @DefaultStringValue("All Networks Public")
+    String publicAllNetworks();
+
+    @DefaultStringValue("Public Network")
+    String publicNetwork();
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index bab4ab1..f6f0f38 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -57,6 +57,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaClusterPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.EditQuotaStoragePopupPresenterWidget;
@@ -248,6 +249,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.ProviderPopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.provider.DiscoverNetworkPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaClusterPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.EditQuotaStoragePopupView;
@@ -1209,5 +1211,9 @@
         bindPresenterWidget(ProviderPopupPresenterWidget.class,
                 ProviderPopupPresenterWidget.ViewDef.class,
                 ProviderPopupView.class);
+
+        bindPresenterWidget(DiscoverNetworkPopupPresenterWidget.class,
+                DiscoverNetworkPopupPresenterWidget.ViewDef.class,
+                DiscoverNetworkPopupView.class);
     }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java
index d2c6cc1..07b1ba0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ProviderModule.java
@@ -18,6 +18,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.providers.ProviderNetworkListModel;
 import org.ovirt.engine.ui.webadmin.gin.ClientGinjector;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.ProviderPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget;
 
 import com.google.gwt.inject.client.AbstractGinModule;
 import com.google.inject.Provider;
@@ -78,7 +79,8 @@
 
     @Provides
     @Singleton
-    public SearchableDetailModelProvider<Network, ProviderListModel, 
ProviderNetworkListModel> getProviderNetworkListProvider(ClientGinjector 
ginjector) {
+    public SearchableDetailModelProvider<Network, ProviderListModel, 
ProviderNetworkListModel> getProviderNetworkListProvider(ClientGinjector 
ginjector,
+            final Provider<DiscoverNetworkPopupPresenterWidget> 
discoverNetworkPopupProvider) {
         return new SearchableDetailTabModelProvider<Network, 
ProviderListModel, ProviderNetworkListModel>(ginjector,
                 ProviderListModel.class,
                 ProviderNetworkListModel.class) {
@@ -86,7 +88,11 @@
             public AbstractModelBoundPopupPresenterWidget<? extends Model, ?> 
getModelPopup(ProviderNetworkListModel source,
                     UICommand lastExecutedCommand,
                     Model windowModel) {
-                return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+                if (lastExecutedCommand == getModel().getDiscoverCommand()) {
+                    return discoverNetworkPopupProvider.get();
+                } else {
+                    return super.getModelPopup(source, lastExecutedCommand, 
windowModel);
+                }
             }
 
             @Override
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
new file mode 100644
index 0000000..9573fa1
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/DiscoverNetworkPopupPresenterWidget.java
@@ -0,0 +1,27 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider;
+
+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 com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class DiscoverNetworkPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<DiscoverNetworksModel, 
DiscoverNetworkPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<DiscoverNetworksModel> {
+        void setNetworkList(ListModel networkList);
+    }
+
+    @Inject
+    public DiscoverNetworkPopupPresenterWidget(EventBus eventBus, ViewDef 
view) {
+        super(eventBus, view);
+    }
+
+    @Override
+    public void init(DiscoverNetworksModel model) {
+        super.init(model);
+        getView().setNetworkList(model.getNetworkList());
+    }
+
+}
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
new file mode 100644
index 0000000..f5068c4
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.java
@@ -0,0 +1,239 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.provider;
+
+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.TextColumnWithTooltip;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.providers.DiscoverNetworksModel;
+import org.ovirt.engine.ui.uicommonweb.models.providers.ExternalNetwork;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.provider.DiscoverNetworkPopupPresenterWidget;
+import org.ovirt.engine.ui.webadmin.widget.table.column.CheckboxHeader;
+
+import com.google.gwt.cell.client.Cell.Context;
+import com.google.gwt.cell.client.FieldUpdater;
+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;
+import com.google.inject.Inject;
+
+public class DiscoverNetworkPopupView extends 
AbstractModelBoundPopupView<DiscoverNetworksModel> implements 
DiscoverNetworkPopupPresenterWidget.ViewDef {
+
+    interface Driver extends SimpleBeanEditorDriver<DiscoverNetworksModel, 
DiscoverNetworkPopupView> { }
+
+    private final Driver driver = GWT.create(Driver.class);
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
DiscoverNetworkPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @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;
+
+    @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")
+    Iterable<ExternalNetwork> getNetworksTableItems() {
+        ListModel tableModel = networksTable.flush();
+        return tableModel != null && tableModel.getItems() != null ? 
tableModel.getItems()
+                : new ArrayList<ExternalNetwork>();
+    }
+
+    void refreshNetworksTable() {
+        networksTable.edit(networksTable.flush());
+    }
+
+    void initEntityModelCellTable(final ApplicationConstants constants, final 
ApplicationTemplates templates) {
+        CheckboxHeader assignAllHeader = new 
CheckboxHeader(templates.textForCheckBoxHeader("")) { //$NON-NLS-1$
+            @Override
+            protected void selectionChanged(Boolean value) {
+                for (ExternalNetwork model : getNetworksTableItems()) {
+                    model.setAttached(value);
+                }
+                refreshNetworksTable();
+            }
+
+            @Override
+            public Boolean getValue() {
+                for (ExternalNetwork model : getNetworksTableItems()) {
+                    if (!model.isAttached()) {
+                        return false;
+                    }
+                }
+                return true;
+            }
+
+            @Override
+            public boolean isEnabled() {
+                return true;
+            }
+        };
+
+        networksTable.addColumn(new CheckboxColumn<EntityModel>(new 
FieldUpdater<EntityModel, Boolean>() {
+            @Override
+            public void update(int index, EntityModel model, Boolean value) {
+                ExternalNetwork externalNetwork = (ExternalNetwork) model;
+                externalNetwork.setAttached(value);
+                refreshNetworksTable();
+            }
+        }) {
+            @Override
+            public Boolean getValue(EntityModel model) {
+                return ((ExternalNetwork) model).isAttached();
+            }
+
+            @Override
+            protected boolean canEdit(EntityModel model) {
+                return true;
+            }
+
+            @Override
+            public void render(Context context, EntityModel object, 
SafeHtmlBuilder sb) {
+                super.render(context, object, sb);
+                sb.append(templates.textForCheckBox("")); //$NON-NLS-1$
+            }
+
+        }, assignAllHeader, "80px"); //$NON-NLS-1$
+
+        networksTable.addEntityModelColumn(new 
TextColumnWithTooltip<EntityModel>() {
+            @Override
+            public String getValue(EntityModel model) {
+                return ((ExternalNetwork) model).getNetwork().getName();
+            }
+        }, constants.nameNetworkHeader());
+
+        networksTable.addEntityModelColumn(new 
TextColumnWithTooltip<EntityModel>() {
+            @Override
+            public String getValue(EntityModel model) {
+                return ((ExternalNetwork) 
model).getNetwork().getProvidedBy().getExternalId();
+            }
+        }, constants.idNetworkHeader());
+
+        CheckboxHeader publicAllHeader =
+                new 
CheckboxHeader(templates.textForCheckBoxHeader(constants.publicAllNetworks())) {
+                    @Override
+                    protected void selectionChanged(Boolean value) {
+                        for (ExternalNetwork model : getNetworksTableItems()) {
+                            model.setPublicUse(value);
+                        }
+                        refreshNetworksTable();
+                    }
+
+                    @Override
+                    public Boolean getValue() {
+                        for (ExternalNetwork model : getNetworksTableItems()) {
+                            if (!model.isPublicUse()) {
+                                return false;
+                            }
+                        }
+                        return true;
+                    }
+
+                    @Override
+                    public boolean isEnabled() {
+                        return true;
+                    }
+                };
+
+        networksTable.addColumn(new CheckboxColumn<EntityModel>(new 
FieldUpdater<EntityModel, Boolean>() {
+            @Override
+            public void update(int index, EntityModel model, Boolean value) {
+                ExternalNetwork externalNetwork = (ExternalNetwork) model;
+                externalNetwork.setPublicUse(value);
+                refreshNetworksTable();
+            }
+        }) {
+            @Override
+            public Boolean getValue(EntityModel model) {
+                return ((ExternalNetwork) model).isPublicUse();
+            }
+
+            @Override
+            protected boolean canEdit(EntityModel model) {
+                return true;
+            }
+
+            @Override
+            public void render(Context context, EntityModel object, 
SafeHtmlBuilder sb) {
+                super.render(context, object, sb);
+                
sb.append(templates.textForCheckBox(constants.publicNetwork()));
+            }
+
+        }, publicAllHeader, "80px"); //$NON-NLS-1$
+    }
+
+    @Override
+    public void edit(DiscoverNetworksModel object) {
+        driver.edit(object);
+    }
+
+    @Override
+    public DiscoverNetworksModel flush() {
+        return driver.flush();
+    }
+
+    @Override
+    public void setNetworkList(ListModel networkList) {
+        networksTable.edit(networkList);
+    }
+
+    interface WidgetStyle extends CssResource {
+        String dcEditor();
+    }
+
+}
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
new file mode 100644
index 0000000..f401cae
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/DiscoverNetworkPopupView.ui.xml
@@ -0,0 +1,35 @@
+<?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" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" 
xmlns:we="urn:import:org.ovirt.engine.ui.webadmin.widget.editor">
+
+       <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: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>
+               </d:content>
+       </d:SimpleDialogPanel>
+
+</ui:UiBinder>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java
index 7c899f9..8f6ba77 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/provider/SubTabProviderNetworkView.java
@@ -50,6 +50,13 @@
                     }
                 };
         getTable().addColumn(externalIdColumn, 
constants.externalIdProviderNetwork(), "300px"); //$NON-NLS-1$
+
+        getTable().addActionButton(new 
WebAdminButtonDefinition<Network>(constants.discoverProviderNetwork()) {
+            @Override
+            protected UICommand resolveCommand() {
+                return getDetailModel().getDiscoverCommand();
+            }
+        });
     }
 
 }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I438c806a341742bd97a9d0948764007061354204
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <lver...@redhat.com>
Gerrit-Reviewer: Alona Kaplan <alkap...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to