Yaniv Bronhaim has uploaded a new change for review.

Change subject: ui: adding discover host integration to AddHost view
......................................................................

ui: adding discover host integration to AddHost view

This patch adds sublist under AddHost to allow picking and provision
foreman hosts.

Wiki: http://www.ovirt.org/Features/AdvancedForemanIntegration

Change-Id: I0faf667019760326019368f044ee16265d41a620
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1081371
Signed-off-by: Yaniv Bronhaim <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.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/hosts/NewHostModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
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/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/widget/table/column/HostStatusCell.java
13 files changed, 326 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/27623/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 1097506..2f81005 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -310,6 +310,10 @@
                <!-- Scheduling -->
                <include name="common/scheduling/*.java"/>
                <include name="common/scheduling/parameters/*.java"/>
+        <!-- Foreman Objects -->
+        <include name="common/businessentities/ExternalHostGroup.java"/>
+        <include name="common/businessentities/ExternalHost.java"/>
+        <include name="common/businessentities/ExternalDiscoveredHost.java"/>
        </source>
 
        <super-source path="ui/uioverrides" />
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 b4a98a5..5c6e2fc 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
@@ -2985,6 +2985,41 @@
                 aQuery);
     }
 
+    public static void GetExternalProviderDiscoveredHostList(AsyncQuery 
aQuery, Provider provider) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                if (source == null)
+                {
+                    return new ArrayList<VDS>();
+                }
+                return source;
+            }
+        };
+        ProviderQueryParameters params = new ProviderQueryParameters();
+        params.setProvider(provider);
+        
Frontend.getInstance().runQuery(VdcQueryType.GetDiscoveredHostListFromExternalProvider,
 params, aQuery);
+    }
+
+    public static void GetExternalProviderHostGroupList(AsyncQuery aQuery, 
Provider provider) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                if (source == null)
+                {
+                    return new ArrayList<VDS>();
+                }
+                return source;
+            }
+        };
+
+        ProviderQueryParameters params = new ProviderQueryParameters();
+        params.setProvider(provider);
+        
Frontend.getInstance().runQuery(VdcQueryType.GetHostGroupsFromExternalProvider, 
params, aQuery);
+    }
+
     public static void getAllProviders(AsyncQuery aQuery) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
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 b58752f..ed3e5b8 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
@@ -28,6 +28,8 @@
 import org.ovirt.engine.core.common.action.VdsActionParameters;
 import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
 import org.ovirt.engine.core.common.businessentities.DbUser;
+import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost;
+import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.FenceActionType;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.RoleType;
@@ -932,7 +934,6 @@
         
host.setDisablePowerManagementPolicy(model.getDisableAutomaticPowerManagement().getEntity());
         host.setPmKdumpDetection(model.getPmKdumpDetection().getEntity());
 
-
         cancelConfirm();
         model.startProgress(null);
 
@@ -956,6 +957,14 @@
                 
parameters.setNetworkMappings(model.getInterfaceMappings().getEntity());
             }
 
+            if (model.getIsProvioning()) {
+                Provider provider = (Provider) 
model.getProviders().getSelectedItem();
+                ExternalHostGroup hostGroup = (ExternalHostGroup) 
model.getExternalHostGroups().getSelectedItem();
+                parameters.setAddProvisioned(provider.getId(), hostGroup,
+                        
((ExternalDiscoveredHost)model.getExternalDiscoveredHosts().getSelectedItem()).getMac(),
+                        
((ExternalDiscoveredHost)model.getExternalDiscoveredHosts().getSelectedItem()).getName());
+            }
+
             Frontend.getInstance().runAction(VdcActionType.AddVds, parameters,
                     new IFrontendActionAsyncCallback() {
                         @Override
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 ba1dfd8..33c01dd 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
@@ -91,6 +91,10 @@
         return getHostId() == null;
     }
 
+    public boolean getIsProvioning() {
+        return getExternalDiscoveredHosts().getSelectedItem() != null;
+    }
+
     private Guid privateHostId;
 
     public Guid getHostId()
@@ -566,6 +570,16 @@
         pmSecondaryConcurrent = value;
     }
 
+    private ListModel<String> externalHostsType;
+
+    public ListModel<String> getExternalHostsType() {
+        return externalHostsType;
+    }
+
+    private void setExternalHostsType(ListModel<String> value) {
+        externalHostsType = value;
+    }
+
     private ListModel<String> pmVariants;
 
     public ListModel<String> getPmVariants() {
@@ -786,6 +800,18 @@
         privateExternalHostName = value;
     }
 
