Kanagaraj M has uploaded a new change for review.

Change subject: webadmin: Adding Gluster Services Sub Tab to Cluster
......................................................................

webadmin: Adding Gluster Services Sub Tab to Cluster

A new sub tab named 'Services' is added to the Cluster Tab.
This sub tab will be shown only if the cluster supports Gluster.

NFS, SHD are the two different type of services. Hosts in the
Cluster will have NFS, SHD services running. A filter panel is
added to filter the results based on Service Type and host address.

Change-Id: Iea624f12a07f4aa9b1c6ffa1548aaafb16a00a7a
Signed-off-by: Kanagaraj M <kmayi...@redhat.com>
---
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/clusters/ClusterListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.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/gin/ManagedComponents.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml
16 files changed, 559 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/8460/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 c7f16d3..3fe7751 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
@@ -291,6 +291,16 @@
                <include 
name="common/businessentities/gluster/GlusterVolumeOptionInfo.java"/>
                <include 
name="common/businessentities/gluster/AccessProtocol.java"/>
                <include 
name="common/businessentities/gluster/GlusterTaskOperation.java"/>
+               <include 
name="common/businessentities/gluster/GlusterVolumeAdvancedDetails.java"/>
+               <include 
name="common/businessentities/gluster/ServiceInfo.java"/>
+               <include 
name="common/businessentities/gluster/BrickDetails.java"/>
+               <include 
name="common/businessentities/gluster/BrickProperties.java"/>
+               <include 
name="common/businessentities/gluster/GlusterClientInfo.java"/>
+               <include 
name="common/businessentities/gluster/GlusterVolumeStatusOption.java"/>
+               <include name="common/businessentities/gluster/MallInfo.java"/>
+               <include 
name="common/businessentities/gluster/MemoryStatus.java"/>
+               <include name="common/businessentities/gluster/Mempool.java"/>
+               <include 
name="common/businessentities/gluster/ServiceType.java"/>
                <include name="common/action/gluster/*.java"/>
                <include name="common/queries/gluster/*.java"/>
                <include name="common/constants/gluster/GlusterConstants.java"/>
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 2bd2c60..00a5385 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
@@ -19,6 +19,7 @@
 import org.ovirt.engine.core.common.businessentities.Network;
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 import org.ovirt.engine.core.common.businessentities.RepoFileMetaData;
+import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.ServerCpu;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StorageType;
@@ -34,7 +35,6 @@
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.businessentities.permissions;
-import org.ovirt.engine.core.common.businessentities.Role;
 import org.ovirt.engine.core.common.businessentities.storage_domains;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import 
org.ovirt.engine.core.common.businessentities.storage_server_connections;
@@ -94,6 +94,7 @@
 import org.ovirt.engine.core.common.queries.VdsIdParametersBase;
 import org.ovirt.engine.core.common.queries.gluster.GlusterParameters;
 import 
org.ovirt.engine.core.common.queries.gluster.GlusterServersQueryParameters;
+import 
org.ovirt.engine.core.common.queries.gluster.GlusterVolumeAdvancedDetailsParameters;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.KeyValuePairCompat;
 import org.ovirt.engine.core.compat.NGuid;
@@ -1082,6 +1083,22 @@
                 aQuery);
     }
 
+    public static void GetClusterGlusterServices(AsyncQuery aQuery, Guid 
clusterId) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                return source;
+            }
+        };
+        // Passing empty values for Volume and Brick to get the services of 
all the volumes/hosts in the cluster
+        GlusterVolumeAdvancedDetailsParameters parameters =
+                new GlusterVolumeAdvancedDetailsParameters(clusterId, "", "", 
false); //$NON-NLS-1$ //$NON-NLS-2$
+        Frontend.RunQuery(VdcQueryType.GetGlusterVolumeAdvancedDetails,
+                parameters,
+                aQuery);
+    }
+
     public static void GetRpmVersionViaPublic(AsyncQuery aQuery) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java
