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

Reply via email to