Oved Ourfali has uploaded a new change for review.

Change subject: foreman integration - showing foreman hosts in new host dialog
......................................................................

foreman integration - showing foreman hosts in new host dialog

This patch adds external host provider interface, with an implementation
for Foreman, to allow viewing foreman hosts from the "add new host"
dialog.

Limitations (will be addressed later):
1. Will only work with non-SSL foreman servers
2. The list of hosts will still show hosts that were already added
3. No way to set a foreman hosts search filter in the UI

Change-Id: I30ea180e477a8f0714c4dc97ec55f29be515723a
Signed-off-by: Oved Ourfali <[email protected]>
---
M backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
M backend/manager/modules/bll/pom.xml
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
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/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
21 files changed, 444 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/82/14582/1

diff --git a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql 
b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
index 2b679c0..7c82123 100644
--- a/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
+++ b/backend/manager/dbscripts/upgrade/pre_upgrade/0000_config.sql
@@ -129,6 +129,9 @@
 select fn_db_add_config_value('FilteringLUNsEnabled','false','3.2');
 select fn_db_add_config_value('FilteringLUNsEnabled','false','3.3');
 select 
fn_db_add_config_value('FindFenceProxyDelayBetweenRetriesInSec','30','general');
+select fn_db_add_config_value('ForemanUrl','','general');
+select fn_db_add_config_value('ForemanUserName','','general');
+select fn_db_add_config_value('ForemanPassword','','general');
 select fn_db_add_config_value('FindFenceProxyRetries','3','general');
 select fn_db_add_config_value('FreeSpaceCriticalLowInGB','5','general');
 select fn_db_add_config_value('FreeSpaceLow','10','general');
diff --git a/backend/manager/modules/bll/pom.xml 
b/backend/manager/modules/bll/pom.xml
index 20c92f5..c7628bc 100644
--- a/backend/manager/modules/bll/pom.xml
+++ b/backend/manager/modules/bll/pom.xml
@@ -111,6 +111,15 @@
       <version>1.6</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+       <groupId>org.codehaus.jackson</groupId>