index 4a3b0e7..2335af1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterListModel.java
@@ -201,11 +201,22 @@
         list.add(new ClusterNetworkListModel());
         list.add(new ClusterHostListModel());
         list.add(new ClusterVmListModel());
+        list.add(new ClusterServiceModel());
         list.add(new PermissionListModel());
         setDetailModels(list);
     }
 
     @Override
+    protected void UpdateDetailsAvailability() {
+        super.UpdateDetailsAvailability();
+        for (EntityModel detailModel : getDetailModels()) {
+            if (detailModel instanceof ClusterServiceModel) {
+                detailModel.setIsAvailable(((VDSGroup) 
getSelectedItem()).supportsGlusterService());
+            }
+        }
+    }
+
+    @Override
     public boolean IsSearchStringMatch(String searchString)
     {
         return searchString.trim().toLowerCase().startsWith("cluster"); 
//$NON-NLS-1$
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java
new file mode 100644
index 0000000..e88b33a
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java
@@ -0,0 +1,194 @@
+package org.ovirt.engine.ui.uicommonweb.models.clusters;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+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.gluster.GlusterVolumeAdvancedDetails;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceInfo;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
+import org.ovirt.engine.core.common.utils.ListUtils;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class ClusterServiceModel extends EntityModel {
+
+    private ListModel hostList;
+
+    public ListModel getHostList() {
+        return hostList;
+    }
+
+    public void setHostList(ListModel hostList) {
+        this.hostList = hostList;
+    }
+
+    private ListModel serviceTypeList;
+
+    public ListModel getServiceTypeList() {
+        return serviceTypeList;
+    }
+
+    public void setServiceTypeList(ListModel serviceTypeList) {
+        this.serviceTypeList = serviceTypeList;
+    }
+
+    private ListModel serviceList;
+
+    public ListModel getServiceList() {
+        return serviceList;
+    }
+
+    public void setServiceList(ListModel serviceList) {
+        this.serviceList = serviceList;
+    }
+
+    private List<ServiceInfo> actualServiceList;
+
+    public List<ServiceInfo> getActualServiceList() {
+        return actualServiceList;
+    }
+
+    public void setActualServiceList(List<ServiceInfo> actualServiceList) {
+        this.actualServiceList = actualServiceList;
+    }
+
+    private UICommand filterServicesCommand;
+
+    public UICommand getFilterServicesCommand()
+    {
+        return filterServicesCommand;
+    }
+
+    private void setFilterServicesCommand(UICommand value)
+    {
+        filterServicesCommand = value;
+    }
+
+    private UICommand clearFilterServicesCommand;
+
+    public UICommand getClearFilterServicesCommand()
+    {
+        return clearFilterServicesCommand;
+    }
+
+    private void setClearFilterServicesCommand(UICommand value)
+    {
+        clearFilterServicesCommand = value;
+    }
+
+    @Override
+    public VDSGroup getEntity()
+    {
+        return (VDSGroup) ((super.getEntity() instanceof VDSGroup) ? 
super.getEntity() : null);
+    }
+
+    public ClusterServiceModel() {
+        
setTitle(ConstantsManager.getInstance().getConstants().servicesTitle());
+        setHashName("services"); //$NON-NLS-1$
+
+        setActualServiceList(new ArrayList<ServiceInfo>());
+        setServiceList(new ListModel());
+        setHostList(new ListModel());
+        setServiceTypeList(new ListModel());
+        ArrayList<ServiceType> serviceTypes = new ArrayList<ServiceType>();
+        serviceTypes.add(null);
+        serviceTypes.addAll(Arrays.asList(ServiceType.values()));
+        getServiceTypeList().setItems(serviceTypes);
+        setFilterServicesCommand(new UICommand("FilterServices", this)); 
//$NON-NLS-1$
+        setClearFilterServicesCommand(new UICommand("ClearFilterServices", 
this)); //$NON-NLS-1$
+    }
+
+    @Override
+    protected void OnEntityChanged()
+    {
+        super.OnEntityChanged();
+        if (getEntity() != null) {
+                updateHostList();
+                updateServiceList();
+        }
+    }
+
+    private void updateHostList() {
+        AsyncQuery asyncQuery = new AsyncQuery();
+        asyncQuery.setModel(this);
+        asyncQuery.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void OnSuccess(Object model, Object result)
+            {
+                List<VDS> hostListNew = (List<VDS>) result;
+                List<VDS> hostListOld = new ArrayList<VDS>();
+
+                if (getHostList().getItems() != null) {
+                    hostListOld = new ArrayList((List<VDS>) 
getHostList().getItems());
+                }
+
+                if (hostListOld.size() > 0) {
+                    hostListOld.remove(0);
+                }
+
+                if (!ListUtils.listsEqual(hostListNew, hostListOld)) {
+                    hostListNew.add(0, null);
+                    getHostList().setItems(hostListNew);
+                }
+            }
+        };
+        AsyncDataProvider.GetHostListByCluster(asyncQuery, 
getEntity().getname());
+    }
+
+    private void updateServiceList() {
+        AsyncQuery asyncQuery = new AsyncQuery();
+        asyncQuery.setModel(this);
+        asyncQuery.asyncCallback = new INewAsyncCallback() {
+            @Override
+            public void OnSuccess(Object model, Object result)
+            {
+                GlusterVolumeAdvancedDetails details = 
(GlusterVolumeAdvancedDetails) result;
+                setActualServiceList(details.getServiceInfo());
+                filterServices();
+            }
+        };
+        AsyncDataProvider.GetClusterGlusterServices(asyncQuery, 
getEntity().getId());
+    }
+
+    private void filterServices() {
+        VDS selectedVds = (VDS) hostList.getSelectedItem();
+        ServiceType serviceType = (ServiceType) 
serviceTypeList.getSelectedItem();
+        ArrayList<EntityModel> list = new ArrayList<EntityModel>();
+        for (ServiceInfo service : getActualServiceList()) {
+            if ((selectedVds == null || 
service.getHostName().equals(selectedVds.gethost_name()))
+                    && (serviceType == null || service.getServiceType() == 
serviceType)) {
+                list.add(new EntityModel(service));
+            }
+        }
+        getServiceList().setItems(list);
+    }
+
+    private void clearFilters() {
+        getHostList().setSelectedItem(null);
+        getServiceTypeList().setSelectedItem(null);
+        filterServices();
+    }
+
+    @Override
+    public void ExecuteCommand(UICommand command)
+    {
+        super.ExecuteCommand(command);
+
+        if (command == getFilterServicesCommand())
+        {
+            filterServices();
+        }
+        else if (command == getClearFilterServicesCommand())
+        {
+            clearFilters();
+        }
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
index 17ef8ee..16fb4a0 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java
@@ -58,6 +58,9 @@
     @DefaultStringValue("General")
     String generalTitle();
 
+    @DefaultStringValue("Clusters")
+    String servicesTitle();
+
     @DefaultStringValue("Edit Policy")
     String editPolicyTitle();
 
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 061bbc3..07f2204 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
@@ -341,4 +341,8 @@
     String GlusterStatus___DOWN();
     String TransportType___TCP();
     String TransportType___RDMA();
+
+    String ServiceType___NFS();
+
+    String ServiceType___SHD();
 }
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 9620864..6fc1e74 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
@@ -163,6 +163,8 @@
 GlusterStatus___DOWN=Down
 TransportType___TCP=TCP
 TransportType___RDMA=RDMA
+ServiceType___NFS=NFS
+ServiceType___SHD=SHD
 Disk$DiskStorageType___LUN=LUN
 Disk$DiskStorageType___IMAGE=Image
 RoleType___ADMIN=Admin
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 ba52f40..0e6b0f1 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
@@ -301,6 +301,9 @@
     @DefaultStringValue("Logical Networks")
     String clusterNetworkSubTabLabel();
 
+    @DefaultStringValue("Services")
+    String clusterServiceSubTabLabel();
+
     @DefaultStringValue("Permissions")
     String clusterPermissionSubTabLabel();
 
@@ -1500,6 +1503,28 @@
     @DefaultStringValue("Load")
     String loadClusterHost();
 
+    // Cluster service
+    @DefaultStringValue("Host")
+    String hostService();
+
+    @DefaultStringValue("Service")
+    String nameService();
+
+    @DefaultStringValue("Status")
+    String statusService();
+
+    @DefaultStringValue("Port")
+    String portService();
+
+    @DefaultStringValue("Process Id")
+    String pidService();
+
+    @DefaultStringValue("Filter")
+    String filterService();
+
+    @DefaultStringValue("Show All")
+    String showAllService();
+
     // Interface
     @DefaultStringValue("Empty")
     String emptyInterface();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java
index 0c2220f..5bda835 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/ManagedComponents.java
@@ -32,6 +32,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterHostListModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkListModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterVmListModel;
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.datacenters.DataCenterClusterListModel;
@@ -130,6 +131,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterHostPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterNetworkPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterPermissionPresenter;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterVmPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterClusterPresenter;
@@ -384,6 +386,10 @@
 
     SearchableDetailModelProvider<Network, ClusterListModel, 
ClusterNetworkListModel> getSubTabClusterNetworkModelProvider();
 
+    AsyncProvider<SubTabClusterServicePresenter> 
getSubTabClusterServicePresenter();
+
+    DetailModelProvider<ClusterListModel, ClusterServiceModel> 
getSubTabClusterServiceModelProvider();
+
     AsyncProvider<SubTabClusterPermissionPresenter> 
getSubTabClusterPermissionPresenter();
 
     SearchableDetailModelProvider<permissions, ClusterListModel, 
PermissionListModel> getSubTabClusterPermissionModelProvider();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index 2554ac3..4948f98 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -44,9 +44,9 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.HostSetupNetworksPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.ManualFencePopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.MultipleHostsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksInterfacePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.SetupNetworksManagementPopupPresenterWidget;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.MultipleHostsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolEditPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.pool.PoolNewPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.quota.ChangeQuotaPopupPresenterWidget;
@@ -98,6 +98,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterHostPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterNetworkPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterPermissionPresenter;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterVmPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.DataCenterSubTabPanelPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.datacenter.SubTabDataCenterClusterPresenter;
@@ -209,9 +210,9 @@
 import org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.HostSetupNetworksPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.ManualFenceConfirmationPopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.MultipleHostsPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksInterfacePopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.SetupNetworksManagementPopupView;
-import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.host.MultipleHostsPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolEditPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.pool.PoolNewPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.quota.ChangeQuotaPopupView;
@@ -263,6 +264,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterHostView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterNetworkView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterPermissionView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterServiceView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster.SubTabClusterVmView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.DataCenterSubTabPanelView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.tab.datacenter.SubTabDataCenterClusterView;
@@ -536,6 +538,10 @@
                 SubTabClusterNetworkPresenter.ViewDef.class,
                 SubTabClusterNetworkView.class,
                 SubTabClusterNetworkPresenter.ProxyDef.class);
