Kanagaraj M has uploaded a new change for review.

Change subject: webadmin: [WIP] Cluster sub tab - Services tree
......................................................................

webadmin: [WIP] Cluster sub tab - Services tree

This is a partial implementation.

Change-Id: I08a50e142b1208ad585fb3dfbc571e33ceb692ad
Signed-off-by: Kanagaraj M <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.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/ClusterServiceListModel.java
D 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.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/gin/ManagedComponents.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/section/main/presenter/tab/cluster/SubTabClusterServicePresenter.java
M 
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/widget/cluster/ServiceTree.java
10 files changed, 269 insertions(+), 399 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/50/12150/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index 8dd82ed..4c74f14 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -1140,4 +1140,28 @@
     @DefaultStringValue("Collapse Snapshots")
     String collapseSnapshots();
 
+    // Cluster service
+    @DefaultStringValue("Host")
+    String hostService();
+
+    @DefaultStringValue("Service")
+    String nameService();
+
+    @DefaultStringValue("Status")
+    String statusService();
+
+    @DefaultStringValue("Port")
+    String portService();
+
+    @DefaultStringValue("Process Id")
+    String pidService();
+
+    @DefaultStringValue("Action")
+    String actionService();
+
+    @DefaultStringValue("Filter")
+    String filterService();
+
+    @DefaultStringValue("Show All")
+    String showAllService();
 }
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 2fc6a9c..ff86f3a 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
@@ -144,13 +144,13 @@
         privateGuideContext = value;
     }
 
-    private ClusterServiceModel clusterServiceModel;
+    private ClusterServiceListModel clusterServiceModel;
 
