Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Implement sorting by simple status image
......................................................................

webadmin: Implement sorting by simple status image

Implemented a couple of helper classes to sort simple status
(i.e. none, down or up) columns in a generic way, and applied this
logic to the Network/Clusters, Network/Hosts and Network/VMs subtabs.

Change-Id: I9ac043ef1d522f67678b5c70b461833a82d3d9f0
Bug-Url: https://bugzilla.redhat.com/1120054
Signed-off-by: Lior Vernia <[email protected]>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/NicActivateStatusColumn.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusColumnComparator.java
A 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusImageComparator.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkClusterView.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
6 files changed, 85 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/58/30158/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/NicActivateStatusColumn.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/NicActivateStatusColumn.java
index 41b7a6f..870930e 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/NicActivateStatusColumn.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/NicActivateStatusColumn.java
@@ -1,5 +1,7 @@
 package org.ovirt.engine.ui.common.widget.table.column;
 
+import java.util.Comparator;
+
 import org.ovirt.engine.core.common.businessentities.VM;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.utils.PairQueryable;
@@ -8,6 +10,7 @@
 import org.ovirt.engine.ui.common.CommonApplicationTemplates;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.resources.client.ImageResource;
 import com.google.gwt.safehtml.shared.SafeHtml;
 import com.google.gwt.safehtml.shared.SafeHtmlUtils;
 import com.google.gwt.user.client.ui.AbstractImagePrototype;
@@ -16,8 +19,8 @@
     CommonApplicationResources resources = 
GWT.create(CommonApplicationResources.class);
     CommonApplicationConstants constants = 
GWT.create(CommonApplicationConstants.class);
     CommonApplicationTemplates templates = 
GWT.create(CommonApplicationTemplates.class);
-    @Override
-    public SafeHtml getValue(T object) {
+
+    private ImageResource getImage(T object) {
         VmNetworkInterface vnic = null;
         if (object instanceof VmNetworkInterface) {
             vnic = (VmNetworkInterface) object;
@@ -26,14 +29,30 @@
         }
 
         if (vnic != null) {
-            return vnic.isPlugged() && vnic.isLinked() ?
-                    
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.upImage()).getHTML())
-                    : 
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(resources.downImage()).getHTML());
+            return vnic.isPlugged() && vnic.isLinked() ? resources.upImage() : 
resources.downImage();
         }
 
         return null;
     }
 
