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
