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
