Alexander Wels has uploaded a new change for review.

Change subject: webadmin: host tab sorting
......................................................................

webadmin: host tab sorting

- Implemented sorting in hosts main tab
- Implemented sorting in hosts sub tabs.
  - Did NOT implement sort on Host Network Interfaces tab.

Change-Id: Icf32960b4ad0c2510da2895f86950455766b5237
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1119873
Signed-off-by: Alexander Wels <[email protected]>
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdsConditionFieldAutoCompleter.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/HostVmListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostGlusterSwiftView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostHookView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/ProgressBarColumn.java
8 files changed, 133 insertions(+), 47 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/30126/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdsConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdsConditionFieldAutoCompleter.java
index 9fd6159..fabef66 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdsConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VdsConditionFieldAutoCompleter.java
@@ -8,77 +8,87 @@
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 
 public class VdsConditionFieldAutoCompleter extends 
BaseConditionFieldAutoCompleter {
+    public static final String NAME = "NAME";
+    public static final String ADDRESS = "ADDRESS";
+    public static final String CLUSTER = "CLUSTER";
+    public static final String DATACENTER = "DATACENTER";
+    public static final String STATUS = "STATUS";
+    public static final String ACTIVE_VMS = "ACTIVE_VMS";
+    public static final String MEM_USAGE = "MEM_USAGE";
+    public static final String CPU_USAGE = "CPU_USAGE";
+    public static final String NETWORK_USAGE = "NETWORK_USAGE";
+
     public VdsConditionFieldAutoCompleter() {
         super();
-        mVerbs.add("NAME");
+        mVerbs.add(NAME);
         mVerbs.add("COMMENT");
-        mVerbs.add("STATUS");
-        mVerbs.add("CLUSTER");
-        mVerbs.add("ADDRESS");
-        mVerbs.add("CPU_USAGE");
-        mVerbs.add("MEM_USAGE");
-        mVerbs.add("NETWORK_USAGE");
+        mVerbs.add(STATUS);
+        mVerbs.add(CLUSTER);
+        mVerbs.add(ADDRESS);
+        mVerbs.add(CPU_USAGE);
+        mVerbs.add(MEM_USAGE);
+        mVerbs.add(NETWORK_USAGE);
         mVerbs.add("LOAD");
         mVerbs.add("VERSION");
         mVerbs.add("CPUS");
         mVerbs.add("MEMORY");
         mVerbs.add("CPU_SPEED");
         mVerbs.add("CPU_MODEL");
-        mVerbs.add("ACTIVE_VMS");
+        mVerbs.add(ACTIVE_VMS);
         mVerbs.add("MIGRATING_VMS");
         mVerbs.add("COMMITTED_MEM");
         mVerbs.add("TAG");
         mVerbs.add("TYPE");
-        mVerbs.add("DATACENTER");
+        mVerbs.add(DATACENTER);
         mVerbs.add("ARCHITECTURE");
         // mVerbs.Add("NOTE", "NOTE");
         buildCompletions();
         mVerbs.add("ID");
         // Building the types dict
-        getTypeDictionary().put("NAME", String.class);
+        getTypeDictionary().put(NAME, String.class);
         getTypeDictionary().put("COMMENT", String.class);
-        getTypeDictionary().put("STATUS", VDSStatus.class);
-        getTypeDictionary().put("CLUSTER", String.class);
-        getTypeDictionary().put("ADDRESS", String.class);
-        getTypeDictionary().put("CPU_USAGE", Integer.class);
-        getTypeDictionary().put("MEM_USAGE", Integer.class);
-        getTypeDictionary().put("NETWORK_USAGE", Integer.class);
+        getTypeDictionary().put(STATUS, VDSStatus.class);
+        getTypeDictionary().put(CLUSTER, String.class);
+        getTypeDictionary().put(ADDRESS, String.class);
+        getTypeDictionary().put(CPU_USAGE, Integer.class);
+        getTypeDictionary().put(MEM_USAGE, Integer.class);
+        getTypeDictionary().put(NETWORK_USAGE, Integer.class);
         getTypeDictionary().put("LOAD", BigDecimal.class);
         getTypeDictionary().put("VERSION", String.class);
         getTypeDictionary().put("CPUS", Integer.class);
         getTypeDictionary().put("MEMORY", Integer.class);
         getTypeDictionary().put("CPU_SPEED", BigDecimal.class);
         getTypeDictionary().put("CPU_MODEL", String.class);
-        getTypeDictionary().put("ACTIVE_VMS", Integer.class);
+        getTypeDictionary().put(ACTIVE_VMS, Integer.class);
         getTypeDictionary().put("MIGRATING_VMS", Integer.class);
         getTypeDictionary().put("COMMITTED_MEM", Integer.class);
         getTypeDictionary().put("TAG", String.class);
         getTypeDictionary().put("TYPE", VDSNiceType.class);
-        getTypeDictionary().put("DATACENTER", String.class);
+        getTypeDictionary().put(DATACENTER, String.class);
         getTypeDictionary().put("ID", UUID.class);
         getTypeDictionary().put("ARCHITECTURE", ArchitectureType.class);
         // mTypeDict.Add("NOTE", typeof(string));
         // building the ColumnName Dict
-        columnNameDict.put("NAME", "vds_name");
+        columnNameDict.put(NAME, "vds_name");
         columnNameDict.put("COMMENT", "free_text_comment");
-        columnNameDict.put("STATUS", "status");
-        columnNameDict.put("CLUSTER", "vds_group_name");
-        columnNameDict.put("ADDRESS", "host_name");
-        columnNameDict.put("CPU_USAGE", "usage_cpu_percent");
-        columnNameDict.put("MEM_USAGE", "usage_mem_percent");
-        columnNameDict.put("NETWORK_USAGE", "usage_network_percent");
+        columnNameDict.put(STATUS, "status");
+        columnNameDict.put(CLUSTER, "vds_group_name");
+        columnNameDict.put(ADDRESS, "host_name");
+        columnNameDict.put(CPU_USAGE, "usage_cpu_percent");
+        columnNameDict.put(MEM_USAGE, "usage_mem_percent");
+        columnNameDict.put(NETWORK_USAGE, "usage_network_percent");
         columnNameDict.put("LOAD", "cpu_load");
         columnNameDict.put("VERSION", "software_version");
         columnNameDict.put("CPUS", "cpu_cores");
         columnNameDict.put("MEMORY", "physical_mem_mb");
         columnNameDict.put("CPU_SPEED", "cpu_speed_mh");
         columnNameDict.put("CPU_MODEL", "cpu_model");
-        columnNameDict.put("ACTIVE_VMS", "vm_active");
+        columnNameDict.put(ACTIVE_VMS, "vm_active");
         columnNameDict.put("MIGRATING_VMS", "vm_migrating");
         columnNameDict.put("COMMITTED_MEM", "mem_commited");
         columnNameDict.put("TAG", "tag_name");
         columnNameDict.put("TYPE", "vds_type");
-        columnNameDict.put("DATACENTER", "storage_pool_name");
+        columnNameDict.put(DATACENTER, "storage_pool_name");
         columnNameDict.put("ID", "vds_id");
         columnNameDict.put("ARCHITECTURE", "architecture");
         // mColumnNameDict.Add("NOTE", "note");
@@ -89,9 +99,9 @@
     @Override
     public IAutoCompleter getFieldRelationshipAutoCompleter(String fieldName) {
         if ("MEMORY".equals(fieldName) || "CPUS".equals(fieldName)
-                || "CPU_USAGE".equals(fieldName) || 
"MEM_USAGE".equals(fieldName)
+                || CPU_USAGE.equals(fieldName) || MEM_USAGE.equals(fieldName)
                 || "LOAD".equals(fieldName) || "CPU_SPEED".equals(fieldName)
-                || "ACTIVE_VMS".equals(fieldName) || 
"NETWORK_USAGE".equals(fieldName)
+                || ACTIVE_VMS.equals(fieldName) || 
NETWORK_USAGE.equals(fieldName)
                 || "COMMITTED_MEM".equals(fieldName)) {
             return NumericConditionRelationAutoCompleter.INSTANCE;
         }
@@ -103,7 +113,7 @@
     @Override
     public IConditionValueAutoCompleter getFieldValueAutoCompleter(String 
fieldName) {
         IConditionValueAutoCompleter retval = null;
-        if ("STATUS".equals(fieldName)) {
+        if (STATUS.equals(fieldName)) {
             retval = new EnumValueAutoCompleter(VDSStatus.class);
         }
         else if ("TYPE".equals(fieldName)) {
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 bad6aa2..99927c2 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
@@ -1865,11 +1865,17 @@
     @Override
     protected void syncSearch()
     {
-        SearchParameters tempVar = new SearchParameters(getSearchString(), 
SearchType.VDS, isCaseSensitiveSearch());
+        SearchParameters tempVar = new 
SearchParameters(applySortOptions(getSearchString()), SearchType.VDS,
+                isCaseSensitiveSearch());
         tempVar.setMaxCount(getSearchPageSize());
         super.syncSearch(VdcQueryType.Search, tempVar);
     }
 
+    @Override
+    public boolean supportsServerSideSorting() {
+        return true;
+    }
+
     public void cancel()
     {
         cancelConfirm();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
index c01e947..fa9716a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/hosts/HostVmListModel.java
@@ -58,6 +58,14 @@
         }
     }
 
+
+    @Override
+    public boolean supportsServerSideSorting() {
+        //Because this uses a non standard search mechanism, we can't use the 
build in sort feature and thus have
+        //to fall back to using client side sorting.
+        return false;
+    }
+
     @Override
     protected void entityPropertyChanged(Object sender, 
PropertyChangedEventArgs e)
     {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
index 60d3daa..1c0e4c1 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabHostView.java
@@ -7,6 +7,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VdsSpmStatus;
 import org.ovirt.engine.core.common.mode.ApplicationMode;
+import org.ovirt.engine.core.searchbackend.VdsConditionFieldAutoCompleter;
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
 import org.ovirt.engine.ui.common.widget.action.ActionButtonDefinition;
@@ -98,6 +99,7 @@
                 return object.getName();
             }
         };
+        nameColumn.makeSortable(VdsConditionFieldAutoCompleter.NAME);
         getTable().addColumn(nameColumn, constants.nameHost(), "150px"); 
//$NON-NLS-1$
 
         CommentColumn<VDS> commentColumn = new CommentColumn<VDS>();
@@ -109,6 +111,7 @@
                 return object.getHostName();
             }
         };
+        hostColumn.makeSortable(VdsConditionFieldAutoCompleter.ADDRESS);
         getTable().addColumn(hostColumn, constants.ipHost(), "150px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VDS> clusterColumn = new 
TextColumnWithTooltip<VDS>() {
@@ -117,6 +120,7 @@
                 return object.getVdsGroupName();
             }
         };
+        clusterColumn.makeSortable(VdsConditionFieldAutoCompleter.CLUSTER);
         getTable().addColumn(clusterColumn, constants.clusterHost(), "150px"); 
//$NON-NLS-1$
 
         if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
@@ -126,6 +130,7 @@
                     return object.getStoragePoolName();
                 }
             };