-    public ClusterServiceModel getClusterServiceModel() {
+    public ClusterServiceListModel getClusterServiceModel() {
         return clusterServiceModel;
     }
 
-    public void setClusterServiceModel(ClusterServiceModel 
clusterServiceModel) {
+    public void setClusterServiceModel(ClusterServiceListModel 
clusterServiceModel) {
         this.clusterServiceModel = clusterServiceModel;
     }
 
@@ -210,7 +210,7 @@
     {
         super.InitDetailModels();
 
-        setClusterServiceModel(new ClusterServiceModel());
+        setClusterServiceModel(new ClusterServiceListModel());
 
         ObservableCollection<EntityModel> list = new 
ObservableCollection<EntityModel>();
         clusterGeneralModel = new ClusterGeneralModel();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceListModel.java
new file mode 100644
index 0000000..afab637
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceListModel.java
@@ -0,0 +1,74 @@
+package org.ovirt.engine.ui.uicommonweb.models.clusters;
+
+import java.util.Arrays;
+
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
+import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class ClusterServiceListModel extends SearchableListModel {
+
+    @Override
+    public VDSGroup getEntity() {
+        return (VDSGroup) ((super.getEntity() instanceof VDSGroup) ? 
super.getEntity() : null);
+    }
+
+    public ClusterServiceListModel() {
+        
setTitle(ConstantsManager.getInstance().getConstants().servicesTitle());
+        setHashName("services"); //$NON-NLS-1$
+    }
+
+    @Override
+    protected void OnEntityChanged()
+    {
+        super.OnEntityChanged();
+
+        getSearchCommand().Execute();
+    }
+
+    @Override
+    public void setEntity(Object value)
+    {
+        if (value == null || !value.equals(getEntity())) {
+            super.setEntity(value);
+        }
+    }
+
+    @Override
+    public void Search()
+    {
+        if (getEntity() != null)
+        {
+            super.Search();
+        }
+        else
+        {
+            setItems(null);
+        }
+    }
+
+    @Override
+    protected void SyncSearch()
+    {
+        if (getEntity() == null)
+        {
+            return;
+        }
+
+        super.SyncSearch();
+        setItems(Arrays.asList(ServiceType.values()));
+    }
+
+    @Override
+    protected void AsyncSearch()
+    {
+        super.AsyncSearch();
+        SyncSearch();
+    }
+
+    @Override
+    protected String getListName() {
+        return "ClusterServiceListModel"; //$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
deleted file mode 100644
index 3945dce..0000000
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/clusters/ClusterServiceModel.java
+++ /dev/null
@@ -1,203 +0,0 @@
-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.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());
-        updateServiceTypeList();
-        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) {
-            updateServiceList();
-            updateHostList();
-        }
-    }
-
-    private void updateHostList() {
-        boolean refreshNeeded = false;
-        List<VDS> hostList = (List<VDS>) getHostList().getItems();
-        if (hostList != null && hostList.size() > 1) {
-            for(VDS vds : hostList) {
-                if (vds != null && 
!vds.getVdsGroupName().equals(getEntity().getname())) {
-                    refreshNeeded = true;
-                    break;
-                }
-            }
-        }
-        else {
-            refreshNeeded = true;
-        }
-
-        if (!refreshNeeded) {
-            return;
-        }
-
-        updateServiceTypeList();
-
-        AsyncQuery asyncQuery = new AsyncQuery();
-        asyncQuery.setModel(this);
-        asyncQuery.asyncCallback = new INewAsyncCallback() {
-            @Override
-            public void OnSuccess(Object model, Object result)
-            {
-                List<VDS> hostList = (List<VDS>) result;
-                hostList.add(0, null);
-                getHostList().setItems(hostList);
-            }
-        };
-        AsyncDataProvider.GetHostListByCluster(asyncQuery, 
getEntity().getname());
-    }
-
-    private void updateServiceTypeList() {
-        ArrayList<ServiceType> serviceTypes = new ArrayList<ServiceType>();
-        serviceTypes.add(null);
-        serviceTypes.addAll(Arrays.asList(ServiceType.values()));
-        getServiceTypeList().setItems(serviceTypes);
-    }
-
-    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;
-                if (details.getServiceInfo() != null) {
-                    setActualServiceList(details.getServiceInfo());
-                }
-                else {
-                    setActualServiceList(new ArrayList<ServiceInfo>());
-                }
-                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.getHostName()))
-                    && (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/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 ece724f..d0fe608 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
@@ -1648,28 +1648,6 @@
     @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();
-
     @DefaultStringValue("Display Address Overridden")
     String overriddenConsoleAddress();
 
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 ec48ccc..5300be2 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
@@ -12,15 +12,16 @@
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VmPool;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.event_subscriber;
 import org.ovirt.engine.core.common.businessentities.permissions;
 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.VmPool;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeOptionEntity;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.businessentities.network.NetworkView;
@@ -36,7 +37,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.ClusterServiceListModel;
 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;
@@ -55,9 +56,9 @@
 import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeGeneralModel;
 import org.ovirt.engine.ui.uicommonweb.models.gluster.VolumeParameterListModel;
-import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHardwareGeneralModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostEventListModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostGeneralModel;
+import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHardwareGeneralModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHooksListModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceLineModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostInterfaceListModel;
@@ -167,9 +168,9 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.SubTabVolumePermissionPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.gluster.VolumeSubTabPanelPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.HostSubTabPanelPresenter;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHardwarePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostEventPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostGeneralPresenter;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHardwarePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostHookPresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostInterfacePresenter;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.host.SubTabHostPermissionPresenter;
@@ -420,7 +421,7 @@
 
     AsyncProvider<SubTabClusterServicePresenter> 
getSubTabClusterServicePresenter();
 
-    DetailModelProvider<ClusterListModel, ClusterServiceModel> 
getSubTabClusterServiceModelProvider();
+    SearchableDetailModelProvider<ServiceType, ClusterListModel, 
ClusterServiceListModel> getSubTabClusterServiceModelProvider();
 
     AsyncProvider<SubTabClusterPermissionPresenter> 
getSubTabClusterPermissionPresenter();
 
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 ba97aa1..3d5e289 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
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.permissions;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
 import org.ovirt.engine.ui.common.presenter.ModelBoundPresenterWidget;
@@ -22,15 +23,15 @@
 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.ClusterServiceListModel;
 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;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.ReportPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.PermissionsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterManageNetworkPopupPresenterWidget;
-import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.NewClusterNetworkPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.ClusterPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.cluster.NewClusterNetworkPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.DetachGlusterHostsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.guide.GuidePopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.host.MultipleHostsPopupPresenterWidget;
@@ -158,10 +159,10 @@
 
     @Provides
     @Singleton
-    public DetailModelProvider<ClusterListModel, ClusterServiceModel> 
getClusterServiceProvider(ClientGinjector ginjector) {
-        return new DetailTabModelProvider<ClusterListModel, 
ClusterServiceModel>(ginjector,
+    public SearchableDetailModelProvider<ServiceType, ClusterListModel, 
ClusterServiceListModel> getClusterServiceListProvider(ClientGinjector 
ginjector) {
+        return new SearchableDetailTabModelProvider<ServiceType, 
ClusterListModel, ClusterServiceListModel>(ginjector,
                 ClusterListModel.class,
-                ClusterServiceModel.class);
+                ClusterServiceListModel.class);
     }
 
     @Provides
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
index 479048f..b8b726b 100644
--- 
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
@@ -1,11 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster;
 
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
 import org.ovirt.engine.ui.common.presenter.AbstractSubTabPresenter;
-import org.ovirt.engine.ui.common.uicommon.model.DetailModelProvider;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
 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.uicommonweb.models.clusters.ClusterServiceListModel;
 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;
@@ -22,7 +23,7 @@
 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> {
+public class SubTabClusterServicePresenter extends 
AbstractSubTabPresenter<VDSGroup, ClusterListModel, ClusterServiceListModel, 
SubTabClusterServicePresenter.ViewDef, SubTabClusterServicePresenter.ProxyDef> {
 
     @ProxyCodeSplit
     @NameToken(ApplicationPlaces.clusterServiceSubTabPlace)
@@ -40,7 +41,8 @@
 
     @Inject
     public SubTabClusterServicePresenter(EventBus eventBus, ViewDef view, 
ProxyDef proxy,
-            PlaceManager placeManager, DetailModelProvider<ClusterListModel, 
ClusterServiceModel> modelProvider) {
+            PlaceManager placeManager,
+            SearchableDetailModelProvider<ServiceType, ClusterListModel, 
ClusterServiceListModel> modelProvider) {
         super(eventBus, view, proxy, placeManager, modelProvider);
     }
 
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
index 037e3e0..3f0eee8 100644
--- 
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
@@ -2,171 +2,40 @@
 
 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.core.common.businessentities.gluster.ServiceType;
+import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
+import org.ovirt.engine.ui.common.widget.table.column.EmptyColumn;
 import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterListModel;
-import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceModel;
+import org.ovirt.engine.ui.uicommonweb.models.clusters.ClusterServiceListModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.tab.cluster.SubTabClusterServicePresenter;
+import org.ovirt.engine.ui.webadmin.section.main.view.AbstractSubTabTreeView;
+import org.ovirt.engine.ui.webadmin.widget.cluster.ServiceTree;
 
-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;
+public class SubTabClusterServiceView extends 
AbstractSubTabTreeView<ServiceTree<ClusterServiceListModel>, VDSGroup, 
ServiceType, ClusterListModel, ClusterServiceListModel>
+        implements SubTabClusterServicePresenter.ViewDef {
 
     @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).getHostName();
-                }
-                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());
-            }
-        });
+    public SubTabClusterServiceView(SearchableDetailModelProvider<ServiceType, 
ClusterListModel, ClusterServiceListModel> modelProvider,
+            ApplicationConstants constants, ApplicationTemplates templates, 
ApplicationResources resources) {
+        super(modelProvider, constants, templates, resources);
     }
 
     @Override