+    private ListModel privateExternalDiscoveredHosts;
+
+    public ListModel getExternalDiscoveredHosts() { return 
privateExternalDiscoveredHosts; }
+
+    protected void setExternalDiscoveredHosts(ListModel value) { 
privateExternalDiscoveredHosts = value; }
+
+    private ListModel privateExternalHostGroups;
+
+    public ListModel getExternalHostGroups() { return 
privateExternalHostGroups; }
+
+    protected void setExternalHostGroups(ListModel value) { 
privateExternalHostGroups = value; }
+
     private EntityModel<String> privateComment;
 
     public EntityModel<String> getComment()
@@ -940,7 +966,21 @@
         getProviderSearchFilter().setIsAvailable(false);
         setProviderSearchFilterLabel(new EntityModel<String>());
         getProviderSearchFilterLabel().setIsAvailable(false);
+        setExternalDiscoveredHosts(new ListModel());
+        getExternalDiscoveredHosts().setIsAvailable(false);
+        getExternalDiscoveredHosts().setSelectedItem(null);
+        setExternalHostGroups(new ListModel());
+        getExternalHostGroups().setIsAvailable(false);
+        getExternalHostGroups().setSelectedItem(null);
         getUpdateHostsCommand().setIsExecutionAllowed(false);
+
+        setExternalHostsType(new ListModel<String>());
+        List<String> externalHostsTypes = new ArrayList<String>();
+        
externalHostsTypes.add(ConstantsManager.getInstance().getConstants().externalHostsDiscovered());
+        
externalHostsTypes.add(ConstantsManager.getInstance().getConstants().externalHostsProvisioned());
+        getExternalHostsType().setItems(externalHostsTypes);
+        getExternalHostsType().setSelectedItem(externalHostsTypes.get(0));
+
         // Initialize primary PM fields.
         setManagementIp(new EntityModel<String>());
         setPmUserName(new EntityModel<String>());
@@ -1754,7 +1794,7 @@
             getCluster().setSelectedItem(Linq.firstOrDefault(clusters));
         }
 