+            dcColumn.makeSortable(VdsConditionFieldAutoCompleter.DATACENTER);
             getTable().addColumn(dcColumn, constants.dcHost(), "150px"); 
//$NON-NLS-1$
         }
 
@@ -135,10 +140,13 @@
                 return object.getStatus();
             }
         };
+        statusColumn.makeSortable(VdsConditionFieldAutoCompleter.STATUS);
         getTable().addColumn(statusColumn, constants.statusHost(), "100px"); 
//$NON-NLS-1$
 
         if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
-            getTable().addColumn(new VmCountColumn(), constants.vmsCount(), 
"110px"); //$NON-NLS-1$
+            VmCountColumn vmCountColumn = new VmCountColumn();
+            
vmCountColumn.makeSortable(VdsConditionFieldAutoCompleter.ACTIVE_VMS);
+            getTable().addColumn(vmCountColumn, constants.vmsCount(), 
"110px"); //$NON-NLS-1$
         }
 
         PercentColumn<VDS> memColumn = new PercentColumn<VDS>() {
@@ -147,6 +155,7 @@
                 return object.getUsageMemPercent();
             }
         };
+        memColumn.makeSortable(VdsConditionFieldAutoCompleter.MEM_USAGE);
         getTable().addColumn(memColumn, constants.memoryHost(), "60px"); 
