Lior Vernia has uploaded a new change for review. Change subject: webadmin: Implement generic sorting for Identifiable columns ......................................................................
webadmin: Implement generic sorting for Identifiable columns Taking advantage of Identifiable's getValue() method, implemented a generic comparator to handle classes implementing the interface. Also applied it to the status columns in the Network/Hosts and Network/VMs subtabs. Change-Id: Ia1433e6650f53229bf5e02439b5d26dfb56014c0 Bug-Url: https://bugzilla.redhat.com/1120054 Signed-off-by: Lior Vernia <[email protected]> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkHostView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkVmView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusColumn.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/VmStatusColumn.java 5 files changed, 59 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/57/30157/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java index 6653d63..5396e0a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.Identifiable; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.ProviderType; import org.ovirt.engine.core.common.businessentities.Role; @@ -83,6 +84,22 @@ } } + public final static class IdentifiableComparator<T extends Identifiable> implements Comparator<T>, Serializable { + + private static final long serialVersionUID = 1698501567658288106L; + + @Override + public int compare(T o1, T o2) { + if (o1 == o2) { + return 0; + } else if (o1 == null || o2 == null) { + return (o1 == null) ? -1 : 1; + } else { + return o1.getValue() - o2.getValue(); + } + } + } + public static class VdsSPMPriorityComparer implements Comparator<VDS>, Serializable { private static final long serialVersionUID = 1114793850392069219L; diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkHostView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkHostView.java index 0baa75b..f997975 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkHostView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkHostView.java @@ -218,6 +218,7 @@ } private void initSorting() { + hostStatus.makeSortable(); nameColumn.makeSortable(); clusterColumn.makeSortable(); dcColumn.makeSortable(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkVmView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkVmView.java index 5df2cb6..af82f78 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkVmView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkVmView.java @@ -200,6 +200,7 @@ } private void initSorting() { + vmStatusColumn.makeSortable(); nameColumn.makeSortable(); clusterColumn.makeSortable(); ipColumn.makeSortable(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusColumn.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusColumn.java index 363f7f9..d566ec0 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusColumn.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/HostStatusColumn.java @@ -1,16 +1,19 @@ package org.ovirt.engine.ui.webadmin.widget.table.column; +import java.util.Comparator; + import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.utils.PairQueryable; +import org.ovirt.engine.ui.common.widget.table.column.SortableColumn; +import org.ovirt.engine.ui.uicommonweb.Linq; +import org.ovirt.engine.ui.uicommonweb.Linq.IdentifiableComparator; -import com.google.gwt.user.cellview.client.Column; - -public class HostStatusColumn<S> extends Column<S, VDS> { +public class HostStatusColumn<S> extends SortableColumn<S, VDS> { public HostStatusColumn() { super(new HostStatusCell()); } - @Override public VDS getValue(S object) { @@ -25,4 +28,18 @@ return null; } + public void makeSortable() { + makeSortable(new Comparator<S>() { + + IdentifiableComparator<VDSStatus> valueComparator = new Linq.IdentifiableComparator<VDSStatus>(); + + @Override + public int compare(S o1, S o2) { + VDSStatus status1 = (getValue(o1) == null) ? null : getValue(o1).getStatus(); + VDSStatus status2 = (getValue(o2) == null) ? null : getValue(o2).getStatus(); + return valueComparator.compare(status1, status2); + } + }); + } + } 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 8c130b0..f938548 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 @@ -1,10 +1,15 @@ package org.ovirt.engine.ui.webadmin.widget.table.column; +import java.util.Comparator; + import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.utils.PairQueryable; import org.ovirt.engine.ui.common.widget.table.column.SortableColumn; +import org.ovirt.engine.ui.uicommonweb.Linq; +import org.ovirt.engine.ui.uicommonweb.Linq.IdentifiableComparator; /** * Image column that corresponds to XAML {@code VmStatusTemplate}. @@ -25,4 +30,18 @@ return null; } + public void makeSortable() { + makeSortable(new Comparator<T>() { + + IdentifiableComparator<VMStatus> valueComparator = new Linq.IdentifiableComparator<VMStatus>(); + + @Override + public int compare(T o1, T o2) { + VMStatus status1 = (getValue(o1) == null) ? null : getValue(o1).getStatus(); + VMStatus status2 = (getValue(o2) == null) ? null : getValue(o2).getStatus(); + return valueComparator.compare(status1, status2); + } + }); + } + } -- To view, visit http://gerrit.ovirt.org/30157 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia1433e6650f53229bf5e02439b5d26dfb56014c0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Lior Vernia <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
