Frank Kobzik has uploaded a new change for review.

Change subject: engine: Vm main tab columns sorting
......................................................................

engine: Vm main tab columns sorting

This patch adds sorting of (some) fields in VM main tab in webadmin. As
a part of the patch, some existing *Column implementations were adjusted
to extend SortableColumn class.

Because some fields (fqdn, host and migration progress) don't have
suppord for sorting in backend, follow-up patch is needed.

Change-Id: I718321d0721f6a64fd86288be8dacf2b05c67304
Signed-off-by: Frantisek Kobzik <[email protected]>
Bug-Url: https://bugzilla.redhat.com/1103715
---
M 
backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VmConditionFieldAutoCompleter.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ImageResourceColumn.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlColumn.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java
6 files changed, 142 insertions(+), 95 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/72/28272/1

diff --git 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VmConditionFieldAutoCompleter.java
 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VmConditionFieldAutoCompleter.java
index 588ab32..d9a399f 100644
--- 
a/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VmConditionFieldAutoCompleter.java
+++ 
b/backend/manager/modules/searchbackend/src/main/java/org/ovirt/engine/core/searchbackend/VmConditionFieldAutoCompleter.java
@@ -13,106 +13,132 @@
 import org.ovirt.engine.core.compat.TimeSpan;
 
 public class VmConditionFieldAutoCompleter extends 