-        if (vds.getStatus() != VDSStatus.Maintenance && vds.getStatus() != 
VDSStatus.PendingApproval) {
+        if (vds.getStatus() != VDSStatus.Maintenance && vds.getStatus() != 
VDSStatus.PendingApproval && vds.getStatus() != VDSStatus.InstallingOS) {
             setAllowChangeHostPlacementPropertiesWhenNotInMaintenance();
         }
         else if (selectedSystemTreeItem != null)
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NewHostModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NewHostModel.java
index 9ee8e2f..7e6d5e8 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NewHostModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/NewHostModel.java
@@ -2,6 +2,8 @@
 
 import java.util.ArrayList;
 
+import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost;
+import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -24,6 +26,10 @@
         super();
         getExternalHostName().getSelectedItemChangedEvent().addListener(this);
         getExternalHostName().setIsAvailable(ApplicationModeHelper.getUiMode() 
!= ApplicationMode.GlusterOnly);
+        
getExternalDiscoveredHosts().getSelectedItemChangedEvent().addListener(this);
+        
getExternalDiscoveredHosts().setIsAvailable(ApplicationModeHelper.getUiMode() 
!= ApplicationMode.GlusterOnly);
+        
getExternalHostGroups().getSelectedItemChangedEvent().addListener(this);
+        
getExternalHostGroups().setIsAvailable(ApplicationModeHelper.getUiMode() != 
ApplicationMode.GlusterOnly);
         
getExternalHostProviderEnabled().setIsAvailable(ApplicationModeHelper.getUiMode()
 != ApplicationMode.GlusterOnly);
         getProviders().getSelectedItemChangedEvent().addListener(this);
         getProviders().setIsAvailable(ApplicationModeHelper.getUiMode() != 
ApplicationMode.GlusterOnly);
@@ -38,18 +44,46 @@
         
getExternalHostProviderEnabled().getEntityChangedEvent().addListener(externalHostsListener);
         getExternalHostProviderEnabled().setEntity(false);
         getExternalHostName().setIsChangable(false);
+        getExternalDiscoveredHosts().setEntity(false);
+        getExternalDiscoveredHosts().setIsChangable(false);
+        getExternalDiscoveredHosts().setSelectedItem(null);
+        getExternalHostGroups().setEntity(false);
+        getExternalHostGroups().setIsChangable(false);
+        getExternalHostGroups().setSelectedItem(null);
         setEnableSearchHost(false);
+
+        UpdateExternalHostModels();
     }
 
     private void hostName_SelectedItemChanged()
     {
-        VDS host = getExternalHostName().getSelectedItem();
-
+        VDS host = (VDS) getExternalHostName().getSelectedItem();
+        getExternalDiscoveredHosts().setSelectedItem(null);
+        getExternalHostGroups().setIsAvailable(false);
+        getExternalHostGroups().setIsChangable(false);
         if (host == null)
         {
             host = new VDS();
         }
         updateModelFromVds(host, null, false, null);
+        getHost().setEntity(host.getName());
+        getHost().setIsChangable(false);
+    }
+
+    private void discoverHostName_SelectedItemChanged() {
+        ExternalDiscoveredHost dhost = (ExternalDiscoveredHost) 
getExternalDiscoveredHosts().getSelectedItem();
+        getExternalHostName().setSelectedItem(null);
+        getExternalHostGroups().setIsAvailable(true);
+        getExternalHostGroups().setIsChangable(true);
+
+        VDS vds = new VDS();
+        if (dhost != null)
+        {
+            vds.setVdsName(dhost.getName());
+            vds.setHostName(dhost.getIp());
+        }
+        updateModelFromVds(vds, null, false, null);
+        getName().setIsChangable(true);
     }
 
     private void providers_SelectedItemChanged() {
@@ -57,6 +91,10 @@
         setEnableSearchHost(provider != null);
         getExternalHostName().setItems(null);
         getExternalHostName().setIsChangable(false);
+        getExternalDiscoveredHosts().setIsChangable(false);
+        getExternalDiscoveredHosts().setItems(null);
+        getExternalHostGroups().setIsChangable(false);
+        getExternalHostGroups().setItems(null);
     }
 
     private void updateHostList(String searchFilter) {
@@ -76,9 +114,43 @@
                 }
             };
             AsyncDataProvider.getExternalProviderHostList(getHostsQuery, 
provider.getId(), true, searchFilter);
+
+            AsyncQuery getDiscoveredHostsQuery = new AsyncQuery();
+            getDiscoveredHostsQuery.asyncCallback = new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object result)
+                {
+                    ArrayList<ExternalDiscoveredHost> hosts = 
(ArrayList<ExternalDiscoveredHost>) result;
+                    ListModel externalDiscoveredHostsListModel = 
getExternalDiscoveredHosts();
+                    hosts.add(0, null);
+                    externalDiscoveredHostsListModel.setItems(hosts);
+                    externalDiscoveredHostsListModel.setIsChangable(true);
+                }
+            };
+            
AsyncDataProvider.GetExternalProviderDiscoveredHostList(getDiscoveredHostsQuery,
 provider);
+
+            AsyncQuery getHostGroupsQuery = new AsyncQuery();
+            getHostGroupsQuery.asyncCallback = new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object result)
+                {
+                    ArrayList<ExternalHostGroup> hostGroups = 
(ArrayList<ExternalHostGroup>) result;
+                    ListModel externalHostGroupsListModel = 
getExternalHostGroups();
+                    hostGroups.add(0, null);
+                    externalHostGroupsListModel.setItems(hostGroups);
+                    externalHostGroupsListModel.setIsChangable(true);
+                }
+            };
+            
AsyncDataProvider.GetExternalProviderHostGroupList(getHostGroupsQuery, 
provider);
         } else {
             getExternalHostName().setItems(null);
             getExternalHostName().setIsChangable(false);
+            getExternalDiscoveredHosts().setItems(null);
+            getExternalDiscoveredHosts().setIsChangable(false);
+            getExternalDiscoveredHosts().setSelectedItem(null);
+            getExternalHostGroups().setItems(null);
+            getExternalHostGroups().setIsChangable(false);
+            getExternalHostGroups().setSelectedItem(null);
             setEnableSearchHost(false);
         }
     }
@@ -96,6 +168,8 @@
                     ListModel<Provider> providersListModel = getProviders();
                     providersListModel.setItems(providers);
                     providersListModel.setIsChangable(true);