+        bindPresenter(SubTabClusterServicePresenter.class,
+                SubTabClusterServicePresenter.ViewDef.class,
+                SubTabClusterServiceView.class,
+                SubTabClusterServicePresenter.ProxyDef.class);
         bindPresenter(SubTabClusterPermissionPresenter.class,
                 SubTabClusterPermissionPresenter.ViewDef.class,
                 SubTabClusterPermissionView.class,
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java
index 7af4d72..d2eb0af 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/ClusterModule.java
@@ -22,6 +22,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterHostListModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterNetworkListModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterVmListModel;
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
 import org.ovirt.engine.ui.webadmin.gin.ClientGinjector;
@@ -153,6 +154,14 @@
 
     @Provides
     @Singleton
+    public DetailModelProvider<ClusterListModel, ClusterServiceModel> 
getClusterServiceProvider(ClientGinjector ginjector) {
+        return new DetailTabModelProvider<ClusterListModel, 
ClusterServiceModel>(ginjector,
+                ClusterListModel.class,
+                ClusterServiceModel.class);
+    }
+
+    @Provides
+    @Singleton
     public SearchableDetailModelProvider<permissions, ClusterListModel, 
PermissionListModel> getPermissionListProvider(ClientGinjector ginjector,
             final Provider<PermissionsPopupPresenterWidget> popupProvider,
             final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
index e641aa2..bc7a597 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/place/ApplicationPlaces.java
@@ -106,6 +106,9 @@
     public static final String clusterNetworkSubTabPlace = clusterMainTabPlace 
+ SUB_TAB_PREFIX
             + "logical_networks"; //$NON-NLS-1$
 
+    public static final String clusterServiceSubTabPlace = clusterMainTabPlace 
+ SUB_TAB_PREFIX
+            + "services"; //$NON-NLS-1$
+
     public static final String clusterPermissionSubTabPlace = 
clusterMainTabPlace + SUB_TAB_PREFIX
             + "permissions"; //$NON-NLS-1$
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java
index 2483993..b426eab 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterPermissionPresenter.java
@@ -35,7 +35,7 @@
 
     @TabInfo(container = ClusterSubTabPanelPresenter.class)
     static TabData getTabData(ClientGinjector ginjector) {
-        return new 
ModelBoundTabData(ginjector.getApplicationConstants().clusterPermissionSubTabLabel(),
 4,
+        return new 
ModelBoundTabData(ginjector.getApplicationConstants().clusterPermissionSubTabLabel(),
 5,
                 ginjector.getSubTabClusterPermissionModelProvider());
     }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java
new file mode 100644
index 0000000..479048f
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java
@@ -0,0 +1,62 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster;
+
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
+import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
+import org.ovirt.engine.ui.common.widget.tab.ModelBoundTabData;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel;
+import org.ovirt.engine.ui.webadmin.gin.ClientGinjector;
+import org.ovirt.engine.ui.webadmin.place.ApplicationPlaces;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.ClusterSelectionChangeEvent;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+import com.gwtplatform.mvp.client.TabData;
+import com.gwtplatform.mvp.client.annotations.NameToken;
+import com.gwtplatform.mvp.client.annotations.ProxyCodeSplit;
+import com.gwtplatform.mvp.client.annotations.ProxyEvent;
+import com.gwtplatform.mvp.client.annotations.TabInfo;
+import com.gwtplatform.mvp.client.proxy.PlaceManager;
+import com.gwtplatform.mvp.client.proxy.PlaceRequest;
+import com.gwtplatform.mvp.client.proxy.RevealContentEvent;
+import com.gwtplatform.mvp.client.proxy.TabContentProxyPlace;
+
+public class SubTabClusterServicePresenter extends 
AbstractSubTabPresenter<VDSGroup, ClusterListModel, ClusterServiceModel, 
SubTabClusterServicePresenter.ViewDef, SubTabClusterServicePresenter.ProxyDef> {
+
+    @ProxyCodeSplit
+    @NameToken(ApplicationPlaces.clusterServiceSubTabPlace)
+    public interface ProxyDef extends 
TabContentProxyPlace<SubTabClusterServicePresenter> {
+    }
+
+    public interface ViewDef extends AbstractSubTabPresenter.ViewDef<VDSGroup> 
{
+    }
+
+    @TabInfo(container = ClusterSubTabPanelPresenter.class)
+    static TabData getTabData(ClientGinjector ginjector) {
+        return new 
ModelBoundTabData(ginjector.getApplicationConstants().clusterServiceSubTabLabel(),
 4,
+                ginjector.getSubTabClusterServiceModelProvider());
+    }
+
+    @Inject
+    public SubTabClusterServicePresenter(EventBus eventBus, ViewDef view, 
ProxyDef proxy,
+            PlaceManager placeManager, DetailModelProvider<ClusterListModel, 
ClusterServiceModel> modelProvider) {
+        super(eventBus, view, proxy, placeManager, modelProvider);
+    }
+
+    @Override
+    protected PlaceRequest getMainTabRequest() {
+        return new PlaceRequest(ApplicationPlaces.clusterMainTabPlace);
+    }
+
+    @Override
+    protected void revealInParent() {
+        RevealContentEvent.fire(this, 
ClusterSubTabPanelPresenter.TYPE_SetTabContent, this);
+    }
+
+    @ProxyEvent
+    public void onClusterSelectionChange(ClusterSelectionChangeEvent event) {
+        updateMainTabSelection(event.getSelectedItems());
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java
new file mode 100644
index 0000000..85bd6e3
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.java
@@ -0,0 +1,172 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.tab.cluster;
+
+import javax.inject.Inject;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceInfo;
+import org.ovirt.engine.ui.common.idhandler.WithElementId;
+import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
+import org.ovirt.engine.ui.common.view.AbstractSubTabFormView;
+import org.ovirt.engine.ui.common.widget.UiCommandButton;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.EnumRenderer;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
+import org.ovirt.engine.ui.common.widget.table.column.EntityModelTextColumn;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.Editor;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Widget;
+
+public class SubTabClusterServiceView extends AbstractSubTabFormView<VDSGroup, 
ClusterListModel, ClusterServiceModel>
+        implements SubTabClusterServicePresenter.ViewDef, 
Editor<ClusterServiceModel> {
+
+    interface Driver extends SimpleBeanEditorDriver<ClusterServiceModel, 
SubTabClusterServiceView> {
+        Driver driver = GWT.create(Driver.class);
+    }
+
+    interface ViewUiBinder extends UiBinder<Widget, SubTabClusterServiceView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    @UiField(provided = true)
+    @Path(value = "hostList.selectedItem")
+    @WithElementId("hostList")
+    ListModelListBoxEditor<Object> hostEditor;
+
+    @UiField(provided = true)
+    @Path(value = "serviceTypeList.selectedItem")
+    @WithElementId
+    ListModelListBoxEditor<Object> serviceTypeEditor;
+
+    @UiField
+    @WithElementId
+    UiCommandButton filterButton;
+
+    @UiField
+    @WithElementId
+    UiCommandButton clearButton;
+
+    @UiField(provided = true)
+    @Ignore
+    @WithElementId
+    EntityModelCellTable<ListModel> servicesTable;
+
+    @Inject
+    public SubTabClusterServiceView(final 
DetailModelProvider<ClusterListModel, ClusterServiceModel> modelProvider,
+            ApplicationConstants constants) {
+        super(modelProvider);
+        servicesTable = new EntityModelCellTable<ListModel>(false, true);
+        initListBoxEditors();
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        localize(constants);
+        initTableColumns(constants);
+        initButtons();
+        Driver.driver.initialize(this);
+    }
+
+    private void initListBoxEditors() {
+        hostEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                if (object != null) {
+                    return ((VDS) object).gethost_name();
+                }
+                else {
+                    return ""; //$NON-NLS-1$
+                }
+            }
+        });
+        serviceTypeEditor = new ListModelListBoxEditor<Object>(new 
EnumRenderer() {
+            @Override
+            public String render(Enum object) {
+                if (object != null) {
+                    return super.render(object);
+                }
+                else {
+                    return ""; //$NON-NLS-1$
+                }
+            }
+        });
+    }
+
+    private void localize(ApplicationConstants constants) {
+        hostEditor.setLabel(constants.hostService());
+        serviceTypeEditor.setLabel(constants.nameService());
+        filterButton.setLabel(constants.filterService());
+        clearButton.setLabel(constants.showAllService());
+    }
+
+    protected void initTableColumns(ApplicationConstants constants) {
+        // Table Entity Columns
+        servicesTable.addEntityModelColumn(new 
EntityModelTextColumn<ServiceInfo>() {
+            @Override
+            public String getText(ServiceInfo entity) {
+                return entity.getHostName();
+            }
+        }, constants.hostService());
+
+        servicesTable.addEntityModelColumn(new 
EntityModelTextColumn<ServiceInfo>() {
+            @Override
+            public String getText(ServiceInfo entity) {
+                return entity.getServiceType().name();
+            }
+        }, constants.nameService());
+
+        servicesTable.addEntityModelColumn(new 
EntityModelTextColumn<ServiceInfo>() {
+            @Override
+            public String getText(ServiceInfo entity) {
+                return entity.getStatus().name();
+            }
+        }, constants.statusService());
+
+        servicesTable.addEntityModelColumn(new 
EntityModelTextColumn<ServiceInfo>() {
+            @Override
+            public String getText(ServiceInfo entity) {
+                return String.valueOf(entity.getPort());
+            }
+        }, constants.portService());
+
+        servicesTable.addEntityModelColumn(new 
EntityModelTextColumn<ServiceInfo>() {
+            @Override
+            public String getText(ServiceInfo entity) {
+                return String.valueOf(entity.getPid());
+            }
+        }, constants.pidService());
+    }
+
+    private void initButtons() {
+        filterButton.addClickHandler(new ClickHandler() {
+
+            @Override
+            public void onClick(ClickEvent event) {
+                
getDetailModel().ExecuteCommand(getDetailModel().getFilterServicesCommand());
+            }
+        });
+
+        clearButton.addClickHandler(new ClickHandler() {
+
+            @Override
+            public void onClick(ClickEvent event) {
+                
getDetailModel().ExecuteCommand(getDetailModel().getClearFilterServicesCommand());
+            }
+        });
+    }
+
+    @Override
+    public void setMainTabSelectedItem(VDSGroup selectedItem) {
+        servicesTable.edit(getDetailModel().getServiceList());
+        Driver.driver.edit(getDetailModel());
+    }
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml
new file mode 100644
index 0000000..e858b06
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/cluster/SubTabClusterServiceView.ui.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
xmlns:g="urn:import:com.google.gwt.user.client.ui"
+       xmlns:w="urn:import:org.ovirt.engine.ui.common.widget"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor">
+
+       <ui:style>
+           .button {
+                       margin: 5px;
+               }
+               .tablePanel {
+                       border: 1px solid #CED8DF;
+               }
+       </ui:style>
+
+       <g:DockLayoutPanel height="100%">
+               <g:north size="50">
+                       <g:HorizontalPanel ui:field="filterPanel">
+                               <e:ListModelListBoxEditor ui:field="hostEditor" 
/>
+                               <e:ListModelListBoxEditor 
ui:field="serviceTypeEditor" />
+                               <w:UiCommandButton ui:field="filterButton" 
addStyleNames="{style.button}"/>
+                               <w:UiCommandButton ui:field="clearButton" 
addStyleNames="{style.button}"/>
+                       </g:HorizontalPanel>
+               </g:north>
+               <g:center>              
+                       <g:ScrollPanel addStyleNames="{style.tablePanel}">
+                               <e:EntityModelCellTable 
ui:field="servicesTable"/>
+                       </g:ScrollPanel>
+               </g:center>
+       </g:DockLayoutPanel>
+</ui:UiBinder>


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iea624f12a07f4aa9b1c6ffa1548aaafb16a00a7a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Kanagaraj M <kmayi...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to