BaseConditionFieldAutoCompleter {
+
+    public static String NAME = "NAME";
+    public static String COMMENT = "COMMENT";
+    public static String STATUS = "STATUS";
+    public static String HOST = "HOST";
+    public static String IP = "IP";
+    public static String UPTIME = "UPTIME";
+    public static String OS = "OS";
+    public static String CREATIONDATE = "CREATIONDATE";
+    public static String ADDRESS = "ADDRESS";
+    public static String CPU_USAGE = "CPU_USAGE";
+    public static String MEM_USAGE = "MEM_USAGE";
+    public static String NETWORK_USAGE = "NETWORK_USAGE";
+    public static String MEMORY = "MEMORY";
+    public static String APPS = "APPS";
+    public static String CLUSTER = "CLUSTER";
+    public static String POOL = "POOL";
+    public static String LOGGEDINUSER = "LOGGEDINUSER";
+    public static String TAG = "TAG";
+    public static String DATACENTER = "DATACENTER";
+    public static String TYPE = "TYPE";
+    public static String QUOTA = "QUOTA";
+    public static String ID = "ID";
+    public static String DESCRIPTION = "DESCRIPTION";
+    public static String ARCHITECTURE = "ARCHITECTURE";
+
     public VmConditionFieldAutoCompleter() {
         // Building the basic verbs Dict
-        mVerbs.add("NAME");
-        mVerbs.add("COMMENT");
-        mVerbs.add("STATUS");
-        mVerbs.add("IP");
-        mVerbs.add("UPTIME");
-        mVerbs.add("OS");
-        mVerbs.add("CREATIONDATE");
-        mVerbs.add("ADDRESS");
-        mVerbs.add("CPU_USAGE");
-        mVerbs.add("MEM_USAGE");
-        mVerbs.add("NETWORK_USAGE");
-        mVerbs.add("MEMORY");
-        mVerbs.add("APPS");
-        mVerbs.add("CLUSTER");
-        mVerbs.add("POOL");
-        mVerbs.add("LOGGEDINUSER");
-        mVerbs.add("TAG");
-        mVerbs.add("DATACENTER");
-        mVerbs.add("TYPE");
-        mVerbs.add("QUOTA");
-        mVerbs.add("ID");
-        mVerbs.add("DESCRIPTION");
-        mVerbs.add("ARCHITECTURE");
+        mVerbs.add(NAME);
+        mVerbs.add(COMMENT);
+        mVerbs.add(STATUS);
+        mVerbs.add(IP);
+        mVerbs.add(UPTIME);
+        mVerbs.add(OS);
+        mVerbs.add(CREATIONDATE);
+        mVerbs.add(ADDRESS);
+        mVerbs.add(CPU_USAGE);
+        mVerbs.add(MEM_USAGE);
+        mVerbs.add(NETWORK_USAGE);
+        mVerbs.add(MEMORY);
+        mVerbs.add(APPS);
+        mVerbs.add(CLUSTER);
+        mVerbs.add(POOL);
+        mVerbs.add(LOGGEDINUSER);
+        mVerbs.add(TAG);
+        mVerbs.add(DATACENTER);
+        mVerbs.add(TYPE);
+        mVerbs.add(QUOTA);
+        mVerbs.add(ID);
+        mVerbs.add(DESCRIPTION);
+        mVerbs.add(ARCHITECTURE);
         // Building the autoCompletion Dict
         buildCompletions();
 
         // Building the types dict
-        getTypeDictionary().put("NAME", String.class);
-        getTypeDictionary().put("COMMENT", String.class);
-        getTypeDictionary().put("STATUS", VMStatus.class);
-        getTypeDictionary().put("IP", String.class);
-        getTypeDictionary().put("UPTIME", TimeSpan.class);
-        getTypeDictionary().put("OS", String.class);
-        getTypeDictionary().put("CREATIONDATE", Date.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("MEMORY", Integer.class);
-        getTypeDictionary().put("APPS", String.class);
-        getTypeDictionary().put("CLUSTER", String.class);
-        getTypeDictionary().put("POOL", String.class);
-        getTypeDictionary().put("LOGGEDINUSER", String.class);
-        getTypeDictionary().put("TAG", String.class);
-        getTypeDictionary().put("DATACENTER", String.class);
-        getTypeDictionary().put("TYPE", VmType.class);
-        getTypeDictionary().put("QUOTA", String.class);
-        getTypeDictionary().put("HOST", String.class);
-        getTypeDictionary().put("ID", UUID.class);
-        getTypeDictionary().put("DESCRIPTION", String.class);
-        getTypeDictionary().put("ARCHITECTURE", ArchitectureType.class);
+        getTypeDictionary().put(NAME, String.class);
+        getTypeDictionary().put(COMMENT, String.class);
+        getTypeDictionary().put(STATUS, VMStatus.class);
+        getTypeDictionary().put(IP, String.class);
+        getTypeDictionary().put(UPTIME, TimeSpan.class);
+        getTypeDictionary().put(OS, String.class);
+        getTypeDictionary().put(CREATIONDATE, Date.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(MEMORY, Integer.class);
+        getTypeDictionary().put(APPS, String.class);
+        getTypeDictionary().put(CLUSTER, String.class);
+        getTypeDictionary().put(POOL, String.class);
+        getTypeDictionary().put(LOGGEDINUSER, String.class);
+        getTypeDictionary().put(TAG, String.class);
+        getTypeDictionary().put(DATACENTER, String.class);
+        getTypeDictionary().put(TYPE, VmType.class);
+        getTypeDictionary().put(QUOTA, String.class);
+        getTypeDictionary().put(HOST, String.class);
+        getTypeDictionary().put(ID, UUID.class);
+        getTypeDictionary().put(DESCRIPTION, String.class);
+        getTypeDictionary().put(ARCHITECTURE, ArchitectureType.class);
 
         // building the ColumnName Dict
-        columnNameDict.put("NAME", "vm_name");
-        columnNameDict.put("COMMENT", "vm_comment");
-        columnNameDict.put("STATUS", "status");
-        columnNameDict.put("IP", "vm_ip");
-        columnNameDict.put("UPTIME", "elapsed_time");
-        columnNameDict.put("OS", "vm_os");
-        columnNameDict.put("CREATIONDATE", "vm_creation_date");
-        columnNameDict.put("ADDRESS", "vm_host");
-        columnNameDict.put("MEM_USAGE", "usage_mem_percent");
-        columnNameDict.put("NETWORK_USAGE", "usage_network_percent");
-        columnNameDict.put("CPU_USAGE", "usage_cpu_percent");
-        columnNameDict.put("MEMORY", "vm_mem_size_mb");
-        columnNameDict.put("APPS", "app_list");
-        columnNameDict.put("CLUSTER", "vds_group_name");
-        columnNameDict.put("POOL", "vm_pool_name");
+        columnNameDict.put(NAME, "vm_name");
+        columnNameDict.put(COMMENT, "vm_comment");
+        columnNameDict.put(STATUS, "status");
+        columnNameDict.put(IP, "vm_ip");
+        columnNameDict.put(UPTIME, "elapsed_time");
+        columnNameDict.put(OS, "vm_os");
+        columnNameDict.put(CREATIONDATE, "vm_creation_date");
+        columnNameDict.put(ADDRESS, "vm_host");
+        columnNameDict.put(MEM_USAGE, "usage_mem_percent");
+        columnNameDict.put(NETWORK_USAGE, "usage_network_percent");
+        columnNameDict.put(CPU_USAGE, "usage_cpu_percent");
+        columnNameDict.put(MEMORY, "vm_mem_size_mb");
+        columnNameDict.put(APPS, "app_list");
+        columnNameDict.put(CLUSTER, "vds_group_name");
+        columnNameDict.put(POOL, "vm_pool_name");
         // mColumnNameDict.Add("NOTE", "note");
-        columnNameDict.put("LOGGEDINUSER", "guest_cur_user_name");
-        columnNameDict.put("TAG", "tag_name");
-        columnNameDict.put("DATACENTER", "storage_pool_name");
-        columnNameDict.put("TYPE", "vm_type");
-        columnNameDict.put("QUOTA", "quota_name");
-        columnNameDict.put("HOST", "run_on_vds_name");
-        columnNameDict.put("ID", "vm_guid");
-        columnNameDict.put("DESCRIPTION", "vm_description");
-        columnNameDict.put("ARCHITECTURE", "architecture");
+        columnNameDict.put(LOGGEDINUSER, "guest_cur_user_name");
+        columnNameDict.put(TAG, "tag_name");
+        columnNameDict.put(DATACENTER, "storage_pool_name");
+        columnNameDict.put(TYPE, "vm_type");
+        columnNameDict.put(QUOTA, "quota_name");
+        columnNameDict.put(HOST, "run_on_vds_name");
+        columnNameDict.put(ID, "vm_guid");
+        columnNameDict.put(DESCRIPTION, "vm_description");
+        columnNameDict.put(ARCHITECTURE, "architecture");
 
         // Override field names for purpose of sorting, if needed
-        sortableFieldDict.put("IP", 
StringFormat.format("fn_get_comparable_ip_list(%s)", getDbFieldName("IP")));
+        sortableFieldDict.put(IP, 
StringFormat.format("fn_get_comparable_ip_list(%s)", getDbFieldName(IP)));
 
         /**
          */
-        notFreeTextSearchableFieldsList.add("APPS");
-        notFreeTextSearchableFieldsList.add("OS");
+        notFreeTextSearchableFieldsList.add(APPS);
+        notFreeTextSearchableFieldsList.add(OS);
         // Building the validation dict
         buildBasicValidationTable();
     }
 
     @Override
     public IAutoCompleter getFieldRelationshipAutoCompleter(String fieldName) {
-        if ("UPTIME".equals(fieldName) || "CREATIONDATE".equals(fieldName)) {
+        if (UPTIME.equals(fieldName) || CREATIONDATE.equals(fieldName)) {
             return BiggerOrSmallerRelationAutoCompleter.INSTANCE;
-        } else if ("CPU_USAGE".equals(fieldName) || 
"MEM_USAGE".equals(fieldName)
-                || "MEMORY".equals(fieldName) || 
"NETWORK_USAGE".equals(fieldName)) {
+        } else if (CPU_USAGE.equals(fieldName) || MEM_USAGE.equals(fieldName)
+                || MEM_USAGE.equals(fieldName) || 
NETWORK_USAGE.equals(fieldName)) {
             return NumericConditionRelationAutoCompleter.INSTANCE;
-        } else if ("TAG".equals(fieldName)) {
+        } else if (TAG.equals(fieldName)) {
             return StringOnlyEqualConditionRelationAutoCompleter.INSTANCE;
         } else {
             return StringConditionRelationAutoCompleter.INSTANCE;
@@ -121,15 +147,15 @@
 
     @Override
     public IConditionValueAutoCompleter getFieldValueAutoCompleter(String 
fieldName) {
-        if ("OS".equals(fieldName)) {
+        if (OS.equals(fieldName)) {
             return 
SimpleDependecyInjector.getInstance().get(OsValueAutoCompleter.class);
-        } else if ("STATUS".equals(fieldName)) {
+        } else if (STATUS.equals(fieldName)) {
             return new EnumValueAutoCompleter(VMStatus.class);
-        } else if ("TYPE".equals(fieldName)) {
+        } else if (TYPE.equals(fieldName)) {
             return new EnumValueAutoCompleter(VmType.class);
-        } else if ("QUOTA".equals(fieldName)) {
+        } else if (QUOTA.equals(fieldName)) {
             return new NullableStringAutoCompleter();
-        } else if ("ARCHITECTURE".equals(fieldName)) {
+        } else if (ARCHITECTURE.equals(fieldName)) {
             return new EnumValueAutoCompleter(ArchitectureType.class);
         }
         return null;
@@ -137,7 +163,7 @@
 
     @Override
     public void formatValue(String fieldName, Pair<String, String> pair, 
boolean caseSensitive) {
-        if ("APPS".equals(fieldName)) {
+        if (APPS.equals(fieldName)) {
             pair.setSecond(
                     
StringFormat.format(BaseConditionFieldAutoCompleter.getI18NPrefix() + 
"'%%%1$s%%'",
                             StringHelper.trim(pair.getSecond(), 
'\'').replace("N'",
@@ -148,12 +174,12 @@
                 pair.setFirst("NOT " + 
BaseConditionFieldAutoCompleter.getLikeSyntax(caseSensitive));
             }
         }
-        else if ("UPTIME".equals(fieldName)) {
+        else if (UPTIME.equals(fieldName)) {
             pair.setSecond(StringHelper.trim(pair.getSecond(), '\''));
             TimeSpan ts = TimeSpan.parse(pair.getSecond());
             pair.setSecond(StringFormat.format("'%1$s'", ts.TotalSeconds));
         }
-        else if ("CREATIONDATE".equals(fieldName)) {
+        else if (CREATIONDATE.equals(fieldName)) {
             Date tmp = new Date(Date.parse(StringHelper.trim(pair.getSecond(), 
'\'')));
             pair.setSecond(StringFormat.format("'%1$s'", tmp));
         } else {
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ImageResourceColumn.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ImageResourceColumn.java
index f204f9f..4440337 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ImageResourceColumn.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/ImageResourceColumn.java
@@ -8,7 +8,6 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.safehtml.shared.SafeHtmlUtils;
-import com.google.gwt.user.cellview.client.Column;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
 
 /**
@@ -17,7 +16,7 @@
  * @param <T>
  *            Table row data type.
  */
-public abstract class ImageResourceColumn<T> extends Column<T, ImageResource> {
+public abstract class ImageResourceColumn<T> extends SortableColumn<T, 
ImageResource> {
 
     private static final CommonApplicationResources RESOURCES = 
GWT.create(CommonApplicationResources.class);
     protected static final CommonApplicationConstants CONSTANTS = 
GWT.create(CommonApplicationConstants.class);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlColumn.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlColumn.java
index b2d7212..b6fe700 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlColumn.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SafeHtmlColumn.java
@@ -2,7 +2,6 @@
 
 import com.google.gwt.cell.client.SafeHtmlCell;
 import com.google.gwt.safehtml.shared.SafeHtml;
-import com.google.gwt.user.cellview.client.Column;
 
 /**
  * Column for displaying {@link SafeHtml} instances.
@@ -10,7 +9,7 @@
  * @param <T>
  *            Table row data type.
  */
-public abstract class SafeHtmlColumn<T> extends Column<T, SafeHtml> {
+public abstract class SafeHtmlColumn<T> extends SortableColumn<T, SafeHtml> {
 
     public SafeHtmlColumn() {
         super(new SafeHtmlCell());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
index 64166cd..68e9601 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java
@@ -697,7 +697,7 @@
 
     @Override
     protected void syncSearch() {
-        SearchParameters tempVar = new SearchParameters(getSearchString(), 
SearchType.VM, isCaseSensitiveSearch());
+        SearchParameters tempVar = new 
SearchParameters(applySortOptions(getSearchString()), SearchType.VM, 
isCaseSensitiveSearch());
         tempVar.setMaxCount(getSearchPageSize());
         super.syncSearch(VdcQueryType.Search, tempVar);
     }
@@ -2728,6 +2728,11 @@
     }
 
     @Override
+    public boolean supportsServerSideSorting() {
+        return true;
+    }
+
+    @Override
     protected Guid extractStoragePoolIdNullSafe(VM entity) {
         return entity.getStoragePoolId();
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
index b656ed5..1b8d112 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
@@ -10,6 +10,7 @@
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
+import org.ovirt.engine.core.searchbackend.VmConditionFieldAutoCompleter;
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
 import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
 import org.ovirt.engine.ui.common.uicommon.model.MainModelProvider;
@@ -65,9 +66,13 @@
     void initTable(ApplicationResources resources, ApplicationConstants 
constants) {
         getTable().enableColumnResizing();
 
-        getTable().addColumn(new VmStatusColumn<VM>(), constants.empty(), 
"30px"); //$NON-NLS-1$
+        VmStatusColumn<VM> vmStatusColumn = new VmStatusColumn<VM>();
+        vmStatusColumn.makeSortable(VmConditionFieldAutoCompleter.STATUS);
+        getTable().addColumn(vmStatusColumn, constants.empty(), "30px"); 
//$NON-NLS-1$
 
-        getTable().addColumn(new VmTypeColumn(), constants.empty(), "30px"); 
//$NON-NLS-1$
+        VmTypeColumn vmTypeColumn = new VmTypeColumn();
+        vmTypeColumn.makeSortable(VmConditionFieldAutoCompleter.TYPE);
+        getTable().addColumn(vmTypeColumn, constants.empty(), "30px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> nameColumn = new TextColumnWithTooltip<VM>() 
{
             @Override
@@ -75,6 +80,7 @@
                 return object.getName();
             }
         };
+        nameColumn.makeSortable(VmConditionFieldAutoCompleter.NAME);
         getTable().addColumn(nameColumn, constants.nameVm(), "120px"); 
//$NON-NLS-1$
 
         CommentColumn<VM> commentColumn = new CommentColumn<VM>();
@@ -86,6 +92,7 @@
                 return object.getRunOnVdsName();
             }
         };
+        // todo sorting not supported in backend - addressed in follow up
         getTable().addColumn(hostColumn, constants.hostVm(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> ipColumn = new TextColumnWithTooltip<VM>() {
@@ -94,6 +101,7 @@
                 return object.getVmIp();
             }
         };
+        ipColumn.makeSortable(VmConditionFieldAutoCompleter.IP);
         getTable().addColumn(ipColumn, constants.ipVm(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> fqdnColumn = new TextColumnWithTooltip<VM>() 
{
@@ -103,6 +111,7 @@
             }
 
         };
+        // todo sorting not supported in backend - addressed in follow up
         getTable().addColumn(fqdnColumn, constants.fqdn(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> clusterColumn = new 
TextColumnWithTooltip<VM>() {
@@ -111,6 +120,7 @@
                 return object.getVdsGroupName();
             }
         };
+        clusterColumn.makeSortable(VmConditionFieldAutoCompleter.CLUSTER);
         getTable().addColumn(clusterColumn, constants.clusterVm(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> dcColumn = new TextColumnWithTooltip<VM>() {
@@ -119,6 +129,7 @@
                 return object.getStoragePoolName();
             }
         };
+        dcColumn.makeSortable(VmConditionFieldAutoCompleter.DATACENTER);
         getTable().addColumn(dcColumn, constants.dcVm(), "120px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> memoryColumn = new PercentColumn<VM>() {
@@ -127,6 +138,7 @@
                 return object.getUsageMemPercent();
             }
         };
+        memoryColumn.makeSortable(VmConditionFieldAutoCompleter.MEM_USAGE);
         getTable().addColumn(memoryColumn, constants.memoryVm(), "60px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> cpuColumn = new PercentColumn<VM>() {
@@ -135,6 +147,7 @@
                 return object.getUsageCpuPercent();
             }
         };
+        cpuColumn.makeSortable(VmConditionFieldAutoCompleter.CPU_USAGE);
         getTable().addColumn(cpuColumn, constants.cpuVm(), "60px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> networkColumn = new PercentColumn<VM>() {
@@ -143,6 +156,7 @@
                 return object.getUsageNetworkPercent();
             }
         };
+        
networkColumn.makeSortable(VmConditionFieldAutoCompleter.NETWORK_USAGE);
         getTable().addColumn(networkColumn, constants.networkVm(), "60px"); 
//$NON-NLS-1$
 
         PercentColumn<VM> migrationProgressColumn = new 
OneColorPercentColumn<VM>(ProgressBarColumn.ProgressBarColors.GREEN) {
@@ -151,6 +165,7 @@
                 return object.getMigrationProgressPercent();
             }
         };
+        // todo sorting not supported in backend - addressed in follow up
         getTable().addColumn(migrationProgressColumn, 
constants.migrationProgress(), "60px"); //$NON-NLS-1$
 
         TextColumnWithTooltip<VM> displayColumn = new EnumColumn<VM, 
DisplayType>() {
@@ -179,6 +194,7 @@
             }
         };
 
+        statusColumn.makeSortable(VmConditionFieldAutoCompleter.STATUS);
         ReasonColumn<VM> reasonColumn = new ReasonColumn<VM>();
 
         CompositeCell<VM> compositeCell = new StatusCompositeCell(
@@ -199,6 +215,7 @@
                 return object.getRoundedElapsedTime();
             }
         };
+        uptimeColumn.makeSortable(VmConditionFieldAutoCompleter.UPTIME);
         getTable().addColumn(uptimeColumn, constants.uptimeVm(), "120px"); 
//$NON-NLS-1$
 
         TextColumnWithTooltip<VM> descriptionColumn = new 
TextColumnWithTooltip<VM>() {
@@ -207,6 +224,7 @@
                 return object.getDescription();
             }
         };
+        
descriptionColumn.makeSortable(VmConditionFieldAutoCompleter.DESCRIPTION);
         getTable().addColumn(descriptionColumn, constants.description(), 
"150px"); //$NON-NLS-1$
 
         getTable().addActionButton(new 
WebAdminButtonDefinition<VM>(constants.newVm()) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java
index 98381e9..8c130b0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java
@@ -4,12 +4,12 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.utils.PairQueryable;
 
-import com.google.gwt.user.cellview.client.Column;
+import org.ovirt.engine.ui.common.widget.table.column.SortableColumn;
 
 /**
  * Image column that corresponds to XAML {@code VmStatusTemplate}.
  */
-public class VmStatusColumn<T> extends Column<T, VM> {
+public class VmStatusColumn<T> extends SortableColumn<T, VM> {
 
     public VmStatusColumn() {
         super(new VmStatusCell());


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

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

Reply via email to