-    public void setMainTabSelectedItem(VDSGroup selectedItem) {
-        servicesTable.edit(getDetailModel().getServiceList());
-        Driver.driver.edit(getDetailModel());
+    protected void initHeader(ApplicationConstants constants) {
+        table.addColumn(new EmptyColumn(), constants.nameService(), "175px"); 
//$NON-NLS-1$
+        table.addColumn(new EmptyColumn(), constants.hostService(), "100px"); 
//$NON-NLS-1$
+        table.addColumn(new EmptyColumn(), constants.statusService(), 
"100px"); //$NON-NLS-1$
+        table.addColumn(new EmptyColumn(), constants.portService(), "80px"); 
//$NON-NLS-1$
+        table.addColumn(new EmptyColumn(), constants.pidService(), "80px"); 
//$NON-NLS-1$
+        table.addColumn(new EmptyColumn(), constants.actionService(), 
"200px"); //$NON-NLS-1$
+    }
+
+    @Override
+    protected ServiceTree<ClusterServiceListModel> getTree() {
+        return new ServiceTree(resources, constants, templates);
     }
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/cluster/ServiceTree.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/cluster/ServiceTree.java
new file mode 100644
index 0000000..dde4ddf
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/cluster/ServiceTree.java
@@ -0,0 +1,124 @@
+package org.ovirt.engine.ui.webadmin.widget.cluster;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceInfo;
+import org.ovirt.engine.core.common.businessentities.gluster.ServiceType;
+import org.ovirt.engine.ui.common.CommonApplicationConstants;
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+import org.ovirt.engine.ui.common.widget.label.TextBoxLabel;
+import org.ovirt.engine.ui.common.widget.tree.AbstractSubTabTree;
+import org.ovirt.engine.ui.uicommonweb.models.SearchableListModel;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.user.client.ui.HorizontalPanel;
+import com.google.gwt.user.client.ui.Image;
+import com.google.gwt.user.client.ui.TreeItem;
+import com.google.gwt.user.client.ui.VerticalPanel;
+
+public class ServiceTree<M extends SearchableListModel> extends 
AbstractSubTabTree<M, ServiceType, ServiceInfo> {
+
+    ApplicationResources resources;
+    ApplicationConstants constants;
+
+    public ServiceTree(CommonApplicationResources resources,
+            CommonApplicationConstants constants,
+            ApplicationTemplates templates) {
+        super(resources, constants, templates);
+        this.resources = (ApplicationResources) resources;
+        this.constants = (ApplicationConstants) constants;
+    }
+
+    @Override
+    protected TreeItem getRootItem(ServiceType serviceType) {
+        HorizontalPanel panel = new HorizontalPanel();
+        panel.setSpacing(1);
+        panel.setWidth("100%"); //$NON-NLS-1$
+
+        addItemToPanel(panel, new Image(resources.systemImage()), "25px"); 
//$NON-NLS-1$
+        addTextBoxToPanel(panel, new TextBoxLabel(), serviceType.name(), ""); 
//$NON-NLS-1$
+
+        TreeItem treeItem = new TreeItem(panel);
+        treeItem.setUserObject(serviceType);
+        return treeItem;
+    }
+
+    @Override
+    protected TreeItem getNodeItem(ServiceInfo serviceInfo) {
+        return getServiceInfoNode(new 
ArrayList<ServiceInfo>(Arrays.asList(serviceInfo)));
+    }
+
+    @Override
+    protected TreeItem getLeafItem(ServiceInfo serviceInfo) {
+        return getServiceInfoNode(new 
ArrayList<ServiceInfo>(Arrays.asList(serviceInfo)));
+    }
+
+    @Override
+    protected ArrayList<ServiceInfo> getNodeObjects(ServiceType serviceType) {
+        ArrayList<ServiceInfo> services = new ArrayList<ServiceInfo>();
+        ServiceInfo s1 = new ServiceInfo();
+        s1.setHostName("s1"); //$NON-NLS-1$
+        s1.setStatus(GlusterStatus.UP);
+        s1.setPort(1);
+        s1.setPid(1);
+        services.add(s1);
+
+        ServiceInfo s2 = new ServiceInfo();
+        s2.setHostName("s1"); //$NON-NLS-1$
+        s2.setStatus(GlusterStatus.UP);
+        s2.setPort(1);
+        s2.setPid(1);
+        services.add(s2);
+
+        ServiceInfo s3 = new ServiceInfo();
+        s3.setHostName("s1"); //$NON-NLS-1$
+        s3.setStatus(GlusterStatus.UP);
+        s3.setPort(1);
+        s3.setPid(1);
+        services.add(s3);
+
+        return services;
+    }
+
+    @Override
+    protected String getNodeDisabledTooltip() {
+        return constants.differentStorageDomainWarning();
+    }
+
+    private TreeItem getServiceInfoNode(ArrayList<ServiceInfo> services) {
+        if (services.isEmpty()) {
+            return null;
+        }
+
+        VerticalPanel vPanel = new VerticalPanel();
+        vPanel.setWidth("100%"); //$NON-NLS-1$
+
+        for (ServiceInfo service : services) {
+            HorizontalPanel panel = new HorizontalPanel();
+
+            ImageResource image = resources.diskImage();
+            String name = ""; //$NON-NLS-1$
+
+            addItemToPanel(panel, new Image(image), "25px"); //$NON-NLS-1$
+            addTextBoxToPanel(panel, new TextBoxLabel(), name, "150px"); 
//$NON-NLS-1$
+            addTextBoxToPanel(panel, new TextBoxLabel(), 
service.getHostName(), "100px"); //$NON-NLS-1$
+            addTextBoxToPanel(panel, new TextBoxLabel(), 
service.getStatus().name(), "100px"); //$NON-NLS-1$
+            addTextBoxToPanel(panel, new TextBoxLabel(), 
Integer.toString(service.getPort()), "80px"); //$NON-NLS-1$
+            addTextBoxToPanel(panel, new TextBoxLabel(), 
Integer.toString(service.getPid()), "80px"); //$NON-NLS-1$
+
+            panel.setSpacing(1);
+            panel.setWidth("100%"); //$NON-NLS-1$
+
+            vPanel.add(panel);
+        }
+
+        TreeItem treeItem = new TreeItem(vPanel);
+        treeItem.setUserObject(services.get(0).getHostName());
+        return treeItem;
+    }
+}


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

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

Reply via email to