//$NON-NLS-1$
 
         PercentColumn<VDS> cpuColumn = new PercentColumn<VDS>() {
@@ -155,6 +164,7 @@
                 return object.getUsageCpuPercent();
             }
         };
+        cpuColumn.makeSortable(VdsConditionFieldAutoCompleter.CPU_USAGE);
         getTable().addColumn(cpuColumn, constants.cpuHost(), "60px"); 
//$NON-NLS-1$
 
         PercentColumn<VDS> netColumn = new PercentColumn<VDS>() {
@@ -163,6 +173,7 @@
                 return object.getUsageNetworkPercent();
             }
         };
+        netColumn.makeSortable(VdsConditionFieldAutoCompleter.NETWORK_USAGE);
         getTable().addColumn(netColumn, constants.networkHost(), "60px"); 
//$NON-NLS-1$
 
         if (ApplicationModeHelper.getUiMode() != ApplicationMode.GlusterOnly) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostGlusterSwiftView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostGlusterSwiftView.java
index 483879e..fbbe56b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostGlusterSwiftView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostGlusterSwiftView.java
@@ -36,15 +36,17 @@
                 return object.getServiceName();
             }
         };
+        serviceColumn.makeSortable();
         getTable().addColumn(serviceColumn, constants.serviceGlusterSwift(), 
"250px"); //$NON-NLS-1$
 
         TextColumnWithTooltip<GlusterServerService> statusColumn =
