Lior Vernia has uploaded a new change for review.

Change subject: webadmin: Render Network/Hosts subtab columns sortable
......................................................................

webadmin: Render Network/Hosts subtab columns sortable

Implemented client-side sorting for aforementioned columns.

Change-Id: I463a6402fa65769a49fea117bff298a739878f26
Signed-off-by: Lior Vernia <[email protected]>
---
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/comparators/InterfaceHostComparator.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkHostListModel.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/widget/table/column/HostStatusColumn.java
4 files changed, 157 insertions(+), 29 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/28466/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/comparators/InterfaceHostComparator.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/comparators/InterfaceHostComparator.java
new file mode 100644
index 0000000..96a24df
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/comparators/InterfaceHostComparator.java
@@ -0,0 +1,121 @@
+package org.ovirt.engine.ui.uicommonweb.comparators;
+
+import java.util.Comparator;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
+import org.ovirt.engine.core.common.businessentities.network.InterfaceStatus;
+import 
org.ovirt.engine.core.common.businessentities.network.VdsNetworkInterface;
+import org.ovirt.engine.core.common.utils.PairQueryable;
+
+public class InterfaceHostComparator {
+
+    public static class ByStatus implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            return arg0.getSecond().getStatus().getValue() - 
arg1.getSecond().getStatus().getValue();
+        }
+    }
+
+    public static class ByName implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            return lexoNumeric.compare(arg0.getSecond().getName(), 
arg1.getSecond().getName());
+        }
+    }
+
+    public static class ByCluster implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            return lexoNumeric.compare(arg0.getSecond().getVdsGroupName(), 
arg1.getSecond().getVdsGroupName());
+        }
+    }
+
+    public static class ByDataCenter implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            return lexoNumeric.compare(arg0.getSecond().getStoragePoolName(), 
arg1.getSecond().getStoragePoolName());
+        }
+    }
+
+    public static class ByInterfaceStatus implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            InterfaceStatus status1 =
+                    (arg0.getFirst() == null) ? InterfaceStatus.NONE : 
arg0.getFirst().getStatistics().getStatus();
+            InterfaceStatus status2 =
+                    (arg1.getFirst() == null) ? InterfaceStatus.NONE : 
arg1.getFirst().getStatistics().getStatus();
+            if (status1 == status2) {
+                return 0;
+            } else if (status1 == InterfaceStatus.UP) {
+                return 1;
+            } else if (status2 == InterfaceStatus.UP) {
+                return -1;
+            } else {
+                return (status1 == InterfaceStatus.DOWN) ? 1 : -1;
+            }
+        }
+    }
+
+    public static class ByInterface implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        private LexoNumericComparator lexoNumeric = new 
LexoNumericComparator();
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            String name1 = (arg0.getFirst() == null) ? null : 
arg0.getFirst().getName();
+            String name2 = (arg1.getFirst() == null) ? null : 
arg1.getFirst().getName();
+            return lexoNumeric.compare(name1, name2);
+        }
+    }
+
+    public static class BySpeed implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            int speed1 = (arg0.getFirst() == null) ? -1 : 
arg0.getFirst().getSpeed();
+            int speed2 = (arg1.getFirst() == null) ? -1 : 
arg1.getFirst().getSpeed();
+            return speed1 - speed2;
+        }
+    }
+
+    public static class ByRxRate implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            double rate1 =
+                    (arg0.getFirst() == null) ? -1 : 
arg0.getFirst().getStatistics().getReceiveRate()
+                            * arg0.getFirst().getSpeed();
+            double rate2 =
+                    (arg1.getFirst() == null) ? -1 : 
arg1.getFirst().getStatistics().getReceiveRate()
+                            * arg0.getFirst().getSpeed();
+            return (int) (rate1 - rate2);
+        }
+    }
+
+    public static class ByTxRate implements 
Comparator<PairQueryable<VdsNetworkInterface, VDS>> {
+
+        @Override
+        public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0, 
PairQueryable<VdsNetworkInterface, VDS> arg1) {
+            double rate1 =
+                    (arg0.getFirst() == null) ? -1 : 
arg0.getFirst().getStatistics().getTransmitRate()
+                            * arg0.getFirst().getSpeed();
+            double rate2 =
+                    (arg1.getFirst() == null) ? -1 : 
arg1.getFirst().getStatistics().getTransmitRate()
+                            * arg0.getFirst().getSpeed();
+            return (int) (rate1 - rate2);
+        }
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkHostListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkHostListModel.java
index 060cab3..1b23097 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkHostListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/networks/NetworkHostListModel.java
@@ -2,7 +2,6 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
@@ -25,7 +24,6 @@
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 import org.ovirt.engine.ui.uicompat.external.StringUtils;
 
