Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Refactored more code into NeutronAgentModel
......................................................................

webadmin: Refactored more code into NeutronAgentModel

Added the code concerning the Neutron plugin type into
NeutronAgentModel, as it seems to be common to all the pieces of code
utilising NeutronAgentModel.

Change-Id: I6c4bc0c6aa3a27d7ef6a5b9b5e3fa5007f332561
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/AddProviderModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/EditProviderModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronAgentModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronPluginTranslator.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.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/section/main/presenter/popup/provider/ProviderPopupPresenterWidget.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
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ProviderPopupView.java
13 files changed, 197 insertions(+), 186 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/51/17251/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
index 998e1aa..e366445 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
@@ -14,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.Provider;
+import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.ServerCpu;
 import org.ovirt.engine.core.common.businessentities.Snapshot;
@@ -50,6 +51,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.TimeZoneModel;
 import org.ovirt.engine.ui.uicompat.DateTimeUtils;
+import org.ovirt.engine.ui.uicompat.EnumTranslator;
 import org.ovirt.engine.ui.uicompat.IEqualityComparer;
 
 @SuppressWarnings("unused")
@@ -1125,6 +1127,7 @@
     }
 
     public final static class ExternalNetworkComparator implements 
Comparator<ExternalNetwork>, Serializable {
+        private static final long serialVersionUID = 4987035011384708563L;
         private NameableComparator comparator = new NameableComparator();
 
         @Override
@@ -1134,6 +1137,7 @@
     }
 
     public final static class ProviderComparator implements 
Comparator<Provider>, Serializable {
+        private static final long serialVersionUID = 627759940118704128L;
 
         @Override
         public int compare(Provider p1, Provider p2) {
@@ -1152,4 +1156,14 @@
         });
     }
 