+                    providersListModel.setSelectedItem(providers.get(0));
+                    updateHostList("");
                 }
             };
             AsyncDataProvider.getAllProvidersByType(getProvidersQuery, 
ProviderType.FOREMAN);
@@ -112,6 +186,9 @@
             hostName_SelectedItemChanged();
         } else if 
(ev.matchesDefinition(ListModel.selectedItemChangedEventDefinition) && sender 
== getProviders()) {
             providers_SelectedItemChanged();
+        } else if 
(ev.matchesDefinition(ListModel.selectedItemChangedEventDefinition) && sender ==
+                   getExternalDiscoveredHosts()) {
+            discoverHostName_SelectedItemChanged();
         }
     }
 
@@ -169,6 +246,26 @@
 
     private void setHostProviderWidgetsAvailability(boolean enabled) {
         getProviders().setIsAvailable(enabled);
+        getExternalHostsType().setIsAvailable(enabled);
+
+        if (enabled) {
+            updateHostList("");
+            showExternalDiscoveredHost(true);
+            showExternalProvisionedHosts(false);
+        } else {
+            showExternalDiscoveredHost(false);
+            showExternalProvisionedHosts(false);
+        }
+    }
+
+    private void showExternalDiscoveredHost(boolean enabled) {
+        getExternalDiscoveredHosts().setIsAvailable(enabled);
+        getExternalDiscoveredHosts().setSelectedItem(null);
+        getExternalHostGroups().setIsAvailable(enabled);
+        getExternalHostGroups().setSelectedItem(null);
+    }
+
+    private void showExternalProvisionedHosts(boolean enabled) {
         getProviderSearchFilter().setIsAvailable(enabled);
         getProviderSearchFilterLabel().setIsAvailable(enabled);
         getExternalHostName().setIsAvailable(enabled);
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 9ce10c4..716bcbb 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
@@ -138,8 +138,10 @@
     }
 
     private boolean isTypeRequiresAuthentication() {
-        ProviderType type = getType().getSelectedItem();
-        return type == ProviderType.FOREMAN;
+        // TODO: rememeber to remove. this to allow using foreman livecd that 
does not require authentication.
+        //ProviderType type = (ProviderType) getType().getSelectedItem();
+        //return type == ProviderType.FOREMAN;
+        return false;
     }
 
     private String getDefaultUrl(ProviderType type) {
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
index 353fbf7..88c40bb 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
@@ -97,6 +97,8 @@
 
     String VDSStatus___Connecting();
 
+    String VDSStatus___InstallingOS();
+
     String VdsTransparentHugePages___Never();
 
     String VdsTransparentHugePages___MAdvise();
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 13cbd5b..5dbba86 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
@@ -2006,6 +2006,12 @@
     @DefaultStringValue("Secondary")
     String secondaryPmVariant();
 
+    @DefaultStringValue("Discovered Hosts")
+    String externalHostsDiscovered();
+
+    @DefaultStringValue("Provisioned Hosts")
+    String externalHostsProvisioned();
+
     @DefaultStringValue("Eject")
     String eject();
 
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
index 2f28358..ea960d5 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
+++ 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
@@ -46,6 +46,7 @@
 VDSStatus___Unassigned=Unassigned
 VDSStatus___Up=Up
 VDSStatus___Connecting=Connecting
+VDSStatus___InstallingOS=Installing OS
 VdsTransparentHugePages___Never=Off
 VdsTransparentHugePages___MAdvise=On Demand
 VdsTransparentHugePages___Always=On
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 75e62fe..234aec7 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
@@ -205,6 +205,15 @@
     @DefaultStringValue("External Provider")
     String externalProviderLabel();
 
+    @DefaultStringValue("Host Provider")
+    String hostProviderTabLabel();
+
+    @DefaultStringValue("Discovered Hosts")
+    String discoveredHostsLabel();
+
+    @DefaultStringValue("Host Groups")
+    String hostGroupsLabel();
+
     @DefaultStringValue("If you would like this host's networks to be 
provisioned by an external provider, please choose it from the list.")
     String externalProviderExplanation();
 
@@ -494,13 +503,16 @@
     @DefaultStringValue("Authentication")
     String hostPopupAuthLabel();
 
+    @DefaultStringValue("Set Root Password")
+    String hostPopupAuthLabelForExternalHost();
+
     @DefaultStringValue("Automatically configure host firewall")
     String hostPopupOverrideIpTablesLabel();
 
-    @DefaultStringValue("Use External Providers")
+    @DefaultStringValue("Use Foreman Providers")
     String hostPopupEnableExternalHostProvider();
 
-    @DefaultStringValue("External Hosts")
+    @DefaultStringValue("Foreman Hosts")
     String hostPopupExternalHostName();
 
     @DefaultStringValue("Update Hosts")
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 257e831..0ef6fad 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
@@ -3,6 +3,8 @@
 import java.util.List;
 
 import 
org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
+import org.ovirt.engine.core.common.businessentities.ExternalDiscoveredHost;
+import org.ovirt.engine.core.common.businessentities.ExternalHostGroup;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VDS;
@@ -147,9 +149,24 @@
     ListModelListBoxEditor<VDS> externalHostNameEditor;
 
     @UiField(provided = true)
+    @Path(value = "externalHostsType.selectedItem")
+    @WithElementId("externalHostsType")
+    ListModelListBoxOnlyEditor<String> externalHostsTypeEditor;
+
+    @UiField(provided = true)
     @Path(value = "providers.selectedItem")
     @WithElementId("providers")
     ListModelListBoxEditor<Provider> providersEditor;
+
+    @UiField(provided = true)
+    @Path(value = "externalDiscoveredHosts.selectedItem")
+    @WithElementId("externalDiscoveredHosts")
+    ListModelListBoxEditor<Object> externalDiscoveredHostsEditor;
+
+    @UiField(provided = true)
+    @Path(value = "externalHostGroups.selectedItem")
+    @WithElementId("externalHostGroups")
+    ListModelListBoxEditor<Object> externalHostGroupsEditor;
 
     @UiField
     @Path(value = "host.entity")
@@ -501,6 +518,22 @@
 
         pmSecondaryTypeEditor = new ListModelListBoxEditor<String>(new 
StringRenderer<String>());
 
+        externalDiscoveredHostsEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                return ((ExternalDiscoveredHost) object).getName();
+            }
+        });
+
+        externalHostGroupsEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            protected String renderNullSafe(Object object) {
+                return ((ExternalHostGroup) object).getName();
+            }
+        });
+
+        externalHostsTypeEditor = new ListModelListBoxOnlyEditor<String>(new 
StringRenderer<String>());
+
         // Check boxes
         pmEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         externalHostProviderEnabledEditor = new 