-                new EnumColumn<GlusterServerService, GlusterServiceStatus>() {
-                    @Override
-                    protected GlusterServiceStatus 
getRawValue(GlusterServerService object) {
-                        return object.getStatus();
-                    }
-                };
+            new EnumColumn<GlusterServerService, GlusterServiceStatus>() {
+                @Override
+                protected GlusterServiceStatus 
getRawValue(GlusterServerService object) {
+                    return object.getStatus();
+                }
+            };
+        statusColumn.makeSortable();
         getTable().addColumn(statusColumn, constants.statusGlusterSwift(), 
"250px"); //$NON-NLS-1$
 
         getTable().addActionButton(new 
WebAdminButtonDefinition<GlusterServerService>(constants.startGlusterSwiftInHost())
 {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostHookView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostHookView.java
index fdfff96..045ee5a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostHookView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostHookView.java
@@ -1,10 +1,12 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.tab.host;
 
+import java.util.Comparator;
 import java.util.Map;
 
 import javax.inject.Inject;
 
 import org.ovirt.engine.core.common.businessentities.VDS;
+import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
 import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.HostHooksListModel;
@@ -15,6 +17,10 @@
 
 public class SubTabHostHookView extends AbstractSubTabTableView<VDS, 
Map<String, String>, HostListModel, HostHooksListModel>
         implements SubTabHostHookPresenter.ViewDef {
+    private static final String EVENT_NAME = "EventName"; //$NON-NLS-1$
+    private static final String SCRIPT_NAME = "ScriptName"; //$NON-NLS-1$
+    private static final String PROPERTY_NAME = "PropertyName"; //$NON-NLS-1$
+    private static final String PROPERTY_VALUE = "PropertyValue"; //$NON-NLS-1$
 
     @Inject
     public SubTabHostHookView(SearchableDetailModelProvider<Map<String, 
String>, HostListModel, HostHooksListModel> modelProvider, ApplicationConstants 
constants) {
@@ -29,34 +35,51 @@
         TextColumnWithTooltip<Map<String, String>> eventColumn = new 
TextColumnWithTooltip<Map<String, String>>() {
             @Override
             public String getValue(Map<String, String> object) {
-                return object.get("EventName"); //$NON-NLS-1$
+                return object.get(EVENT_NAME);
             }
         };
+        eventColumn.makeSortable(new HostHookComparator(EVENT_NAME));
         getTable().addColumn(eventColumn, constants.eventNameHook(), "220px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<Map<String, String>> scriptColumn = new 
TextColumnWithTooltip<Map<String, String>>() {
             @Override
             public String getValue(Map<String, String> object) {
-                return object.get("ScriptName"); //$NON-NLS-1$
+                return object.get(SCRIPT_NAME);
             }
         };
+        scriptColumn.makeSortable(new HostHookComparator(SCRIPT_NAME));
         getTable().addColumn(scriptColumn, constants.scriptNameHook(), 
"220px"); //$NON-NLS-1$
 
         TextColumnWithTooltip<Map<String, String>> propNameColumn = new 
TextColumnWithTooltip<Map<String, String>>() {
             @Override
             public String getValue(Map<String, String> object) {
-                return object.get("PropertyName"); //$NON-NLS-1$
+                return object.get(PROPERTY_NAME);
             }
         };
+        propNameColumn.makeSortable(new HostHookComparator(PROPERTY_NAME));
         getTable().addColumn(propNameColumn, constants.propertyNameHook(), 
"220px"); //$NON-NLS-1$
 
         TextColumnWithTooltip<Map<String, String>> propValueColumn = new 
TextColumnWithTooltip<Map<String, String>>() {
             @Override
             public String getValue(Map<String, String> object) {
-                return object.get("PropertyValue"); //$NON-NLS-1$
+                return object.get(PROPERTY_VALUE);
             }
         };
+        propValueColumn.makeSortable(new HostHookComparator(PROPERTY_VALUE));
         getTable().addColumn(propValueColumn, constants.propertyValueHook(), 
"250px"); //$NON-NLS-1$
     }
 
+    private static class HostHookComparator implements Comparator<Map<String, 
String>> {
+        private static final LexoNumericComparator lexoNumericComparator = new 
LexoNumericComparator();
+        private final String key;
+
+        HostHookComparator(String key) {
+            this.key = key;
+        }
+
+        @Override
+        public int compare(Map<String, String> map1, Map<String, String> map2) 
{
+            return lexoNumericComparator.compare(map1.get(key), map2.get(key));
+        }
+    };
 }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
index 52291f0..0361592 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/host/SubTabHostVmView.java
@@ -45,7 +45,7 @@
     void initTable(ApplicationResources resources, ApplicationConstants 
constants) {
         getTable().enableColumnResizing();
 
-        getTable().addColumn(new VmStatusColumn(), constants.empty(), "30px"); 
//$NON-NLS-1$
+        getTable().addColumn(new VmStatusColumn<VM>(), constants.empty(), 
"30px"); //$NON-NLS-1$
 
         TextColumnWithTooltip<VM> nameColumn = new TextColumnWithTooltip<VM>() 
{
             @Override
@@ -53,9 +53,11 @@
                 return object.getName();
             }
         };
+        nameColumn.makeSortable();
         getTable().addColumn(nameColumn, constants.nameVm(), "160px"); 
//$NON-NLS-1$
 
-        getTable().addColumn(new VmTypeColumn(), constants.empty(), "30px"); 
//$NON-NLS-1$
+        VmTypeColumn typeColumn = new VmTypeColumn();
+        getTable().addColumn(typeColumn, constants.empty(), "30px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> clusterColumn = new 
TextColumnWithTooltip<VM>() {
             @Override
@@ -63,6 +65,7 @@
                 return object.getVdsGroupName();
             }
         };
+        clusterColumn.makeSortable();
         getTable().addColumn(clusterColumn, constants.clusterVm(), "160px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> ipColumn = new TextColumnWithTooltip<VM>() {
@@ -71,6 +74,7 @@
                 return object.getVmIp();
             }
         };
+        ipColumn.makeSortable();
         getTable().addColumn(ipColumn, constants.ipVm(), "200px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> fqdnColumn = new TextColumnWithTooltip<VM>() 
{
@@ -79,6 +83,7 @@
                 return object.getVmFQDN();
             }
         };
+        fqdnColumn.makeSortable();
         getTable().addColumn(fqdnColumn, constants.fqdn(), "200px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> memColumn = new PercentColumn<VM>() {
@@ -87,6 +92,7 @@
                 return object.getUsageMemPercent();
             }
         };
+        memColumn.makeSortable();
         getTable().addColumn(memColumn, constants.memoryVm(), "120px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> cpuColumn = new PercentColumn<VM>() {
@@ -95,6 +101,7 @@
                 return object.getUsageCpuPercent();
             }
         };