+    public final static class ProviderTypeComparator implements 
Comparator<ProviderType>, Serializable {
+        private static final long serialVersionUID = -7917198421355959306L;
+
+        @Override
+        public int compare(ProviderType type1, ProviderType type2) {
+            return 
LexoNumericComparator.comp(EnumTranslator.createAndTranslate(type1),
+                    EnumTranslator.createAndTranslate(type2));
+        }
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
index de76c24..4166e0f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostListModel.java
@@ -890,7 +890,7 @@
             parameters.setRebootAfterInstallation(isVirt) ;
             parameters.setAuthMethod(model.getAuthenticationMethod());
 
-            Provider externalProvider = (Provider) 
model.getExternalProviders().getSelectedItem();
+            Provider externalProvider = (Provider) 
model.getNetworkProviders().getSelectedItem();
             if (externalProvider != null) {
                 parameters.setProvider(externalProvider.getId());
                 parameters.setNetworkMappings((String) 
model.getNeutronAgentModel().getInterfaceMappings().getEntity());
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 fe1f363..9e04c1d 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
@@ -9,7 +9,6 @@
 import 
org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
 import org.ovirt.engine.core.common.businessentities.FenceAgentOrder;
 import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue;
-import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -37,7 +36,6 @@
 import org.ovirt.engine.ui.uicommonweb.models.Model;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
 import org.ovirt.engine.ui.uicommonweb.models.providers.NeutronAgentModel;
-import 
org.ovirt.engine.ui.uicommonweb.models.providers.NeutronPluginTranslator;
 import org.ovirt.engine.ui.uicommonweb.validation.HostAddressValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.HostnameValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
@@ -775,34 +773,28 @@
         privateProviders = value;
     }
 
-    private ListModel externalProviders;
+    private ListModel networkProviders;
 
-    public void setExternalProviders(ListModel externalProviders) {
-        this.externalProviders = externalProviders;
+    public void setNetworkProviders(ListModel value) {
+        this.networkProviders = value;
     }
 
-    public ListModel getExternalProviders() {
-        return externalProviders;
+    public ListModel getNetworkProviders() {
+        return networkProviders;
     }
 
-    private ListModel providerType;
+    private ListModel networkProviderType;
 
-    public ListModel getProviderType() {
-        return providerType;
+    public ListModel getNetworkProviderType() {
+        return networkProviderType;
     }
 
-    protected void setProviderType(ListModel value) {
-        providerType = value;
+    protected void setNetworkProviderType(ListModel value) {
+        networkProviderType = value;
     }
-
-    private ListModel providerPluginType;
 
     public ListModel getProviderPluginType() {
-        return providerPluginType;
-    }
-
-    protected void setProviderPluginType(ListModel value) {
-        providerPluginType = value;
+        return getNeutronAgentModel().getPluginType();
     }
 
     private NeutronAgentModel neutronAgentModel;
@@ -982,45 +974,36 @@
         initSpmPriorities();
         fetchPublicKey();
 
-        setExternalProviders(new ListModel());
-        getExternalProviders().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
+        setNetworkProviders(new ListModel());
+        getNetworkProviders().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
 
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                onExternalProviderChanged();
+                onNetworkProviderChanged();
             }
         });
-        setProviderType(new ListModel());
-        getProviderType().setIsChangable(false);
-        getProviderType().setIsAvailable(false);
-        setProviderPluginType(new ListModel());
-        getProviderPluginType().setIsChangable(false);
-        getProviderPluginType().setIsAvailable(false);
-        neutronAgentModel = new NeutronAgentModel(getProviderType(), 
getProviderPluginType());
+        setNetworkProviderType(new ListModel());
+        getNetworkProviderType().setIsChangable(false);
+        getNetworkProviderType().setIsAvailable(false);
+        neutronAgentModel = new NeutronAgentModel();
         neutronAgentModel.setIsChangable(false);
         neutronAgentModel.setIsAvailable(false);
 
-        onExternalProviderChanged();
-        initExternalProvidersList();
+        onNetworkProviderChanged();
+        initNetworkProvidersList();
     }
 
     @SuppressWarnings("unchecked")
-    private void onExternalProviderChanged() {
-        Provider provider = (Provider) 
getExternalProviders().getSelectedItem();
-        getProviderType().setIsAvailable(provider != null);
-        getProviderType().setSelectedItem(provider == null ? null : 
provider.getType());
-        if (getProviderType().getSelectedItem() == 
ProviderType.OPENSTACK_NETWORK) {
-            OpenstackNetworkProviderProperties properties = 
((Provider<OpenstackNetworkProviderProperties>)
-                    
getExternalProviders().getSelectedItem()).getAdditionalProperties();
-            String pluginName = (properties == null) ? new String() : 
properties.getPluginType();
-            
getProviderPluginType().setSelectedItem(NeutronPluginTranslator.getDisplayStringForPluginName(pluginName));
-            if (properties != null) {
-                
getNeutronAgentModel().init(properties.getAgentConfiguration());
-            }
-        }
+    private void onNetworkProviderChanged() {
+        Provider provider = (Provider) getNetworkProviders().getSelectedItem();
+        getNetworkProviderType().setIsAvailable(provider != null);
+        getNetworkProviderType().setSelectedItem(provider == null ? null : 
provider.getType());
+        boolean isNeutron = (getNetworkProviderType().getSelectedItem() == 
ProviderType.OPENSTACK_NETWORK);
+        getNeutronAgentModel().init(isNeutron ? provider : new Provider());
+        getNeutronAgentModel().setIsAvailable(isNeutron);
     }
 
-    private void initExternalProvidersList() {
+    private void initNetworkProvidersList() {
         AsyncQuery getProvidersQuery = new AsyncQuery();
         getProvidersQuery.asyncCallback = new INewAsyncCallback() {
             @Override
@@ -1028,8 +1011,8 @@
             {
                 List<Provider> providers = (List<Provider>) result;
                 providers.add(0, null);
-                getExternalProviders().setItems(providers);
-                getExternalProviders().setSelectedItem(null);
+                getNetworkProviders().setItems(providers);
+                getNetworkProviders().setSelectedItem(null);
             }
         };
         AsyncDataProvider.GetAllNetworkProviders(getProvidersQuery);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/AddProviderModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/AddProviderModel.java
index d6f5c67..d596784 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/AddProviderModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/AddProviderModel.java
@@ -8,7 +8,6 @@
 
 public class AddProviderModel extends ProviderModel {
 
-    @SuppressWarnings("unchecked")
     public AddProviderModel(ProviderListModel sourceListModel) {
         super(sourceListModel, VdcActionType.AddProvider, new Provider());
         
setTitle(ConstantsManager.getInstance().getConstants().addProviderTitle());
@@ -16,6 +15,8 @@
 
         getType().setSelectedItem(Linq.firstOrDefault((Iterable<ProviderType>) 
getType().getItems()));
         getRequiresAuthentication().setEntity(false);
+
+        getNeutronAgentModel().init(provider); // this is okay because 
AdditionalProperties == null at this point
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/EditProviderModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/EditProviderModel.java
index ae9a326..186c0b6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/EditProviderModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/EditProviderModel.java
@@ -7,9 +7,7 @@
 
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.VdcActionType;
-import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
 import org.ovirt.engine.core.common.businessentities.Provider;
-import org.ovirt.engine.core.common.businessentities.TenantProviderProperties;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
@@ -46,13 +44,8 @@
         getUsername().setEntity(provider.getUsername());
         getPassword().setEntity(provider.getPassword());
 
-        if (provider.getAdditionalProperties() instanceof 
TenantProviderProperties) {
-            getTenantName().setEntity(((TenantProviderProperties) 
provider.getAdditionalProperties()).getTenantName());
-        }
-
         if (isTypeOpenStackNetwork()) {
-            getNeutronAgentModel().init(((OpenstackNetworkProviderProperties) 
provider.getAdditionalProperties()).
-                    getAgentConfiguration());
+            getNeutronAgentModel().init(provider);
         }
 
         oldUrl = provider.getUrl();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronAgentModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronAgentModel.java
index 1e1d640..4087389 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronAgentModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronAgentModel.java
@@ -1,15 +1,17 @@
 package org.ovirt.engine.ui.uicommonweb.models.providers;
 
 import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
+import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
 import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.AgentConfiguration;
 import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties.QpidConfiguration;
-import org.ovirt.engine.core.common.businessentities.ProviderType;
+import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.validation.HostAddressValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.IValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.IntegerValidation;
 import org.ovirt.engine.ui.uicommonweb.validation.InterfaceMappingsValidation;
+import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -20,9 +22,9 @@
 
     private static final String QPID_PORT_DEFAULT = "5672"; //$NON-NLS-1$
 
-    private final ListModel type;
-    private final ListModel pluginType;
+    private ListModel pluginType = new ListModel();
 
+    private EntityModel pluginTypeCustom = new EntityModel();
     private EntityModel interfaceMappingsLabel = new EntityModel();
     private EntityModel interfaceMappingsExplanation = new EntityModel();
     private EntityModel interfaceMappings = new EntityModel();
@@ -31,12 +33,12 @@
     private EntityModel qpidUsername = new EntityModel();
     private EntityModel qpidPassword = new EntityModel();
 
-    public ListModel getType() {
-        return type;
-    }
-
     public ListModel getPluginType() {
         return pluginType;
+    }
+
+    public EntityModel isPluginTypeCustom() {
+        return pluginTypeCustom;
     }
 
     public EntityModel getInterfaceMappingsLabel() {
@@ -67,21 +69,12 @@
         return qpidPassword;
     }
 
-    public NeutronAgentModel(final ListModel type, final ListModel pluginType) 
{
-        this.type = type;
-        this.pluginType = pluginType;
-
-        getType().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
-            @Override
-            public void eventRaised(Event ev, Object sender, EventArgs args) {
-                updateAvailability();
-            }
-        });
+    public NeutronAgentModel() {
         getPluginType().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                updateAvailability();
-                String displayString = getPluginDisplayString();
+                String displayString = (String) 
getPluginType().getSelectedItem();
+                
isPluginTypeCustom().setEntity(NeutronPluginTranslator.isDisplayStringCustom(displayString));
                 if 
(!NeutronPluginTranslator.isDisplayStringCustom(displayString)) {
                     
switch(NeutronPluginTranslator.getPluginTypeForDisplayString(displayString)) {
                         case OPEN_VSWITCH:
@@ -105,21 +98,32 @@
             }
         });
         getPropertyChangedEvent().addListener(new IEventListener() {
+
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                if ("IsChangable".equals(((PropertyChangedEventArgs) 
args).PropertyName)) { //$NON-NLS-1$
-                    boolean changeable = getIsChangable();
-                    getInterfaceMappingsLabel().setIsChangable(changeable);
-                    
getInterfaceMappingsExplanation().setIsChangable(changeable);
-                    getInterfaceMappings().setIsChangable(changeable);
-                    getQpidHost().setIsChangable(changeable);
-                    getQpidPort().setIsChangable(changeable);
-                    getQpidUsername().setIsChangable(changeable);
-                    getQpidPassword().setIsChangable(changeable);
+                String propertyName = ((PropertyChangedEventArgs) 
args).PropertyName;
+                if ("IsAvailable".equals(propertyName)) { //$NON-NLS-1$
+                    boolean value = getIsAvailable();
+                    getPluginType().setIsAvailable(value);
+                    if (!value) {
+                        isPluginTypeCustom().setEntity(true);
+                    }
+                } else if ("IsChangable".equals(propertyName)) { //$NON-NLS-1$
+                    boolean value = getIsChangable();
+                    getPluginType().setIsChangable(value);
+                    getInterfaceMappingsLabel().setIsChangable(value);
+                    getInterfaceMappingsExplanation().setIsChangable(value);
+                    getInterfaceMappings().setIsChangable(value);
+                    getQpidHost().setIsChangable(value);
+                    getQpidPort().setIsChangable(value);
+                    getQpidUsername().setIsChangable(value);
+                    getQpidPassword().setIsChangable(value);
                 }
             }
         });
 
+        
getPluginType().setItems(NeutronPluginTranslator.getPresetDisplayStrings());
+        getPluginType().setSelectedItem(new String());
         
getInterfaceMappingsLabel().setEntity(ConstantsManager.getInstance().getConstants().interfaceMappings());
         
getInterfaceMappingsExplanation().setEntity(ConstantsManager.getInstance()
                 .getConstants()
@@ -127,57 +131,72 @@
         getQpidPort().setEntity(QPID_PORT_DEFAULT);
     }
 
-    private void updateAvailability() {
-        boolean providerNeutron = getType().getSelectedItem() == 
ProviderType.OPENSTACK_NETWORK;
-        getPluginType().setIsAvailable(providerNeutron);
-        setIsAvailable(providerNeutron
-                && 
!NeutronPluginTranslator.isDisplayStringCustom(getPluginDisplayString()));
-    }
-
-    private String getPluginDisplayString() {
-        String res = (String) getPluginType().getSelectedItem();
-        return (res == null) ? new String() : res;
-    }
-
     public boolean validate() {
-        if (getIsAvailable()) {
+        if (getIsAvailable() && getIsChangable()) {
+            getPluginType().validateSelectedItem(new IValidation[] { new 
NotEmptyValidation() });
             getInterfaceMappings().validateEntity(new IValidation[] { new 
InterfaceMappingsValidation() });
             getQpidHost().validateEntity(new IValidation[] { new 
HostAddressValidation(true) });
             getQpidPort().validateEntity(new IValidation[] { new 
IntegerValidation(BusinessEntitiesDefinitions.NETWORK_MIN_LEGAL_PORT,
                     BusinessEntitiesDefinitions.NETWORK_MAX_LEGAL_PORT) });
-            setIsValid(getInterfaceMappings().getIsValid() && 
getQpidHost().getIsValid() && getQpidPort().getIsValid());
+
+            setIsValid(getPluginType().getIsValid() && 
getInterfaceMappings().getIsValid()
+                    && getQpidHost().getIsValid() && 
getQpidPort().getIsValid());
         }
         return getIsValid();
     }
 
-    public void init(AgentConfiguration agentConfiguration) {
-        if (agentConfiguration != null) {
-            
getInterfaceMappings().setEntity(agentConfiguration.getNetworkMappings());
+    public void init(Provider<OpenstackNetworkProviderProperties> provider) {
+        OpenstackNetworkProviderProperties properties = 
provider.getAdditionalProperties();
+        String pluginName = (properties == null) ? new String() : 
properties.getPluginType();
+        
getPluginType().setSelectedItem(NeutronPluginTranslator.getDisplayStringForPluginName(pluginName));
 
-            QpidConfiguration qpidConfiguration = 
agentConfiguration.getQpidConfiguration();
-            if (qpidConfiguration != null) {
-                getQpidHost().setEntity(qpidConfiguration.getAddress());
-                Integer port = qpidConfiguration.getPort();
-                getQpidPort().setEntity(port == null ? null : 
Integer.toString(port));
-                getQpidUsername().setEntity(qpidConfiguration.getUsername());
-                getQpidPassword().setEntity(qpidConfiguration.getPassword());
+        if (properties != null) {
+            AgentConfiguration agentConfiguration = 
properties.getAgentConfiguration();
+            if (agentConfiguration != null) {
+                
getInterfaceMappings().setEntity(agentConfiguration.getNetworkMappings());
+
+                QpidConfiguration qpidConfiguration = 
agentConfiguration.getQpidConfiguration();
+                if (qpidConfiguration != null) {
+                    getQpidHost().setEntity(qpidConfiguration.getAddress());
+                    Integer port = qpidConfiguration.getPort();
+                    getQpidPort().setEntity(port == null ? null : 
Integer.toString(port));
+                    
getQpidUsername().setEntity(qpidConfiguration.getUsername());
+                    
getQpidPassword().setEntity(qpidConfiguration.getPassword());
+                }
             }
         }
     }
 
-    public AgentConfiguration flush() {
-        AgentConfiguration agentConfiguration = new AgentConfiguration();
-        agentConfiguration.setNetworkMappings((String) 
getInterfaceMappings().getEntity());
+    public void flush(Provider<OpenstackNetworkProviderProperties> provider) {
+        OpenstackNetworkProviderProperties properties = 
provider.getAdditionalProperties();
+        if (properties == null) {
+            properties = new OpenstackNetworkProviderProperties();
+            provider.setAdditionalProperties(properties);
+        }
+        properties.setPluginType(NeutronPluginTranslator.
+                getPluginNameForDisplayString((String) 
getPluginType().getSelectedItem()));
 
-        QpidConfiguration qpidConfiguration = new QpidConfiguration();
-        agentConfiguration.setQpidConfiguration(qpidConfiguration);
-        qpidConfiguration.setAddress((String) getQpidHost().getEntity());
-        String port = (String) getQpidPort().getEntity();
-        qpidConfiguration.setPort(port == null ? null : Integer.valueOf(port));
-        qpidConfiguration.setUsername((String) getQpidUsername().getEntity());
-        qpidConfiguration.setPassword((String) getQpidPassword().getEntity());
+        if (((Boolean) isPluginTypeCustom().getEntity())) {
+            properties.setAgentConfiguration(null);
+        } else {
+            AgentConfiguration agentConfiguration = 
properties.getAgentConfiguration();
+            if (agentConfiguration == null) {
+                agentConfiguration = new AgentConfiguration();
+                properties.setAgentConfiguration(agentConfiguration);
+            }
+            agentConfiguration.setNetworkMappings((String) 
getInterfaceMappings().getEntity());
 
-        return agentConfiguration;
+            QpidConfiguration qpidConfiguration = 
agentConfiguration.getQpidConfiguration();
+            if (qpidConfiguration == null) {
+                qpidConfiguration = new QpidConfiguration();
+                agentConfiguration.setQpidConfiguration(qpidConfiguration);
+            }
+            qpidConfiguration.setAddress((String) getQpidHost().getEntity());
+            String port = (String) getQpidPort().getEntity();
+            qpidConfiguration.setPort(port == null ? null : 
Integer.valueOf(port));
+            qpidConfiguration.setUsername((String) 
getQpidUsername().getEntity());
+            qpidConfiguration.setPassword((String) 
getQpidPassword().getEntity());
+        }
     }
 
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronPluginTranslator.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronPluginTranslator.java
index 470e2ee..1286e30 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronPluginTranslator.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/NeutronPluginTranslator.java
@@ -1,10 +1,13 @@
 package org.ovirt.engine.ui.uicommonweb.models.providers;
 
+import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkPluginType;
+import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
 import org.ovirt.engine.ui.uicompat.EnumTranslator;
 
 public class NeutronPluginTranslator {
@@ -18,8 +21,10 @@
         }
     }
 
-    public static Set<String> getPresetDisplayStrings() {
-        return pluginForDisplay.keySet();
+    public static List<String> getPresetDisplayStrings() {
+        List<String> list = new ArrayList<String>(pluginForDisplay.keySet());
+        Collections.sort(list, new LexoNumericComparator());
+        return list;
     }
 
     public static boolean isDisplayStringCustom(String displayString) {
@@ -34,8 +39,8 @@
         try {
             return 
EnumTranslator.createAndTranslate(OpenstackNetworkPluginType.valueOf(pluginName));
         }
-        catch (IllegalArgumentException e) {
-            return pluginName;
+        catch (Exception e) {
+            return pluginName == null ? new String() : pluginName;
         }
     }
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
index 64808ca..f54515a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
@@ -1,11 +1,14 @@
 package org.ovirt.engine.ui.uicommonweb.models.providers;
 
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 import org.ovirt.engine.core.common.action.ProviderParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import 
org.ovirt.engine.core.common.businessentities.OpenstackImageProviderProperties;
-import 
org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.TenantProviderProperties;
@@ -15,6 +18,7 @@
 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.Uri;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
@@ -56,11 +60,10 @@
     private EntityModel password = new EntityModel();
     private EntityModel tenantName = new EntityModel();
     private ListModel type;
-    private ListModel pluginType = new ListModel();
     private UICommand testCommand;
     private EntityModel testResult = new EntityModel();
 
-    private NeutronAgentModel neutronAgentModel;
+    private NeutronAgentModel neutronAgentModel = new NeutronAgentModel();
 
     public EntityModel getName() {
         return name;
@@ -72,6 +75,10 @@
 
     private void setType(ListModel value) {
         type = value;
+    }
+
+    public ListModel getPluginType() {
+        return getNeutronAgentModel().getPluginType();
     }
 
     public EntityModel getDescription() {
@@ -100,10 +107,6 @@
 
     public EntityModel getTenantName() {
         return tenantName;
-    }
-
-    public ListModel getPluginType() {
-        return pluginType;
     }
 
     public UICommand getTestCommand() {
@@ -181,27 +184,26 @@
         getType().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                getTenantName().setIsAvailable(isTypeTenantAware());
-
-                boolean providerNeutron = isTypeOpenStackNetwork();
-                getApiVersion().setIsAvailable(providerNeutron);
-                if (providerNeutron) {
-                    OpenstackNetworkProviderProperties properties =
-                            (OpenstackNetworkProviderProperties) 
provider.getAdditionalProperties();
-                    String pluginName = (properties == null) ? new String() : 
properties.getPluginType();
-                    
getPluginType().setSelectedItem(NeutronPluginTranslator.getDisplayStringForPluginName(pluginName));
+                boolean isTenant = isTypeTenantAware();
+                getTenantName().setIsAvailable(isTenant);
+                if (isTenant) {
+                    TenantProviderProperties properties = 
(TenantProviderProperties) provider.getAdditionalProperties();
+                    getTenantName().setEntity(properties == null ? null : 
properties.getTenantName());
                 }
+
+                boolean isNeutron = isTypeOpenStackNetwork();
+                getApiVersion().setIsAvailable(isNeutron);
+                getNeutronAgentModel().setIsAvailable(isNeutron);
             }
         });
 
-        neutronAgentModel = new NeutronAgentModel(getType(), getPluginType());
-
-        getPluginType().setIsAvailable(false);
+        getNeutronAgentModel().setIsAvailable(false);
         getApiVersion().setIsAvailable(false);
         getTenantName().setIsAvailable(false);
 
-        getType().setItems(Arrays.asList(ProviderType.values()));
-        
getPluginType().setItems(NeutronPluginTranslator.getPresetDisplayStrings());
+        List<ProviderType> providerTypes = new 
ArrayList<ProviderType>(Arrays.asList(ProviderType.values()));
+        Collections.sort(providerTypes, new Linq.ProviderTypeComparator());
+        getType().setItems(providerTypes);
         getApiVersion().setItems(Arrays.asList("v2.0")); //$NON-NLS-1$
 
         UICommand tempVar = new UICommand(CMD_SAVE, this);
@@ -218,7 +220,6 @@
     private boolean validate() {
         getName().validateEntity(new IValidation[] { new NotEmptyValidation() 
});
         getType().validateSelectedItem(new IValidation[] { new 
NotEmptyValidation() });
-        getPluginType().validateSelectedItem(new IValidation[] { new 
NotEmptyValidation() });
         getUsername().validateEntity(new IValidation[] { new 
NotEmptyValidation() });
         getPassword().validateEntity(new IValidation[] { new 
NotEmptyValidation() });
         getTenantName().validateEntity(new IValidation[] { new 
NotEmptyValidation()} );
@@ -226,9 +227,8 @@
                 new UrlValidation(Uri.SCHEME_HTTP, Uri.SCHEME_HTTPS) });
         getNeutronAgentModel().validate();
 
-        return getName().getIsValid() && getType().getIsValid() && 
getPluginType().getIsValid()
-                && getUrl().getIsValid() && getUsername().getIsValid() && 
getPassword().getIsValid()
-                && getTenantName().getIsValid() && 
getNeutronAgentModel().getIsValid();
+        return getName().getIsValid() && getType().getIsValid() && 
getUrl().getIsValid() && getUsername().getIsValid()
+                && getPassword().getIsValid() && getTenantName().getIsValid() 
&& getNeutronAgentModel().getIsValid();
     }
 
     private void cancel() {
@@ -242,11 +242,7 @@
         provider.setUrl((String) url.getEntity());
 
         if (isTypeOpenStackNetwork()) {
-            OpenstackNetworkProviderProperties properties = new 
OpenstackNetworkProviderProperties();
-            properties.setPluginType(NeutronPluginTranslator.
-                    getPluginNameForDisplayString((String) 
getPluginType().getSelectedItem()));
-            properties.setAgentConfiguration(getNeutronAgentModel().flush());
-            provider.setAdditionalProperties(properties);
+            getNeutronAgentModel().flush(provider);
         } else if (isTypeOpenStackImage()) {
             provider.setAdditionalProperties(new 
OpenstackImageProviderProperties());
         }
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 c70399d..6d8a70e 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
@@ -525,6 +525,9 @@
     @DefaultStringValue("Network Provider")
     String networkProviderButtonLabel();
 
+    @DefaultStringValue("External Network Provider")
+    String externalNetworkProviderLabel();
+
     @DefaultStringValue("Override display address")
     String enableConsoleAddressOverride();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ProviderPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ProviderPopupPresenterWidget.java
index 4f4d01c..c5234c0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ProviderPopupPresenterWidget.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/provider/ProviderPopupPresenterWidget.java
@@ -6,8 +6,6 @@
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
 import org.ovirt.engine.ui.uicompat.IEventListener;
-import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
-
 import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 import com.google.gwt.event.shared.EventBus;
@@ -45,13 +43,13 @@
                 getView().setTestResultImage((String) 
model.getTestResult().getEntity());
             }
         });
-        model.getNeutronAgentModel().getPropertyChangedEvent().addListener(new 
IEventListener() {
+        
model.getNeutronAgentModel().isPluginTypeCustom().getEntityChangedEvent().addListener(new
 IEventListener() {
 
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                if ("IsAvailable".equals(((PropertyChangedEventArgs) 
args).PropertyName)) { //$NON-NLS-1$
-                    
getView().setAgentTabVisibility(model.getNeutronAgentModel().getIsAvailable());
-                }
+                getView().setAgentTabVisibility(!(Boolean) 
model.getNeutronAgentModel()
+                        .isPluginTypeCustom()
+                        .getEntity());
             }
         });
     }
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 8bb6970..05206e8 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
@@ -389,21 +389,21 @@
     FlowPanel externalProviderPanel;
 
     @UiField(provided = true)
-    @WithElementId("externalProvider")
-    public EntityModelWidgetWithInfo externalProvider;
+    @WithElementId("networkProvider")
+    public EntityModelWidgetWithInfo networkProvider;
 
     @Ignore
-    @WithElementId("externalProviderLabel")
-    public EntityModelLabel externalProviderLabel;
+    @WithElementId("networkProviderLabel")
+    public EntityModelLabel networkProviderLabel;
 
-    @Path(value = "externalProviders.selectedItem")
-    @WithElementId("externalProviderEditor")
-    public ListModelListBoxOnlyEditor<Object> externalProviderEditor;
+    @Path(value = "networkProviders.selectedItem")
+    @WithElementId("networkProviderEditor")
+    public ListModelListBoxOnlyEditor<Object> networkProviderEditor;
 
     @UiField(provided = true)
-    @Path(value = "providerType.selectedItem")
-    @WithElementId("providerType")
-    public ListModelListBoxEditor<Object> providerTypeEditor;
+    @Path(value = "networkProviderType.selectedItem")
+    @WithElementId("networkProviderType")
+    public ListModelListBoxEditor<Object> networkProviderTypeEditor;
 
     @UiField
     @Path(value = "providerPluginType.selectedItem")
@@ -535,15 +535,15 @@
         pmEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         externalHostProviderEnabledEditor = new 
EntityModelCheckBoxEditor(Align.RIGHT);
 
-        externalProviderLabel = new EntityModelLabel();
-        externalProviderEditor = new ListModelListBoxOnlyEditor<Object>(new 
NullSafeRenderer<Object>() {
+        networkProviderLabel = new EntityModelLabel();
+        networkProviderEditor = new ListModelListBoxOnlyEditor<Object>(new 
NullSafeRenderer<Object>() {
             @Override
             public String renderNullSafe(Object object) {
                 return ((Provider) object).getName();
             }
         });
-        externalProvider = new 
EntityModelWidgetWithInfo(externalProviderLabel, externalProviderEditor, 
resources);
-        providerTypeEditor = new ListModelListBoxEditor<Object>(new 
EnumRenderer());
+        networkProvider = new EntityModelWidgetWithInfo(networkProviderLabel, 
networkProviderEditor, resources);
+        networkProviderTypeEditor = new ListModelListBoxEditor<Object>(new 
EnumRenderer());
         neutronAgentWidget = new NeutronAgentWidget(constants, resources, 
applicationTemplates);
         rbPassword = new RadioButton("1"); //$NON-NLS-1$
         rbPublicKey = new RadioButton("1"); //$NON-NLS-1$
@@ -606,9 +606,9 @@
 
         // Network Provider Tab
         networkProviderTab.setLabel(constants.networkProviderButtonLabel());
-        externalProviderLabel.setText(constants.externalProviderLabel());
-        
externalProvider.setExplanation(applicationTemplates.italicText(constants.externalProviderExplanation()));
-        providerTypeEditor.setLabel(constants.typeProvider());
+        networkProviderLabel.setText(constants.externalNetworkProviderLabel());
+        
networkProvider.setExplanation(applicationTemplates.italicText(constants.externalProviderExplanation()));
+        networkProviderTypeEditor.setLabel(constants.typeProvider());
         providerPluginTypeEditor.setLabel(constants.pluginType());
     }
 
@@ -794,16 +794,15 @@
         networkProviderTab.setVisible(object.showNetworkProviderTab());
         final NeutronAgentModel model = object.getNeutronAgentModel();
         neutronAgentWidget.edit(model);
-        neutronAgentPanel.setVisible(model.getIsAvailable());
-        model.getPropertyChangedEvent().addListener(new IEventListener() {
+        neutronAgentPanel.setVisible(!(Boolean) 
model.isPluginTypeCustom().getEntity());
+        model.isPluginTypeCustom().getEntityChangedEvent().addListener(new 
IEventListener() {
 
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
-                if ("IsAvailable".equals(((PropertyChangedEventArgs) 
args).PropertyName)) { //$NON-NLS-1$
-                    neutronAgentPanel.setVisible(model.getIsAvailable());
-                }
+                neutronAgentPanel.setVisible(!(Boolean) 
model.isPluginTypeCustom().getEntity());
             }
         });
+
         addTextAndLinkAlert(fetchPanel, 
appConstants.fetchingHostFingerprint(), object.getSSHFingerPrint());
         nameEditor.setFocus(true);
     }
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 5c93b1f..b4072ac 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
@@ -362,8 +362,8 @@
                     <t:DialogTab ui:field="networkProviderTab">
                         <t:content>
                             <g:FlowPanel>
-                               <w:EntityModelWidgetWithInfo 
ui:field="externalProvider"/>
-                               <e:ListModelListBoxEditor 
ui:field="providerTypeEditor" />
+                               <w:EntityModelWidgetWithInfo 
ui:field="networkProvider"/>
+                               <e:ListModelListBoxEditor 
ui:field="networkProviderTypeEditor" />
                                <e:ListModelSuggestBoxEditor ui:field = 
"providerPluginTypeEditor" />
                                <g:FlowPanel ui:field="neutronAgentPanel" 
addStyleNames="{style.sectionStyle}">
                                        <p:NeutronAgentWidget 
ui:field="neutronAgentWidget" />
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ProviderPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ProviderPopupView.java
index 9029b96..5d036bc 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ProviderPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/provider/ProviderPopupView.java
@@ -166,7 +166,7 @@
 
     @Override
     public void edit(ProviderModel model) {
-        setAgentTabVisibility(model.getNeutronAgentModel().getIsAvailable());
+        setAgentTabVisibility(!(Boolean) 
model.getNeutronAgentModel().isPluginTypeCustom().getEntity());
         driver.edit(model);
         neutronAgentWidget.edit(model.getNeutronAgentModel());
     }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6c4bc0c6aa3a27d7ef6a5b9b5e3fa5007f332561
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