EntityModelCheckBoxEditor(Align.RIGHT);
@@ -573,6 +606,9 @@
 
         // Network Provider Tab
         networkProviderTab.setLabel(constants.networkProviderButtonLabel());
+
+        
externalDiscoveredHostsEditor.setLabel(constants.discoveredHostsLabel());
+        externalHostGroupsEditor.setLabel(constants.hostGroupsLabel());
     }
 
     private void applyModeCustomizations() {
@@ -631,6 +667,26 @@
                 if (e.propertyName == "IsAvailable") { //$NON-NLS-1$
                     setPkPasswordSectionVisiblity(false);
                 }
+            }
+        });
+
+        
object.getExternalHostsType().getPropertyChangedEvent().addListener(new 
IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                PropertyChangedEventArgs e = (PropertyChangedEventArgs) args;
+                if (e.propertyName == "SelectedItem") { //$NON-NLS-1$
+                    boolean isDiscoverVisible = 
externalDiscoveredHostsEditor.isVisible();
+                    showExternalDiscoveredHost(!isDiscoverVisible);
+                    showExternalProvisionedHosts(isDiscoverVisible);
+                    usualFormToDiscover(isDiscoverVisible);
+                }
+            }
+        });
+
+        
object.getExternalHostProviderEnabled().getPropertyChangedEvent().addListener(new
 IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                
usualFormToDiscover(!object.getExternalHostProviderEnabled().getEntity());
             }
         });
 
@@ -750,6 +806,18 @@
             }
         });
 
+        
object.getExternalHostsType().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+
+                ListModel model = (ListModel) sender;
+                List items = (List) model.getItems();
+                Object selectedItem = model.getSelectedItem();
+
+                updatePmPanelsVisibility(items.indexOf(selectedItem) == 0);
+            }
+        });
+
         updatePmPanelsVisibility(true);
         initExternalHostProviderWidgets(object.showExternalProviderPanel());
         // TODO: remove setIsChangable when configured ssh username is enabled
@@ -767,7 +835,10 @@
         // All the rest shouldn't be visible
         externalHostProviderEnabledEditor.setVisible(isAvailable);
         externalHostNameEditor.setVisible(false);