+        cpuColumn.makeSortable();
         getTable().addColumn(cpuColumn, constants.cpuVm(), "120px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> netColumn = new PercentColumn<VM>() {
@@ -103,6 +110,7 @@
                 return object.getUsageNetworkPercent();
             }
         };
+        netColumn.makeSortable();
         getTable().addColumn(netColumn, constants.networkVm(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> statusColumn = new EnumColumn<VM, 
VMStatus>() {
@@ -117,15 +125,17 @@
                 return object.getStatus();
             }
         };
+        statusColumn.makeSortable();
         getTable().addColumn(statusColumn, constants.statusVm(), "130px"); 
//$NON-NLS-1$
 
-        TextColumnWithTooltip<VM> hostColumn = new UptimeColumn<VM>() {
+        TextColumnWithTooltip<VM> uptimeColumn = new UptimeColumn<VM>() {
             @Override
             protected Double getRawValue(VM object) {
                 return object.getRoundedElapsedTime();
             }
         };
-        getTable().addColumn(hostColumn, constants.uptimeVm(), "110px"); 
//$NON-NLS-1$
+        uptimeColumn.makeSortable();
+        getTable().addColumn(uptimeColumn, constants.uptimeVm(), "110px"); 
//$NON-NLS-1$
 
         // add action buttons
         getTable().addActionButton(new 
WebAdminImageButtonDefinition<VM>(constants.suspendVm(),
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/ProgressBarColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/ProgressBarColumn.java
index b2656de..18efbe8 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/ProgressBarColumn.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/ProgressBarColumn.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.ui.webadmin.widget.table.column;
 
+import java.util.Comparator;
+
 import org.ovirt.engine.ui.common.widget.table.column.SafeHtmlColumn;
 import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
 
@@ -18,7 +20,7 @@
         ORANGE("#FF9900"), //$NON-NLS-1$
         RED("#FF0000"); //$NON-NLS-1$
 
-        private String colorCode;
+        private final String colorCode;
 
         private ProgressBarColors(String colorCode) {
             this.colorCode = colorCode;
@@ -56,6 +58,20 @@
     }
 
     /**
+     * Enables default <em>client-side</em> sorting for this column, by the 
integer value, as returned from
+     * getProgressValue method.
+     */
+    public void makeSortable() {
+        makeSortable(new Comparator<T>() {
+
+            @Override
+            public int compare(T arg0, T arg1) {
+                return 
getProgressValue(arg0).compareTo(getProgressValue(arg1));
+            }
+        });
+    }
+
+    /**
      * Returns the progress value in percent ({@code null} values will be 
interpreted as zeroes).
      */
     protected abstract Integer getProgressValue(T object);


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

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

Reply via email to