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