+       <artifactId>jackson-core-asl</artifactId>
+    </dependency>
+    <dependency>
+       <groupId>org.codehaus.jackson</groupId>
+       <artifactId>jackson-mapper-asl</artifactId>
+    </dependency>
+
   </dependencies>
 
   <build>
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java
new file mode 100644
index 0000000..324ac922
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostListFromExternalProviderQuery.java
@@ -0,0 +1,22 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.bll.host.provider.HostProvider;
+import org.ovirt.engine.core.bll.host.provider.HostProviderProxyFactory;
+import org.ovirt.engine.core.common.config.Config;
+import org.ovirt.engine.core.common.config.ConfigValues;
+import 
org.ovirt.engine.core.common.queries.GetHostListFromExternalProviderParameters;
+
+public class GetHostListFromExternalProviderQuery<P extends 
GetHostListFromExternalProviderParameters> extends QueriesCommandBase<P> {
+    public GetHostListFromExternalProviderQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        String url = Config.<String> GetValue(ConfigValues.ForemanUrl);
+        String userName = Config.<String> 
GetValue(ConfigValues.ForemanUserName);
+        String password = Config.<String> 
GetValue(ConfigValues.ForemanPassword);
+        HostProvider hostProvider = new HostProvider(url, userName, password);
+        
getQueryReturnValue().setReturnValue(HostProviderProxyFactory.getInstance().create(hostProvider).getAll());
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java
new file mode 100644
index 0000000..d22d48c
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProvider.java
@@ -0,0 +1,39 @@
+package org.ovirt.engine.core.bll.host.provider;
+
+public class HostProvider {
+    private String url;
+    private String userName;
+    private String password;
+
+    public HostProvider(String url, String userName, String password) {
+        super();
+        this.url = url;
+        this.userName = userName;
+        this.password = password;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
new file mode 100644
index 0000000..d67f7c1
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxy.java
@@ -0,0 +1,12 @@
+package org.ovirt.engine.core.bll.host.provider;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+
+public interface HostProviderProxy {
+
+    List<VDS> getAll();
+    List<VDS> getFiltered(String filter);
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java
new file mode 100644
index 0000000..c050a85
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactory.java
@@ -0,0 +1,24 @@
+package org.ovirt.engine.core.bll.host.provider;
+
+import 
org.ovirt.engine.core.bll.host.provider.foreman.ForemanHostProviderProxy;
+
+public class HostProviderProxyFactory {
+    private static final HostProviderProxyFactory INSTANCE = new 
HostProviderProxyFactory();
+
+    private HostProviderProxyFactory() {
+    }
+
+    public static HostProviderProxyFactory getInstance() {
+        return INSTANCE;
+    }
+
+    public HostProviderProxy create(HostProvider hostProvider) {
+        return new ForemanHostProviderProxy(hostProvider);
+    }
+
+    public static void main(String args[]) {
+        HostProvider provider = new 
HostProvider("https://foreman.sat.lab.tlv.redhat.com";, "oourfali", "aA1234!");
+        HostProviderProxy proxy = getInstance().create(provider);
+        System.out.println(proxy.getAll().size());
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java
new file mode 100644
index 0000000..5011995
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHost.java
@@ -0,0 +1,18 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import org.codehaus.jackson.map.annotate.JsonRootName;
+
+@JsonRootName("host")
+public class ForemanHost {
+
+    private String name;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java
new file mode 100644
index 0000000..a5a3d83
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostList.java
@@ -0,0 +1,15 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+public class ForemanHostList {
+
+    private ForemanHost[] hosts;
+
+    public ForemanHost[] getHosts() {
+        return hosts;
+    }
+
+    public void setHosts(ForemanHost[] hosts) {
+        this.hosts = hosts;
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
new file mode 100644
index 0000000..fef8b4d
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostProviderProxy.java
@@ -0,0 +1,84 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpMethod;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.ovirt.engine.core.bll.host.provider.HostProvider;
+import org.ovirt.engine.core.bll.host.provider.HostProviderProxy;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.codehaus.jackson.JsonParseException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jackson.map.DeserializationConfig.Feature;
+import org.apache.commons.lang.StringUtils;
+
+public class ForemanHostProviderProxy implements HostProviderProxy {
+
+    private HostProvider hostProvider;
+
+    private HttpClient httpClient = new HttpClient();
+
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    public ForemanHostProviderProxy(HostProvider hostProvider) {
+        this.hostProvider = hostProvider;
+        objectMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        Credentials hostProviderCredentials = new 
UsernamePasswordCredentials(hostProvider.getUserName(), 
hostProvider.getPassword());
+        httpClient.getState().setCredentials(AuthScope.ANY, 
hostProviderCredentials);
+    }
+
+    @Override
+    public List<VDS> getAll() {
+        HttpMethod method = new GetMethod(hostProvider.getUrl() + 
"/hosts?format=json");
+        return runHostListMethod(method);
+    }
+
+    private List<VDS> runHostListMethod(HttpMethod method) {
+        try{
+
+            System.out.println(httpClient.executeMethod(method));
+            ForemanHostWrapper[] hosts = 
objectMapper.readValue(method.getResponseBody(), ForemanHostWrapper[].class);
+            return map(Arrays.asList(hosts));
+
+        } catch (JsonParseException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (JsonMappingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (IOException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    private List<VDS> map(List<ForemanHostWrapper> foremanHosts) {
+        ArrayList<VDS> hosts = new ArrayList<VDS>(foremanHosts.size());
+
+        for (ForemanHostWrapper host : foremanHosts) {
+            VDS vds = new VDS();
+            String hostName = host.getHost().getName();
+            vds.setVdsName(hostName);
+            vds.setManagementIp(hostName);
+            hosts.add(vds);
+        }
+
+        return hosts;
+    }
+
+    @Override
+    public List<VDS> getFiltered(String filter) {
+        HttpMethod method = new GetMethod(hostProvider.getUrl() + "/hosts" + 
(filter.isEmpty()? StringUtils.EMPTY : "?&search=" + filter) + "&format=json");
+        return runHostListMethod(method);
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java
new file mode 100644
index 0000000..ee064b8
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/host/provider/foreman/ForemanHostWrapper.java
@@ -0,0 +1,14 @@
+package org.ovirt.engine.core.bll.host.provider.foreman;
+
+public class ForemanHostWrapper {
+
+    private ForemanHost host;
+
+    public ForemanHost getHost() {
+        return host;
+    }
+
+    public void setHost(ForemanHost host) {
+        this.host = host;
+    }
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java
new file mode 100644
index 0000000..ad4a2b5
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/host/provider/HostProviderProxyFactoryTest.java
@@ -0,0 +1,14 @@
+package org.ovirt.engine.core.bll.host.provider;
+
+import org.junit.Test;
+
+public class HostProviderProxyFactoryTest {
+
+    @Test
+    public void testCreate() {
+        HostProvider provider = new 
HostProvider("http://foreman-ovirt-dev1.eng.lab.tlv.redhat.com";, "admin", 
"changeme");
+        HostProviderProxy proxy = 
HostProviderProxyFactory.getInstance().create(provider);
+        System.out.println(proxy.getAll().size());
+        System.out.println(proxy.getAll().get(0));
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
index 3422353..ffbb1b2 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/config/ConfigValues.java
@@ -1356,6 +1356,18 @@
     @DefaultValueAttribute("false")
     MigrationNetworkEnabled(502),
 
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("")
+    ForemanUrl(503),
+
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("")
+    ForemanUserName(504),
+
+    @TypeConverterAttribute(String.class)
+    @DefaultValueAttribute("")
+    ForemanPassword(505),
+
     Invalid(65535);
 
     private int intValue;
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
index fc2dd12..c5cb5c1 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/ConfigurationValues.java
@@ -15,6 +15,8 @@
     MaxVdsMemOverCommit(ConfigAuthType.User),
     MaxVdsMemOverCommitForServers(ConfigAuthType.User),
     AdUserName,
+    // ForemanUrl attribute
+    ForemanUrl,
     // TODO remove remarks and AdUserPassword completely in version 3.1.
     // AdUserPassword field format has been changed.
     // AdUserPassword,
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java
new file mode 100644
index 0000000..58ec6c3
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostListFromExternalProviderParameters.java
@@ -0,0 +1,7 @@
+package org.ovirt.engine.core.common.queries;
+
+public class GetHostListFromExternalProviderParameters extends 
VdcQueryParametersBase {
+
+    private static final long serialVersionUID = 8729202312358351850L;
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index fbc99f9..6e5e8ab 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -31,6 +31,7 @@
     GetHostsByClusterId(VdcQueryAuthType.User),
     IsDisplayAddressConsistentInCluster,
     GetAllVdsByStoragePool(VdcQueryAuthType.User),
+    GetHostListFromExternalProvider(),
 
     // Vds Networks
     GetVdsInterfacesByVdsId(VdcQueryAuthType.User),
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 b0d262e..038f324 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
@@ -68,6 +68,7 @@
 import org.ovirt.engine.core.common.queries.GetDomainListParameters;
 import 
org.ovirt.engine.core.common.queries.GetEntitiesWithPermittedActionParameters;
 import 
org.ovirt.engine.core.common.queries.GetExistingStorageDomainListParameters;
+import 
org.ovirt.engine.core.common.queries.GetHostListFromExternalProviderParameters;
 import 
org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters;
 import org.ovirt.engine.core.common.queries.GetLunsByVgIdParameters;
 import 
org.ovirt.engine.core.common.queries.GetPermittedStorageDomainsByStoragePoolIdParameters;
@@ -321,6 +322,21 @@
                 aQuery);
     }
 
+    public static void GetExternalProviderHostList(AsyncQuery aQuery) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                if (source == null)
+                {
+                    return new ArrayList<VDS>();
+                }
+                return source;
+            }
+        };
+        Frontend.RunQuery(VdcQueryType.GetHostListFromExternalProvider, new 
GetHostListFromExternalProviderParameters(), aQuery);
+    }
+
     public static void GetPoolById(AsyncQuery aQuery, Guid poolId) {
         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 552d419..38fdae6 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
@@ -652,6 +652,9 @@
             }
         };
         AsyncDataProvider.GetDataCenterList(_asyncQuery);
+
+        hostModel.getExternalHostProviderEnabled().setEntity(false);
+        hostModel.getHostName().setIsEmpty(true);
     }
 
     private void GoToEventsTab()
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 b50af8f..270f30e 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
@@ -7,9 +7,11 @@
 
 import org.ovirt.engine.core.common.businessentities.FenceAgentOrder;
 import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.GetNewVdsFenceStatusParameters;
 import org.ovirt.engine.core.common.queries.ValueObjectMap;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
@@ -141,6 +143,18 @@
         privateDataCenter = value;
     }
 
+    private ListModel privateHostName;
+
+    public ListModel getHostName()
+    {
+        return privateHostName;
+    }
+
+    private void setHostName(ListModel value)
+    {
+        privateHostName = value;
+    }
+
     private ListModel privateCluster;
 
     public ListModel getCluster()
@@ -243,6 +257,16 @@
 
     public void setConsoleAddressEnabled(EntityModel consoleAddressEnabled) {
         this.consoleAddressEnabled = consoleAddressEnabled;
+    }
+
+    private EntityModel externalHostProviderEnabled;
+
+    public EntityModel getExternalHostProviderEnabled() {
+        return externalHostProviderEnabled;
+    }
+
+    public void setExternalHostProviderEnabled(EntityModel 
externalHostProviderEnabled) {
+        this.externalHostProviderEnabled = externalHostProviderEnabled;
     }
 
     private ListModel privatePmType;
@@ -616,8 +640,11 @@
         setName(new EntityModel());
         setHost(new EntityModel());
         setDataCenter(new ListModel());
+        setHostName(new ListModel());
         getDataCenter().getSelectedItemChangedEvent().addListener(this);
         getDataCenter().setIsAvailable(ApplicationModeHelper.getUiMode() != 
ApplicationMode.GlusterOnly);
+        getHostName().getSelectedItemChangedEvent().addListener(this);
+        getHostName().setIsAvailable(ApplicationModeHelper.getUiMode() != 
ApplicationMode.GlusterOnly);
         setCluster(new ListModel());
         getCluster().getSelectedItemChangedEvent().addListener(this);
         setPort(new EntityModel());
@@ -625,13 +652,29 @@
         setOverrideIpTables(new EntityModel());
         getOverrideIpTables().setEntity(false);
 
-
         IEventListener pmListener = new IEventListener() {
             @Override
             public void eventRaised(Event ev, Object sender, EventArgs args) {
                 UpdatePmModels();
             }
         };
+
+        setExternalHostProviderEnabled(new EntityModel());
+        String foremanUrl = (String) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.ForemanUrl);
+
+        if (foremanUrl != null && !foremanUrl.isEmpty()) {
+            IEventListener externalHostsListener = new IEventListener() {
+                @Override
+                public void eventRaised(Event ev, Object sender, EventArgs 
args) {
+                    UpdateExternalHostModels();
+                }
+            };
+            getExternalHostProviderEnabled().setEntity(true);
+            
getExternalHostProviderEnabled().getEntityChangedEvent().addListener(externalHostsListener);
+        } else {
+            getExternalHostProviderEnabled().setIsAvailable(false);
+            getHostName().setIsAvailable(false);
+        }
 
         // Initialize primary PM fields.
         setManagementIp(new EntityModel());
@@ -838,6 +881,8 @@
         else if 
(ev.matchesDefinition(ListModel.SelectedItemChangedEventDefinition) && sender 
== getCluster())
         {
             Cluster_SelectedItemChanged();
+        } else if 
(ev.matchesDefinition(ListModel.SelectedItemChangedEventDefinition) && sender 
== getHostName()) {
+            HostName_SelectedItemChanged();
         } else if (sender == getConsoleAddressEnabled()) {
             consoleAddressChanged();
         }
@@ -911,6 +956,22 @@
                     updatePmTypeList(pmTypes, getPmSecondaryType());
                 }
             }), cluster.getcompatibility_version());
+        }
+    }
+
+    private void HostName_SelectedItemChanged()
+    {
+        VDS host = (VDS) getHostName().getSelectedItem();
+
+        if (host != null)
+        {
+            getName().setEntity(host.getName()); // setting it as a proposed 
name
+            getHost().setEntity(host.getManagementIp());  // setting it as the 
name
+            getHost().setIsChangable(false);
+        } else {
+            getName().setEntity(""); //$NON-NLS-1$
+            getHost().setEntity(""); //$NON-NLS-1$
+            getHost().setIsChangable(true);
         }
     }
 
@@ -992,6 +1053,39 @@
         return dict;
     }
 
+    private void UpdateExternalHostModels()
+    {
+        boolean enabled = (Boolean) 
getExternalHostProviderEnabled().getEntity();
+        if (enabled && getHostName().getIsEmpty()) {
+            AsyncQuery getHostsQuery = new AsyncQuery();
+            getHostsQuery.setModel(this);
+            getHostsQuery.asyncCallback = new INewAsyncCallback() {
+                @Override
+                public void OnSuccess(Object model, Object result)
+                {
+                    HostModel hostListModel = (HostModel) model;
+
+                    ArrayList<VDS> hosts = (ArrayList<VDS>) result;
+                    ListModel hostNameListModel = hostListModel.getHostName();
+                    hostNameListModel.setItems(hosts);
+                    hostNameListModel.setSelectedItem(null);
+                    hostNameListModel.setIsSelectable(true);
+                    hostNameListModel.setIsChangable(true);
+                    hostNameListModel.setIsEmpty(false);
+                    getName().setEntity("");
+                    getHost().setEntity("");
+                }
+            };
+            AsyncDataProvider.GetExternalProviderHostList(getHostsQuery);
+        } else {
+            getHostName().setIsSelectable(enabled);
+            getHostName().setIsChangable(enabled);
+            getHostName().setSelectedItem(null);
+            getName().setEntity("");
+            getHost().setEntity("");
+        }
+    }
+
     private void UpdatePmModels()
     {
         boolean isPm = (Boolean) getIsPm().getEntity();
@@ -1025,9 +1119,11 @@
 
                     List<String> pmOptions = (ArrayList<String>) returnValue;
 
-                    getPmPort().setIsAvailable(pmOptions.contains(PmPortKey));
-                    getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey));
-                    
getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey));
+                    if (pmOptions != null) {
+                        
getPmPort().setIsAvailable(pmOptions.contains(PmPortKey));
+                        
getPmSlot().setIsAvailable(pmOptions.contains(PmSlotKey));
+                        
getPmSecure().setIsAvailable(pmOptions.contains(PmSecureKey));
+                    }
                 }
             }), pmType);
         } else {
@@ -1061,9 +1157,11 @@
 
                     List<String> pmOptions = (ArrayList<String>) returnValue;
 
-                    
getPmSecondaryPort().setIsAvailable(pmOptions.contains(PmPortKey));
-                    
getPmSecondarySlot().setIsAvailable(pmOptions.contains(PmSlotKey));
-                    
getPmSecondarySecure().setIsAvailable(pmOptions.contains(PmSecureKey));
+                    if (pmOptions != null) {
+                        
getPmSecondaryPort().setIsAvailable(pmOptions.contains(PmPortKey));
+                        
getPmSecondarySlot().setIsAvailable(pmOptions.contains(PmSlotKey));
+                        
getPmSecondarySecure().setIsAvailable(pmOptions.contains(PmSecureKey));
+                    }
                 }
             }), pmSecondaryType);
         } else {
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 7ae679e..a88e360 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
@@ -385,6 +385,9 @@
     @DefaultStringValue("Name")
     String hostPopupNameLabel();
 
+    @DefaultStringValue("External Host")
+    String hostPopupExternalHosts();
+
     @DefaultStringValue("Address")
     String hostPopupHostAddressLabel();
 
@@ -397,6 +400,9 @@
     @DefaultStringValue("Automatically configure host firewall")
     String hostPopupOverrideIpTablesLabel();
 
+    @DefaultStringValue("Show external hosts")
+    String hostPopupEnableExternalHostProvider();
+
     @DefaultStringValue("Enable Power Management")
     String hostPopupPmEnabledLabel();
 
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 ff1815c..274dd5c 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
@@ -2,6 +2,7 @@
 
 import java.util.List;
 
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
@@ -97,6 +98,11 @@
     @WithElementId("name")
     EntityModelTextBoxEditor nameEditor;
 
+    @UiField(provided = true)
+    @Path(value = "hostName.selectedItem")
+    @WithElementId("hostName")
+    ListModelListBoxEditor<Object> hostNameEditor;
+
     @UiField
     @Path(value = "host.entity")
     @WithElementId("host")
@@ -173,6 +179,11 @@
     @Path(value = "pmSecure.entity")
     @WithElementId("pmSecure")
     EntityModelCheckBoxEditor pmSecureEditor;
+
+    @UiField(provided = true)
+    @Path(value = "externalHostProviderEnabled.entity")
+    @WithElementId("externalHostProviderEnabled")
+    EntityModelCheckBoxEditor externalHostProviderEnabledEditor;
 
     @UiField
     FlowPanel pmSecondaryPanel;
@@ -299,6 +310,7 @@
 
     private void addStyles() {
         
overrideIpTablesEditor.addContentWidgetStyleName(style.overrideIpStyle());
+        
externalHostProviderEnabledEditor.addContentWidgetStyleName(style.checkBox());
     }
 
     private void initEditors() {
@@ -314,6 +326,13 @@
             @Override
             public String renderNullSafe(Object object) {
                 return ((VDSGroup) object).getname();
+            }
+        });
+
+        hostNameEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                return ((VDS) object).getName();
             }
         });
 