-@SuppressWarnings("unused")
 public class NetworkHostListModel extends SearchableListModel
 {
     private UICommand setupNetworksCommand;
@@ -37,6 +35,22 @@
         setTitle(ConstantsManager.getInstance().getConstants().hostsTitle());
         setHelpTag(HelpTag.hosts);
         setHashName("hosts"); //$NON-NLS-1$
+
+        setComparator(new Comparator<PairQueryable<VdsNetworkInterface, 
VDS>>() {
+
+            @Override
+            public int compare(PairQueryable<VdsNetworkInterface, VDS> arg0,
+                    PairQueryable<VdsNetworkInterface, VDS> arg1) {
+                int compareValue =
+                        
arg0.getSecond().getVdsGroupName().compareTo(arg1.getSecond().getVdsGroupName());
+
+                if (compareValue != 0) {
+                    return compareValue;
+                }
+
+                return 
arg0.getSecond().getName().compareTo(arg1.getSecond().getName());
+            }
+        });
 
         setSetupNetworksCommand(new UICommand("SetupNetworks", this)); 
//$NON-NLS-1$
 
@@ -70,7 +84,8 @@
             @Override
             public void onSuccess(final Object model, Object ReturnValue) {
                 if (model.equals(getViewFilterType())) {
-                    final Iterable returnList = (Iterable) 
((VdcQueryReturnValue) ReturnValue).getReturnValue();
+                    final Collection<PairQueryable<VdsNetworkInterface, VDS>> 
returnList =
+                            (Collection<PairQueryable<VdsNetworkInterface, 
VDS>>) ((VdcQueryReturnValue) ReturnValue).getReturnValue();
                     if 
(NetworkHostFilter.unattached.equals(getViewFilterType())) {
                         final List<PairQueryable<VdsNetworkInterface, VDS>> 
items =
                                 new 
ArrayList<PairQueryable<VdsNetworkInterface, VDS>>();
@@ -79,7 +94,7 @@
                         }
                         setItems(items);
                     } else if 
(NetworkHostFilter.attached.equals(getViewFilterType())) {
-                        
initAttachedInterfaces((List<PairQueryable<VdsNetworkInterface, VDS>>) 
returnList);
+                        initAttachedInterfaces(returnList);
                     }
                 }
             }
@@ -97,7 +112,7 @@
         setIsQueryFirstTime(false);
     }
 
-    private void initAttachedInterfaces(final 
List<PairQueryable<VdsNetworkInterface, VDS>> items) {
+    private void initAttachedInterfaces(final 
Collection<PairQueryable<VdsNetworkInterface, VDS>> items) {
         if (StringUtils.isEmpty(getEntity().getLabel()) || items.isEmpty()) {
             setItems(items);
             return;
@@ -127,27 +142,6 @@
 
     public Boolean isInterfaceAttachedByLabel(VdsNetworkInterface iface) {
         return attachedByLabelInterfaces != null && 
attachedByLabelInterfaces.contains(iface);
-    }
-
-    @Override
-    public void setItems(Collection value) {
-        Collections.sort((List<PairQueryable<VdsNetworkInterface, VDS>>) value,
-                new Comparator<PairQueryable<VdsNetworkInterface, VDS>>() {
-
-                    @Override
-                    public int compare(PairQueryable<VdsNetworkInterface, VDS> 
arg0,
-                            PairQueryable<VdsNetworkInterface, VDS> arg1) {
-                        int compareValue =
-                                
arg0.getSecond().getVdsGroupName().compareTo(arg1.getSecond().getVdsGroupName());
-
-                        if (compareValue != 0) {
-                            return compareValue;
-                        }
-
-                        return 
arg0.getSecond().getName().compareTo(arg1.getSecond().getName());
-                    }
-                });
-        super.setItems(value);
     }
 
     public void setupNetworks() {
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 ae4df6f..157e57f 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
@@ -14,6 +14,7 @@
 import 
org.ovirt.engine.ui.common.widget.table.column.SafeHtmlWithSafeHtmlTooltipColumn;
 import org.ovirt.engine.ui.common.widget.table.column.TextColumnWithTooltip;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.comparators.InterfaceHostComparator;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkHostFilter;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkHostListModel;
 import org.ovirt.engine.ui.uicommonweb.models.networks.NetworkListModel;
@@ -207,6 +208,7 @@
         getTable().enableColumnResizing();
         initTableOverhead();
         handleRadioButtonClick(null);
+        initComparators();
 
         getTable().addActionButton(new 
WebAdminButtonDefinition<PairQueryable<VdsNetworkInterface, 
VDS>>(constants.setupHostNetworksInterface()) {
             @Override
@@ -215,5 +217,17 @@
             }
         });
     }
+
+    private void initComparators() {
+        hostStatus.makeSortable(new InterfaceHostComparator.ByStatus());
+        nameColumn.makeSortable(new InterfaceHostComparator.ByName());
+        clusterColumn.makeSortable(new InterfaceHostComparator.ByCluster());
+        dcColumn.makeSortable(new InterfaceHostComparator.ByDataCenter());
+        nicStatusColumn.makeSortable(new 
InterfaceHostComparator.ByInterfaceStatus());
+        nicColumn.makeSortable(new InterfaceHostComparator.ByInterface());
+        speedColumn.makeSortable(new InterfaceHostComparator.BySpeed());
+        nicRxColumn.makeSortable(new InterfaceHostComparator.ByRxRate());
+        nicTxColumn.makeSortable(new InterfaceHostComparator.ByTxRate());
+    }
 }
 
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..5eb2ea2 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
@@ -2,10 +2,9 @@
 
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.utils.PairQueryable;
+import org.ovirt.engine.ui.common.widget.table.column.SortableColumn;
 
-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());


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I463a6402fa65769a49fea117bff298a739878f26
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Lior Vernia <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to