Tomas Jelinek has uploaded a new change for review.

Change subject: webadmin: Network builders
......................................................................

webadmin: Network builders

Instance types Phase 1: extract and merge common code
as builders from models.

This will be needed by the new/edit instance dialog which will have the
functionality to:
- create a default NIC to a new VM
- assign a logical network to a NIC

Change-Id: Icae2963687ad7978c3caa026e7062e7a1937d320
Signed-off-by: Tomas Jelinek <[email protected]>
---
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/AddNullNetworkBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/BaseInitSelectedNetworkBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitEditSelectedNetworkBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitNewSelectedNetworkBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/SetupNetworksBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseEditVmInterfaceModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditVmInterfaceModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmInterfaceModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceModel.java
9 files changed, 281 insertions(+), 81 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/18/13918/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/AddNullNetworkBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/AddNullNetworkBuilder.java
new file mode 100644
index 0000000..c39582b
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/AddNullNetworkBuilder.java
@@ -0,0 +1,59 @@
+package org.ovirt.engine.ui.uicommonweb.builders.network;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
+import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public class AddNullNetworkBuilder extends 
BaseSyncBuilder<List<VmNetworkInterface>, List<? extends ListModel>> {
+
+    private final VDSGroup cluster;
+
+    public AddNullNetworkBuilder(VDSGroup cluster) {
+        this.cluster = cluster;
+    }
+
+    @Override
+    protected void build(List<VmNetworkInterface> source, List<? extends 
ListModel> destinations) {
+        if (!isNullNetworkSupported()) {
+            return;
+        }
+
+        for (ListModel destination : destinations) {
+            List<Network> networks = (List<Network>) destination.getItems();
+            networks.add(new NullNetwork());
+            destination.setItems(networks);
+        }
+    }
+
+    private boolean isNullNetworkSupported() {
+        if (cluster == null || cluster.getcompatibility_version() == null) {
+            return false;
+        }
+
+        String clusteVersion = cluster.getcompatibility_version().getValue();
+        return (Boolean) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.NetworkLinkingSupported,
+                clusteVersion);
+
+    }
+
+}
+
+/**
+ * Null object for the network - represents the "no network selected"
+ */
+class NullNetwork extends Network {
+
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/BaseInitSelectedNetworkBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/BaseInitSelectedNetworkBuilder.java
new file mode 100644
index 0000000..59b5343
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/BaseInitSelectedNetworkBuilder.java
@@ -0,0 +1,18 @@
+package org.ovirt.engine.ui.uicommonweb.builders.network;
+
+import java.util.List;
+
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public abstract class BaseInitSelectedNetworkBuilder extends 
BaseSyncBuilder<List<VmNetworkInterface>, List<? extends ListModel>> {
+    @Override
+    protected void build(List<VmNetworkInterface> source, List<? extends 
ListModel> destination) {
+        for (int i = 0; i < source.size(); i++) {
+            applyForOnePair(source.get(i), destination.get(i));
+        }
+    }
+
+    protected abstract void applyForOnePair(VmNetworkInterface source, 
ListModel destination);
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitEditSelectedNetworkBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitEditSelectedNetworkBuilder.java
new file mode 100644
index 0000000..f0ad10b
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitEditSelectedNetworkBuilder.java
@@ -0,0 +1,35 @@
+package org.ovirt.engine.ui.uicommonweb.builders.network;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.core.compat.StringHelper;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public class InitEditSelectedNetworkBuilder extends 
BaseInitSelectedNetworkBuilder {
+
+    protected void applyForOnePair(VmNetworkInterface source, ListModel 
destination) {
+        List<Network> networks = (List<Network>) destination.getItems();
+        networks = networks == null ? new ArrayList<Network>() : networks;
+        for (Network a : networks)
+        {
+            String networkName = a == null ? null : a.getName();
+            if (StringHelper.stringsEqual(networkName, 
source.getNetworkName()))
+            {
+                destination.setSelectedItem(a);
+                return;
+            }
+        }
+
+        // In some cases, like importVm the network can be deleted from the 
nic.
+        // In these cases, the network can be null even if NetworkLinking is 
not supported.
+        // If the user doesn't set the network, when he'll try to run the VM 
or update/hotPlug the nic he will get a
+        // canDo.
+        if (source.getNetworkName() == null) {
+            destination.setSelectedItem(null);
+        }
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitNewSelectedNetworkBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitNewSelectedNetworkBuilder.java
new file mode 100644
index 0000000..920d52f
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/InitNewSelectedNetworkBuilder.java
@@ -0,0 +1,31 @@
+package org.ovirt.engine.ui.uicommonweb.builders.network;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public class InitNewSelectedNetworkBuilder extends 
BaseInitSelectedNetworkBuilder {
+
+    private String engineNetworkName;
+
+    public InitNewSelectedNetworkBuilder(String engineNetworkName) {
+        super();
+        this.engineNetworkName = engineNetworkName;
+    }
+
+    protected void applyForOnePair(VmNetworkInterface source, ListModel 
destination) {
+        List<Network> networks = (List<Network>) destination.getItems();
+        networks = networks == null ? new ArrayList<Network>() : networks;
+        for (Network network : networks) {
+            if (engineNetworkName != null && network != null && 
engineNetworkName.equals(network.getName())) {
+                destination.setSelectedItem(network);
+                return;
+            }
+        }
+
+        destination.setSelectedItem(networks.size() > 0 ? networks.get(0) : 
null);
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/SetupNetworksBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/SetupNetworksBuilder.java
new file mode 100644
index 0000000..9b0d505
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/network/SetupNetworksBuilder.java
@@ -0,0 +1,79 @@
+package org.ovirt.engine.ui.uicommonweb.builders.network;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.network.Network;
+import org.ovirt.engine.core.common.utils.LexoNumericComparator;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+
+public class SetupNetworksBuilder<S> implements Builder<S, List<? extends 
ListModel>> {
+
+    private Guid vdsGroupId;
+
+    private boolean hotUpdateSupported;
+
+    public SetupNetworksBuilder(Guid vdsGroupId, boolean hotUpdateSupported) {
+        super();
+        this.vdsGroupId = vdsGroupId;
+        this.hotUpdateSupported = hotUpdateSupported;
+    }
+
+    @Override
+    public void build(final S source,
+            final List<? extends ListModel> destination,
+            final BuilderList<S, List<? extends ListModel>> rest) {
+        AsyncQuery _asyncQuery = new AsyncQuery();
+        _asyncQuery.setModel(this);
+        _asyncQuery.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void OnSuccess(Object model1, Object result1)
+            {
+                ArrayList<Network> networks = new ArrayList<Network>();
+                for (Network a : (ArrayList<Network>) result1)
+                {
+                    if (a.isVmNetwork())
+                    {
+                        networks.add(a);
+                    }
+                }
+                if (hotUpdateSupported) {
+                    networks.add(null);
+                }
+
+                Collections.sort(networks, new Comparator<Network>() {
+
+                    private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
+
+                    @Override
+                    public int compare(Network net1, Network net2) {
+                        if (net1 == null) {
+                            return net2 == null ? 0 : 1;
+                        } else if (net2 == null) {
+                            return -1;
+                        }
+                        return lexoNumeric.compare(net1.getName(), 
net2.getName());
+                    }
+
+                });
+
+                for (ListModel destModel : destination) {
+                    destModel.setItems(networks);
+                }
+
+                rest.head().build(source, destination, rest.tail());
+            }
+        };
+
+        AsyncDataProvider.GetClusterNetworkList(_asyncQuery, vdsGroupId);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseEditVmInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseEditVmInterfaceModel.java
index 7309eed..50cb838 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseEditVmInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseEditVmInterfaceModel.java
@@ -1,18 +1,19 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.ovirt.engine.core.common.action.AddVmInterfaceParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.VmBase;
-import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
-import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.uicommonweb.Cloner;
+import 
org.ovirt.engine.ui.uicommonweb.builders.network.BaseInitSelectedNetworkBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.network.InitEditSelectedNetworkBuilder;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
@@ -82,26 +83,13 @@
     }
 
     @Override
-    protected void initSelectedNetwork() {
-        List<Network> networks = (List<Network>) getNetwork().getItems();
-        networks = networks == null ? new ArrayList<Network>() : networks;
-        for (Network a : networks)
-        {
-            String networkName = a == null ? null : a.getName();
-            if (StringHelper.stringsEqual(networkName, 
getNic().getNetworkName()))
-            {
-                getNetwork().setSelectedItem(a);
-                return;
-            }
-        }
+    protected List<VmNetworkInterface> getNics() {
+        return Arrays.asList(nic);
+    }
 
-        // In some cases, like importVm the network can be deleted from the 
nic.
-        // In these cases, the network can be null even if NetworkLinking is 
not supported.
-        // If the user doesn't set the network, when he'll try to run the VM 
or update/hotPlug the nic he will get a
-        // canDo.
-        if (getNic().getNetworkName() == null) {
-            getNetwork().setSelectedItem(null);
-        }
+    @Override
+    protected BaseInitSelectedNetworkBuilder getInitSelectedNetworkBuilder() {
+        return new InitEditSelectedNetworkBuilder();
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditVmInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditVmInterfaceModel.java
index da30130..23a3e62 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditVmInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditVmInterfaceModel.java
@@ -1,13 +1,17 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -122,6 +126,13 @@
         }
     }
 
+    @SuppressWarnings("unchecked")
+    protected void initSelectedNetwork() {
+        new BuilderExecutor<List<VmNetworkInterface>, List<? extends 
ListModel>>(
+                getInitSelectedNetworkBuilder()
+        ).build(getNics(), Arrays.asList(getNetwork()));
+    }
+
     boolean isVmUp() {
         return VMStatus.Up.equals(vm.getStatus());
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmInterfaceModel.java
index 14f7ee7..418ccaa 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmInterfaceModel.java
@@ -7,9 +7,10 @@
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.businessentities.VmBase;
-import org.ovirt.engine.core.common.businessentities.network.Network;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.compat.Version;
+import 
org.ovirt.engine.ui.uicommonweb.builders.network.BaseInitSelectedNetworkBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.network.InitNewSelectedNetworkBuilder;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
@@ -19,7 +20,7 @@
     public static NewVmInterfaceModel createInstance(VmBase vm,
             Version clusterCompatibilityVersion,
             ArrayList<VmNetworkInterface> vmNicList,
-            EntityModel sourceModel){
+            EntityModel sourceModel) {
         NewVmInterfaceModel instance = new NewVmInterfaceModel(vm, 
clusterCompatibilityVersion, vmNicList, sourceModel);
         instance.init();
         return instance;
@@ -73,16 +74,13 @@
     }
 
     @Override
-    protected void initSelectedNetwork() {
-        List<Network> networks = (List<Network>) getNetwork().getItems();
-        networks = networks == null ? new ArrayList<Network>() : networks;
-        for (Network network : networks) {
-            if (ENGINE_NETWORK_NAME != null && network != null && 
ENGINE_NETWORK_NAME.equals(network.getName())) {
-                getNetwork().setSelectedItem(network);
-                return;
-            }
-        }
-        getNetwork().setSelectedItem(networks.size() > 0 ? networks.get(0) : 
null);
+    protected List<VmNetworkInterface> getNics() {
+        return null;
+    }
+
+    @Override
+    protected BaseInitSelectedNetworkBuilder getInitSelectedNetworkBuilder() {
+        return new InitNewSelectedNetworkBuilder(ENGINE_NETWORK_NAME);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceModel.java
index d1c073a..134fbd8 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmInterfaceModel.java
@@ -1,8 +1,8 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
+import java.util.Arrays;
+import java.util.List;
 
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
@@ -12,13 +12,14 @@
 import org.ovirt.engine.core.common.businessentities.network.VmInterfaceType;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
-import org.ovirt.engine.core.common.utils.LexoNumericComparator;
 import org.ovirt.engine.core.compat.StringHelper;
 import org.ovirt.engine.core.compat.Version;
-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.UICommand;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
+import 
org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor.BuilderExecutionFinished;
+import 
org.ovirt.engine.ui.uicommonweb.builders.network.BaseInitSelectedNetworkBuilder;
+import org.ovirt.engine.ui.uicommonweb.builders.network.SetupNetworksBuilder;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -369,6 +370,7 @@
     }
 
     protected abstract VmNetworkInterface createBaseNic();
+
     private void onSave()
     {
         VmNetworkInterface nic = createBaseNic();
@@ -435,50 +437,31 @@
 
     protected abstract VdcActionType getVdcActionType();
 
+    @SuppressWarnings("unchecked")
     protected void initNetworks() {
-        AsyncQuery _asyncQuery = new AsyncQuery();
-        _asyncQuery.setModel(this);
-        _asyncQuery.asyncCallback = new INewAsyncCallback() {
-            @Override
-            public void OnSuccess(Object model1, Object result1)
-            {
-                ArrayList<Network> networks = new ArrayList<Network>();
-                for (Network a : (ArrayList<Network>) result1)
-                {
-                    if (a.isVmNetwork())
-                    {
-                        networks.add(a);
-                    }
-                }
-                if (hotUpdateSupported) {
-                    networks.add(null);
-                }
+        new BuilderExecutor<List<VmNetworkInterface>, List<? extends 
ListModel>>(
+                // when all data is fetched and set up, this is called
+                new NetworksInitedCallback(),
+                // fetch the networks
+                new 
SetupNetworksBuilder<List<VmNetworkInterface>>(getVm().getVdsGroupId(), 
hotUpdateSupported),
+                // setup the selected item
+                getInitSelectedNetworkBuilder()
+         ).build(getNics(), Arrays.asList(getNetwork()));
 
-                Collections.sort(networks, new Comparator<Network>() {
-
-                    private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
-
-                    @Override
-                    public int compare(Network net1, Network net2) {
-                        if (net1 == null) {
-                            return net2 == null ? 0 : 1;
-                        } else if (net2 == null) {
-                            return -1;
-                        }
-                        return lexoNumeric.compare(net1.getName(), 
net2.getName());
-                    }
-
-                });
-
-                getNetwork().setItems(networks);
-                initSelectedNetwork();
-
-                // fetch completed
-                okCommand.setIsExecutionAllowed(true);
-            }
-        };
-        AsyncDataProvider.GetClusterNetworkList(_asyncQuery, 
getVm().getVdsGroupId());
     }
+
+    class NetworksInitedCallback implements 
BuilderExecutionFinished<List<VmNetworkInterface>, List<? extends ListModel>> {
+
+        @Override
+        public void finished(List<VmNetworkInterface> source, List<? extends 
ListModel> destination) {
+            okCommand.setIsExecutionAllowed(true);
+        }
+
+    }
+
+    protected abstract BaseInitSelectedNetworkBuilder 
getInitSelectedNetworkBuilder();
+
+    protected abstract List<VmNetworkInterface> getNics();
 
     protected void initCommands() {
         okCommand = new UICommand("OnSave", this); //$NON-NLS-1$
@@ -492,8 +475,6 @@
         cancelCommand.setIsCancel(true);
         getCommands().add(cancelCommand);
     }
-
-    protected abstract void initSelectedNetwork();
 
     protected abstract void initSelectedType();
 


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

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

Reply via email to