@@ -340,6 +359,7 @@
 
         // Check boxes
         pmEnabledEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
+        externalHostProviderEnabledEditor = new 
EntityModelCheckBoxEditor(Align.RIGHT);
     }
 
     void localize(ApplicationConstants constants) {
@@ -351,6 +371,7 @@
         hostAddressEditor.setLabel(constants.hostPopupHostAddressLabel());
         rootPasswordEditor.setLabel(constants.hostPopupRootPasswordLabel());
         
overrideIpTablesEditor.setLabel(constants.hostPopupOverrideIpTablesLabel());
+        
externalHostProviderEnabledEditor.setLabel(constants.hostPopupEnableExternalHostProvider());
 
         // Power Management tab
         
powerManagementTab.setLabel(constants.hostPopupPowerManagementTabLabel());
@@ -588,6 +609,8 @@
         String radioButton();
 
         String overrideIpStyle();
+
+        String checkBox();
     }
 
 }
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 3b5d25d..5d08fb47 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
@@ -100,9 +100,19 @@
             float: right;
             width: 230px;
         }
+
+        .checkBox .gwt-CheckBox{
+            padding: 0px !important;
+            border-width: 0px !important;
+        }
+
+        .checkBox {
+            padding: 0px;
+        }
+
     </ui:style>
 
-    <d:SimpleDialogPanel width="650px" height="500px">
+    <d:SimpleDialogPanel width="670px" height="500px">
         <d:content>
             <t:DialogTabPanel ui:field="tabPanel" height="100%">
                 <t:tab>
@@ -112,6 +122,10 @@
                                 <g:FlowPanel 
addStyleNames="{style.generalTabTopDecorator}">
                                     <e:ListModelListBoxEditor 
ui:field="dataCenterEditor"/>
                                     <e:ListModelListBoxEditor 
ui:field="clusterEditor"/>
+                                    <g:HorizontalPanel width="100%">
+                                      <e:EntityModelCheckBoxEditor 
ui:field="externalHostProviderEnabledEditor"/>
+                                      <e:ListModelListBoxEditor 
ui:field="hostNameEditor"/>
+                                    </g:HorizontalPanel>
                                 </g:FlowPanel>
                                 <e:EntityModelTextBoxEditor 
ui:field="nameEditor"/>
                                 <e:EntityModelTextBoxEditor 
ui:field="hostAddressEditor"/>


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

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

Reply via email to