+    public void makeSortable() {
+        makeSortable(new Comparator<T>() {
+
+            private final SimpleStatusImageComparator imageComparator = new 
SimpleStatusImageComparator();
+
+            @Override
+            public int compare(T o1, T o2) {
+                return imageComparator.compare(getImage(o1), getImage(o2));
+            }
+        });
+    }
+
+    @Override
+    public SafeHtml getValue(T object) {
+        ImageResource image = getImage(object);
+        return (image == null) ? null : 
SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create(image).getHTML());
+    }
+
     @Override
     public SafeHtml getTooltip(T object) {
         VmNetworkInterface vnic = null;
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusColumnComparator.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusColumnComparator.java
new file mode 100644
index 0000000..cf378cf
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusColumnComparator.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.ui.common.widget.table.column;
+
+import java.util.Comparator;
+
+/**
+ * A wrapper for {@link SimpleStatusImageComparator} that uses an {@link 
ImageResourceColumn} to extract image values.
+ */
+public class SimpleStatusColumnComparator<T> implements Comparator<T> {
+
+    private final ImageResourceColumn<T> renderingColumn;
+    private final SimpleStatusImageComparator imageComparator;
+
+    public SimpleStatusColumnComparator(ImageResourceColumn<T> 
renderingColumn) {
+        this.renderingColumn = renderingColumn;
+        imageComparator = new SimpleStatusImageComparator();
+    }
+
+    @Override
+    public int compare(T o1, T o2) {
+        return imageComparator.compare(renderingColumn.getValue(o1), 
renderingColumn.getValue(o2));
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusImageComparator.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusImageComparator.java
new file mode 100644
index 0000000..b312ef2
--- /dev/null
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/SimpleStatusImageComparator.java
@@ -0,0 +1,31 @@
+package org.ovirt.engine.ui.common.widget.table.column;
+
+import java.util.Comparator;
+
+import org.ovirt.engine.ui.common.CommonApplicationResources;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.resources.client.ImageResource;
+
+/**
+ * A comparator that sorts according to simple status images - first null, 
then down, then up.
+ */
+public class SimpleStatusImageComparator implements Comparator<ImageResource> {
+
+    private static final CommonApplicationResources resources = 
GWT.create(CommonApplicationResources.class);
+    private static final ImageResource downImage = resources.downImage();
+
+    @Override
+    public int compare(ImageResource o1, ImageResource o2) {
+        if (o1 == o2) {
+            return 0;
+        } else if (o1 == null || o2 == null) {
+            return (o1 == null) ? -1 : 1;
+        } else if (o1.equals(o2)) {
+            return 0;
+        } else {
+            return downImage.equals(o1) ? -1 : 1;
+        }
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkClusterView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkClusterView.java
index 7481908..fcb0cb4 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkClusterView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/network/SubTabNetworkClusterView.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.ui.common.uicommon.model.SearchableDetailModelProvider;
 import org.ovirt.engine.ui.common.widget.table.column.CheckboxColumn;
 import 
org.ovirt.engine.ui.common.widget.table.column.SafeHtmlWithSafeHtmlTooltipColumn;
+import 
org.ovirt.engine.ui.common.widget.table.column.SimpleStatusColumnComparator;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkClusterListModel;
@@ -92,7 +93,9 @@
         attachedColumn.makeSortable();
         getTable().addColumn(attachedColumn, 
constants.attachedNetworkCluster(), "120px"); //$NON-NLS-1$
 
-        getTable().addColumn(new NetworkClusterStatusColumn(), 
constants.networkStatus(), "120px"); //$NON-NLS-1$
+        NetworkClusterStatusColumn statusColumn = new 
NetworkClusterStatusColumn();
+        statusColumn.makeSortable(new 
SimpleStatusColumnComparator<PairQueryable<VDSGroup, 
NetworkCluster>>(statusColumn));
+        getTable().addColumn(statusColumn, constants.networkStatus(), 
"120px"); //$NON-NLS-1$
 
         CheckboxColumn<PairQueryable<VDSGroup, NetworkCluster>> 
netRequiredColumn =
                 new CheckboxColumn<PairQueryable<VDSGroup, 
NetworkCluster>>(true) {
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 f997975..febf7bc 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
@@ -12,6 +12,7 @@
 import org.ovirt.engine.ui.common.view.ViewRadioGroup;
 import org.ovirt.engine.ui.common.widget.table.column.RxTxRateColumn;
 import 
org.ovirt.engine.ui.common.widget.table.column.SafeHtmlWithSafeHtmlTooltipColumn;
+import 
org.ovirt.engine.ui.common.widget.table.column.SimpleStatusColumnComparator;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkHostFilter;
@@ -222,6 +223,7 @@
         nameColumn.makeSortable();
         clusterColumn.makeSortable();
         dcColumn.makeSortable();
+        nicStatusColumn.makeSortable(new 
SimpleStatusColumnComparator<PairQueryable<VdsNetworkInterface, 
VDS>>(nicStatusColumn));
         speedColumn.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 af82f78..dfd85c9 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
@@ -205,6 +205,7 @@
         clusterColumn.makeSortable();
         ipColumn.makeSortable();
         fqdnColumn.makeSortable();
+        nicActivateStatusColumn.makeSortable();
         vnicNameColumn.makeSortable();
         descriptionColumn.makeSortable();
     }


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9ac043ef1d522f67678b5c70b461833a82d3d9f0
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