+        externalHostsTypeEditor.setVisible(false);
         providersEditor.setVisible(false);
+        externalDiscoveredHostsEditor.setVisible(false);
+        externalHostGroupsEditor.setVisible(false);
         searchProviderPanel.setVisible(false);
     }
 
@@ -789,6 +860,39 @@
 
         pmPrimaryPanel.setVisible(primary);
         pmSecondaryPanel.setVisible(!primary);
+    }
+
+    private void showExternalDiscoveredHost(boolean enabled) {
+        externalDiscoveredHostsEditor.setVisible(enabled);
+        externalHostGroupsEditor.setVisible(enabled);
+    }
+    private void showExternalProvisionedHosts(boolean enabled) {
+        externalHostNameEditor.setVisible(enabled);
+        searchProviderPanel.setVisible(enabled);
+        providerSearchFilterLabel.setVisible(enabled);
+        providerSearchFilterEditor.setVisible(enabled);
+    }
+
+    private void usualFormToDiscover(boolean isUsual) {
+        if (!isUsual) {
+            authLabel.setText(constants.hostPopupAuthLabelForExternalHost());
+            rbPublicKey.setVisible(false);
+            expanderContent.setVisible(false);
+            
publicKeyEditor.getElement().getStyle().setVisibility(Visibility.HIDDEN);
+            
authSshPortEditor.getElement().getStyle().setVisibility(Visibility.HIDDEN);
+            hostAddressEditor.setEnabled(true);
+        } else {
+            // Return to usual form
+            authLabel.setText(constants.hostPopupAuthLabel());
+            rbPublicKey.setVisible(true);
+            expanderContent.setVisible(true);
+            
publicKeyEditor.getElement().getStyle().setVisibility(Visibility.VISIBLE);
+            
authSshPortEditor.getElement().getStyle().setVisibility(Visibility.VISIBLE);
+
+            // maybe we can avoid the latter somehow
+            rbPassword.setEnabled(true);
+            displayPassPkWindow(true);
+        }
     }
 
     private void createSpmControls(final HostModel object) {
@@ -937,6 +1041,8 @@
         clusterEditor.setTabIndex(nextTabIndex++);
         externalHostProviderEnabledEditor.setTabIndex(nextTabIndex++);
         providersEditor.setTabIndex(nextTabIndex++);
+        externalDiscoveredHostsEditor.setTabIndex(nextTabIndex++);
+        externalHostGroupsEditor.setTabIndex(nextTabIndex++);
         providerSearchFilterLabel.setTabIndex(nextTabIndex++);
         nameEditor.setTabIndex(nextTabIndex++);
         hostAddressEditor.setTabIndex(nextTabIndex++);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/host/HostPopupView.ui.xml
index 64978c7..b7895c7 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
@@ -230,6 +230,7 @@
                                       <ge:EntityModelCheckBoxEditor 
ui:field="externalHostProviderEnabledEditor"/>
                                       <e:ListModelListBoxEditor 
ui:field="providersEditor"/>
                                     </g:HorizontalPanel>
+                                    <e:ListModelListBoxOnlyEditor 
ui:field="externalHostsTypeEditor"/>
                                     <g:FlowPanel 
ui:field="searchProviderPanel" width="100%">
                                         <g:FlowPanel 
addStyleNames="{style.filterIcon}">
                                           <ge:StringEntityModelTextBoxEditor 
ui:field="providerSearchFilterLabel"/>
@@ -243,6 +244,8 @@
                                         </g:FlowPanel>
                                     </g:FlowPanel>
                                     <e:ListModelListBoxEditor 
ui:field="externalHostNameEditor"/>
+                                    <e:ListModelListBoxEditor 
ui:field="externalDiscoveredHostsEditor"/>
+                                    <e:ListModelListBoxEditor 
ui:field="externalHostGroupsEditor"/>
                                 </g:FlowPanel>
                                 <g:FlowPanel>
                                     <ge:StringEntityModelTextBoxEditor 
ui:field="nameEditor"/>
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusCell.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusCell.java
index 7a0620e..cacc6fd 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusCell.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusCell.java
@@ -57,6 +57,7 @@
             statusImage = resources.nonOperationalImage();
             break;
         case PendingApproval:
+        case InstallingOS:
             statusImage = resources.unconfiguredImage();
             break;
         case Initializing:


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

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

Reply via email to