From 7a41aef8f062d158c6b4ecbcc803d09a5cc40a9c Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Tue, 16 Feb 2016 15:01:54 +0100 Subject: [PATCH 01/17] custom renderer Signed-off-by: asharani-murugesh --- .../DistributionBarRendererWidgetSet.gwt.xml | 17 ++++ ...tringDistributionBarRendererConnector.java | 17 ++++ .../StringDistributionBarRenderer.java | 77 +++++++++++++++++++ .../StringDistributionBarRenderer.java | 18 +++++ 4 files changed, 129 insertions(+) create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml new file mode 100644 index 000000000..7ac135682 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java new file mode 100644 index 000000000..8fc205120 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java @@ -0,0 +1,17 @@ +package org.eclipse.hawkbit.ui.distributionbar.client; + + +import com.vaadin.client.connectors.AbstractRendererConnector; +import com.vaadin.shared.ui.Connect; + +@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer.class) +public class StringDistributionBarRendererConnector extends + AbstractRendererConnector { + + private static final long serialVersionUID = 7697966991925490786L; + + @Override + public org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer) super.getRenderer(); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java new file mode 100644 index 000000000..3f7a4cb98 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java @@ -0,0 +1,77 @@ +package org.eclipse.hawkbit.ui.distributionbar.client.renderers; + +import java.util.HashMap; +import java.util.Map; + +import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; + +import com.google.gwt.core.client.GWT; +import com.vaadin.client.renderers.WidgetRenderer; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class StringDistributionBarRenderer extends WidgetRenderer { + + @Override + public GwtDistributionBar createWidget() { + return GWT.create(GwtDistributionBar.class); + } + + @Override + public void render(RendererCellReference cell, String input, GwtDistributionBar widget) { + if (null != input) { + widget.setNumberOfParts(2); + Map map = formatData(input); + if (!map.isEmpty()) { + final Long notStartedTargetsCount = map.keySet().contains("NOTSTARTED") ? map.get("NOTSTARTED") : 0L; + final Long runningTargetsCount = map.keySet().contains("RUNNING") ? map.get("RUNNING") : 0L; + final Long scheduledTargetsCount = map.keySet().contains("SCHEDULED") ? map.get("SCHEDULED") : 0L; + final Long errorTargetsCount = map.keySet().contains("ERROR") ? map.get("ERROR") : 0L; + final Long finishedTargetsCount = map.keySet().contains("FINISHED") ? map.get("FINISHED") : 0L; + final Long cancelledTargetsCount = map.keySet().contains("CANCELLED") ? map.get("CANCELLED") : 0L; + if (isNoTargets(errorTargetsCount, notStartedTargetsCount, runningTargetsCount, scheduledTargetsCount, + finishedTargetsCount, cancelledTargetsCount)) { + setBarPartSize(widget, "SCHEDULED".toLowerCase(), 0, 0); + setBarPartSize(widget, "FINISHED".toString().toLowerCase(), 0, 1); + + } else { + widget.setNumberOfParts(6); + setBarPartSize(widget, "NOTSTARTED".toString().toLowerCase(), notStartedTargetsCount.intValue(), 0); + setBarPartSize(widget, "SCHEDULED".toString().toLowerCase(), scheduledTargetsCount.intValue(), 1); + setBarPartSize(widget, "RUNNING".toLowerCase(), scheduledTargetsCount.intValue(), 2); + setBarPartSize(widget, "ERROR".toLowerCase(), errorTargetsCount.intValue(), 3); + setBarPartSize(widget, "FINISHED".toLowerCase(), finishedTargetsCount.intValue(), 4); + setBarPartSize(widget, "CANCELLED".toLowerCase(), cancelledTargetsCount.intValue(), 5); + } + } + widget.updateParts(); + } + } + + private Map formatData(String input) { + Map details = new HashMap<>(); + String[] tempData = input.split(","); + for (String statusWithCount : tempData) { + String[] statusWithCountList = statusWithCount.split(":"); + details.put(statusWithCountList[0], new Long(statusWithCountList[1])); + } + return details; + } + + private static boolean isNoTargets(Long errorTargetsCount, Long notStartedTargetsCount, Long runningTargetsCount, + Long scheduledTargetsCount, Long finishedTargetsCount, Long cancelledTargetsCount) { + if (errorTargetsCount == 0 && notStartedTargetsCount == 0 && runningTargetsCount == 0 + && scheduledTargetsCount == 0 && finishedTargetsCount == 0 && cancelledTargetsCount == 0) { + return true; + } + return false; + } + + public void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, + final int index) { + bar.setPartSize(index, count); + bar.setPartTooltip(index, statusName); + // check thi::: + bar.setPartStyleName(index, index, "status-bar-part-" + statusName); + } + +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java new file mode 100644 index 000000000..4a8e3ff73 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java @@ -0,0 +1,18 @@ +package org.eclipse.hawkbit.ui.distributionbar.renderers; + + +import com.vaadin.ui.Grid.AbstractRenderer; + +public class StringDistributionBarRenderer extends AbstractRenderer { + private static final long serialVersionUID = -4543220859821576209L; + + /** + * Creates a new text renderer + */ + public StringDistributionBarRenderer() { + super(String.class, null); + } + + +} + From 00aad9880abb125d92e00eadebf5687751ddc70d Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Wed, 17 Feb 2016 14:16:47 +0100 Subject: [PATCH 02/17] custom render changes Signed-off-by: asharani-murugesh --- .../DistributionBarRendererWidgetSet.gwt.xml | 7 + ...tringDistributionBarRendererConnector.java | 17 + .../StringDistributionBarRenderer.java | 77 ++++ .../StringDistributionBarRenderer.java | 18 + .../DistributionBarRendererWidgetSet.gwt.xml | 2 +- .../client/HtmlButtonRendererConnector.java | 14 + .../client/LinkRendererConnector.java | 14 + .../client/renderers/HtmlButtonRenderer.java | 20 + .../client/renderers/LinkRenderer.java | 18 + .../StringDistributionBarRenderer.java | 56 +-- .../renderers/HtmlButtonRenderer.java | 14 + .../renderers/LinkRenderer.java | 14 + .../hawkbit/ui/rollout/RolloutListGrid.java | 358 ++++++++++++++++++ 13 files changed, 604 insertions(+), 25 deletions(-) create mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml create mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java create mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java create mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml new file mode 100644 index 000000000..8ed0487c1 --- /dev/null +++ b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java new file mode 100644 index 000000000..8fc205120 --- /dev/null +++ b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java @@ -0,0 +1,17 @@ +package org.eclipse.hawkbit.ui.distributionbar.client; + + +import com.vaadin.client.connectors.AbstractRendererConnector; +import com.vaadin.shared.ui.Connect; + +@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer.class) +public class StringDistributionBarRendererConnector extends + AbstractRendererConnector { + + private static final long serialVersionUID = 7697966991925490786L; + + @Override + public org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer) super.getRenderer(); + } +} diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java new file mode 100644 index 000000000..3f7a4cb98 --- /dev/null +++ b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java @@ -0,0 +1,77 @@ +package org.eclipse.hawkbit.ui.distributionbar.client.renderers; + +import java.util.HashMap; +import java.util.Map; + +import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; + +import com.google.gwt.core.client.GWT; +import com.vaadin.client.renderers.WidgetRenderer; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class StringDistributionBarRenderer extends WidgetRenderer { + + @Override + public GwtDistributionBar createWidget() { + return GWT.create(GwtDistributionBar.class); + } + + @Override + public void render(RendererCellReference cell, String input, GwtDistributionBar widget) { + if (null != input) { + widget.setNumberOfParts(2); + Map map = formatData(input); + if (!map.isEmpty()) { + final Long notStartedTargetsCount = map.keySet().contains("NOTSTARTED") ? map.get("NOTSTARTED") : 0L; + final Long runningTargetsCount = map.keySet().contains("RUNNING") ? map.get("RUNNING") : 0L; + final Long scheduledTargetsCount = map.keySet().contains("SCHEDULED") ? map.get("SCHEDULED") : 0L; + final Long errorTargetsCount = map.keySet().contains("ERROR") ? map.get("ERROR") : 0L; + final Long finishedTargetsCount = map.keySet().contains("FINISHED") ? map.get("FINISHED") : 0L; + final Long cancelledTargetsCount = map.keySet().contains("CANCELLED") ? map.get("CANCELLED") : 0L; + if (isNoTargets(errorTargetsCount, notStartedTargetsCount, runningTargetsCount, scheduledTargetsCount, + finishedTargetsCount, cancelledTargetsCount)) { + setBarPartSize(widget, "SCHEDULED".toLowerCase(), 0, 0); + setBarPartSize(widget, "FINISHED".toString().toLowerCase(), 0, 1); + + } else { + widget.setNumberOfParts(6); + setBarPartSize(widget, "NOTSTARTED".toString().toLowerCase(), notStartedTargetsCount.intValue(), 0); + setBarPartSize(widget, "SCHEDULED".toString().toLowerCase(), scheduledTargetsCount.intValue(), 1); + setBarPartSize(widget, "RUNNING".toLowerCase(), scheduledTargetsCount.intValue(), 2); + setBarPartSize(widget, "ERROR".toLowerCase(), errorTargetsCount.intValue(), 3); + setBarPartSize(widget, "FINISHED".toLowerCase(), finishedTargetsCount.intValue(), 4); + setBarPartSize(widget, "CANCELLED".toLowerCase(), cancelledTargetsCount.intValue(), 5); + } + } + widget.updateParts(); + } + } + + private Map formatData(String input) { + Map details = new HashMap<>(); + String[] tempData = input.split(","); + for (String statusWithCount : tempData) { + String[] statusWithCountList = statusWithCount.split(":"); + details.put(statusWithCountList[0], new Long(statusWithCountList[1])); + } + return details; + } + + private static boolean isNoTargets(Long errorTargetsCount, Long notStartedTargetsCount, Long runningTargetsCount, + Long scheduledTargetsCount, Long finishedTargetsCount, Long cancelledTargetsCount) { + if (errorTargetsCount == 0 && notStartedTargetsCount == 0 && runningTargetsCount == 0 + && scheduledTargetsCount == 0 && finishedTargetsCount == 0 && cancelledTargetsCount == 0) { + return true; + } + return false; + } + + public void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, + final int index) { + bar.setPartSize(index, count); + bar.setPartTooltip(index, statusName); + // check thi::: + bar.setPartStyleName(index, index, "status-bar-part-" + statusName); + } + +} \ No newline at end of file diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java new file mode 100644 index 000000000..4a8e3ff73 --- /dev/null +++ b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java @@ -0,0 +1,18 @@ +package org.eclipse.hawkbit.ui.distributionbar.renderers; + + +import com.vaadin.ui.Grid.AbstractRenderer; + +public class StringDistributionBarRenderer extends AbstractRenderer { + private static final long serialVersionUID = -4543220859821576209L; + + /** + * Creates a new text renderer + */ + public StringDistributionBarRenderer() { + super(String.class, null); + } + + +} + diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml index 7ac135682..989054165 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml @@ -13,5 +13,5 @@ - + diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java new file mode 100644 index 000000000..78f2378e3 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java @@ -0,0 +1,14 @@ +package org.eclipse.hawkbit.ui.distributionbar.client; + +import com.vaadin.client.connectors.ButtonRendererConnector; +import com.vaadin.shared.ui.Connect; + +@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer.class) +public class HtmlButtonRendererConnector extends ButtonRendererConnector { + private static final long serialVersionUID = 7987417436367399331L; + + @Override + public org.eclipse.hawkbit.ui.distributionbar.client.renderers.HtmlButtonRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.HtmlButtonRenderer) super.getRenderer(); + } +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java new file mode 100644 index 000000000..3c23ff0bb --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java @@ -0,0 +1,14 @@ +package org.eclipse.hawkbit.ui.distributionbar.client; + +import com.vaadin.client.connectors.ButtonRendererConnector; +import com.vaadin.shared.ui.Connect; + +@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer.class) +public class LinkRendererConnector extends ButtonRendererConnector { + private static final long serialVersionUID = 7987417436367399331L; + + @Override + public org.eclipse.hawkbit.ui.distributionbar.client.renderers.LinkRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.LinkRenderer) super.getRenderer(); + } +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java new file mode 100644 index 000000000..14c67e6d4 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java @@ -0,0 +1,20 @@ +package org.eclipse.hawkbit.ui.distributionbar.client.renderers; + +import com.google.gwt.user.client.ui.Button; +import com.vaadin.client.renderers.ButtonRenderer; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class HtmlButtonRenderer extends ButtonRenderer { + @Override + public void render(RendererCellReference cell, String text, Button button) { + if (text != null) { + button.setHTML(text); + } + button.setStylePrimaryName("v-button"); + button.addStyleName( + "tiny v-button-tiny borderless v-button-borderless icon-only v-button-icon-only button-no-border v-button-button-no-border"); + // this is to allow the button to disappear, if the text is null + button.setVisible(text != null); + button.getElement().setId("rollout.action.button.id"); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java new file mode 100644 index 000000000..f20b20ec9 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java @@ -0,0 +1,18 @@ +package org.eclipse.hawkbit.ui.distributionbar.client.renderers; + +import com.google.gwt.user.client.ui.Button; +import com.vaadin.client.renderers.ButtonRenderer; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class LinkRenderer extends ButtonRenderer { + @Override + public void render(RendererCellReference cell, String text, Button button) { + button.setText(text); + button.setStylePrimaryName("v-button"); + button.addStyleName( + "borderless v-button-borderless small v-button-small on-focus-no-border v-button-on-focus-no-border link v-button-link"); + // this is to allow the button to disappear, if the text is null + button.setVisible(text != null); + button.getElement().setId("rollout.action.button.id"); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java index 3f7a4cb98..b2861ad75 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java @@ -1,7 +1,9 @@ package org.eclipse.hawkbit.ui.distributionbar.client.renderers; +import java.util.Collection; import java.util.HashMap; import java.util.Map; +import java.util.Map.Entry; import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; @@ -20,27 +22,23 @@ public class StringDistributionBarRenderer extends WidgetRenderer map = formatData(input); if (!map.isEmpty()) { - final Long notStartedTargetsCount = map.keySet().contains("NOTSTARTED") ? map.get("NOTSTARTED") : 0L; - final Long runningTargetsCount = map.keySet().contains("RUNNING") ? map.get("RUNNING") : 0L; - final Long scheduledTargetsCount = map.keySet().contains("SCHEDULED") ? map.get("SCHEDULED") : 0L; - final Long errorTargetsCount = map.keySet().contains("ERROR") ? map.get("ERROR") : 0L; - final Long finishedTargetsCount = map.keySet().contains("FINISHED") ? map.get("FINISHED") : 0L; - final Long cancelledTargetsCount = map.keySet().contains("CANCELLED") ? map.get("CANCELLED") : 0L; - if (isNoTargets(errorTargetsCount, notStartedTargetsCount, runningTargetsCount, scheduledTargetsCount, - finishedTargetsCount, cancelledTargetsCount)) { + if (isNoTargets(map.values())) { setBarPartSize(widget, "SCHEDULED".toLowerCase(), 0, 0); - setBarPartSize(widget, "FINISHED".toString().toLowerCase(), 0, 1); + setBarPartSize(widget, "FINISHED".toLowerCase(), 0, 1); } else { - widget.setNumberOfParts(6); - setBarPartSize(widget, "NOTSTARTED".toString().toLowerCase(), notStartedTargetsCount.intValue(), 0); - setBarPartSize(widget, "SCHEDULED".toString().toLowerCase(), scheduledTargetsCount.intValue(), 1); - setBarPartSize(widget, "RUNNING".toLowerCase(), scheduledTargetsCount.intValue(), 2); - setBarPartSize(widget, "ERROR".toLowerCase(), errorTargetsCount.intValue(), 3); - setBarPartSize(widget, "FINISHED".toLowerCase(), finishedTargetsCount.intValue(), 4); - setBarPartSize(widget, "CANCELLED".toLowerCase(), cancelledTargetsCount.intValue(), 5); + widget.setNumberOfParts(getNumberOfParts(map.values())); + int index = 0; + for (Entry entryVal : map.entrySet()) { + Long count = entryVal.getValue(); + if (count > 0) { + setBarPartSize(widget, entryVal.getKey().toLowerCase(), count.intValue(), index); + index++; + } + } } } widget.updateParts(); @@ -57,20 +55,30 @@ public class StringDistributionBarRenderer extends WidgetRenderer values) { + int count = 0; + for (Long val : values) { + if (val != 0) { + count++; + } } - return false; + return count; } - public void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, + private boolean isNoTargets(Collection values) { + for (Long count : values) { + if (count != 0) { + return false; + } + } + return true; + } + + + private void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, final int index) { bar.setPartSize(index, count); bar.setPartTooltip(index, statusName); - // check thi::: bar.setPartStyleName(index, index, "status-bar-part-" + statusName); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java new file mode 100644 index 000000000..0ac480fb2 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java @@ -0,0 +1,14 @@ +package org.eclipse.hawkbit.ui.distributionbar.renderers; + +import com.vaadin.ui.renderers.ButtonRenderer; + +public class HtmlButtonRenderer extends ButtonRenderer { + private static final long serialVersionUID = -1242995370043404892L; + public HtmlButtonRenderer() { + super(); + } + public HtmlButtonRenderer(RendererClickListener listener) { + super(listener); + } + +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java new file mode 100644 index 000000000..f007b6bf8 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java @@ -0,0 +1,14 @@ +package org.eclipse.hawkbit.ui.distributionbar.renderers; + +import com.vaadin.ui.renderers.ButtonRenderer; + +public class LinkRenderer extends ButtonRenderer { + private static final long serialVersionUID = -1242995370043404892L; + public LinkRenderer() { + super(); + } + public LinkRenderer(RendererClickListener listener) { + super(listener); + } + +} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java new file mode 100644 index 000000000..0df6f9455 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -0,0 +1,358 @@ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.PostConstruct; + +import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; +import org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer; +import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; +import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; +import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; +import org.vaadin.peter.contextmenu.ContextMenu; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; + +import com.vaadin.data.Container; +import com.vaadin.data.Item; +import com.vaadin.data.util.GeneratedPropertyContainer; +import com.vaadin.data.util.PropertyValueGenerator; +import com.vaadin.data.util.converter.Converter; +import com.vaadin.server.AbstractClientConnector; +import com.vaadin.server.FontAwesome; +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.HtmlRenderer; + +@SpringComponent +@ViewScope +public class RolloutListGrid extends AbstractSimpleGrid { + private static final long serialVersionUID = 4060904914954370524L; + + @Autowired + private I18N i18n; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + @Override + @PostConstruct + protected void init() { + super.init(); + } + + @Override + protected String getTableId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + LazyQueryContainer lqc = new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + + final LazyQueryContainer rolloutGridContainer = lqc; + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TARGETFILTERQUERY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Integer.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + TotalTargetCountStatus.class, null, false, false); + return new GeneratedPropertyContainer(lqc); + } + + @Override + protected void addContainerProperties() { + GeneratedPropertyContainer gpc = (GeneratedPropertyContainer) getContainerDataSource(); + gpc.addGeneratedProperty(SPUILabelDefinitions.ACTION, new FontIconGenerator(FontAwesome.CIRCLE_O)); + } + + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + columnList.add(SPUILabelDefinitions.ACTION); + // columnList.add("statusTotalCountMap"); + setColumnOrder(columnList.toArray()); + } + + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_TARGETFILTERQUERY); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } + + @Override + protected void setColumnHeaderNames() { + getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setHeaderCaption(i18n.get("header.distributionset")); + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setHeaderCaption(i18n.get("header.numberofgroups")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); + getColumn(SPUILabelDefinitions.ACTION).setHeaderCaption(i18n.get("upload.action")); + } + + @Override + protected void setColumnExpandRatio() { + getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(600); + + getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); + getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); + + + } + + @Override + protected void addColumnRenderes() { + setEditorEnabled(true); + addDetailStatusColumn(); + addStatusCoulmn(); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> OnClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); + } + + private void onClickOfRolloutName(RendererClickEvent event) { + } + + private void OnClickOfActionBtn(RendererClickEvent event) { + final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); + contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); + contextMenu.open(event.getClientX(), event.getClientY()); + } + + private ContextMenu createContextMenu(final Long rolloutId) { + final Item row = getContainerDataSource().getItem(rolloutId); + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) + .getValue(); + final ContextMenu context = new ContextMenu(); + context.addItemClickListener(event -> menuItemClicked(event)); + if (rolloutStatus == RolloutStatus.READY) { + final ContextMenuItem startItem = context.addItem("Start"); + startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); + } else if (rolloutStatus == RolloutStatus.RUNNING) { + final ContextMenuItem pauseItem = context.addItem("Pause"); + pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); + } else if (rolloutStatus == RolloutStatus.PAUSED) { + final ContextMenuItem resumeItem = context.addItem("Resume"); + resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); + } else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) { + return context; + } + if (permissionChecker.hasRolloutUpdatePermission()) { + final ContextMenuItem cancelItem = context.addItem("Update"); + cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); + } + return context; + } + + private void menuItemClicked(final ContextMenuItemClickEvent event) { + } + + private void addDetailStatusColumn() { + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( + new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), + new Converter() { + private static final long serialVersionUID = 2660476405836705932L; + + @Override + public TotalTargetCountStatus convertToModel(String value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return getFormattedString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + + private void addStatusCoulmn() { + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), + new Converter() { + private static final long serialVersionUID = 1L; + + @Override + public RolloutStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, + final Class targetType, final Locale locale) { + String result = null; + switch (value) { + case FINISHED: + result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; + break; + case PAUSED: + result = "
" + FontAwesome.PAUSE.getHtml() + "
"; + break; + case RUNNING: + result = "
"; + break; + case READY: + result = "
" + + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; + break; + case STOPPED: + result = "
" + FontAwesome.STOP.getHtml() + "
"; + break; + case CREATING: + result = "
"; + break; + case STARTING: + result = "
"; + break; + case ERROR_CREATING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + case ERROR_STARTING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + default: + break; + } + return result; + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + private String getFormattedString(Map details) { + StringBuilder val = new StringBuilder(); + String finalVal = null; + if (null != details && !details.isEmpty()) { + for (Entry entry : details.entrySet()) { + val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); + } + finalVal = val.substring(0, val.length() - 1); + } + return finalVal; + } + + public final class FontIconGenerator extends PropertyValueGenerator { + + private static final long serialVersionUID = 2544026030795375748L; + private final FontAwesome fontIcon; + + public FontIconGenerator(FontAwesome icon) { + this.fontIcon = icon; + } + + @Override + public String getValue(Item item, Object itemId, Object propertyId) { + return fontIcon.getHtml(); + } + + @Override + public Class getType() { + return String.class; + } + } +} From 46ad5da0cc622a9f92805689821c83a2a52f35a8 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Thu, 18 Feb 2016 09:47:52 +0100 Subject: [PATCH 03/17] Rollout list view - table to grid initial commit Signed-off-by: asharani-murugesh --- .../DistributionBarRendererWidgetSet.gwt.xml | 7 - ...tringDistributionBarRendererConnector.java | 17 - .../StringDistributionBarRenderer.java | 77 --- .../StringDistributionBarRenderer.java | 18 - hawkbit-ui/pom.xml | 26 +- .../eclipse/hawkbit/ui/AppWidgetSet.gwt.xml | 43 +- .../StringDistributionBarRenderer.java | 2 +- .../ui/rollout/AbstractSimpleGrid.java | 98 ++++ .../ui/rollout/AbstractSimpleTableLayout.java | 17 +- .../ui/rollout/DistributionBarDetails.java | 23 + .../hawkbit/ui/rollout/ProxyRollout.java | 36 ++ .../rollout/RolloutGroupTargetsListTable.java | 59 +-- .../rollout/RolloutGroupTargetsListView.java | 5 +- .../ui/rollout/RolloutGroupsListView.java | 7 +- .../hawkbit/ui/rollout/RolloutListGrid.java | 151 +++++- .../hawkbit/ui/rollout/RolloutListGrid2.java | 465 ++++++++++++++++++ .../hawkbit/ui/rollout/RolloutListGrid3.java | 465 ++++++++++++++++++ .../hawkbit/ui/rollout/RolloutListView.java | 5 +- .../ui/utils/SPUILabelDefinitions.java | 8 + .../themes/hawkbit/customstyles/rollout.scss | 3 + .../customstyles/statusprogressbar.scss | 5 + .../VAADIN/themes/hawkbit/hawkbittheme.scss | 8 +- pom.xml | 5 + 23 files changed, 1347 insertions(+), 203 deletions(-) delete mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml delete mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java delete mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java delete mode 100644 hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid2.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid3.java diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml deleted file mode 100644 index 8ed0487c1..000000000 --- a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java deleted file mode 100644 index 8fc205120..000000000 --- a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.eclipse.hawkbit.ui.distributionbar.client; - - -import com.vaadin.client.connectors.AbstractRendererConnector; -import com.vaadin.shared.ui.Connect; - -@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer.class) -public class StringDistributionBarRendererConnector extends - AbstractRendererConnector { - - private static final long serialVersionUID = 7697966991925490786L; - - @Override - public org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer getRenderer() { - return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer) super.getRenderer(); - } -} diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java deleted file mode 100644 index 3f7a4cb98..000000000 --- a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.eclipse.hawkbit.ui.distributionbar.client.renderers; - -import java.util.HashMap; -import java.util.Map; - -import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; - -import com.google.gwt.core.client.GWT; -import com.vaadin.client.renderers.WidgetRenderer; -import com.vaadin.client.widget.grid.RendererCellReference; - -public class StringDistributionBarRenderer extends WidgetRenderer { - - @Override - public GwtDistributionBar createWidget() { - return GWT.create(GwtDistributionBar.class); - } - - @Override - public void render(RendererCellReference cell, String input, GwtDistributionBar widget) { - if (null != input) { - widget.setNumberOfParts(2); - Map map = formatData(input); - if (!map.isEmpty()) { - final Long notStartedTargetsCount = map.keySet().contains("NOTSTARTED") ? map.get("NOTSTARTED") : 0L; - final Long runningTargetsCount = map.keySet().contains("RUNNING") ? map.get("RUNNING") : 0L; - final Long scheduledTargetsCount = map.keySet().contains("SCHEDULED") ? map.get("SCHEDULED") : 0L; - final Long errorTargetsCount = map.keySet().contains("ERROR") ? map.get("ERROR") : 0L; - final Long finishedTargetsCount = map.keySet().contains("FINISHED") ? map.get("FINISHED") : 0L; - final Long cancelledTargetsCount = map.keySet().contains("CANCELLED") ? map.get("CANCELLED") : 0L; - if (isNoTargets(errorTargetsCount, notStartedTargetsCount, runningTargetsCount, scheduledTargetsCount, - finishedTargetsCount, cancelledTargetsCount)) { - setBarPartSize(widget, "SCHEDULED".toLowerCase(), 0, 0); - setBarPartSize(widget, "FINISHED".toString().toLowerCase(), 0, 1); - - } else { - widget.setNumberOfParts(6); - setBarPartSize(widget, "NOTSTARTED".toString().toLowerCase(), notStartedTargetsCount.intValue(), 0); - setBarPartSize(widget, "SCHEDULED".toString().toLowerCase(), scheduledTargetsCount.intValue(), 1); - setBarPartSize(widget, "RUNNING".toLowerCase(), scheduledTargetsCount.intValue(), 2); - setBarPartSize(widget, "ERROR".toLowerCase(), errorTargetsCount.intValue(), 3); - setBarPartSize(widget, "FINISHED".toLowerCase(), finishedTargetsCount.intValue(), 4); - setBarPartSize(widget, "CANCELLED".toLowerCase(), cancelledTargetsCount.intValue(), 5); - } - } - widget.updateParts(); - } - } - - private Map formatData(String input) { - Map details = new HashMap<>(); - String[] tempData = input.split(","); - for (String statusWithCount : tempData) { - String[] statusWithCountList = statusWithCount.split(":"); - details.put(statusWithCountList[0], new Long(statusWithCountList[1])); - } - return details; - } - - private static boolean isNoTargets(Long errorTargetsCount, Long notStartedTargetsCount, Long runningTargetsCount, - Long scheduledTargetsCount, Long finishedTargetsCount, Long cancelledTargetsCount) { - if (errorTargetsCount == 0 && notStartedTargetsCount == 0 && runningTargetsCount == 0 - && scheduledTargetsCount == 0 && finishedTargetsCount == 0 && cancelledTargetsCount == 0) { - return true; - } - return false; - } - - public void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, - final int index) { - bar.setPartSize(index, count); - bar.setPartTooltip(index, statusName); - // check thi::: - bar.setPartStyleName(index, index, "status-bar-part-" + statusName); - } - -} \ No newline at end of file diff --git a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java b/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java deleted file mode 100644 index 4a8e3ff73..000000000 --- a/hawkbit-distribution-bar/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.eclipse.hawkbit.ui.distributionbar.renderers; - - -import com.vaadin.ui.Grid.AbstractRenderer; - -public class StringDistributionBarRenderer extends AbstractRenderer { - private static final long serialVersionUID = -4543220859821576209L; - - /** - * Creates a new text renderer - */ - public StringDistributionBarRenderer() { - super(String.class, null); - } - - -} - diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index 0bd083e36..47ff990e5 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -78,6 +78,25 @@ true + + org.apache.maven.plugins + maven-jar-plugin + + + true + + true + true + + + + DistributionBarRenderer + 1 + org.eclipse.hawkbit.ui.distributionbar.DistributionBarRendererWidgetSet + + + + @@ -173,8 +192,11 @@ com.vaadin vaadin-server - - + + com.vaadin + vaadin-client + + com.vaadin vaadin-push diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml index 020ce7a77..3d55d1c75 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml @@ -1,14 +1,8 @@ - + - + + + + + + + + + + + + + + + + + + - - - - - - - diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java index b2861ad75..94cb35299 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java @@ -22,7 +22,7 @@ public class StringDistributionBarRenderer extends WidgetRenderer map = formatData(input); if (!map.isEmpty()) { if (isNoTargets(map.values())) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java new file mode 100644 index 000000000..0f993c2ab --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java @@ -0,0 +1,98 @@ +/** + * Copyright (c) 2015 Bosch Software Innovations GmbH and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + */ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.TableColumn; + +import com.vaadin.data.Container; +import com.vaadin.data.Container.Indexed; +import com.vaadin.ui.Grid; +import com.vaadin.ui.Table; +import com.vaadin.ui.Grid.Column; +import com.vaadin.ui.themes.ValoTheme; + +/** + * Abstract table class. + * + */ +public abstract class AbstractSimpleGrid extends Grid { + + private static final long serialVersionUID = 4856562746502217630L; + + /** + * Initialize the components. + */ + protected void init() { + setSizeFull(); + setImmediate(true); + setId(getTableId()); + setHeight("200px"); + setWidth("200px"); + + addStyleName("sp-table rollout-table"); + addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); + addStyleName(ValoTheme.TABLE_SMALL); + + addNewContainerDS(); + +// addValueChangeListener(event -> onValueChange()); +// setPageLength(SPUIDefinitions.PAGE_SIZE); + setSelectionMode(SelectionMode.NONE); +// setColumnCollapsingAllowed(true); + addColumnRenderes(); + setColumnReorderingAllowed(true); + } + + + + + public void addNewContainerDS() { + final Container container = createContainer(); + setContainerDataSource((Indexed) container); + addContainerProperties(); + setColumnProperties(); + setColumnHeaderNames(); + setColumnExpandRatio(); + + //Allow column hiding + for (Column c : getColumns()) { + c.setHidable(true); + } + setHiddenColumns(); + + int size = 0; + if (container != null) { + size = container.size(); + } + if (size == 0) { + setData(SPUIDefinitions.NO_DATA); + } + } + + protected abstract void setColumnExpandRatio() ; + + protected abstract void setColumnHeaderNames() ; + + protected abstract String getTableId(); + + protected abstract Container createContainer(); + + protected abstract void addContainerProperties(); + + protected abstract void setColumnProperties() ; + + + protected abstract void addColumnRenderes() ; + + protected abstract void setHiddenColumns(); +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java index 560e4040e..85eef5c65 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java @@ -29,10 +29,14 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { private AbstractSimpleTableHeader tableHeader; private AbstractSimpleTable table; + + private AbstractSimpleGrid grid; - protected void init(final AbstractSimpleTableHeader tableHeader, final AbstractSimpleTable table) { + + protected void init(final AbstractSimpleTableHeader tableHeader, final AbstractSimpleTable table,final AbstractSimpleGrid grid) { this.tableHeader = tableHeader; this.table = table; + this.grid = grid; buildLayout(); } @@ -50,9 +54,10 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { tableHeaderLayout.addComponent(tableHeader); tableHeaderLayout.setComponentAlignment(tableHeader, Alignment.TOP_CENTER); - tableHeaderLayout.addComponent(table); - tableHeaderLayout.setComponentAlignment(table, Alignment.TOP_CENTER); - tableHeaderLayout.setExpandRatio(table, 1.0f); + grid.setSizeFull(); + tableHeaderLayout.addComponent(grid); + tableHeaderLayout.setComponentAlignment(grid, Alignment.TOP_CENTER); + tableHeaderLayout.setExpandRatio(grid, 1.0f); addComponent(tableHeaderLayout); @@ -66,10 +71,6 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { } - /** - * @return - * - */ private HorizontalLayout createCountMessageComponent() { final HorizontalLayout rolloutGroupTargetsCountLayout = new HorizontalLayout(); final Label countMessageLabel = getCountMessageLabel(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java new file mode 100644 index 000000000..342b0eba1 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java @@ -0,0 +1,23 @@ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.HashMap; +import java.util.Map; + +public class DistributionBarDetails { + + private Map details = new HashMap<>(); + + + public DistributionBarDetails( Map details){ + this.details = details; + } + + public Map getDetails() { + return details; + } + + public void setDetails(Map details) { + this.details = details; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java index efe065b85..85efe464b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java @@ -8,8 +8,14 @@ */ package org.eclipse.hawkbit.ui.rollout; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.hawkbit.repository.model.Rollout; +import com.vaadin.server.FontAwesome; +import com.vaadin.ui.Label; + /** * Proxy rollout with suctome properties. * @@ -45,6 +51,13 @@ public class ProxyRollout extends Rollout { private Boolean isActionRecieved = Boolean.FALSE; private String totalTargetsCount; + + //TODO remove this + private DistributionBarDetails distributionBarDetails ; + + //TODO remove this + private Map statusTotalCountMap = new HashMap<>(); + /** * @return the distributionSetNameVersion @@ -255,4 +268,27 @@ public class ProxyRollout extends Rollout { public void setTotalTargetsCount(final String totalTargetsCount) { this.totalTargetsCount = totalTargetsCount; } + + public Map getStatusTotalCountMap() { + return statusTotalCountMap; + } + + public void setStatusTotalCountMap(Map statusTotalCountMap) { + this.statusTotalCountMap = statusTotalCountMap; + } + + public DistributionBarDetails getDistributionBarDetails() { + return distributionBarDetails; + } + + public void setDistributionBarDetails(DistributionBarDetails distributionBarDetails) { + this.distributionBarDetails = distributionBarDetails; + } + + public String getAction() { + return FontAwesome.CIRCLE_O.getHtml(); + } + + + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java index 5cb8543ac..a31474079 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java @@ -197,33 +197,36 @@ public class RolloutGroupTargetsListTable extends AbstractSimpleTable { } private void setRolloutStatusIcon(final Status targetUpdateStatus, final Label statusLabel) { - switch (targetUpdateStatus) { - case ERROR: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconRed"); - break; - case SCHEDULED: - statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); - statusLabel.addStyleName("statusIconBlue"); - break; - case FINISHED: - statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconGreen"); - break; - case RUNNING: - case RETRIEVED: - case WARNING: - case DOWNLOAD: - statusLabel.setValue(FontAwesome.ADJUST.getHtml()); - statusLabel.addStyleName("statusIconYellow"); - break; - case CANCELED: - case CANCELING: - statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconPending"); - break; - default: - break; - } + switch (targetUpdateStatus) { + case ERROR: + statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconRed"); + break; + case SCHEDULED: + statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); + statusLabel.addStyleName("statusIconBlue"); + break; + case FINISHED: + statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconGreen"); + break; + case RUNNING: + case RETRIEVED: + case WARNING: + case DOWNLOAD: + statusLabel.setValue(FontAwesome.ADJUST.getHtml()); + statusLabel.addStyleName("statusIconYellow"); + break; + case CANCELED: + statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconPending"); + break; + case CANCELING: + statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); + statusLabel.addStyleName("statusIconGreen"); + break; + default: + break; + } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java index 40b8f6eb7..295b340f9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java @@ -33,13 +33,14 @@ public class RolloutGroupTargetsListView extends AbstractSimpleTableLayout { @Autowired private RolloutGroupTargetsCountLabelMessage rolloutGroupTargetsCountLabelMessage; - + @Autowired + private RolloutListGrid3 rolloutListGrid; /** * Initialization of Rollout group component. */ @PostConstruct protected void init() { - super.init(rolloutGroupTargetsListHeader, rolloutGroupTargetsListTable); + super.init(rolloutGroupTargetsListHeader, rolloutGroupTargetsListTable,rolloutListGrid); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java index 0725da6ee..c9ac1f9be 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java @@ -32,9 +32,14 @@ public class RolloutGroupsListView extends AbstractSimpleTableLayout { @Autowired private RolloutGroupListTable rolloutGroupListTable; + + @Autowired + private RolloutListGrid2 rolloutListGrid; + + @PostConstruct protected void init() { - super.init(rolloutGroupListHeader, rolloutGroupListTable); + super.init(rolloutGroupListHeader, rolloutGroupListTable,rolloutListGrid); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index 0df6f9455..49c956730 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -1,14 +1,19 @@ package org.eclipse.hawkbit.ui.rollout; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; @@ -16,10 +21,13 @@ import org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; +import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; +import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -27,16 +35,20 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.peter.contextmenu.ContextMenu; import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; +import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; import com.vaadin.data.Container; import com.vaadin.data.Item; -import com.vaadin.data.util.GeneratedPropertyContainer; import com.vaadin.data.util.PropertyValueGenerator; import com.vaadin.data.util.converter.Converter; import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.UI; +import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; import com.vaadin.ui.renderers.HtmlRenderer; @@ -48,6 +60,21 @@ public class RolloutListGrid extends AbstractSimpleGrid { @Autowired private I18N i18n; + @Autowired + private transient EventBus.SessionEventBus eventBus; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + @Autowired private transient SpPermissionChecker permissionChecker; @@ -55,6 +82,42 @@ public class RolloutListGrid extends AbstractSimpleGrid { @PostConstruct protected void init() { super.init(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + if (event == RolloutEvent.FILTER_BY_TEXT || event == RolloutEvent.CREATE_ROLLOUT + || event == RolloutEvent.UPDATE_ROLLOUT || event == RolloutEvent.SHOW_ROLLOUTS) { + refreshTable(); + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the table. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + if (null != rollout.getRolloutGroups() && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } } @Override @@ -65,10 +128,13 @@ public class RolloutListGrid extends AbstractSimpleGrid { @Override protected Container createContainer() { final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - LazyQueryContainer lqc = new LazyQueryContainer( + return new LazyQueryContainer( new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } - final LazyQueryContainer rolloutGridContainer = lqc; + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); @@ -76,9 +142,6 @@ public class RolloutListGrid extends AbstractSimpleGrid { false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, false); - - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TARGETFILTERQUERY, String.class, null, false, - false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, false); @@ -95,13 +158,10 @@ public class RolloutListGrid extends AbstractSimpleGrid { rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, TotalTargetCountStatus.class, null, false, false); - return new GeneratedPropertyContainer(lqc); - } - @Override - protected void addContainerProperties() { - GeneratedPropertyContainer gpc = (GeneratedPropertyContainer) getContainerDataSource(); - gpc.addGeneratedProperty(SPUILabelDefinitions.ACTION, new FontIconGenerator(FontAwesome.CIRCLE_O)); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, + FontAwesome.CIRCLE_O.getHtml(), false, false); + } @Override @@ -119,8 +179,25 @@ public class RolloutListGrid extends AbstractSimpleGrid { columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnList.add(SPUILabelDefinitions.VAR_DESC); columnList.add(SPUILabelDefinitions.ACTION); - // columnList.add("statusTotalCountMap"); setColumnOrder(columnList.toArray()); + + alignColumns(); + } + + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; + + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); } @Override @@ -132,7 +209,6 @@ public class RolloutListGrid extends AbstractSimpleGrid { columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_TARGETFILTERQUERY); for (Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } @@ -165,19 +241,22 @@ public class RolloutListGrid extends AbstractSimpleGrid { getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(95); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(600); getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); - } @Override @@ -185,14 +264,19 @@ public class RolloutListGrid extends AbstractSimpleGrid { setEditorEnabled(true); addDetailStatusColumn(); addStatusCoulmn(); - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> OnClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); } private void onClickOfRolloutName(RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); } - private void OnClickOfActionBtn(RendererClickEvent event) { + private void onClickOfActionBtn(RendererClickEvent event) { final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); contextMenu.open(event.getClientX(), event.getClientY()); @@ -223,11 +307,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { return context; } - private void menuItemClicked(final ContextMenuItemClickEvent event) { - } - private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), new Converter() { @@ -259,7 +339,6 @@ public class RolloutListGrid extends AbstractSimpleGrid { }); } - private void addStatusCoulmn() { getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), new Converter() { @@ -336,6 +415,33 @@ public class RolloutListGrid extends AbstractSimpleGrid { return finalVal; } + private void menuItemClicked(final ContextMenuItemClickEvent event) { + final ContextMenuItem item = (ContextMenuItem) event.getSource(); + final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); + final Item row = getContainerDataSource().getItem(contextMenuData.getRolloutId()); + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + if (contextMenuData.getAction() == ACTION.PAUSE) { + rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.RESUME) { + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.START) { + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.UPDATE) { + addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + addTargetWindow.setCaption(i18n.get("caption.update.rollout")); + UI.getCurrent().addWindow(addTargetWindow); + addTargetWindow.setVisible(Boolean.TRUE); + } + } + + private void refreshTable() { + ((LazyQueryContainer) getContainerDataSource()).refresh(); + } + public final class FontIconGenerator extends PropertyValueGenerator { private static final long serialVersionUID = 2544026030795375748L; @@ -355,4 +461,5 @@ public class RolloutListGrid extends AbstractSimpleGrid { return String.class; } } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid2.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid2.java new file mode 100644 index 000000000..a712b8601 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid2.java @@ -0,0 +1,465 @@ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; +import org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer; +import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; +import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; +import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.UINotification; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; +import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; +import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; +import org.vaadin.peter.contextmenu.ContextMenu; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; +import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; + +import com.vaadin.data.Container; +import com.vaadin.data.Item; +import com.vaadin.data.util.PropertyValueGenerator; +import com.vaadin.data.util.converter.Converter; +import com.vaadin.server.AbstractClientConnector; +import com.vaadin.server.FontAwesome; +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.UI; +import com.vaadin.ui.Window; +import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.HtmlRenderer; + +@SpringComponent +@ViewScope +public class RolloutListGrid2 extends AbstractSimpleGrid { + private static final long serialVersionUID = 4060904914954370524L; + + @Autowired + private I18N i18n; + + @Autowired + private transient EventBus.SessionEventBus eventBus; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + @Override + @PostConstruct + protected void init() { + super.init(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + if (event == RolloutEvent.FILTER_BY_TEXT || event == RolloutEvent.CREATE_ROLLOUT + || event == RolloutEvent.UPDATE_ROLLOUT || event == RolloutEvent.SHOW_ROLLOUTS) { + refreshTable(); + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the table. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + if (null != rollout.getRolloutGroups() && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + } + + @Override + protected String getTableId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Integer.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + TotalTargetCountStatus.class, null, false, false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, + FontAwesome.CIRCLE_O.getHtml(), false, false); + + } + + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + columnList.add(SPUILabelDefinitions.ACTION); + setColumnOrder(columnList.toArray()); + + alignColumns(); + } + + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; + + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } + + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } + + @Override + protected void setColumnHeaderNames() { + getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setHeaderCaption(i18n.get("header.distributionset")); + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setHeaderCaption(i18n.get("header.numberofgroups")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); + getColumn(SPUILabelDefinitions.ACTION).setHeaderCaption(i18n.get("upload.action")); + } + + @Override + protected void setColumnExpandRatio() { + getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(95); + + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(600); + + getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); + getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); + + } + + @Override + protected void addColumnRenderes() { + setEditorEnabled(true); + addDetailStatusColumn(); + addStatusCoulmn(); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); + } + + private void onClickOfRolloutName(RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); + } + + private void onClickOfActionBtn(RendererClickEvent event) { + final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); + contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); + contextMenu.open(event.getClientX(), event.getClientY()); + } + + private ContextMenu createContextMenu(final Long rolloutId) { + final Item row = getContainerDataSource().getItem(rolloutId); + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) + .getValue(); + final ContextMenu context = new ContextMenu(); + context.addItemClickListener(event -> menuItemClicked(event)); + if (rolloutStatus == RolloutStatus.READY) { + final ContextMenuItem startItem = context.addItem("Start"); + startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); + } else if (rolloutStatus == RolloutStatus.RUNNING) { + final ContextMenuItem pauseItem = context.addItem("Pause"); + pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); + } else if (rolloutStatus == RolloutStatus.PAUSED) { + final ContextMenuItem resumeItem = context.addItem("Resume"); + resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); + } else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) { + return context; + } + if (permissionChecker.hasRolloutUpdatePermission()) { + final ContextMenuItem cancelItem = context.addItem("Update"); + cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); + } + return context; + } + + private void addDetailStatusColumn() { + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( + new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), + new Converter() { + private static final long serialVersionUID = 2660476405836705932L; + + @Override + public TotalTargetCountStatus convertToModel(String value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return getFormattedString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + private void addStatusCoulmn() { + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), + new Converter() { + private static final long serialVersionUID = 1L; + + @Override + public RolloutStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, + final Class targetType, final Locale locale) { + String result = null; + switch (value) { + case FINISHED: + result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; + break; + case PAUSED: + result = "
" + FontAwesome.PAUSE.getHtml() + "
"; + break; + case RUNNING: + result = "
"; + break; + case READY: + result = "
" + + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; + break; + case STOPPED: + result = "
" + FontAwesome.STOP.getHtml() + "
"; + break; + case CREATING: + result = "
"; + break; + case STARTING: + result = "
"; + break; + case ERROR_CREATING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + case ERROR_STARTING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + default: + break; + } + return result; + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + private String getFormattedString(Map details) { + StringBuilder val = new StringBuilder(); + String finalVal = null; + if (null != details && !details.isEmpty()) { + for (Entry entry : details.entrySet()) { + val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); + } + finalVal = val.substring(0, val.length() - 1); + } + return finalVal; + } + + private void menuItemClicked(final ContextMenuItemClickEvent event) { + final ContextMenuItem item = (ContextMenuItem) event.getSource(); + final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); + final Item row = getContainerDataSource().getItem(contextMenuData.getRolloutId()); + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + if (contextMenuData.getAction() == ACTION.PAUSE) { + rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.RESUME) { + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.START) { + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.UPDATE) { + addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + addTargetWindow.setCaption(i18n.get("caption.update.rollout")); + UI.getCurrent().addWindow(addTargetWindow); + addTargetWindow.setVisible(Boolean.TRUE); + } + } + + private void refreshTable() { + ((LazyQueryContainer) getContainerDataSource()).refresh(); + } + + public final class FontIconGenerator extends PropertyValueGenerator { + + private static final long serialVersionUID = 2544026030795375748L; + private final FontAwesome fontIcon; + + public FontIconGenerator(FontAwesome icon) { + this.fontIcon = icon; + } + + @Override + public String getValue(Item item, Object itemId, Object propertyId) { + return fontIcon.getHtml(); + } + + @Override + public Class getType() { + return String.class; + } + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid3.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid3.java new file mode 100644 index 000000000..6a16e7a2b --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid3.java @@ -0,0 +1,465 @@ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; + +import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; +import org.eclipse.hawkbit.repository.RolloutManagement; +import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.repository.model.Rollout; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; +import org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer; +import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; +import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; +import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; +import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; +import org.eclipse.hawkbit.ui.utils.I18N; +import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; +import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.UINotification; +import org.springframework.beans.factory.annotation.Autowired; +import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; +import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; +import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; +import org.vaadin.peter.contextmenu.ContextMenu; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; +import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; +import org.vaadin.spring.events.EventBus; +import org.vaadin.spring.events.EventScope; +import org.vaadin.spring.events.annotation.EventBusListenerMethod; + +import com.vaadin.data.Container; +import com.vaadin.data.Item; +import com.vaadin.data.util.PropertyValueGenerator; +import com.vaadin.data.util.converter.Converter; +import com.vaadin.server.AbstractClientConnector; +import com.vaadin.server.FontAwesome; +import com.vaadin.spring.annotation.SpringComponent; +import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.UI; +import com.vaadin.ui.Window; +import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.HtmlRenderer; + +@SpringComponent +@ViewScope +public class RolloutListGrid3 extends AbstractSimpleGrid { + private static final long serialVersionUID = 4060904914954370524L; + + @Autowired + private I18N i18n; + + @Autowired + private transient EventBus.SessionEventBus eventBus; + + @Autowired + private transient RolloutManagement rolloutManagement; + + @Autowired + private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; + + @Autowired + private UINotification uiNotification; + + @Autowired + private transient RolloutUIState rolloutUIState; + + @Autowired + private transient SpPermissionChecker permissionChecker; + + @Override + @PostConstruct + protected void init() { + super.init(); + eventBus.subscribe(this); + } + + @PreDestroy + void destroy() { + eventBus.unsubscribe(this); + } + + @EventBusListenerMethod(scope = EventScope.SESSION) + void onEvent(final RolloutEvent event) { + if (event == RolloutEvent.FILTER_BY_TEXT || event == RolloutEvent.CREATE_ROLLOUT + || event == RolloutEvent.UPDATE_ROLLOUT || event == RolloutEvent.SHOW_ROLLOUTS) { + refreshTable(); + } + } + + /** + * Handles the RolloutChangeEvent to refresh the item in the table. + * + * @param rolloutChangeEvent + * the event which contains the rollout which has been changed + */ + @SuppressWarnings("unchecked") + @EventBusListenerMethod(scope = EventScope.SESSION) + public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { + final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); + final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); + final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); + final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); + item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); + item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setValue(totalTargetCountStatus); + final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); + if (null != rollout.getRolloutGroups() && groupCount != rollout.getRolloutGroups().size()) { + item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS) + .setValue(Long.valueOf(rollout.getRolloutGroups().size())); + } + } + + @Override + protected String getTableId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; + } + + @Override + protected Container createContainer() { + final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); + return new LazyQueryContainer( + new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); + } + + @Override + protected void addContainerProperties() { + final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Integer.class, 0, false, + false); + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, + false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + TotalTargetCountStatus.class, null, false, false); + + rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.ACTION, String.class, + FontAwesome.CIRCLE_O.getHtml(), false, false); + + } + + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + columnList.add(SPUILabelDefinitions.ACTION); + setColumnOrder(columnList.toArray()); + + alignColumns(); + } + + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; + + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } + + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } + + @Override + protected void setColumnHeaderNames() { + getColumn(SPUILabelDefinitions.VAR_NAME).setHeaderCaption(i18n.get("header.name")); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setHeaderCaption(i18n.get("header.distributionset")); + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setHeaderCaption(i18n.get("header.numberofgroups")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setHeaderCaption(i18n.get("header.total.targets")); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setHeaderCaption(i18n.get("header.createdDate")); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setHeaderCaption(i18n.get("header.createdBy")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); + getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + getColumn(SPUILabelDefinitions.VAR_STATUS).setHeaderCaption(i18n.get("header.status")); + getColumn(SPUILabelDefinitions.ACTION).setHeaderCaption(i18n.get("upload.action")); + } + + @Override + protected void setColumnExpandRatio() { + getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(300); + + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(95); + + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(600); + + getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); + getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); + + } + + @Override + protected void addColumnRenderes() { + setEditorEnabled(true); + addDetailStatusColumn(); + addStatusCoulmn(); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); + } + + private void onClickOfRolloutName(RendererClickEvent event) { + rolloutUIState.setRolloutId((long) event.getItemId()); + final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + rolloutUIState.setRolloutName(rolloutName); + eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); + } + + private void onClickOfActionBtn(RendererClickEvent event) { + final ContextMenu contextMenu = createContextMenu((Long) event.getItemId()); + contextMenu.setAsContextMenuOf((AbstractClientConnector) event.getComponent()); + contextMenu.open(event.getClientX(), event.getClientY()); + } + + private ContextMenu createContextMenu(final Long rolloutId) { + final Item row = getContainerDataSource().getItem(rolloutId); + final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) + .getValue(); + final ContextMenu context = new ContextMenu(); + context.addItemClickListener(event -> menuItemClicked(event)); + if (rolloutStatus == RolloutStatus.READY) { + final ContextMenuItem startItem = context.addItem("Start"); + startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); + } else if (rolloutStatus == RolloutStatus.RUNNING) { + final ContextMenuItem pauseItem = context.addItem("Pause"); + pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); + } else if (rolloutStatus == RolloutStatus.PAUSED) { + final ContextMenuItem resumeItem = context.addItem("Resume"); + resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); + } else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) { + return context; + } + if (permissionChecker.hasRolloutUpdatePermission()) { + final ContextMenuItem cancelItem = context.addItem("Update"); + cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); + } + return context; + } + + private void addDetailStatusColumn() { + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( + new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), + new Converter() { + private static final long serialVersionUID = 2660476405836705932L; + + @Override + public TotalTargetCountStatus convertToModel(String value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, + Class targetType, Locale locale) + throws com.vaadin.data.util.converter.Converter.ConversionException { + return getFormattedString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + private void addStatusCoulmn() { + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), + new Converter() { + private static final long serialVersionUID = 1L; + + @Override + public RolloutStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, + final Class targetType, final Locale locale) { + String result = null; + switch (value) { + case FINISHED: + result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; + break; + case PAUSED: + result = "
" + FontAwesome.PAUSE.getHtml() + "
"; + break; + case RUNNING: + result = "
"; + break; + case READY: + result = "
" + + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; + break; + case STOPPED: + result = "
" + FontAwesome.STOP.getHtml() + "
"; + break; + case CREATING: + result = "
"; + break; + case STARTING: + result = "
"; + break; + case ERROR_CREATING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + case ERROR_STARTING: + result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + + "
"; + break; + default: + break; + } + return result; + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); + } + + private String getFormattedString(Map details) { + StringBuilder val = new StringBuilder(); + String finalVal = null; + if (null != details && !details.isEmpty()) { + for (Entry entry : details.entrySet()) { + val.append(entry.getKey()).append(":").append(entry.getValue()).append(","); + } + finalVal = val.substring(0, val.length() - 1); + } + return finalVal; + } + + private void menuItemClicked(final ContextMenuItemClickEvent event) { + final ContextMenuItem item = (ContextMenuItem) event.getSource(); + final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); + final Item row = getContainerDataSource().getItem(contextMenuData.getRolloutId()); + final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); + if (contextMenuData.getAction() == ACTION.PAUSE) { + rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.RESUME) { + rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); + uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.START) { + rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); + uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); + } else if (contextMenuData.getAction() == ACTION.UPDATE) { + addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); + final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); + addTargetWindow.setCaption(i18n.get("caption.update.rollout")); + UI.getCurrent().addWindow(addTargetWindow); + addTargetWindow.setVisible(Boolean.TRUE); + } + } + + private void refreshTable() { + ((LazyQueryContainer) getContainerDataSource()).refresh(); + } + + public final class FontIconGenerator extends PropertyValueGenerator { + + private static final long serialVersionUID = 2544026030795375748L; + private final FontAwesome fontIcon; + + public FontIconGenerator(FontAwesome icon) { + this.fontIcon = icon; + } + + @Override + public String getValue(Item item, Object itemId, Object propertyId) { + return fontIcon.getHtml(); + } + + @Override + public Class getType() { + return String.class; + } + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java index 462bfd081..748cf289c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java @@ -32,10 +32,13 @@ public class RolloutListView extends AbstractSimpleTableLayout { @Autowired private RolloutListTable rolloutListTable; + + @Autowired + private RolloutListGrid rolloutListGrid; @PostConstruct void init() { - super.init(rolloutListHeader, rolloutListTable); + super.init(rolloutListHeader, rolloutListTable,rolloutListGrid); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java index f5848e650..b3924aefe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUILabelDefinitions.java @@ -539,6 +539,14 @@ public final class SPUILabelDefinitions { * Total target coulmn property name. */ public static final String VAR_TOTAL_TARGETS = "totalTargetsCount"; + + + /** + * Total target count status coulmn property name. + */ + public static final String VAR_TOTAL_TARGETS_COUNT_STATUS = "totalTargetCountStatus"; + + /** * Constructor. diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss index 1c7714061..3b3d810b6 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss @@ -56,5 +56,8 @@ } } + .v-grid-cell.centeralign { + text-align: center; + } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss index 867fa0151..b87e1849c 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss @@ -61,4 +61,9 @@ -moz-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); } + + .status-bar{ + width:100%; + height:100%; + } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss index 1c2235e5b..a344cb5ae 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/hawkbittheme.scss @@ -30,7 +30,13 @@ $v-selection-color: $app-selection-color; $v-app-background-color: $app-background-color; //Table header,body border colors are calculated based on this -$v-table-border-color: $widget-border-color; +$v-table-border-color: $widget-border-color ; + +$v-grid-border:$v-grid-border-size solid $widget-border-color ; +$v-grid-cell-vertical-border: 0px ; +$v-grid-cell-horizontal-border: 0px ; +$v-grid-cell-focused-border: 0px ; +$v-grid-cell-padding-horizontal:6px; @import '../valo/valo'; @import 'customstyles/table'; diff --git a/pom.xml b/pom.xml index aa188e76a..7831be98c 100644 --- a/pom.xml +++ b/pom.xml @@ -363,6 +363,11 @@ vaadin-push ${vaadin.version} + + com.vaadin + vaadin-client + ${vaadin.version} + - DistributionBarRenderer + CustomRenderers 1 - org.eclipse.hawkbit.ui.distributionbar.DistributionBarRendererWidgetSet + org.eclipse.hawkbit.ui.customrenderers.CustomRendererWidgetSet diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml index 3d55d1c75..31a67cacb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/AppWidgetSet.gwt.xml @@ -25,11 +25,12 @@ + name="org.vaadin.hene.flexibleoptiongroup.widgetset.FlexibleOptionGroupWidgetset" /> + - - + diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml similarity index 99% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml index 989054165..0697836a7 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/DistributionBarRendererWidgetSet.gwt.xml +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/CustomRendererWidgetSet.gwt.xml @@ -1,5 +1,4 @@ - @@ -12,6 +11,5 @@ - diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java similarity index 60% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java index 78f2378e3..c02939a9c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/HtmlButtonRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlButtonRendererConnector.java @@ -1,14 +1,14 @@ -package org.eclipse.hawkbit.ui.distributionbar.client; +package org.eclipse.hawkbit.ui.customrenderers.client; import com.vaadin.client.connectors.ButtonRendererConnector; import com.vaadin.shared.ui.Connect; -@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer.class) +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer.class) public class HtmlButtonRendererConnector extends ButtonRendererConnector { private static final long serialVersionUID = 7987417436367399331L; @Override - public org.eclipse.hawkbit.ui.distributionbar.client.renderers.HtmlButtonRenderer getRenderer() { - return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.HtmlButtonRenderer) super.getRenderer(); + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlButtonRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlButtonRenderer) super.getRenderer(); } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java new file mode 100644 index 000000000..b36712e8f --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/HtmlLabelRendererConnector.java @@ -0,0 +1,16 @@ +package org.eclipse.hawkbit.ui.customrenderers.client; + +import com.vaadin.client.connectors.AbstractRendererConnector; +import com.vaadin.shared.ui.Connect; + +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer.class) +public class HtmlLabelRendererConnector extends AbstractRendererConnector { + + private static final long serialVersionUID = 7697966991925490786L; + + @Override + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlLabelRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.HtmlLabelRenderer) super.getRenderer(); + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java similarity index 58% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java index 3c23ff0bb..dcd308d8d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/LinkRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/LinkRendererConnector.java @@ -1,14 +1,14 @@ -package org.eclipse.hawkbit.ui.distributionbar.client; +package org.eclipse.hawkbit.ui.customrenderers.client; import com.vaadin.client.connectors.ButtonRendererConnector; import com.vaadin.shared.ui.Connect; -@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer.class) +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer.class) public class LinkRendererConnector extends ButtonRendererConnector { private static final long serialVersionUID = 7987417436367399331L; @Override - public org.eclipse.hawkbit.ui.distributionbar.client.renderers.LinkRenderer getRenderer() { - return (org.eclipse.hawkbit.ui.distributionbar.client.renderers.LinkRenderer) super.getRenderer(); + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.LinkRenderer getRenderer() { + return (org.eclipse.hawkbit.ui.customrenderers.client.renderers.LinkRenderer) super.getRenderer(); } } \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java similarity index 67% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java index 046a5be70..bd1485312 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/StringDistributionBarRendererConnector.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java @@ -1,16 +1,16 @@ -package org.eclipse.hawkbit.ui.distributionbar.client; +package org.eclipse.hawkbit.ui.customrenderers.client; import com.vaadin.client.connectors.AbstractRendererConnector; import com.vaadin.shared.ui.Connect; -@Connect(org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer.class) +@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer.class) public class StringDistributionBarRendererConnector extends AbstractRendererConnector { private static final long serialVersionUID = 7697966991925490786L; @Override - public org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer getRenderer() { - org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer renderer = (org.eclipse.hawkbit.ui.distributionbar.client.renderers.StringDistributionBarRenderer) super.getRenderer(); + public org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer getRenderer() { + org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer renderer = (org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer) super.getRenderer(); renderer.setUiWidgetClassName(StringDistributionBarRendererConnector.this.getConnection().getUIConnector().getWidget().getParent().getStyleName()); return renderer; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java similarity index 62% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index a742e3b1d..15fc72ada 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.client.renderers; +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import com.google.gwt.user.client.ui.Button; import com.vaadin.client.renderers.ButtonRenderer; @@ -10,12 +10,18 @@ public class HtmlButtonRenderer extends ButtonRenderer { if (text != null) { button.setHTML(text); } - button.setStylePrimaryName("v-button"); - button.addStyleName( - "tiny v-button-tiny borderless v-button-borderless icon-only v-button-icon-only button-no-border v-button-button-no-border"); + applystyles(button); // this is to allow the button to disappear, if the text is null button.setVisible(text != null); button.getElement().setId("rollout.action.button.id"); button.getElement().setTitle("action"); } + + private void applystyles(Button button) { + button.setStylePrimaryName("v-button"); + button.addStyleName("tiny v-button-tiny"); + button.addStyleName("borderless v-button-borderless"); + button.addStyleName("icon-only v-button-icon-only"); + button.addStyleName("button-no-border v-button-button-no-border"); + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java new file mode 100644 index 000000000..8899c49b3 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java @@ -0,0 +1,53 @@ +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; + +import java.util.HashMap; +import java.util.Map; + +import com.google.gwt.core.client.GWT; +import com.vaadin.client.renderers.WidgetRenderer; +import com.vaadin.client.ui.VLabel; +import com.vaadin.client.widget.grid.RendererCellReference; + +public class HtmlLabelRenderer extends WidgetRenderer { + + @Override + public VLabel createWidget() { + return GWT.create(VLabel.class); + } + + @Override + public void render(RendererCellReference cell, String input, VLabel label) { + Map map = formatInput(input); + String value = map.containsKey("value") ? map.get("value") : null; + String description = map.containsKey("description") ? map.get("description") : null; + String style = map.containsKey("style") ? map.get("style") : null; + String id = map.containsKey("id") ? map.get("id") : null; + + if (value != null) { + label.setHTML("&#x" + Integer.toHexString(Integer.parseInt(value)) + ";"); + } + applyStyle(label, style); + label.setTitle(description); + label.getElement().setId(id); + } + + private void applyStyle(VLabel label, String style) { + label.setStylePrimaryName("v-label"); + label.addStyleName("small v-label-small"); + label.addStyleName("font-icon v-label-font-icon"); + if (style != null) { + label.addStyleName(style + " v-label-" + style); + } + } + + private Map formatInput(String input) { + Map details = new HashMap<>(); + String[] tempData = input.split(","); + for (String statusWithCount : tempData) { + String[] statusWithCountList = statusWithCount.split(":"); + details.put(statusWithCountList[0], statusWithCountList[1]); + } + return details; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java similarity index 50% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java index f20b20ec9..ff215a0a4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/LinkRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.client.renderers; +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import com.google.gwt.user.client.ui.Button; import com.vaadin.client.renderers.ButtonRenderer; @@ -8,11 +8,17 @@ public class LinkRenderer extends ButtonRenderer { @Override public void render(RendererCellReference cell, String text, Button button) { button.setText(text); - button.setStylePrimaryName("v-button"); - button.addStyleName( - "borderless v-button-borderless small v-button-small on-focus-no-border v-button-on-focus-no-border link v-button-link"); + applystyle(button); // this is to allow the button to disappear, if the text is null button.setVisible(text != null); - button.getElement().setId("rollout.action.button.id"); + button.getElement().setId(new StringBuilder("link").append(".").append(text).toString()); + } + + private void applystyle(Button button) { + button.setStylePrimaryName("v-button"); + button.addStyleName("borderless v-button-borderless"); + button.addStyleName("small v-button-small"); + button.addStyleName("on-focus-no-border v-button-on-focus-no-border"); + button.addStyleName("link v-button-link"); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java similarity index 83% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java index d066e0175..7082ab99c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/client/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.client.renderers; +package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import java.util.Collection; import java.util.HashMap; @@ -40,21 +40,25 @@ public class StringDistributionBarRenderer extends WidgetRenderer entryVal : map.entrySet()) { - Long count = entryVal.getValue(); - if (count > 0) { - setBarPartSize(widget, entryVal.getKey().toLowerCase(), count.intValue(), index); - index++; - } - } + setThePartDetails(widget, map); } } widget.updateParts(); } } + private void setThePartDetails(GwtDistributionBar widget, Map map) { + widget.setNumberOfParts(getNumberOfParts(map.values())); + int index = 0; + for (Entry entryVal : map.entrySet()) { + Long count = entryVal.getValue(); + if (count > 0) { + setBarPartSize(widget, entryVal.getKey().toLowerCase(), count.intValue(), index); + index++; + } + } + } + private Map formatData(String input) { Map details = new HashMap<>(); String[] tempData = input.split(","); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java similarity index 85% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java index 0ac480fb2..205eab5db 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlButtonRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.renderers; +package org.eclipse.hawkbit.ui.customrenderers.renderers; import com.vaadin.ui.renderers.ButtonRenderer; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java new file mode 100644 index 000000000..bc519ce8a --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/HtmlLabelRenderer.java @@ -0,0 +1,14 @@ +package org.eclipse.hawkbit.ui.customrenderers.renderers; + +import com.vaadin.ui.Grid.AbstractRenderer; + +public class HtmlLabelRenderer extends AbstractRenderer { + + private static final long serialVersionUID = -7675588068526774915L; + /** + * Creates a new text renderer + */ + public HtmlLabelRenderer() { + super(String.class, null); + } +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java similarity index 84% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java index f007b6bf8..ad9a5f371 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/LinkRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/LinkRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.renderers; +package org.eclipse.hawkbit.ui.customrenderers.renderers; import com.vaadin.ui.renderers.ButtonRenderer; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java similarity index 85% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java index 4a8e3ff73..3f6f301d2 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/distributionbar/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.distributionbar.renderers; +package org.eclipse.hawkbit.ui.customrenderers.renderers; import com.vaadin.ui.Grid.AbstractRenderer; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java index a467eae50..0cc15bcde 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java @@ -14,7 +14,10 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; +import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; +import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -37,7 +40,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; -import com.vaadin.ui.UI; import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @@ -251,8 +253,9 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); } + private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new Converter() { private static final long serialVersionUID = 1L; @@ -265,29 +268,7 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { @Override public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, final Locale locale) { - String result = null; - switch (value) { - case FINISHED: - result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; - break; - case SCHEDULED: - result = "
" + FontAwesome.BULLSEYE.getHtml() + "
"; - break; - case RUNNING: - result = "
" + FontAwesome.ADJUST.getHtml() + "
"; - break; - case READY: - result = "
" - + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; - break; - case ERROR: - result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() - + "
"; - break; - default: - break; - } - return result; + return convertRolloutGroupStatusToString(value); } @Override @@ -301,10 +282,43 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { } }); } + + + + private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { + String result = null; + switch (value) { + case FINISHED: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), + value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + break; + case SCHEDULED: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), + value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + break; + case RUNNING: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.ADJUST.getCodepoint()), + value.name().toLowerCase(), "statusIconYellow", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + break; + case READY: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + break; + case ERROR: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + break; + default: + break; + } + return result; + + } + private void addDetailStatusColumn() { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( - new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), + new StringDistributionBarRenderer(), new Converter() { private static final long serialVersionUID = 2660476405836705932L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index 7f59067e0..def527d5c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -4,8 +4,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; -import java.util.Map; -import java.util.Map.Entry; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -16,9 +14,9 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; -import org.eclipse.hawkbit.ui.distributionbar.renderers.HtmlButtonRenderer; -import org.eclipse.hawkbit.ui.distributionbar.renderers.LinkRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; +import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -40,6 +38,7 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; +import com.google.common.base.Strings; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.PropertyValueGenerator; @@ -48,6 +47,7 @@ import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Label; import com.vaadin.ui.UI; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; @@ -84,6 +84,8 @@ public class RolloutListGrid extends AbstractSimpleGrid { protected void init() { super.init(); eventBus.subscribe(this); + setColumnReorderingAllowed(true); + isColumnReorderingAllowed(); } @PreDestroy @@ -315,7 +317,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { private void addDetailStatusColumn() { getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( - new org.eclipse.hawkbit.ui.distributionbar.renderers.StringDistributionBarRenderer(), + new org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer(), new Converter() { private static final long serialVersionUID = 2660476405836705932L; @@ -346,7 +348,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { } private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new Converter() { private static final long serialVersionUID = 1L; @@ -359,42 +361,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { @Override public String convertToPresentation(final RolloutStatus value, final Class targetType, final Locale locale) { - String result = null; - switch (value) { - case FINISHED: - result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; - break; - case PAUSED: - result = "
" + FontAwesome.PAUSE.getHtml() + "
"; - break; - case RUNNING: - result = "
"; - break; - case READY: - result = "
" - + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; - break; - case STOPPED: - result = "
" + FontAwesome.STOP.getHtml() + "
"; - break; - case CREATING: - result = "
"; - break; - case STARTING: - result = "
"; - break; - case ERROR_CREATING: - result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() - + "
"; - break; - case ERROR_STARTING: - result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() - + "
"; - break; - default: - break; - } - return result; + return convertRolloutStatusToString(value); } @Override @@ -409,6 +376,53 @@ public class RolloutListGrid extends AbstractSimpleGrid { }); } + private String convertRolloutStatusToString(final RolloutStatus value) { + String result = null; + switch (value) { + case FINISHED: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), + value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case PAUSED: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.PAUSE.getCodepoint()), + value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case RUNNING: + result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "yellowSpinner", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case READY: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case STOPPED: + result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.STOP.getCodepoint()), + value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case CREATING: + result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "greySpinner", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case STARTING: + result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "blueSpinner", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case ERROR_CREATING: + result = HawkbitCommonUtil.getFormattedString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), + "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + case ERROR_STARTING: + result = HawkbitCommonUtil.getFormattedString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), + "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + break; + default: + break; + } + return result; + } + private void menuItemClicked(final ContextMenuItemClickEvent event) { final ContextMenuItem item = (ContextMenuItem) event.getSource(); final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index 4627f1804..dd7ef4a28 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -48,6 +48,7 @@ import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; import org.vaadin.alump.distributionbar.DistributionBar; +import com.google.common.base.Strings; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.server.Sizeable.Unit; @@ -1369,5 +1370,21 @@ public final class HawkbitCommonUtil { } return finalVal; } + + public static String getFormattedString(String value, String description, String style, String id) { + StringBuilder val = new StringBuilder(); + if (!Strings.isNullOrEmpty(value)) { + val.append("value:").append(value).append(","); + } + if (!Strings.isNullOrEmpty(description)) { + val.append("description:").append(description).append(","); + } + if (!Strings.isNullOrEmpty(style)) { + val.append("style:").append(style).append(","); + } + val.append("id:").append(id); + return val.toString(); + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 56e76c123..84346149c 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -827,6 +827,11 @@ public final class SPUIComponetIdProvider { * Rollout status label id. */ public static final String ROLLOUT_STATUS_LABEL_ID = "rollout.status.id"; + + /** + * Rollout group status label id. + */ + public static final String ROLLOUT_GROUP_STATUS_LABEL_ID = "rollout.group.status.id"; /** * Rollout % or count option group id. diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss index 1a5fedba4..87ea5b0b9 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/common.scss @@ -276,4 +276,10 @@ .links { padding-left: 22px; } + + .font-icon{ + font-family:FontAwesome; + font-style:normal; + font-weight:normal; + } } From 79d615dd3b45565aab52a2757e27c467bc4dd8a4 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 22 Feb 2016 15:36:02 +0100 Subject: [PATCH 07/17] Column expand ratio changes Signed-off-by: asharani-murugesh --- .../client/renderers/HtmlButtonRenderer.java | 2 +- .../client/renderers/HtmlLabelRenderer.java | 5 +- .../client/renderers/LinkRenderer.java | 3 +- .../ui/rollout/AbstractSimpleGrid.java | 53 ++++------- .../ui/rollout/AbstractSimpleTableLayout.java | 6 +- .../ui/rollout/RolloutGroupListGrid.java | 33 +++---- .../rollout/RolloutGroupTargetsListGrid.java | 88 +++++++++++-------- .../rollout/RolloutGroupTargetsListView.java | 13 ++- .../ui/rollout/RolloutGroupsListView.java | 8 +- .../hawkbit/ui/rollout/RolloutListGrid.java | 43 +++++---- .../hawkbit/ui/rollout/RolloutListView.java | 11 +-- .../ui/rollout/state/RolloutUIState.java | 18 ++++ .../hawkbit/ui/utils/HawkbitCommonUtil.java | 21 ++++- .../themes/hawkbit/customstyles/rollout.scss | 4 + 14 files changed, 166 insertions(+), 142 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index 15fc72ada..629eb1f4d 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -19,7 +19,7 @@ public class HtmlButtonRenderer extends ButtonRenderer { private void applystyles(Button button) { button.setStylePrimaryName("v-button"); - button.addStyleName("tiny v-button-tiny"); + button.setStyleName("tiny v-button-tiny"); button.addStyleName("borderless v-button-borderless"); button.addStyleName("icon-only v-button-icon-only"); button.addStyleName("button-no-border v-button-button-no-border"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java index 8899c49b3..8109cec43 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java @@ -26,6 +26,9 @@ public class HtmlLabelRenderer extends WidgetRenderer { if (value != null) { label.setHTML("&#x" + Integer.toHexString(Integer.parseInt(value)) + ";"); } + else{ + label.setHTML(""); + } applyStyle(label, style); label.setTitle(description); label.getElement().setId(id); @@ -33,7 +36,7 @@ public class HtmlLabelRenderer extends WidgetRenderer { private void applyStyle(VLabel label, String style) { label.setStylePrimaryName("v-label"); - label.addStyleName("small v-label-small"); + label.setStyleName("small v-label-small"); label.addStyleName("font-icon v-label-font-icon"); if (style != null) { label.addStyleName(style + " v-label-" + style); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java index ff215a0a4..66814f6dc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java @@ -12,11 +12,12 @@ public class LinkRenderer extends ButtonRenderer { // this is to allow the button to disappear, if the text is null button.setVisible(text != null); button.getElement().setId(new StringBuilder("link").append(".").append(text).toString()); + button.setTitle(text); } private void applystyle(Button button) { button.setStylePrimaryName("v-button"); - button.addStyleName("borderless v-button-borderless"); + button.setStyleName("borderless v-button-borderless"); button.addStyleName("small v-button-small"); button.addStyleName("on-focus-no-border v-button-on-focus-no-border"); button.addStyleName("link v-button-link"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java index 5ecfc5e94..eb2a713c8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java @@ -8,17 +8,12 @@ */ package org.eclipse.hawkbit.ui.rollout; -import java.util.ArrayList; -import java.util.List; - import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.TableColumn; import com.vaadin.data.Container; import com.vaadin.data.Container.Indexed; +import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.ui.Grid; -import com.vaadin.ui.Table; -import com.vaadin.ui.Grid.Column; import com.vaadin.ui.themes.ValoTheme; /** @@ -36,40 +31,28 @@ public abstract class AbstractSimpleGrid extends Grid { setSizeFull(); setImmediate(true); setId(getTableId()); - setHeight("200px"); - setWidth("200px"); - -// addStyleName("sp-table rollout-table"); addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_SMALL); - + addNewContainerDS(); - -// addValueChangeListener(event -> onValueChange()); -// setPageLength(SPUIDefinitions.PAGE_SIZE); setSelectionMode(SelectionMode.NONE); -// setColumnCollapsingAllowed(true); - addColumnRenderes(); setColumnReorderingAllowed(true); } - - - - public void addNewContainerDS() { + private void addNewContainerDS() { final Container container = createContainer(); setContainerDataSource((Indexed) container); addContainerProperties(); + setColumnExpandRatio(); setColumnProperties(); setColumnHeaderNames(); - setColumnExpandRatio(); - - //Allow column hiding + addColumnRenderes(); + // Allow column hiding for (Column c : getColumns()) { - c.setHidable(true); + c.setHidable(true); } setHiddenColumns(); - + int size = 0; if (container != null) { size = container.size(); @@ -77,22 +60,22 @@ public abstract class AbstractSimpleGrid extends Grid { if (size == 0) { setData(SPUIDefinitions.NO_DATA); } + } - - + protected abstract Container createContainer(); - + protected abstract void addContainerProperties(); - protected abstract void setColumnExpandRatio() ; + protected abstract void setColumnExpandRatio(); - protected abstract void setColumnHeaderNames() ; + protected abstract void setColumnHeaderNames(); protected abstract String getTableId(); - protected abstract void setColumnProperties() ; - - protected abstract void addColumnRenderes() ; - - protected abstract void setHiddenColumns(); + protected abstract void setColumnProperties(); + + protected abstract void addColumnRenderes(); + + protected abstract void setHiddenColumns(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java index 85eef5c65..9f28122b4 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java @@ -28,14 +28,12 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { private AbstractSimpleTableHeader tableHeader; - private AbstractSimpleTable table; private AbstractSimpleGrid grid; - protected void init(final AbstractSimpleTableHeader tableHeader, final AbstractSimpleTable table,final AbstractSimpleGrid grid) { + protected void init(final AbstractSimpleTableHeader tableHeader,final AbstractSimpleGrid grid) { this.tableHeader = tableHeader; - this.table = table; this.grid = grid; buildLayout(); } @@ -54,7 +52,7 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { tableHeaderLayout.addComponent(tableHeader); tableHeaderLayout.setComponentAlignment(tableHeader, Alignment.TOP_CENTER); - grid.setSizeFull(); +// grid.setSizeFull(); tableHeaderLayout.addComponent(grid); tableHeaderLayout.setComponentAlignment(grid, Alignment.TOP_CENTER); tableHeaderLayout.setExpandRatio(grid, 1.0f); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java index 0cc15bcde..e18531858 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java @@ -149,31 +149,35 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { @Override protected void setColumnExpandRatio() { getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(150); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(95); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(400); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setExpandRatio(0); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMinimumWidth(80); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setExpandRatio(1); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setExpandRatio(0); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMinimumWidth(100); + + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setExpandRatio(1); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setExpandRatio(0); - getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(140); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setExpandRatio(1); + getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); + getColumn(SPUILabelDefinitions.VAR_ID).setExpandRatio(0); + setFrozenColumnCount(7); } @Override @@ -217,7 +221,6 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnList.add(SPUILabelDefinitions.VAR_DESC); setColumnOrder(columnList.toArray()); - alignColumns(); } @@ -289,23 +292,23 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { String result = null; switch (value) { case FINISHED: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case SCHEDULED: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case RUNNING: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.ADJUST.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.ADJUST.getCodepoint()), value.name().toLowerCase(), "statusIconYellow", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case READY: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case ERROR: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; default: diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java index 939f73607..1ae1b8788 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java @@ -10,8 +10,10 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; +import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -29,7 +31,6 @@ import com.vaadin.data.util.converter.Converter; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope @@ -98,32 +99,29 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { @Override protected void setColumnExpandRatio() { - setSizeFull(); - getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(200); + getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(2); + getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(200); getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(100); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(150); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(200); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(250); - getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(200); + getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(250); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(200); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(250); - - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(200); - - - getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_DESC).setMaximumWidth(200); + getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(1); + getColumn(SPUILabelDefinitions.VAR_DESC).setMaximumWidth(300); getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setExpandRatio(0); + setFrozenColumnCount(getColumns().size()); } @@ -180,11 +178,11 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { @Override protected void setHiddenColumns() { - getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHidden(true); + getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHidden(true); } private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlRenderer(), new Converter() { + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new Converter() { private static final long serialVersionUID = 1L; @Override @@ -198,31 +196,45 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { final Locale locale) { String result = null; if (status == null) { - //Actions are not created for targets when rollout's status is READY and when duplicate assignment is done. - //In these cases display a appropriate status with description - return getStatus(status); + // Actions are not created for targets when rollout's status + // is READY and when duplicate assignment is done. + // In these cases display a appropriate status with + // description + return getStatus(); } else { switch (status) { case FINISHED: - result = "
" + FontAwesome.CHECK_CIRCLE.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), status.name().toLowerCase(), + "statusIconGreen", null); break; case SCHEDULED: - result = "
" + FontAwesome.BULLSEYE.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), status.name().toLowerCase(), + "statusIconBlue", null); break; case RUNNING: case RETRIEVED: case WARNING: case DOWNLOAD: - result = "
" + FontAwesome.ADJUST.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.ADJUST.getCodepoint()), status.name().toLowerCase(), + "statusIconYellow", null); break; case CANCELING: - result = "
" + FontAwesome.TIMES_CIRCLE.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), status.name().toLowerCase(), + "statusIconPending", null); break; case CANCELED: - result = "
" + FontAwesome.TIMES_CIRCLE.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), status.name().toLowerCase(), + "statusIconGreen", null); break; case ERROR: - result = "
" + FontAwesome.EXCLAMATION_CIRCLE.getHtml() + "
"; + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + status.name().toLowerCase(), "statusIconRed", null); break; default: break; @@ -243,19 +255,19 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { }); } - private String getStatus(Status status) { + private String getStatus() { final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() ? rolloutUIState.getRolloutGroup().get() : null; if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { - return "
" + FontAwesome.DOT_CIRCLE_O.getHtml() + "
"; + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), RolloutGroupStatus.READY.toString().toLowerCase(), + "statusIconLightBlue", null); } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - return "
" + FontAwesome.MINUS_CIRCLE.getHtml() + "
"; - // TODO set descriptionf or status icons - // final String dsNameVersion = (String) item.getItemProperty( - // SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).getValue(); - // statusLabel.setDescription(i18n - // .get("message.dist.already.assigned", new Object[] { - // dsNameVersion })); + String ds = rolloutUIState.getRolloutDistributionSet().isPresent()? rolloutUIState.getRolloutDistributionSet() .get():""; + ds = ds.replace(":", "-"); + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), + i18n.get("message.dist.already.assigned", new Object[] { ds }), "statusIconBlue", null); } return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java index 8df21f4e4..67f2cbe19 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java @@ -29,29 +29,28 @@ public class RolloutGroupTargetsListView extends AbstractSimpleTableLayout { private RolloutGroupTargetsListHeader rolloutGroupTargetsListHeader; @Autowired - private RolloutGroupTargetsListTable rolloutGroupTargetsListTable; + private RolloutGroupTargetsCountLabelMessage rolloutGroupTargetsCountLabelMessage; - @Autowired - private RolloutGroupTargetsCountLabelMessage rolloutGroupTargetsCountLabelMessage; @Autowired private RolloutGroupTargetsListGrid rolloutListGrid; + /** * Initialization of Rollout group component. */ @PostConstruct protected void init() { - super.init(rolloutGroupTargetsListHeader, rolloutGroupTargetsListTable,rolloutListGrid); + super.init(rolloutGroupTargetsListHeader, rolloutListGrid); } @Override protected boolean hasCountMessage() { - + return true; } - + @Override protected Label getCountMessageLabel() { - + return rolloutGroupTargetsCountLabelMessage; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java index bcf97584c..17583d9e3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java @@ -29,16 +29,12 @@ public class RolloutGroupsListView extends AbstractSimpleTableLayout { @Autowired private RolloutGroupsListHeader rolloutGroupListHeader; - @Autowired - private RolloutGroupListTable rolloutGroupListTable; - @Autowired private RolloutGroupListGrid rolloutListGrid; - - + @PostConstruct protected void init() { - super.init(rolloutGroupListHeader, rolloutGroupListTable,rolloutListGrid); + super.init(rolloutGroupListHeader, rolloutListGrid); } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index def527d5c..b50387d55 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -38,7 +38,6 @@ import org.vaadin.spring.events.EventBus; import org.vaadin.spring.events.EventScope; import org.vaadin.spring.events.annotation.EventBusListenerMethod; -import com.google.common.base.Strings; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.PropertyValueGenerator; @@ -47,11 +46,9 @@ import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Label; import com.vaadin.ui.UI; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; -import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope @@ -110,7 +107,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { @SuppressWarnings("unchecked") @EventBusListenerMethod(scope = EventScope.SESSION) public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - if (rolloutUIState.isShowRolloutGroups()) { + if (rolloutUIState.isShowRollOuts()) { final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); @@ -159,7 +156,6 @@ public class RolloutListGrid extends AbstractSimpleGrid { false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, false); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, TotalTargetCountStatus.class, null, false, false); @@ -182,12 +178,12 @@ public class RolloutListGrid extends AbstractSimpleGrid { columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.ACTION); columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnList.add(SPUILabelDefinitions.VAR_DESC); - columnList.add(SPUILabelDefinitions.ACTION); setColumnOrder(columnList.toArray()); alignColumns(); @@ -218,6 +214,7 @@ public class RolloutListGrid extends AbstractSimpleGrid { columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + for (Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } @@ -243,14 +240,15 @@ public class RolloutListGrid extends AbstractSimpleGrid { @Override protected void setColumnExpandRatio() { getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(300); + getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(150); getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(300); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(95); getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); @@ -258,14 +256,12 @@ public class RolloutListGrid extends AbstractSimpleGrid { getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); - + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(600); getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); - + setFrozenColumnCount(getColumns().size()); } @Override @@ -281,6 +277,9 @@ public class RolloutListGrid extends AbstractSimpleGrid { final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) .getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); rolloutUIState.setRolloutName(rolloutName); + String ds = (String) getContainerDataSource().getItem(event.getItemId()) + .getItemProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).getValue(); + rolloutUIState.setRolloutDistributionSet(ds); eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); } @@ -380,40 +379,40 @@ public class RolloutListGrid extends AbstractSimpleGrid { String result = null; switch (value) { case FINISHED: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case PAUSED: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.PAUSE.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.PAUSE.getCodepoint()), value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case RUNNING: - result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "yellowSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "yellowSpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case READY: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STOPPED: - result = HawkbitCommonUtil.getFormattedString(Integer.toString(FontAwesome.STOP.getCodepoint()), + result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.STOP.getCodepoint()), value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case CREATING: - result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "greySpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "greySpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STARTING: - result = HawkbitCommonUtil.getFormattedString(null, value.name().toLowerCase(), "blueSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "blueSpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_CREATING: - result = HawkbitCommonUtil.getFormattedString( + result = HawkbitCommonUtil.getStatusLabelDetailsInString( Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_STARTING: - result = HawkbitCommonUtil.getFormattedString( + result = HawkbitCommonUtil.getStatusLabelDetailsInString( Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java index 748cf289c..196133683 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java @@ -30,28 +30,23 @@ public class RolloutListView extends AbstractSimpleTableLayout { @Autowired private RolloutListHeader rolloutListHeader; - @Autowired - private RolloutListTable rolloutListTable; - @Autowired private RolloutListGrid rolloutListGrid; @PostConstruct void init() { - super.init(rolloutListHeader, rolloutListTable,rolloutListGrid); + super.init(rolloutListHeader, rolloutListGrid); } - @Override protected boolean hasCountMessage() { - + return false; } - @Override protected Label getCountMessageLabel() { - + return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java index 8dc5b1e17..0647e01bb 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/state/RolloutUIState.java @@ -44,6 +44,8 @@ public class RolloutUIState implements Serializable { private long rolloutGroupTargetsTotalCount; + private String rolloutDistributionSet; + /** * @return the searchText */ @@ -178,4 +180,20 @@ public class RolloutUIState implements Serializable { public void setRolloutGroupTargetsTotalCount(final long rolloutGroupTargetsTotalCount) { this.rolloutGroupTargetsTotalCount = rolloutGroupTargetsTotalCount; } + + /** + * @return rolloutDistributionSet + */ + public Optional getRolloutDistributionSet() { + return rolloutDistributionSet == null ? Optional.empty() : Optional.of(rolloutDistributionSet); + } + + /** + * + * @param rolloutDistributionSet + * the distribution set of the rollout + */ + public void setRolloutDistributionSet(String rolloutDistributionSet) { + this.rolloutDistributionSet = rolloutDistributionSet; + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index dd7ef4a28..cf1e55c00 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -17,9 +17,9 @@ import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.TimeZone; -import java.util.Map.Entry; import org.apache.commons.lang3.StringUtils; import org.eclipse.hawkbit.im.authentication.UserPrincipal; @@ -31,10 +31,10 @@ import org.eclipse.hawkbit.repository.model.SoftwareModule; import org.eclipse.hawkbit.repository.model.SoftwareModuleType; import org.eclipse.hawkbit.repository.model.TargetIdName; import org.eclipse.hawkbit.repository.model.TargetInfo.PollStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; import org.eclipse.hawkbit.repository.model.TargetTagAssigmentResult; import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; import org.eclipse.hawkbit.ui.management.dstable.DistributionTable; import org.eclipse.hawkbit.ui.management.targettable.TargetTable; import org.slf4j.Logger; @@ -1371,8 +1371,21 @@ public final class HawkbitCommonUtil { return finalVal; } - - public static String getFormattedString(String value, String description, String style, String id) { + /** + * Returns a formatted string as needed by label custom render .This string + * holds the properties of a status label. + * + * @param value + * label value + * @param description + * label description + * @param style + * label style + * @param id + * label id + * @return + */ + public static String getStatusLabelDetailsInString(String value, String description, String style, String id) { StringBuilder val = new StringBuilder(); if (!Strings.isNullOrEmpty(value)) { val.append("value:").append(value).append(","); diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss index ba951df24..373e6d281 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss @@ -69,5 +69,9 @@ height: 34px !important; } + .v-grid-cell.frozen{ + box-shadow: none!important; + } + } \ No newline at end of file From 64d7a7b2500dc4ab574bb484b327838ab1c90040 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 22 Feb 2016 15:49:24 +0100 Subject: [PATCH 08/17] Signed-off-by: asharani-murugesh --- .../java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java | 1 - .../main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java | 1 - .../org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java | 1 - .../org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java | 2 -- 4 files changed, 5 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java index eb2a713c8..4f209d884 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java @@ -12,7 +12,6 @@ import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import com.vaadin.data.Container; import com.vaadin.data.Container.Indexed; -import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.ui.Grid; import com.vaadin.ui.themes.ValoTheme; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java index e38cb3135..091703fc5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java @@ -14,7 +14,6 @@ import java.util.Map; import org.eclipse.hawkbit.repository.model.Rollout; import com.vaadin.server.FontAwesome; -import com.vaadin.ui.Label; /** * Proxy rollout with suctome properties. diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java index eb1791e90..a42618c24 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java @@ -15,7 +15,6 @@ import java.util.Map; import org.eclipse.hawkbit.repository.RolloutGroupManagement; import org.eclipse.hawkbit.repository.RolloutManagement; import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; import org.eclipse.hawkbit.ui.utils.SPDateTimeUtil; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java index e18531858..5e9c3f3f9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java @@ -14,7 +14,6 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer; @@ -40,7 +39,6 @@ import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; -import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope From d6c6712af7281f7cc1929c7c3ce3b6bb31ca5113 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Tue, 23 Feb 2016 09:08:07 +0100 Subject: [PATCH 09/17] setting id for distribution bar Signed-off-by: asharani-murugesh --- .../client/renderers/StringDistributionBarRenderer.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java index 7082ab99c..4c79b0980 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java @@ -43,6 +43,7 @@ public class StringDistributionBarRenderer extends WidgetRenderer Date: Thu, 25 Feb 2016 14:47:56 +0100 Subject: [PATCH 10/17] grid column resize : intermediate solution Signed-off-by: asharani-murugesh --- .../client/renderers/HtmlButtonRenderer.java | 1 - .../client/renderers/HtmlLabelRenderer.java | 2 - .../client/renderers/LinkRenderer.java | 1 - .../StringDistributionBarRenderer.java | 19 +- .../ui/rollout/AbstractSimpleGrid.java | 18 +- .../ui/rollout/RolloutGroupListGrid.java | 96 +++++---- .../rollout/RolloutGroupTargetsListGrid.java | 203 ++++++++++-------- .../hawkbit/ui/rollout/RolloutListGrid.java | 199 ++++++++++------- .../hawkbit/ui/utils/HawkbitCommonUtil.java | 7 +- .../themes/hawkbit/customstyles/rollout.scss | 6 +- .../customstyles/statusprogressbar.scss | 4 - 11 files changed, 322 insertions(+), 234 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index 629eb1f4d..b0019086b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -14,7 +14,6 @@ public class HtmlButtonRenderer extends ButtonRenderer { // this is to allow the button to disappear, if the text is null button.setVisible(text != null); button.getElement().setId("rollout.action.button.id"); - button.getElement().setTitle("action"); } private void applystyles(Button button) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java index 8109cec43..5ff1b1814 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java @@ -19,7 +19,6 @@ public class HtmlLabelRenderer extends WidgetRenderer { public void render(RendererCellReference cell, String input, VLabel label) { Map map = formatInput(input); String value = map.containsKey("value") ? map.get("value") : null; - String description = map.containsKey("description") ? map.get("description") : null; String style = map.containsKey("style") ? map.get("style") : null; String id = map.containsKey("id") ? map.get("id") : null; @@ -30,7 +29,6 @@ public class HtmlLabelRenderer extends WidgetRenderer { label.setHTML(""); } applyStyle(label, style); - label.setTitle(description); label.getElement().setId(id); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java index 66814f6dc..016fbf8b5 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java @@ -12,7 +12,6 @@ public class LinkRenderer extends ButtonRenderer { // this is to allow the button to disappear, if the text is null button.setVisible(text != null); button.getElement().setId(new StringBuilder("link").append(".").append(text).toString()); - button.setTitle(text); } private void applystyle(Button button) { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java index 4c79b0980..1fa2f4efe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java @@ -9,11 +9,16 @@ import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; import org.vaadin.alump.distributionbar.gwt.client.dom.ToolTipPresenter.TooltipClassNameProvider; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Style.Unit; import com.vaadin.client.renderers.WidgetRenderer; import com.vaadin.client.widget.grid.RendererCellReference; public class StringDistributionBarRenderer extends WidgetRenderer { + private static final String STATUS_BAR_PART = "status-bar-part-"; + private static final String FINISHED = "FINISHED"; + private static final String SCHEDULED = "SCHEDULED"; + private static final String ROLLOUT_STATUS_PROGRESS_BAR_ID = "rollout.status.progress.bar.id"; private String uiWidgetClassName; @Override @@ -28,24 +33,26 @@ public class StringDistributionBarRenderer extends WidgetRenderer map = formatData(input); if (!map.isEmpty()) { if (isNoTargets(map.values())) { - setBarPartSize(widget, "SCHEDULED".toLowerCase(), 0, 0); - setBarPartSize(widget, "FINISHED".toLowerCase(), 0, 1); + setBarPartSize(widget, SCHEDULED.toLowerCase(), 0, 0); + setBarPartSize(widget, FINISHED.toLowerCase(), 0, 1); } else { setThePartDetails(widget, map); } } - widget.getElement().setId("rollout.status.progress.bar.id"); - widget.updateParts(); + widget.getElement().setId(ROLLOUT_STATUS_PROGRESS_BAR_ID); + widget.getElement().getStyle().setWidth(100, Unit.PCT); + widget.getElement().getStyle().setHeight(100, Unit.PCT); } + widget.updateParts(); } private void setThePartDetails(GwtDistributionBar widget, Map map) { @@ -93,7 +100,7 @@ public class StringDistributionBarRenderer extends WidgetRenderer() { @@ -283,43 +276,44 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { } }); } - - private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { String result = null; switch (value) { case FINISHED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), - value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case SCHEDULED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), - value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue", + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case RUNNING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.ADJUST.getCodepoint()), - value.name().toLowerCase(), "statusIconYellow", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case READY: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), - value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case ERROR: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), - value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", + SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; default: break; } return result; - + } - private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( - new StringDistributionBarRenderer(), + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new StringDistributionBarRenderer(), new Converter() { private static final long serialVersionUID = 2660476405836705932L; @@ -357,10 +351,40 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid { columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); for (Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } } + @Override + public void browserWindowResized(BrowserWindowResizeEvent event) { + // Intermediate solution for the column width problem for + // SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS column + // Readding the column + recalculateColumnWidths(); + removeColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + addColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + setColumnProperties(); + addDetailStatusColumn(); + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + }; + + private String getDescription(CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString().toLowerCase(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString(); + } else { + return null; + } + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java index 1ae1b8788..c96d93d77 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java @@ -31,6 +31,8 @@ import com.vaadin.data.util.converter.Converter; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Grid.CellDescriptionGenerator; +import com.vaadin.ui.Grid.CellReference; @SpringComponent @ViewScope @@ -99,28 +101,24 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { @Override protected void setColumnExpandRatio() { - getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(2); - getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(200); + getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(20); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(250); - getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(150); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(50); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(100); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(150); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMinimumWidth(50); - getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(150); + getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMinimumWidth(50); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(150); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMinimumWidth(20); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(150); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMinimumWidth(20); - getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_DESC).setMaximumWidth(300); - - getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setExpandRatio(0); setFrozenColumnCount(getColumns().size()); } @@ -151,8 +149,8 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { columnList.add(SPUILabelDefinitions.VAR_CREATED_BY); columnList.add(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE); columnList.add(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_DESC); setColumnOrder(columnList.toArray()); alignColumns(); } @@ -182,77 +180,77 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { } private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new Converter() { - private static final long serialVersionUID = 1L; + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), + new Converter() { + private static final long serialVersionUID = 1L; - @Override - public Status convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final Status status, final Class targetType, - final Locale locale) { - String result = null; - if (status == null) { - // Actions are not created for targets when rollout's status - // is READY and when duplicate assignment is done. - // In these cases display a appropriate status with - // description - return getStatus(); - } else { - switch (status) { - case FINISHED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), status.name().toLowerCase(), - "statusIconGreen", null); - break; - case SCHEDULED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), status.name().toLowerCase(), - "statusIconBlue", null); - break; - case RUNNING: - case RETRIEVED: - case WARNING: - case DOWNLOAD: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.ADJUST.getCodepoint()), status.name().toLowerCase(), - "statusIconYellow", null); - break; - case CANCELING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), status.name().toLowerCase(), - "statusIconPending", null); - break; - case CANCELED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), status.name().toLowerCase(), - "statusIconGreen", null); - break; - case ERROR: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), - status.name().toLowerCase(), "statusIconRed", null); - break; - default: - break; + @Override + public Status convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; } - return result; - } - } - @Override - public Class getModelType() { - return Status.class; - } + @Override + public String convertToPresentation(final Status status, final Class targetType, + final Locale locale) { + String result = null; + if (status == null) { + // Actions are not created for targets when + // rollout's status + // is READY and when duplicate assignment is done. + // In these cases display a appropriate status with + // description + return getStatus(); + } else { + switch (status) { + case FINISHED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", + null); + break; + case SCHEDULED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue", null); + break; + case RUNNING: + case RETRIEVED: + case WARNING: + case DOWNLOAD: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", null); + break; + case CANCELING: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconPending", + null); + break; + case CANCELED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconGreen", + null); + break; + case ERROR: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + "statusIconRed", null); + break; + default: + break; + } + return result; + } + } - @Override - public Class getPresentationType() { - return String.class; - } - }); + @Override + public Class getModelType() { + return Status.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + }); } private String getStatus() { @@ -260,14 +258,39 @@ public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { ? rolloutUIState.getRolloutGroup().get() : null; if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), RolloutGroupStatus.READY.toString().toLowerCase(), - "statusIconLightBlue", null); + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", null); } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - String ds = rolloutUIState.getRolloutDistributionSet().isPresent()? rolloutUIState.getRolloutDistributionSet() .get():""; - ds = ds.replace(":", "-"); return HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), - i18n.get("message.dist.already.assigned", new Object[] { ds }), "statusIconBlue", null); + Integer.toString(FontAwesome.MINUS_CIRCLE.getCodepoint()), "statusIconBlue", null); + } else { + return HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.QUESTION_CIRCLE.getCodepoint()), "statusIconBlue", null); + } + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + }; + + private String getDescription(CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + if (null != cell.getProperty().getValue()) { + return cell.getProperty().getValue().toString().toLowerCase(); + + } else { + final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() + ? rolloutUIState.getRolloutGroup().get() : null; + if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { + return RolloutGroupStatus.READY.toString().toLowerCase(); + } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { + String ds = rolloutUIState.getRolloutDistributionSet().isPresent() + ? rolloutUIState.getRolloutDistributionSet().get() : ""; + return i18n.get("message.dist.already.assigned", new Object[] { ds }); + } else { + return "unknown"; + } + } } return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index b50387d55..e862d6f07 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -44,15 +44,19 @@ import com.vaadin.data.util.PropertyValueGenerator; import com.vaadin.data.util.converter.Converter; import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; +import com.vaadin.server.Page; +import com.vaadin.server.Page.BrowserWindowResizeEvent; +import com.vaadin.server.Page.BrowserWindowResizeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.UI; import com.vaadin.ui.Window; +import com.vaadin.ui.Grid.CellReference; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; @SpringComponent @ViewScope -public class RolloutListGrid extends AbstractSimpleGrid { +public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindowResizeListener { private static final long serialVersionUID = 4060904914954370524L; @Autowired @@ -81,8 +85,8 @@ public class RolloutListGrid extends AbstractSimpleGrid { protected void init() { super.init(); eventBus.subscribe(this); - setColumnReorderingAllowed(true); - isColumnReorderingAllowed(); + Page.getCurrent().addBrowserWindowResizeListener(this); + } @PreDestroy @@ -165,59 +169,26 @@ public class RolloutListGrid extends AbstractSimpleGrid { } @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; - } + protected void setColumnExpandRatio() { + getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(150); - @Override - protected void setColumnProperties() { - List columnList = new ArrayList<>(); - columnList.add(SPUILabelDefinitions.VAR_NAME); - columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); - columnList.add(SPUILabelDefinitions.VAR_STATUS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); - columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); - columnList.add(SPUILabelDefinitions.ACTION); - columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnList.add(SPUILabelDefinitions.VAR_DESC); - setColumnOrder(columnList.toArray()); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); - alignColumns(); - } + getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(75); - private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setMaximumWidth(100); - @Override - public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, - SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); - } + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMinimumWidth(40); + getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setMaximumWidth(100); - @Override - protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(75); + getColumn(SPUILabelDefinitions.ACTION).setMaximumWidth(75); - for (Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } + setFrozenColumnCount(getColumns().size()); } @Override @@ -238,30 +209,44 @@ public class RolloutListGrid extends AbstractSimpleGrid { } @Override - protected void setColumnExpandRatio() { - getColumn(SPUILabelDefinitions.VAR_NAME).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(150); + protected String getTableId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; + } - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setExpandRatio(1); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMinimumWidth(40); - getColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION).setMaximumWidth(150); + @Override + protected void setColumnProperties() { + List columnList = new ArrayList<>(); + columnList.add(SPUILabelDefinitions.VAR_NAME); + columnList.add(SPUILabelDefinitions.VAR_DIST_NAME_VERSION); + columnList.add(SPUILabelDefinitions.VAR_STATUS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + columnList.add(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS); + columnList.add(SPUILabelDefinitions.VAR_TOTAL_TARGETS); + columnList.add(SPUILabelDefinitions.ACTION); - getColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS).setExpandRatio(0); + columnList.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnList.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnList.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnList.add(SPUILabelDefinitions.VAR_DESC); + setColumnOrder(columnList.toArray()); + alignColumns(); + } - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_CREATED_USER).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_MODIFIED_BY).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_DESC).setExpandRatio(0); - getColumn(SPUILabelDefinitions.VAR_STATUS).setExpandRatio(0); - - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setExpandRatio(2); + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; - getColumn(SPUILabelDefinitions.ACTION).setExpandRatio(0); - getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(90); - setFrozenColumnCount(getColumns().size()); + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); } @Override @@ -379,42 +364,44 @@ public class RolloutListGrid extends AbstractSimpleGrid { String result = null; switch (value) { case FINISHED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), - value.name().toLowerCase(), "statusIconGreen", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case PAUSED: result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.PAUSE.getCodepoint()), - value.name().toLowerCase(), "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case RUNNING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "yellowSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "yellowSpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case READY: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), - value.name().toLowerCase(), "statusIconLightBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STOPPED: result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.STOP.getCodepoint()), - value.name().toLowerCase(), "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case CREATING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "greySpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "greySpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STARTING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, value.name().toLowerCase(), "blueSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "blueSpinner", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_CREATING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), - "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_STARTING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), value.name().toLowerCase(), - "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", + SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; default: break; @@ -469,4 +456,50 @@ public class RolloutListGrid extends AbstractSimpleGrid { } } + @Override + public void browserWindowResized(BrowserWindowResizeEvent event) { + // Intermediate solution for the column width problem for + // SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS column + // Readding the column + recalculateColumnWidths(); + removeColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + addColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) + .setHeaderCaption(i18n.get("header.detail.status")); + setColumnProperties(); + addDetailStatusColumn(); + } + + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + }; + + private String getDescription(CellReference cell) { + if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString().toLowerCase(); + } else if (SPUILabelDefinitions.ACTION.equals(cell.getPropertyId())) { + return SPUILabelDefinitions.ACTION.toLowerCase(); + } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { + return cell.getProperty().getValue().toString(); + } else { + return null; + } + } + } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java index cf1e55c00..e9e287fe3 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/HawkbitCommonUtil.java @@ -1377,22 +1377,17 @@ public final class HawkbitCommonUtil { * * @param value * label value - * @param description - * label description * @param style * label style * @param id * label id * @return */ - public static String getStatusLabelDetailsInString(String value, String description, String style, String id) { + public static String getStatusLabelDetailsInString(String value, String style, String id) { StringBuilder val = new StringBuilder(); if (!Strings.isNullOrEmpty(value)) { val.append("value:").append(value).append(","); } - if (!Strings.isNullOrEmpty(description)) { - val.append("description:").append(description).append(","); - } if (!Strings.isNullOrEmpty(style)) { val.append("style:").append(style).append(","); } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss index 373e6d281..712e04ec1 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/rollout.scss @@ -70,7 +70,11 @@ } .v-grid-cell.frozen{ - box-shadow: none!important; + box-shadow: none !important; + } + + .v-grid-cell.frozen + th{ + border-left: $v-grid-border-size solid $widget-border-color ; } } diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss index b87e1849c..9cc628022 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss @@ -62,8 +62,4 @@ -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); } - .status-bar{ - width:100%; - height:100%; - } } \ No newline at end of file From f8914e97379882bbaa58e43fd6760493415e32a9 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Thu, 25 Feb 2016 16:31:42 +0100 Subject: [PATCH 11/17] Rollout list view : Removed Id column Signed-off-by: asharani-murugesh --- .../java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index e862d6f07..06a67913f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -140,7 +140,6 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow @Override protected void addContainerProperties() { final LazyQueryContainer rolloutGridContainer = (LazyQueryContainer) getContainerDataSource(); - rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); rolloutGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, @@ -478,7 +477,6 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_ID); for (Object propertyId : columnsToBeHidden) { getColumn(propertyId).setHidden(true); } From bb873e88a7319aff444a4891c3cc2f7368d622ca Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Mon, 29 Feb 2016 14:42:59 +0100 Subject: [PATCH 12/17] removed unused import Signed-off-by: asharani-murugesh --- .../java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java index 06a67913f..5818bc7cf 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java @@ -51,7 +51,6 @@ import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; import com.vaadin.ui.UI; import com.vaadin.ui.Window; -import com.vaadin.ui.Grid.CellReference; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; @SpringComponent @@ -486,7 +485,7 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow @Override protected CellDescriptionGenerator getDescriptionGenerator() { return cell -> getDescription(cell); - }; + } private String getDescription(CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { From 7937c16c9b873240a518cc4cdc333a81ad56ad63 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Tue, 1 Mar 2016 13:59:57 +0100 Subject: [PATCH 13/17] Rollout progress bar custom render changed to html renderer Packages refactored Signed-off-by: asharani-murugesh --- .../grid/AbstractGrid.java} | 4 +- .../grid/AbstractGridHeader.java} | 6 +- .../grid/AbstractGridLayout.java} | 25 +- ...tringDistributionBarRendererConnector.java | 18 - .../client/renderers/HtmlButtonRenderer.java | 5 +- .../StringDistributionBarRenderer.java | 114 ---- .../StringDistributionBarRenderer.java | 18 - .../ui/rollout/AbstractSimpleTable.java | 116 ---- .../ui/rollout/DistributionBarDetails.java | 23 - .../ui/rollout/DistributionBarHelper.java | 126 ++++ .../ui/rollout/RolloutGroupListTable.java | 364 ------------ .../rollout/RolloutGroupTargetsListTable.java | 231 -------- .../hawkbit/ui/rollout/RolloutListTable.java | 552 ------------------ .../hawkbit/ui/rollout/RolloutView.java | 3 + .../AddUpdateRolloutWindowLayout.java | 4 +- .../DistributionBeanQuery.java} | 6 +- .../rollout/{ => rollout}/ProxyRollout.java | 29 +- .../{ => rollout}/RolloutBeanQuery.java | 2 +- .../{ => rollout}/RolloutListGrid.java | 142 +++-- .../{ => rollout}/RolloutListHeader.java | 5 +- .../{ => rollout}/RolloutListView.java | 6 +- .../{ => rolloutgroup}/ProxyRolloutGroup.java | 2 +- .../RolloutGroupBeanQuery.java | 5 +- .../RolloutGroupListGrid.java | 73 +-- .../RolloutGroupsListHeader.java | 5 +- .../RolloutGroupsListView.java | 5 +- .../RolloutGroupTargetsBeanQuery.java | 2 +- .../RolloutGroupTargetsCountLabelMessage.java | 11 +- .../RolloutGroupTargetsListGrid.java | 7 +- .../RolloutGroupTargetsListHeader.java | 5 +- .../RolloutGroupTargetsListView.java | 5 +- 31 files changed, 314 insertions(+), 1605 deletions(-) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{rollout/AbstractSimpleGrid.java => common/grid/AbstractGrid.java} (96%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{rollout/AbstractSimpleTableHeader.java => common/grid/AbstractGridHeader.java} (98%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/{rollout/AbstractSimpleTableLayout.java => common/grid/AbstractGridLayout.java} (82%) delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTable.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java create mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListTable.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java delete mode 100644 hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListTable.java rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/AddUpdateRolloutWindowLayout.java (99%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{DistBeanQuery.java => rollout/DistributionBeanQuery.java} (96%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/ProxyRollout.java (79%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/RolloutBeanQuery.java (99%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/RolloutListGrid.java (90%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/RolloutListHeader.java (96%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rollout}/RolloutListView.java (86%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgroup}/ProxyRolloutGroup.java (98%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgroup}/RolloutGroupBeanQuery.java (97%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgroup}/RolloutGroupListGrid.java (92%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgroup}/RolloutGroupsListHeader.java (96%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgroup}/RolloutGroupsListView.java (86%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgrouptargets}/RolloutGroupTargetsBeanQuery.java (99%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgrouptargets}/RolloutGroupTargetsCountLabelMessage.java (92%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgrouptargets}/RolloutGroupTargetsListGrid.java (98%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgrouptargets}/RolloutGroupTargetsListHeader.java (96%) rename hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/{ => rolloutgrouptargets}/RolloutGroupTargetsListView.java (87%) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java similarity index 96% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java index f825bf4cd..22fb055ed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.common.grid; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; @@ -20,7 +20,7 @@ import com.vaadin.ui.themes.ValoTheme; * Abstract table class. * */ -public abstract class AbstractSimpleGrid extends Grid { +public abstract class AbstractGrid extends Grid { private static final long serialVersionUID = 4856562746502217630L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java similarity index 98% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java index 38f59b270..282e08152 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridHeader.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.common.grid; import org.eclipse.hawkbit.ui.components.SPUIButton; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; @@ -26,10 +26,10 @@ import com.vaadin.ui.VerticalLayout; /** * - * Abstract table header. + * Abstract grid header. * */ -public abstract class AbstractSimpleTableHeader extends VerticalLayout { +public abstract class AbstractGridHeader extends VerticalLayout { private static final long serialVersionUID = -24429876573255519L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java similarity index 82% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java index 9f28122b4..98c14e698 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTableLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGridLayout.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.common.grid; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; @@ -17,22 +17,21 @@ import com.vaadin.ui.VerticalLayout; /** * - * Abstract table layout class which builds layout with table - * {@link AbstractSimpleTable} and table header - * {@link AbstractSimpleTableHeader}. + * Abstract grid layout class which builds layout with grid + * {@link AbstractGrid} and table header + * {@link AbstractGridHeader}. * */ -public abstract class AbstractSimpleTableLayout extends VerticalLayout { +public abstract class AbstractGridLayout extends VerticalLayout { private static final long serialVersionUID = 8611248179949245460L; - private AbstractSimpleTableHeader tableHeader; - + private AbstractGridHeader tableHeader; - private AbstractSimpleGrid grid; + private AbstractGrid grid; - protected void init(final AbstractSimpleTableHeader tableHeader,final AbstractSimpleGrid grid) { + protected void init(final AbstractGridHeader tableHeader,final AbstractGrid grid) { this.tableHeader = tableHeader; this.grid = grid; buildLayout(); @@ -52,7 +51,6 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { tableHeaderLayout.addComponent(tableHeader); tableHeaderLayout.setComponentAlignment(tableHeader, Alignment.TOP_CENTER); -// grid.setSizeFull(); tableHeaderLayout.addComponent(grid); tableHeaderLayout.setComponentAlignment(grid, Alignment.TOP_CENTER); tableHeaderLayout.setExpandRatio(grid, 1.0f); @@ -83,9 +81,14 @@ public abstract class AbstractSimpleTableLayout extends VerticalLayout { /** * Only in rollout group targets view count message is displayed. * - * @return + * @return true if count message has to be displayed */ protected abstract boolean hasCountMessage(); + /** + * Get the count message label. + * + * @return count message + */ protected abstract Label getCountMessageLabel(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java deleted file mode 100644 index bd1485312..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/StringDistributionBarRendererConnector.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.eclipse.hawkbit.ui.customrenderers.client; - -import com.vaadin.client.connectors.AbstractRendererConnector; -import com.vaadin.shared.ui.Connect; - -@Connect(org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer.class) -public class StringDistributionBarRendererConnector extends AbstractRendererConnector { - - private static final long serialVersionUID = 7697966991925490786L; - - @Override - public org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer getRenderer() { - org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer renderer = (org.eclipse.hawkbit.ui.customrenderers.client.renderers.StringDistributionBarRenderer) super.getRenderer(); - renderer.setUiWidgetClassName(StringDistributionBarRendererConnector.this.getConnection().getUIConnector().getWidget().getParent().getStyleName()); - return renderer; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index b0019086b..bb83e5e57 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -2,6 +2,7 @@ package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import com.google.gwt.user.client.ui.Button; import com.vaadin.client.renderers.ButtonRenderer; +import com.vaadin.client.ui.VButton; import com.vaadin.client.widget.grid.RendererCellReference; public class HtmlButtonRenderer extends ButtonRenderer { @@ -17,8 +18,8 @@ public class HtmlButtonRenderer extends ButtonRenderer { } private void applystyles(Button button) { - button.setStylePrimaryName("v-button"); - button.setStyleName("tiny v-button-tiny"); + button.setStyleName(VButton.CLASSNAME); + button.addStyleName("tiny v-button-tiny"); button.addStyleName("borderless v-button-borderless"); button.addStyleName("icon-only v-button-icon-only"); button.addStyleName("button-no-border v-button-button-no-border"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java deleted file mode 100644 index 1fa2f4efe..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/StringDistributionBarRenderer.java +++ /dev/null @@ -1,114 +0,0 @@ -package org.eclipse.hawkbit.ui.customrenderers.client.renderers; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; -import org.vaadin.alump.distributionbar.gwt.client.dom.ToolTipPresenter.TooltipClassNameProvider; - -import com.google.gwt.core.client.GWT; -import com.google.gwt.dom.client.Style.Unit; -import com.vaadin.client.renderers.WidgetRenderer; -import com.vaadin.client.widget.grid.RendererCellReference; - -public class StringDistributionBarRenderer extends WidgetRenderer { - - private static final String STATUS_BAR_PART = "status-bar-part-"; - private static final String FINISHED = "FINISHED"; - private static final String SCHEDULED = "SCHEDULED"; - private static final String ROLLOUT_STATUS_PROGRESS_BAR_ID = "rollout.status.progress.bar.id"; - private String uiWidgetClassName; - - @Override - public GwtDistributionBar createWidget() { - GwtDistributionBar gwt = GWT.create(GwtDistributionBar.class); - gwt.setTooltipClassNameProvider(new TooltipClassNameProvider() { - @Override - public String getClassNames() { - return getUiWidgetClassName(); - } - }); - return gwt; - } - - - @Override - public void render(RendererCellReference cell, String input, GwtDistributionBar widget) { - if (null != input) { - widget.setNumberOfParts(2); - Map map = formatData(input); - if (!map.isEmpty()) { - if (isNoTargets(map.values())) { - setBarPartSize(widget, SCHEDULED.toLowerCase(), 0, 0); - setBarPartSize(widget, FINISHED.toLowerCase(), 0, 1); - - } else { - setThePartDetails(widget, map); - } - } - widget.getElement().setId(ROLLOUT_STATUS_PROGRESS_BAR_ID); - widget.getElement().getStyle().setWidth(100, Unit.PCT); - widget.getElement().getStyle().setHeight(100, Unit.PCT); - } - widget.updateParts(); - } - - private void setThePartDetails(GwtDistributionBar widget, Map map) { - widget.setNumberOfParts(getNumberOfParts(map.values())); - int index = 0; - for (Entry entryVal : map.entrySet()) { - Long count = entryVal.getValue(); - if (count > 0) { - setBarPartSize(widget, entryVal.getKey().toLowerCase(), count.intValue(), index); - index++; - } - } - } - - private Map formatData(String input) { - Map details = new HashMap<>(); - String[] tempData = input.split(","); - for (String statusWithCount : tempData) { - String[] statusWithCountList = statusWithCount.split(":"); - details.put(statusWithCountList[0], new Long(statusWithCountList[1])); - } - return details; - } - - private int getNumberOfParts(Collection values) { - int count = 0; - for (Long val : values) { - if (val != 0) { - count++; - } - } - return count; - } - - private boolean isNoTargets(Collection values) { - for (Long count : values) { - if (count != 0) { - return false; - } - } - return true; - } - - private void setBarPartSize(final GwtDistributionBar bar, final String statusName, final int count, - final int index) { - bar.setPartSize(index, count); - bar.setPartTooltip(index, statusName); - bar.setPartStyleName(index, index, STATUS_BAR_PART + statusName); - } - - public String getUiWidgetClassName() { - return uiWidgetClassName; - } - - public void setUiWidgetClassName(String uiWidgetClassName) { - this.uiWidgetClassName = uiWidgetClassName; - } - -} \ No newline at end of file diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java deleted file mode 100644 index 3f6f301d2..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/renderers/StringDistributionBarRenderer.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.eclipse.hawkbit.ui.customrenderers.renderers; - - -import com.vaadin.ui.Grid.AbstractRenderer; - -public class StringDistributionBarRenderer extends AbstractRenderer { - private static final long serialVersionUID = -4543220859821576209L; - - /** - * Creates a new text renderer - */ - public StringDistributionBarRenderer() { - super(String.class, null); - } - - -} - diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTable.java deleted file mode 100644 index db0b468cc..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AbstractSimpleTable.java +++ /dev/null @@ -1,116 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.TableColumn; - -import com.vaadin.data.Container; -import com.vaadin.ui.Table; -import com.vaadin.ui.themes.ValoTheme; - -/** - * Abstract table class. - * - */ -public abstract class AbstractSimpleTable extends Table { - - private static final long serialVersionUID = 4856562746502217630L; - - /** - * Initialize the components. - */ - protected void init() { - addStyleName("sp-table rollout-table"); - setSizeFull(); - setImmediate(true); - setHeight(100.0f, Unit.PERCENTAGE); - addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); - addStyleName(ValoTheme.TABLE_SMALL); - setSortEnabled(false); - setId(getTableId()); - addCustomGeneratedColumns(); - addNewContainerDS(); - setColumnProperties(); - addValueChangeListener(event -> onValueChange()); - setPageLength(SPUIDefinitions.PAGE_SIZE); - setSelectable(false); - setColumnCollapsingAllowed(true); - setCollapsiblecolumns(); - } - - private void setColumnProperties() { - final List columnList = getTableVisibleColumns(); - final List columnIds = new ArrayList<>(); - for (final TableColumn column : columnList) { - setColumnHeader(column.getColumnPropertyId(), column.getColumnHeader()); - setColumnExpandRatio(column.getColumnPropertyId(), column.getExpandRatio()); - columnIds.add(column.getColumnPropertyId()); - } - setVisibleColumns(columnIds.toArray()); - } - - private void addNewContainerDS() { - final Container container = createContainer(); - addContainerProperties(container); - setContainerDataSource(container); - int size = 0; - if (container != null) { - size = container.size(); - } - if (size == 0) { - setData(SPUIDefinitions.NO_DATA); - } - } - - /** - * Based on table state (max/min) columns to be shown are returned. - * - * @return List list of visible columns - */ - protected abstract List getTableVisibleColumns(); - - /** - * Create container of the data to be displayed by the table. - */ - protected abstract Container createContainer(); - - /** - * Add container properties to the container passed in the reference. - * - * @param container - * reference of {@link Container} - */ - protected abstract void addContainerProperties(Container container); - - /** - * Get Id of the table. - * - * @return Id. - */ - protected abstract String getTableId(); - - /** - * On select of row. - */ - protected abstract void onValueChange(); - - /** - * Add any generated columns if required. - */ - protected abstract void addCustomGeneratedColumns(); - - /** - * Set list of columns collapsible. - */ - protected abstract void setCollapsiblecolumns(); -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java deleted file mode 100644 index 342b0eba1..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarDetails.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.HashMap; -import java.util.Map; - -public class DistributionBarDetails { - - private Map details = new HashMap<>(); - - - public DistributionBarDetails( Map details){ - this.details = details; - } - - public Map getDetails() { - return details; - } - - public void setDetails(Map details) { - this.details = details; - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java new file mode 100644 index 000000000..1e446ccf0 --- /dev/null +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistributionBarHelper.java @@ -0,0 +1,126 @@ +package org.eclipse.hawkbit.ui.rollout; + +import java.util.Map; +import java.util.Map.Entry; +import java.util.stream.Collectors; + +import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus.Status; +import org.vaadin.alump.distributionbar.gwt.client.GwtDistributionBar; + +/** + * Distribution bar helper to render distribution bar in grid. + * + */ +public final class DistributionBarHelper { + private static final int PARENT_SIZE_IN_PCT = 100; + private static final double MINIMUM_PART_SIZE = 10; + private static final String DISTRIBUTION_BAR_PART_MAIN_STYLE = GwtDistributionBar.CLASSNAME + "-part"; + private static final String DISTRIBUTION_BAR_PART_CLASSNAME_PREFIX = GwtDistributionBar.CLASSNAME + "-part-"; + private static final String DISTRIBUTION_BAR_PART_VALUE_CLASSNAME = GwtDistributionBar.CLASSNAME + "-value"; + private static final String UNINITIALIZED_VALUE_CLASSNAME = GwtDistributionBar.CLASSNAME + "-uninitizalized"; + + private DistributionBarHelper() { + } + + private static String getPartStyle(int partIndex, int noOfParts, String customStyle) { + StringBuilder mainStyle = new StringBuilder(); + StringBuilder styleName = new StringBuilder(GwtDistributionBar.CLASSNAME); + if (noOfParts == 1) { + styleName.append("-only"); + } else if (partIndex == 1) { + styleName.append("-left"); + } else if (partIndex == noOfParts) { + styleName.append("-right"); + } else { + styleName.append("-middle"); + } + mainStyle.append(styleName).append(" "); + mainStyle.append(DISTRIBUTION_BAR_PART_MAIN_STYLE).append(" "); + mainStyle.append(DISTRIBUTION_BAR_PART_CLASSNAME_PREFIX + partIndex); + if (customStyle != null) { + mainStyle.append(" ").append("status-bar-part-" + customStyle); + } + return mainStyle.toString(); + } + + private static String getPartWidth(Long value, Long totalValue, int noOfParts) { + final double minTotalSize = MINIMUM_PART_SIZE * noOfParts; + final double availableSize = PARENT_SIZE_IN_PCT - minTotalSize; + double val = MINIMUM_PART_SIZE + (double) value / totalValue * availableSize; + return String.format("%.3f", val) + "%"; + } + + private static String getPart(int partIndex, Status status, Long value, Long totalValue, int noOfParts) { + String partValue = status.toString().toLowerCase(); + // return "
" + value + + // "
"; + return "
" + value + "
"; + } + + public static String getDistributionBarAsHTMLString(Map statusTotalCountMap) { + StringBuilder htmlString = new StringBuilder(); + htmlString.append(getParentDivStart()); + Long totalValue = getTotalSizes(statusTotalCountMap); + Map statusMapWithNonZeroValues = getNonZeroStatusList(statusTotalCountMap); + + if (statusMapWithNonZeroValues.size() > 0) { + int partIndex = 1; + for (Map.Entry entry : statusMapWithNonZeroValues.entrySet()) { + if (entry.getValue() > 0) { + htmlString.append(getPart(partIndex, entry.getKey(), entry.getValue(), totalValue, + statusMapWithNonZeroValues.size())); + partIndex++; + } + } + } else { + return getUnintialisedBar(); + } + htmlString.append(getParentDivEnd()); + return htmlString.toString(); + } + + public static Map getNonZeroStatusList(Map statusTotalCountMap) { + return statusTotalCountMap.entrySet().stream().filter(p -> p.getValue() > 0) + .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())); + } + + + public static String getTooltip(Map statusCountMap) { + Map nonZeroStatusCountMap = DistributionBarHelper.getNonZeroStatusList(statusCountMap); + StringBuilder tooltip = new StringBuilder(); + for (Entry entry : nonZeroStatusCountMap.entrySet()) { + tooltip.append(entry.getKey().toString().toLowerCase()).append(" : ").append(entry.getValue()) + .append("
"); + } + return tooltip.toString(); + } + + private static String getUnintialisedBar() { + return "
uninitialized
"; + } + + private static Long getTotalSizes(Map statusTotalCountMap) { + Long total = 0L; + for (Long value : statusTotalCountMap.values()) { + total = total + value; + } + return total; + } + + private static String getParentDivStart() { + return "
"; + } + + private static String getParentDivEnd() { + return "
"; + } + +} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListTable.java deleted file mode 100644 index 6bfcc70b2..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListTable.java +++ /dev/null @@ -1,364 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.eventbus.event.RolloutGroupChangeEvent; -import org.eclipse.hawkbit.repository.RolloutGroupManagement; -import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; -import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; -import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.TableColumn; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; -import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; -import org.vaadin.alump.distributionbar.DistributionBar; -import org.vaadin.spring.events.EventBus; -import org.vaadin.spring.events.EventScope; -import org.vaadin.spring.events.annotation.EventBusListenerMethod; - -import com.vaadin.data.Container; -import com.vaadin.data.Item; -import com.vaadin.data.Property; -import com.vaadin.server.FontAwesome; -import com.vaadin.shared.ui.label.ContentMode; -import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Button; -import com.vaadin.ui.Component; -import com.vaadin.ui.Label; -import com.vaadin.ui.themes.ValoTheme; - -/** - * Rollout Group Table in List view. - * - */ -@SpringComponent -@ViewScope -public class RolloutGroupListTable extends AbstractSimpleTable { - - private static final String IS_ACTION_RECIEVED = "isActionRecieved"; - - private static final long serialVersionUID = 1182656768844867443L; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient RolloutGroupManagement rolloutGroupManagement; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - if (event == RolloutEvent.SHOW_ROLLOUT_GROUPS) { - ((LazyQueryContainer) getContainerDataSource()).refresh(); - } - } - - /** - * - * Handles the RolloutGroupChangeEvent to refresh the item in the table. - * - * - * @param rolloutGroupChangeEvent - * the event which contains the rollout group which has been - * change - */ - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutGroupChangeEvent rolloutGroupChangeEvent) { - final List visibleItemIds = (List) getVisibleItemIds(); - if (visibleItemIds.contains(rolloutGroupChangeEvent.getRolloutGroupId())) { - final RolloutGroup rolloutGroup = rolloutGroupManagement - .findRolloutGroupWithDetailedStatus(rolloutGroupChangeEvent.getRolloutGroupId()); - final TotalTargetCountStatus totalTargetCountStatus = rolloutGroup.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutGroup.getId()); - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_RUNNING).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.RUNNING)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_ERROR) - .setValue(totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.ERROR)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_FINISHED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.FINISHED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_NOT_STARTED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.NOTSTARTED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_CANCELLED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.CANCELLED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_SCHEDULED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.SCHEDULED)); - item.getItemProperty(IS_ACTION_RECIEVED) - .setValue(!(Boolean) item.getItemProperty(IS_ACTION_RECIEVED).getValue()); - } - } - - @Override - protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUIDefinitions.ROLLOUT_GROUP_NAME, i18n.get("header.name"), 0.1f)); - columnList.add(new TableColumn(SPUIDefinitions.ROLLOUT_GROUP_STATUS, i18n.get("header.status"), 0.1f)); - columnList.add(new TableColumn(SPUIDefinitions.DETAIL_STATUS, i18n.get("header.detail.status"), 0.42f)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS, i18n.get("header.total.targets"), 0.08f)); - columnList.add(new TableColumn(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, - i18n.get("header.rolloutgroup.installed.percentage"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, - i18n.get("header.rolloutgroup.threshold.error"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, - i18n.get("header.rolloutgroup.threshold"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_USER, i18n.get("header.createdBy"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.15f)); - return columnList; - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutGroupBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), rolloutQf); - } - - @Override - protected void addContainerProperties(final Container container) { - final LazyQueryContainer rolloutGroupGridContainer = (LazyQueryContainer) container; - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutGroupStatus.class, null, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_INSTALLED_PERCENTAGE, String.class, - null, false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_ERROR_THRESHOLD, String.class, null, - false, false); - - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD, String.class, null, false, - false); - - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_NOT_STARTED, Long.class, 0L, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_RUNNING, Long.class, 0L, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_SCHEDULED, Long.class, 0L, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_ERROR, Long.class, 0L, false, - false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_FINISHED, Long.class, 0L, - false, false); - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_CANCELLED, Long.class, 0L, - false, false); - rolloutGroupGridContainer.addContainerProperty(IS_ACTION_RECIEVED, Boolean.class, false, false, false); - - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - - rolloutGroupGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, - TotalTargetCountStatus.class, null, false, false); - - } - - @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_TABLE_ID; - } - - @Override - protected void onValueChange() { - /** - * No implementation required. - */ - } - - @Override - protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUIDefinitions.ROLLOUT_GROUP_NAME, - (source, itemId, columnId) -> getRolloutNameLink(itemId)); - addGeneratedColumn(SPUIDefinitions.ROLLOUT_GROUP_STATUS, (source, itemId, columnId) -> getStatusLabel(itemId)); - addGeneratedColumn(SPUIDefinitions.DETAIL_STATUS, (source, itemId, columnId) -> getProgressBar(itemId)); - setColumnAlignment(SPUIDefinitions.ROLLOUT_GROUP_STATUS, Align.CENTER); - - } - - private Label getStatusLabel(final Object itemId) { - final Label statusLabel = new Label(); - statusLabel.setHeightUndefined(); - statusLabel.setContentMode(ContentMode.HTML); - setStatusIcon(itemId, statusLabel); - statusLabel.setDescription(getDescription(itemId)); - statusLabel.setSizeUndefined(); - addPropertyChangeListener(itemId, statusLabel); - return statusLabel; - } - - private void addPropertyChangeListener(final Object itemId, final Label statusLabel) { - final Property status = getContainerProperty(itemId, SPUILabelDefinitions.VAR_STATUS); - final Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) status; - notifier.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(final com.vaadin.data.Property.ValueChangeEvent event) { - setStatusIcon(itemId, statusLabel); - } - }); - } - - private String getDescription(final Object itemId) { - final Item item = getItem(itemId); - if (item != null) { - final RolloutGroupStatus rolloutGroupStatus = (RolloutGroupStatus) item - .getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); - return rolloutGroupStatus.toString().toLowerCase(); - } - return null; - } - - private void setStatusIcon(final Object itemId, final Label statusLabel) { - final Item item = getItem(itemId); - if (item != null) { - final RolloutGroupStatus rolloutGroupStatus = (RolloutGroupStatus) item - .getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); - setRolloutStatusIcon(rolloutGroupStatus, statusLabel); - } - } - - private void setRolloutStatusIcon(final RolloutGroupStatus rolloutGroupStatus, final Label statusLabel) { - switch (rolloutGroupStatus) { - case FINISHED: - statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - statusLabel.setStyleName("statusIconGreen"); - break; - case SCHEDULED: - statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); - statusLabel.setStyleName("statusIconBlue"); - break; - case RUNNING: - statusLabel.setValue(FontAwesome.ADJUST.getHtml()); - statusLabel.setStyleName("statusIconYellow"); - break; - case READY: - statusLabel.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); - statusLabel.setStyleName("statusIconLightBlue"); - break; - case ERROR: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.setStyleName("statusIconRed"); - break; - default: - break; - } - statusLabel.addStyleName(ValoTheme.LABEL_SMALL); - } - - private Component getRolloutNameLink(final Object itemId) { - final Item row = getItem(itemId); - final String rolloutGroupName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - if (permissionChecker.hasRolloutTargetsReadPermission()) { - final Button rolloutGroupNameLink = SPUIComponentProvider.getButton(getDetailLinkId(rolloutGroupName), - rolloutGroupName, SPUILabelDefinitions.SHOW_ROLLOUT_GROUP_DETAILS, null, false, null, - SPUIButtonStyleSmallNoBorder.class); - rolloutGroupNameLink.setData(rolloutGroupName); - rolloutGroupNameLink.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - rolloutGroupNameLink.addClickListener(event -> showRolloutGroups(itemId)); - return rolloutGroupNameLink; - } else { - final Label rolloutGroupNameLabel = new Label(); - rolloutGroupNameLabel.setHeightUndefined(); - rolloutGroupNameLabel.addStyleName(ValoTheme.LABEL_SMALL); - rolloutGroupNameLabel.setValue(rolloutGroupName); - return rolloutGroupNameLabel; - } - } - - private void showRolloutGroups(final Object itemId) { - rolloutUIState.setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) itemId)); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); - } - - private DistributionBar getProgressBar(final Object itemId) { - final DistributionBar bar = new DistributionBar(2); - bar.setSizeFull(); - bar.setZeroSizedVisible(false); - HawkbitCommonUtil.initialiseProgressBar(bar, getItem(itemId)); - addPropertyChangeListenerOnActionRecieved(itemId, bar); - return bar; - } - - private void addPropertyChangeListenerOnActionRecieved(final Object itemId, final DistributionBar bar) { - final Property status = getContainerProperty(itemId, IS_ACTION_RECIEVED); - final Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) status; - notifier.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(final com.vaadin.data.Property.ValueChangeEvent event) { - HawkbitCommonUtil.initialiseProgressBar(bar, getItem(itemId)); - } - }); - } - - private static String getDetailLinkId(final String rolloutGroupName) { - return new StringBuilder(SPUIComponetIdProvider.ROLLOUT_GROUP_NAME_LINK_ID).append('.').append(rolloutGroupName) - .toString(); - } - - @Override - protected void setCollapsiblecolumns() { - setColumnCollapsed(SPUILabelDefinitions.VAR_CREATED_DATE, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_MODIFIED_DATE, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_CREATED_USER, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_MODIFIED_BY, true); - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java deleted file mode 100644 index a8ad99ec5..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListTable.java +++ /dev/null @@ -1,231 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.repository.model.Action.Status; -import org.eclipse.hawkbit.repository.model.RolloutGroup; -import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; -import org.eclipse.hawkbit.repository.model.TargetUpdateStatus; -import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; -import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.TableColumn; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; -import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; -import org.vaadin.spring.events.EventBus; -import org.vaadin.spring.events.EventScope; -import org.vaadin.spring.events.annotation.EventBusListenerMethod; - -import com.vaadin.data.Container; -import com.vaadin.data.Item; -import com.vaadin.server.FontAwesome; -import com.vaadin.shared.ui.label.ContentMode; -import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Label; -import com.vaadin.ui.themes.ValoTheme; - -/** - * Rollout Group Targets Table in List view. - * - */ -@SpringComponent -@ViewScope -public class RolloutGroupTargetsListTable extends AbstractSimpleTable { - - private static final long serialVersionUID = 7984314603271801746L; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - if (event == RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS) { - ((LazyQueryContainer) getContainerDataSource()).refresh(); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS_COUNT); - } - } - - @Override - protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NAME, i18n.get("header.name"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_BY, i18n.get("header.createdBy"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.15f)); - columnList - .add(new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.15f)); - columnList.add( - new TableColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.15f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.15f)); - - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_TARGET_STATUS, i18n.get("header.status"), 0.1f)); - - return columnList; - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutgrouBeanQueryFactory = new BeanQueryFactory<>( - RolloutGroupTargetsBeanQuery.class); - return new LazyQueryContainer( - new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_ID), - rolloutgrouBeanQueryFactory); - } - - @Override - protected void addContainerProperties(final Container container) { - final LazyQueryContainer rolloutGroupTargetTableContainer = (LazyQueryContainer) container; - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CONT_ID, String.class, "", false, - false); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, - true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, Status.class, - Status.RETRIEVED, false, false); - - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_TARGET_STATUS, - TargetUpdateStatus.class, TargetUpdateStatus.UNKNOWN, false, false); - - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - String.class, "", false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_BY, String.class, null, - false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY, String.class, - null, false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, - false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE, String.class, - null, false, true); - rolloutGroupTargetTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, - true); - } - - @Override - protected String getTableId() { - - return SPUIComponetIdProvider.ROLLOUT_GROUP_TARGETS_LIST_TABLE_ID; - } - - @Override - protected void onValueChange() { - // No implementation required. - - } - - @Override - protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUILabelDefinitions.VAR_TARGET_STATUS, - (source, itemId, columnId) -> getStatusLabel(itemId)); - setColumnAlignment(SPUILabelDefinitions.VAR_TARGET_STATUS, Align.CENTER); - } - - @Override - protected void setCollapsiblecolumns() { - // No implementation required. - } - - private Label getStatusLabel(final Object itemId) { - final Label statusLabel = new Label(); - statusLabel.addStyleName(ValoTheme.LABEL_SMALL); - statusLabel.setHeightUndefined(); - statusLabel.setContentMode(ContentMode.HTML); - setStatusIcon(itemId, statusLabel); - statusLabel.setSizeUndefined(); - return statusLabel; - } - - private void setStatusIcon(final Object itemId, final Label statusLabel) { - final Item item = getItem(itemId); - final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() - ? rolloutUIState.getRolloutGroup().get() : null; - if (item != null) { - final Status status = (Status) item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); - if (status == null) { - if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { - statusLabel.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); - statusLabel.addStyleName("statusIconLightBlue"); - statusLabel.setDescription(RolloutGroupStatus.READY.toString().toLowerCase()); - } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - statusLabel.setValue(FontAwesome.MINUS_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconBlue"); - - final String dsNameVersion = (String) item - .getItemProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).getValue(); - statusLabel - .setDescription(i18n.get("message.dist.already.assigned", new Object[] { dsNameVersion })); - } - } else { - setRolloutStatusIcon(status, statusLabel); - statusLabel.setDescription(status.toString().toLowerCase()); - } - } - } - - private void setRolloutStatusIcon(final Status targetUpdateStatus, final Label statusLabel) { - switch (targetUpdateStatus) { - case ERROR: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconRed"); - break; - case SCHEDULED: - statusLabel.setValue(FontAwesome.BULLSEYE.getHtml()); - statusLabel.addStyleName("statusIconBlue"); - break; - case FINISHED: - statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconGreen"); - break; - case RUNNING: - case RETRIEVED: - case WARNING: - case DOWNLOAD: - statusLabel.setValue(FontAwesome.ADJUST.getHtml()); - statusLabel.addStyleName("statusIconYellow"); - break; - case CANCELED: - statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconGreen"); - break; - case CANCELING: - statusLabel.setValue(FontAwesome.TIMES_CIRCLE.getHtml()); - statusLabel.addStyleName("statusIconPending"); - break; - default: - break; - } - } -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListTable.java deleted file mode 100644 index 5b5602748..000000000 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListTable.java +++ /dev/null @@ -1,552 +0,0 @@ -/** - * Copyright (c) 2015 Bosch Software Innovations GmbH and others. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - */ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.PostConstruct; -import javax.annotation.PreDestroy; - -import org.eclipse.hawkbit.eventbus.event.RolloutChangeEvent; -import org.eclipse.hawkbit.repository.RolloutManagement; -import org.eclipse.hawkbit.repository.SpPermissionChecker; -import org.eclipse.hawkbit.repository.model.Rollout; -import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; -import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; -import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; -import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; -import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; -import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; -import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; -import org.eclipse.hawkbit.ui.utils.I18N; -import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; -import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; -import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; -import org.eclipse.hawkbit.ui.utils.TableColumn; -import org.eclipse.hawkbit.ui.utils.UINotification; -import org.springframework.beans.factory.annotation.Autowired; -import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; -import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; -import org.vaadin.addons.lazyquerycontainer.LazyQueryDefinition; -import org.vaadin.alump.distributionbar.DistributionBar; -import org.vaadin.peter.contextmenu.ContextMenu; -import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItem; -import org.vaadin.peter.contextmenu.ContextMenu.ContextMenuItemClickEvent; -import org.vaadin.spring.events.EventBus; -import org.vaadin.spring.events.EventScope; -import org.vaadin.spring.events.annotation.EventBusListenerMethod; - -import com.vaadin.data.Container; -import com.vaadin.data.Item; -import com.vaadin.data.Property; -import com.vaadin.server.FontAwesome; -import com.vaadin.shared.ui.label.ContentMode; -import com.vaadin.spring.annotation.SpringComponent; -import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Button; -import com.vaadin.ui.Button.ClickEvent; -import com.vaadin.ui.Label; -import com.vaadin.ui.UI; -import com.vaadin.ui.Window; -import com.vaadin.ui.themes.ValoTheme; - -/** - * - * Rollout table in list view. - * - */ -@SpringComponent -@ViewScope -public class RolloutListTable extends AbstractSimpleTable { - - private static final String IS_ACTION_RECIEVED = "isActionRecieved"; - - private static final long serialVersionUID = 8141874975649180139L; - - @Autowired - private I18N i18n; - - @Autowired - private transient EventBus.SessionEventBus eventBus; - - @Autowired - private transient RolloutManagement rolloutManagement; - - @Autowired - private AddUpdateRolloutWindowLayout addUpdateRolloutWindow; - - @Autowired - private UINotification uiNotification; - - @Autowired - private transient RolloutUIState rolloutUIState; - - @Autowired - private transient SpPermissionChecker permissionChecker; - - @Override - @PostConstruct - protected void init() { - super.init(); - eventBus.subscribe(this); - } - - @PreDestroy - void destroy() { - eventBus.unsubscribe(this); - } - - @EventBusListenerMethod(scope = EventScope.SESSION) - void onEvent(final RolloutEvent event) { - if (event == RolloutEvent.FILTER_BY_TEXT || event == RolloutEvent.CREATE_ROLLOUT - || event == RolloutEvent.UPDATE_ROLLOUT || event == RolloutEvent.SHOW_ROLLOUTS) { - refreshTable(); - } - } - - /** - * Handles the RolloutChangeEvent to refresh the item in the table. - * - * @param rolloutChangeEvent - * the event which contains the rollout which has been changed - */ - @EventBusListenerMethod(scope = EventScope.SESSION) - public void onEvent(final RolloutChangeEvent rolloutChangeEvent) { - final List visibleItemIds = (List) getVisibleItemIds(); - if (visibleItemIds.contains(rolloutChangeEvent.getRolloutId())) { - final Rollout rollout = rolloutManagement.findRolloutWithDetailedStatus(rolloutChangeEvent.getRolloutId()); - final TotalTargetCountStatus totalTargetCountStatus = rollout.getTotalTargetCountStatus(); - final LazyQueryContainer rolloutContainer = (LazyQueryContainer) getContainerDataSource(); - final Item item = rolloutContainer.getItem(rolloutChangeEvent.getRolloutId()); - item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rollout.getStatus()); - - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_RUNNING).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.RUNNING)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_ERROR).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.ERROR)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_FINISHED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.FINISHED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_NOT_STARTED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.NOTSTARTED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_CANCELLED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.CANCELLED)); - item.getItemProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_SCHEDULED).setValue( - totalTargetCountStatus.getTotalTargetCountByStatus(TotalTargetCountStatus.Status.SCHEDULED)); - item.getItemProperty(IS_ACTION_RECIEVED).setValue( - !(Boolean) item.getItemProperty(IS_ACTION_RECIEVED).getValue()); - - final Long groupCount = (Long) item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).getValue(); - if (null != rollout.getRolloutGroups() && groupCount != rollout.getRolloutGroups().size()) { - item.getItemProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS).setValue( - Long.valueOf(rollout.getRolloutGroups().size())); - } - } - } - - @Override - protected List getTableVisibleColumns() { - final List columnList = new ArrayList<>(); - columnList.add(new TableColumn(SPUIDefinitions.ROLLOUT_NAME, i18n.get("header.name"), 0.225f)); - - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, i18n.get("header.distributionset"), - 0.225f)); - columnList.add(new TableColumn(SPUIDefinitions.ROLLOUT_STATUS, i18n.get("header.status"), 0.07f)); - columnList.add(new TableColumn(SPUIDefinitions.DETAIL_STATUS, i18n.get("header.detail.status"), 0.58f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, i18n.get("header.numberofgroups"), - 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS, i18n.get("header.total.targets"), 0.1f)); - columnList.add(new TableColumn(SPUIDefinitions.ROLLOUT_ACTION, i18n.get("upload.action"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_DATE, i18n.get("header.createdDate"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_CREATED_USER, i18n.get("header.createdBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_MODIFIED_DATE, i18n.get("header.modifiedDate"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_MODIFIED_BY, i18n.get("header.modifiedBy"), 0.1f)); - columnList.add(new TableColumn(SPUILabelDefinitions.VAR_DESC, i18n.get("header.description"), 0.1f)); - return columnList; - } - - @Override - protected Container createContainer() { - final BeanQueryFactory rolloutQf = new BeanQueryFactory<>(RolloutBeanQuery.class); - return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, - SPUILabelDefinitions.VAR_ID), rolloutQf); - - } - - @Override - protected void addContainerProperties(final Container container) { - final LazyQueryContainer rolloutTableContainer = (LazyQueryContainer) container; - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_ID, String.class, null, false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_NAME, String.class, "", false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, null, false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_STATUS, RolloutStatus.class, null, false, - false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_DIST_NAME_VERSION, String.class, null, - false, false); - - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_TARGETFILTERQUERY, String.class, null, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_DATE, String.class, null, false, - false); - - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_DATE, String.class, null, false, - false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_CREATED_USER, String.class, null, false, - false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_MODIFIED_BY, String.class, null, false, - false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_NUMBER_OF_GROUPS, Integer.class, 0, false, - false); - - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_NOT_STARTED, Long.class, 0L, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_RUNNING, Long.class, 0L, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_SCHEDULED, Long.class, 0L, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_ERROR, Long.class, 0L, false, - false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_FINISHED, Long.class, 0L, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_COUNT_TARGETS_CANCELLED, Long.class, 0L, - false, false); - rolloutTableContainer.addContainerProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS, String.class, "0", false, - false); - - } - - @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; - } - - @Override - protected void onValueChange() { - /** - * No implementation required. - */ - } - - @Override - protected void addCustomGeneratedColumns() { - addGeneratedColumn(SPUIDefinitions.ROLLOUT_NAME, (source, itemId, columnId) -> getRolloutNameLink(itemId)); - addGeneratedColumn(SPUIDefinitions.ROLLOUT_STATUS, (source, itemId, columnId) -> getStatusLabel(itemId)); - addGeneratedColumn(SPUIDefinitions.DETAIL_STATUS, (source, itemId, columnId) -> getProgressBar(itemId)); - addGeneratedColumn(SPUIDefinitions.ROLLOUT_ACTION, (source, itemId, columnId) -> getActionButton(itemId)); - - setColumnAlignment(SPUIDefinitions.ROLLOUT_STATUS, Align.CENTER); - setColumnAlignment(SPUIDefinitions.DETAIL_STATUS, Align.CENTER); - setColumnAlignment(SPUIDefinitions.ROLLOUT_ACTION, Align.CENTER); - - } - - @Override - protected void setCollapsiblecolumns() { - setColumnCollapsed(SPUILabelDefinitions.VAR_CREATED_DATE, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_MODIFIED_DATE, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_CREATED_USER, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_MODIFIED_BY, true); - setColumnCollapsed(SPUILabelDefinitions.VAR_DESC, true); - } - - private Button getActionButton(final Object itemId) { - final Item row = getItem(itemId); - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - final Button actionButton = SPUIComponentProvider.getButton(getActionButtonId(rolloutName), "", - SPUILabelDefinitions.ACTION, ValoTheme.BUTTON_TINY + " ", true, FontAwesome.CIRCLE_O, - SPUIButtonStyleSmallNoBorder.class); - actionButton.setData(itemId); - actionButton.setHtmlContentAllowed(true); - actionButton.addClickListener(event -> onAction(event)); - addStatusPropertyChangeListener(itemId, actionButton); - - final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) - .getValue(); - enableDisableActions(rolloutStatus, actionButton); - return actionButton; - } - - private void enableDisableActions(final RolloutStatus rolloutStatus, final Button actionButton) { - final RolloutStatus[] statusList = new RolloutStatus[] { RolloutStatus.FINISHED, RolloutStatus.STARTING, - RolloutStatus.CREATING, RolloutStatus.ERROR_CREATING, RolloutStatus.ERROR_STARTING }; - if (Arrays.asList(statusList).contains(rolloutStatus)) { - actionButton.setEnabled(false); - } else { - actionButton.setEnabled(true); - } - } - - private void addStatusPropertyChangeListener(final Object itemId, final Button actionButton) { - final Property status = getContainerProperty(itemId, SPUILabelDefinitions.VAR_STATUS); - final Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) status; - notifier.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(final com.vaadin.data.Property.ValueChangeEvent event) { - final Item row = getItem(itemId); - final RolloutStatus rolloutStatus = (RolloutStatus) row - .getItemProperty(SPUILabelDefinitions.VAR_STATUS).getValue(); - enableDisableActions(rolloutStatus, actionButton); - } - }); - } - - private ContextMenu createContextMenu(final Long rolloutId) { - final Item row = getItem(rolloutId); - final RolloutStatus rolloutStatus = (RolloutStatus) row.getItemProperty(SPUILabelDefinitions.VAR_STATUS) - .getValue(); - final ContextMenu context = new ContextMenu(); - context.addItemClickListener(event -> menuItemClicked(event)); - if (rolloutStatus == RolloutStatus.READY) { - final ContextMenuItem startItem = context.addItem("Start"); - startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); - } else if (rolloutStatus == RolloutStatus.RUNNING) { - final ContextMenuItem pauseItem = context.addItem("Pause"); - pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); - } else if (rolloutStatus == RolloutStatus.PAUSED) { - final ContextMenuItem resumeItem = context.addItem("Resume"); - resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); - } else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) { - return context; - } - if (permissionChecker.hasRolloutUpdatePermission()) { - final ContextMenuItem cancelItem = context.addItem("Update"); - cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); - } - return context; - } - - private void menuItemClicked(final ContextMenuItemClickEvent event) { - final ContextMenuItem item = (ContextMenuItem) event.getSource(); - final ContextMenuData contextMenuData = (ContextMenuData) item.getData(); - final Item row = getItem(contextMenuData.getRolloutId()); - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - - if (contextMenuData.getAction() == ACTION.PAUSE) { - rolloutManagement.pauseRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); - uiNotification.displaySuccess(i18n.get("message.rollout.paused", rolloutName)); - } else if (contextMenuData.getAction() == ACTION.RESUME) { - rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(contextMenuData.getRolloutId())); - uiNotification.displaySuccess(i18n.get("message.rollout.resumed", rolloutName)); - } else if (contextMenuData.getAction() == ACTION.START) { - rolloutManagement.startRolloutAsync(rolloutManagement.findRolloutByName(rolloutName)); - uiNotification.displaySuccess(i18n.get("message.rollout.started", rolloutName)); - } else if (contextMenuData.getAction() == ACTION.UPDATE) { - addUpdateRolloutWindow.populateData(contextMenuData.getRolloutId()); - final Window addTargetWindow = addUpdateRolloutWindow.getWindow(); - addTargetWindow.setCaption(i18n.get("caption.update.rollout")); - UI.getCurrent().addWindow(addTargetWindow); - addTargetWindow.setVisible(Boolean.TRUE); - } - } - - private void onAction(final ClickEvent event) { - final ContextMenu contextMenu = createContextMenu((Long) event.getButton().getData()); - contextMenu.setAsContextMenuOf(event.getButton()); - contextMenu.open(event.getClientX(), event.getClientY()); - } - - private Button getRolloutNameLink(final Object itemId) { - final Item row = getItem(itemId); - final String rolloutName = (String) row.getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - final Button updateIcon = SPUIComponentProvider.getButton(getDetailLinkId(rolloutName), rolloutName, - SPUILabelDefinitions.SHOW_ROLLOUT_GROUP_DETAILS, null, false, null, SPUIButtonStyleSmallNoBorder.class); - updateIcon.setData(rolloutName); - updateIcon.addStyleName(ValoTheme.LINK_SMALL + " " + "on-focus-no-border link"); - updateIcon.addClickListener(event -> showRolloutGroups(itemId)); - return updateIcon; - } - - private void showRolloutGroups(final Object itemId) { - rolloutUIState.setRolloutId((long) itemId); - final String rolloutName = (String) getItem(itemId).getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - rolloutUIState.setRolloutName(rolloutName); - eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUPS); - } - - private static String getActionButtonId(final String rollOutName) { - return new StringBuilder(SPUIComponetIdProvider.ROLLOUT_ACTION_BUTTON_ID).append('.').append(rollOutName) - .toString(); - } - - private static String getDetailLinkId(final String rollOutName) { - return new StringBuilder(SPUIComponetIdProvider.ROLLOUT_NAME_LINK_ID).append('.').append(rollOutName) - .toString(); - } - - private DistributionBar getProgressBar(final Object itemId) { - final DistributionBar bar = new DistributionBar(2); - bar.setId(SPUIComponetIdProvider.ROLLOUT_PROGRESS_BAR); - bar.setSizeFull(); - bar.setZeroSizedVisible(false); - HawkbitCommonUtil.initialiseProgressBar(bar, getItem(itemId)); - addPropertyChangeListenerOnActionRecieved(itemId, bar); - return bar; - } - - private void addPropertyChangeListenerOnActionRecieved(final Object itemId, final DistributionBar bar) { - final Property status = getContainerProperty(itemId, IS_ACTION_RECIEVED); - final Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) status; - notifier.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(final com.vaadin.data.Property.ValueChangeEvent event) { - HawkbitCommonUtil.initialiseProgressBar(bar, getItem(itemId)); - } - }); - } - - private Label getStatusLabel(final Object itemId) { - final Label statusLabel = new Label(); - statusLabel.setHeightUndefined(); - statusLabel.setContentMode(ContentMode.HTML); - statusLabel.setId(getRolloutStatusId(itemId)); - setStatusIcon(itemId, statusLabel); - statusLabel.setSizeUndefined(); - addPropertyChangeListener(itemId, statusLabel); - return statusLabel; - } - - private void addPropertyChangeListener(final Object itemId, final Label statusLabel) { - final Property status = getContainerProperty(itemId, SPUILabelDefinitions.VAR_STATUS); - final Property.ValueChangeNotifier notifier = (Property.ValueChangeNotifier) status; - notifier.addValueChangeListener(new ValueChangeListener() { - @Override - public void valueChange(final com.vaadin.data.Property.ValueChangeEvent event) { - setStatusIcon(itemId, statusLabel); - } - }); - } - - private String getRolloutStatusId(final Object itemId) { - final String rolloutName = (String) getItem(itemId).getItemProperty(SPUILabelDefinitions.VAR_NAME).getValue(); - return new StringBuilder(SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID).append(".").append(rolloutName) - .toString(); - } - - private void setStatusIcon(final Object itemId, final Label statusLabel) { - final Item item = getItem(itemId); - if (item != null) { - final RolloutStatus rolloutStatus = (RolloutStatus) item.getItemProperty(SPUILabelDefinitions.VAR_STATUS) - .getValue(); - setRolloutStatusIcon(rolloutStatus, statusLabel); - } - } - - private void setRolloutStatusIcon(final RolloutStatus rolloutStatus, final Label statusLabel) { - statusLabel.setDescription(rolloutStatus.toString().toLowerCase()); - switch (rolloutStatus) { - case FINISHED: - statusLabel.setValue(FontAwesome.CHECK_CIRCLE.getHtml()); - statusLabel.setStyleName("statusIconGreen"); - break; - case PAUSED: - statusLabel.setValue(FontAwesome.PAUSE.getHtml()); - statusLabel.setStyleName("statusIconBlue"); - break; - case RUNNING: - statusLabel.setValue(null); - statusLabel.setStyleName("yellowSpinner"); - break; - case READY: - statusLabel.setValue(FontAwesome.DOT_CIRCLE_O.getHtml()); - statusLabel.setStyleName("statusIconLightBlue"); - break; - case STOPPED: - statusLabel.setValue(FontAwesome.STOP.getHtml()); - statusLabel.setStyleName("statusIconRed"); - break; - case CREATING: - statusLabel.setValue(null); - statusLabel.setStyleName("greySpinner"); - break; - case STARTING: - statusLabel.setValue(null); - statusLabel.setStyleName("blueSpinner"); - break; - case ERROR_CREATING: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.setStyleName("statusIconRed"); - statusLabel.setDescription(i18n.get("message.error.creating.rollout")); - break; - case ERROR_STARTING: - statusLabel.setValue(FontAwesome.EXCLAMATION_CIRCLE.getHtml()); - statusLabel.setStyleName("statusIconRed"); - statusLabel.setDescription(i18n.get("message.error.starting.rollout")); - break; - default: - break; - } - statusLabel.addStyleName(ValoTheme.LABEL_SMALL); - } - - private void refreshTable() { - final LazyQueryContainer container = (LazyQueryContainer) getContainerDataSource(); - container.refresh(); - } - - enum ACTION { - PAUSE, RESUME, START, UPDATE - } - - /** - * Represents data of context menu item. - * - */ - public static class ContextMenuData { - - private Long rolloutId; - - private ACTION action; - - /** - * Set rollout if and action. - * - * @param rolloutId - * id of rollout - * @param action - * user action {@link ACTION} - */ - public ContextMenuData(final Long rolloutId, final ACTION action) { - this.action = action; - this.rolloutId = rolloutId; - } - - /** - * @return the rolloutId - */ - public Long getRolloutId() { - return rolloutId; - } - - /** - * @param rolloutId - * the rolloutId to set - */ - public void setRolloutId(final Long rolloutId) { - this.rolloutId = rolloutId; - } - - /** - * @return the action - */ - public ACTION getAction() { - return action; - } - - /** - * @param action - * the action to set - */ - public void setAction(final ACTION action) { - this.action = action; - } - - } - -} diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java index 98e009dad..1d514c545 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutView.java @@ -13,6 +13,9 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.ui.HawkbitUI; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; +import org.eclipse.hawkbit.ui.rollout.rollout.RolloutListView; +import org.eclipse.hawkbit.ui.rollout.rolloutgroup.RolloutGroupsListView; +import org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets.RolloutGroupTargetsListView; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.spring.events.EventBus; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AddUpdateRolloutWindowLayout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java similarity index 99% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AddUpdateRolloutWindowLayout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java index d0cddfb19..507c39b7f 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/AddUpdateRolloutWindowLayout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/AddUpdateRolloutWindowLayout.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import java.text.SimpleDateFormat; import java.util.Date; @@ -646,7 +646,7 @@ public class AddUpdateRolloutWindowLayout extends CustomComponent { } private Container createDsComboContainer() { - final BeanQueryFactory distributionQF = new BeanQueryFactory<>(DistBeanQuery.class); + final BeanQueryFactory distributionQF = new BeanQueryFactory<>(DistributionBeanQuery.class); return new LazyQueryContainer(new LazyQueryDefinition(true, SPUIDefinitions.PAGE_SIZE, SPUILabelDefinitions.VAR_DIST_ID_NAME), distributionQF); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java similarity index 96% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java index 6226471ac..74daf89d8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/DistBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/DistributionBeanQuery.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import java.io.IOException; import java.io.ObjectInputStream; @@ -34,7 +34,7 @@ import org.vaadin.addons.lazyquerycontainer.QueryDefinition; * Bean query for distribution set combo. * */ -public class DistBeanQuery extends AbstractBeanQuery { +public class DistributionBeanQuery extends AbstractBeanQuery { private static final long serialVersionUID = 5176481314404662215L; private Sort sort = new Sort(Direction.ASC, "name", "version"); @@ -53,7 +53,7 @@ public class DistBeanQuery extends AbstractBeanQuery { * @param sortStates * as Sort status */ - public DistBeanQuery(final QueryDefinition definition, final Map queryConfig, + public DistributionBeanQuery(final QueryDefinition definition, final Map queryConfig, final Object[] sortPropertyIds, final boolean[] sortStates) { super(definition, queryConfig, sortPropertyIds, sortStates); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java similarity index 79% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java index c3080b789..b1309f8b9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRollout.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/ProxyRollout.java @@ -6,10 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; - -import java.util.HashMap; -import java.util.Map; +package org.eclipse.hawkbit.ui.rollout.rollout; import org.eclipse.hawkbit.repository.model.Rollout; @@ -35,13 +32,6 @@ public class ProxyRollout extends Rollout { private String totalTargetsCount; - //TODO remove this - private DistributionBarDetails distributionBarDetails ; - - //TODO remove this - private Map statusTotalCountMap = new HashMap<>(); - - /** * @return the distributionSetNameVersion */ @@ -132,26 +122,9 @@ public class ProxyRollout extends Rollout { this.totalTargetsCount = totalTargetsCount; } - public Map getStatusTotalCountMap() { - return statusTotalCountMap; - } - public void setStatusTotalCountMap(Map statusTotalCountMap) { - this.statusTotalCountMap = statusTotalCountMap; - } - - public DistributionBarDetails getDistributionBarDetails() { - return distributionBarDetails; - } - - public void setDistributionBarDetails(DistributionBarDetails distributionBarDetails) { - this.distributionBarDetails = distributionBarDetails; - } - public String getAction() { return FontAwesome.CIRCLE_O.getHtml(); } - - } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java similarity index 99% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java index 254e17352..5ab6f6a97 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutBeanQuery.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java similarity index 90% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 5818bc7cf..5f7b62cef 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import java.util.ArrayList; import java.util.Arrays; @@ -14,11 +14,11 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.Rollout; import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlButtonRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; -import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ACTION; -import org.eclipse.hawkbit.ui.rollout.RolloutListTable.ContextMenuData; +import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -44,18 +44,19 @@ import com.vaadin.data.util.PropertyValueGenerator; import com.vaadin.data.util.converter.Converter; import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; -import com.vaadin.server.Page; -import com.vaadin.server.Page.BrowserWindowResizeEvent; -import com.vaadin.server.Page.BrowserWindowResizeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; +import com.vaadin.ui.Grid.CellDescriptionGenerator; +import com.vaadin.ui.Grid.CellReference; +import com.vaadin.ui.Grid.CellStyleGenerator; import com.vaadin.ui.UI; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope -public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindowResizeListener { +public class RolloutListGrid extends AbstractGrid { private static final long serialVersionUID = 4060904914954370524L; @Autowired @@ -84,8 +85,6 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow protected void init() { super.init(); eventBus.subscribe(this); - Page.getCurrent().addBrowserWindowResizeListener(this); - } @PreDestroy @@ -186,6 +185,8 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow getColumn(SPUILabelDefinitions.ACTION).setMinimumWidth(75); getColumn(SPUILabelDefinitions.ACTION).setMaximumWidth(75); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + setFrozenColumnCount(getColumns().size()); } @@ -231,6 +232,25 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow alignColumns(); } + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + } + private void alignColumns() { setCellStyleGenerator(new CellStyleGenerator() { private static final long serialVersionUID = 5573570647129792429L; @@ -238,7 +258,9 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow @Override public String getStyle(final CellReference cellReference) { String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, - SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, SPUILabelDefinitions.ACTION }; + /* + * SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, + */ SPUILabelDefinitions.ACTION }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; } @@ -298,8 +320,7 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow } private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer( - new org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer(), + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new Converter() { private static final long serialVersionUID = 2660476405836705932L; @@ -314,7 +335,7 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow public String convertToPresentation(TotalTargetCountStatus value, Class targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return HawkbitCommonUtil.getFormattedString(value.getStatusTotalCountMap()); + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } @Override @@ -454,39 +475,6 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow } } - @Override - public void browserWindowResized(BrowserWindowResizeEvent event) { - // Intermediate solution for the column width problem for - // SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS column - // Readding the column - recalculateColumnWidths(); - removeColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - addColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setHeaderCaption(i18n.get("header.detail.status")); - setColumnProperties(); - addDetailStatusColumn(); - } - - @Override - protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - } - private String getDescription(CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); @@ -494,9 +482,71 @@ public class RolloutListGrid extends AbstractSimpleGrid implements BrowserWindow return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); } else { return null; } } + + + enum ACTION { + PAUSE, RESUME, START, UPDATE + } + /** + * Represents data of context menu item. + * + */ + public static class ContextMenuData { + + private Long rolloutId; + + private ACTION action; + + /** + * Set rollout if and action. + * + * @param rolloutId + * id of rollout + * @param action + * user action {@link ACTION} + */ + public ContextMenuData(final Long rolloutId, final ACTION action) { + this.action = action; + this.rolloutId = rolloutId; + } + + /** + * @return the rolloutId + */ + public Long getRolloutId() { + return rolloutId; + } + + /** + * @param rolloutId + * the rolloutId to set + */ + public void setRolloutId(final Long rolloutId) { + this.rolloutId = rolloutId; + } + + /** + * @return the action + */ + public ACTION getAction() { + return action; + } + + /** + * @param action + * the action to set + */ + public void setAction(final ACTION action) { + this.action = action; + } + + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java similarity index 96% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java index 26bf021c4..b3043eb4a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListHeader.java @@ -6,11 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import javax.annotation.PostConstruct; import org.eclipse.hawkbit.repository.SpPermissionChecker; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; @@ -35,7 +36,7 @@ import com.vaadin.ui.Window; */ @SpringComponent @ViewScope -public class RolloutListHeader extends AbstractSimpleTableHeader { +public class RolloutListHeader extends AbstractGridHeader { private static final long serialVersionUID = 2365400733081333174L; @Autowired diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java similarity index 86% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java index 196133683..84aba0aff 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListView.java @@ -6,10 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rollout; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridLayout; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -23,7 +24,7 @@ import com.vaadin.ui.Label; */ @SpringComponent @ViewScope -public class RolloutListView extends AbstractSimpleTableLayout { +public class RolloutListView extends AbstractGridLayout { private static final long serialVersionUID = -2703552177439393208L; @@ -40,7 +41,6 @@ public class RolloutListView extends AbstractSimpleTableLayout { @Override protected boolean hasCountMessage() { - return false; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java similarity index 98% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java index da49d843a..bb802c123 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/ProxyRolloutGroup.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/ProxyRolloutGroup.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import org.eclipse.hawkbit.repository.model.RolloutGroup; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java similarity index 97% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java index a42618c24..0dabb18fc 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupBeanQuery.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import java.util.ArrayList; import java.util.List; @@ -28,7 +28,8 @@ import org.vaadin.addons.lazyquerycontainer.AbstractBeanQuery; import org.vaadin.addons.lazyquerycontainer.QueryDefinition; /** - * @author gah6kor + * Simple implementation of generics bean query which dynamically loads a batch + * of {@link ProxyRolloutGroup} beans. * */ public class RolloutGroupBeanQuery extends AbstractBeanQuery { diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java similarity index 92% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index eb7ec1390..c1b445b7a 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import java.util.ArrayList; import java.util.Arrays; @@ -14,9 +14,10 @@ import org.eclipse.hawkbit.repository.SpPermissionChecker; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; import org.eclipse.hawkbit.repository.model.TotalTargetCountStatus; +import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.customrenderers.renderers.LinkRenderer; -import org.eclipse.hawkbit.ui.customrenderers.renderers.StringDistributionBarRenderer; +import org.eclipse.hawkbit.ui.rollout.DistributionBarHelper; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; import org.eclipse.hawkbit.ui.utils.HawkbitCommonUtil; @@ -36,18 +37,14 @@ import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.data.util.converter.Converter; import com.vaadin.server.FontAwesome; -import com.vaadin.server.Page; -import com.vaadin.server.Page.BrowserWindowResizeEvent; -import com.vaadin.server.Page.BrowserWindowResizeListener; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Grid.CellDescriptionGenerator; -import com.vaadin.ui.Grid.CellReference; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; +import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope -public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserWindowResizeListener { +public class RolloutGroupListGrid extends AbstractGrid { private static final long serialVersionUID = 4060904914954370524L; @Autowired @@ -69,7 +66,6 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW @PostConstruct protected void init() { super.init(); - Page.getCurrent().addBrowserWindowResizeListener(this); eventBus.subscribe(this); } @@ -169,6 +165,8 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMinimumWidth(40); getColumn(SPUILabelDefinitions.ROLLOUT_GROUP_THRESHOLD).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setMinimumWidth(280); + setFrozenColumnCount(7); } @@ -242,6 +240,24 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW } } + @Override + protected void setHiddenColumns() { + List columnsToBeHidden = new ArrayList<>(); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); + columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); + for (Object propertyId : columnsToBeHidden) { + getColumn(propertyId).setHidden(true); + } + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + }; + private void onClickOfRolloutGroupName(RendererClickEvent event) { rolloutUIState .setRolloutGroup(rolloutGroupManagement.findRolloutGroupWithDetailedStatus((Long) event.getItemId())); @@ -313,7 +329,7 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW } private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new StringDistributionBarRenderer(), + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), new Converter() { private static final long serialVersionUID = 2660476405836705932L; @@ -328,7 +344,7 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW public String convertToPresentation(TotalTargetCountStatus value, Class targetType, Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { - return HawkbitCommonUtil.getFormattedString(value.getStatusTotalCountMap()); + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); } @Override @@ -343,38 +359,6 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW }); } - @Override - protected void setHiddenColumns() { - List columnsToBeHidden = new ArrayList<>(); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_CREATED_USER); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_DATE); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_MODIFIED_BY); - columnsToBeHidden.add(SPUILabelDefinitions.VAR_DESC); - for (Object propertyId : columnsToBeHidden) { - getColumn(propertyId).setHidden(true); - } - } - - @Override - public void browserWindowResized(BrowserWindowResizeEvent event) { - // Intermediate solution for the column width problem for - // SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS column - // Readding the column - recalculateColumnWidths(); - removeColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - addColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS); - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) - .setHeaderCaption(i18n.get("header.detail.status")); - setColumnProperties(); - addDetailStatusColumn(); - } - - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - }; - private String getDescription(CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); @@ -382,6 +366,9 @@ public class RolloutGroupListGrid extends AbstractSimpleGrid implements BrowserW return SPUILabelDefinitions.ACTION.toLowerCase(); } else if (SPUILabelDefinitions.VAR_NAME.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString(); + } else if (SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS.equals(cell.getPropertyId())) { + return DistributionBarHelper + .getTooltip(((TotalTargetCountStatus) cell.getValue()).getStatusTotalCountMap()); } else { return null; } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java similarity index 96% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java index 3c89518e1..45c16eeed 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListHeader.java @@ -6,11 +6,12 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -37,7 +38,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class RolloutGroupsListHeader extends AbstractSimpleTableHeader { +public class RolloutGroupsListHeader extends AbstractGridHeader { private static final long serialVersionUID = 5077741997839715209L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java similarity index 86% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java index 17583d9e3..7d7561274 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupsListView.java @@ -6,10 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgroup; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridLayout; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -22,7 +23,7 @@ import com.vaadin.ui.Label; */ @SpringComponent @ViewScope -public class RolloutGroupsListView extends AbstractSimpleTableLayout { +public class RolloutGroupsListView extends AbstractGridLayout { private static final long serialVersionUID = 7252345838154270259L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsBeanQuery.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java similarity index 99% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsBeanQuery.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java index b4d78a4d5..d9c25d943 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsBeanQuery.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsBeanQuery.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; import java.util.ArrayList; import java.util.List; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsCountLabelMessage.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java similarity index 92% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsCountLabelMessage.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java index 9bc24c251..cc6cec189 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsCountLabelMessage.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsCountLabelMessage.java @@ -6,7 +6,7 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -37,16 +37,13 @@ import com.vaadin.ui.Label; @ViewScope public class RolloutGroupTargetsCountLabelMessage extends Label { - /** - * - */ private static final long serialVersionUID = -3876685878918411453L; @Autowired private transient RolloutUIState rolloutUIState; @Autowired - private transient RolloutGroupTargetsListTable rolloutGroupTargetsListTable; + private transient RolloutGroupTargetsListGrid rolloutGroupTargetsListGrid; @Autowired private I18N i18n; @@ -93,7 +90,7 @@ public class RolloutGroupTargetsCountLabelMessage extends Label { } private void displayRolloutGroupTargetMessage() { - long totalTargetTableEnteries = rolloutGroupTargetsListTable.size(); + long totalTargetTableEnteries = rolloutGroupTargetsListGrid.getContainerDataSource().size(); if (rolloutUIState.getRolloutGroupTargetsTruncated() != null) { // set the icon setIcon(FontAwesome.INFO_CIRCLE); @@ -113,7 +110,7 @@ public class RolloutGroupTargetsCountLabelMessage extends Label { message.append(SPUIDefinitions.MAX_TARGET_TABLE_ENTRIES); } else { message.append(i18n.get("label.filter.shown")); - message.append(rolloutGroupTargetsListTable.size()); + message.append(rolloutGroupTargetsListGrid.getContainerDataSource().size()); } message.append(HawkbitCommonUtil.SP_STRING_SPACE); setCaption(message.toString()); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java similarity index 98% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java index c96d93d77..39ad4fcca 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java @@ -1,4 +1,4 @@ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; import java.util.ArrayList; import java.util.List; @@ -10,6 +10,7 @@ import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.Action.Status; import org.eclipse.hawkbit.repository.model.RolloutGroup; import org.eclipse.hawkbit.repository.model.RolloutGroup.RolloutGroupStatus; +import org.eclipse.hawkbit.ui.common.grid.AbstractGrid; import org.eclipse.hawkbit.ui.customrenderers.renderers.HtmlLabelRenderer; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; import org.eclipse.hawkbit.ui.rollout.state.RolloutUIState; @@ -31,12 +32,10 @@ import com.vaadin.data.util.converter.Converter; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Grid.CellDescriptionGenerator; -import com.vaadin.ui.Grid.CellReference; @SpringComponent @ViewScope -public class RolloutGroupTargetsListGrid extends AbstractSimpleGrid { +public class RolloutGroupTargetsListGrid extends AbstractGrid { private static final long serialVersionUID = -2244756637458984597L; diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java similarity index 96% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java index 19a504384..a60b6c9e6 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListHeader.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListHeader.java @@ -6,12 +6,13 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import org.eclipse.hawkbit.repository.model.RolloutGroup; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridHeader; import org.eclipse.hawkbit.ui.components.SPUIComponentProvider; import org.eclipse.hawkbit.ui.decorators.SPUIButtonStyleSmallNoBorder; import org.eclipse.hawkbit.ui.rollout.event.RolloutEvent; @@ -38,7 +39,7 @@ import com.vaadin.ui.themes.ValoTheme; */ @SpringComponent @ViewScope -public class RolloutGroupTargetsListHeader extends AbstractSimpleTableHeader { +public class RolloutGroupTargetsListHeader extends AbstractGridHeader { private static final long serialVersionUID = 5613986489156507581L; @Autowired diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java similarity index 87% rename from hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java rename to hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java index 67f2cbe19..672da2f29 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/RolloutGroupTargetsListView.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListView.java @@ -6,10 +6,11 @@ * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ -package org.eclipse.hawkbit.ui.rollout; +package org.eclipse.hawkbit.ui.rollout.rolloutgrouptargets; import javax.annotation.PostConstruct; +import org.eclipse.hawkbit.ui.common.grid.AbstractGridLayout; import org.springframework.beans.factory.annotation.Autowired; import com.vaadin.spring.annotation.SpringComponent; @@ -21,7 +22,7 @@ import com.vaadin.ui.Label; */ @SpringComponent @ViewScope -public class RolloutGroupTargetsListView extends AbstractSimpleTableLayout { +public class RolloutGroupTargetsListView extends AbstractGridLayout { private static final long serialVersionUID = 26089134783467012L; From 3a344e2e496a2f974dbd91786ed6d4154dc98ef1 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Wed, 2 Mar 2016 09:59:22 +0100 Subject: [PATCH 14/17] Renamed the component id's Signed-off-by: asharani-murugesh --- .../hawkbit/ui/common/grid/AbstractGrid.java | 5 +++-- .../hawkbit/ui/rollout/rollout/RolloutListGrid.java | 13 +++++-------- .../rollout/rolloutgroup/RolloutGroupListGrid.java | 7 +++---- .../RolloutGroupTargetsListGrid.java | 4 ++-- .../hawkbit/ui/utils/SPUIComponetIdProvider.java | 12 ++++++------ 5 files changed, 19 insertions(+), 22 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java index 22fb055ed..0b080a6d9 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java @@ -30,7 +30,8 @@ public abstract class AbstractGrid extends Grid { protected void init() { setSizeFull(); setImmediate(true); - setId(getTableId()); + setId(getGridId()); + //TODO these styles are rwquired?? addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); addStyleName(ValoTheme.TABLE_SMALL); @@ -78,7 +79,7 @@ public abstract class AbstractGrid extends Grid { protected abstract void setColumnHeaderNames(); - protected abstract String getTableId(); + protected abstract String getGridId(); protected abstract void setColumnProperties(); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 5f7b62cef..89bac0b69 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -46,9 +46,6 @@ import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.FontAwesome; import com.vaadin.spring.annotation.SpringComponent; import com.vaadin.spring.annotation.ViewScope; -import com.vaadin.ui.Grid.CellDescriptionGenerator; -import com.vaadin.ui.Grid.CellReference; -import com.vaadin.ui.Grid.CellStyleGenerator; import com.vaadin.ui.UI; import com.vaadin.ui.Window; import com.vaadin.ui.renderers.ClickableRenderer.RendererClickEvent; @@ -96,12 +93,12 @@ public class RolloutListGrid extends AbstractGrid { void onEvent(final RolloutEvent event) { if (event == RolloutEvent.FILTER_BY_TEXT || event == RolloutEvent.CREATE_ROLLOUT || event == RolloutEvent.UPDATE_ROLLOUT || event == RolloutEvent.SHOW_ROLLOUTS) { - refreshTable(); + refreshGrid(); } } /** - * Handles the RolloutChangeEvent to refresh the item in the table. + * Handles the RolloutChangeEvent to refresh the item in the grid. * * @param rolloutChangeEvent * the event which contains the rollout which has been changed @@ -208,8 +205,8 @@ public class RolloutListGrid extends AbstractGrid { } @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_LIST_TABLE_ID; + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_LIST_GRID_ID; } @Override @@ -451,7 +448,7 @@ public class RolloutListGrid extends AbstractGrid { } } - private void refreshTable() { + private void refreshGrid() { ((LazyQueryContainer) getContainerDataSource()).refresh(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index c1b445b7a..16c65cc32 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -83,7 +83,7 @@ public class RolloutGroupListGrid extends AbstractGrid { /** * - * Handles the RolloutGroupChangeEvent to refresh the item in the table. + * Handles the RolloutGroupChangeEvent to refresh the item in the grid. * * * @param rolloutGroupChangeEvent @@ -102,7 +102,6 @@ public class RolloutGroupListGrid extends AbstractGrid { item.getItemProperty(SPUILabelDefinitions.VAR_STATUS).setValue(rolloutGroup.getStatus()); item.getItemProperty(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS) .setValue(rolloutGroup.getTotalTargetCountStatus()); - } } } @@ -191,8 +190,8 @@ public class RolloutGroupListGrid extends AbstractGrid { } @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_TABLE_ID; + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_GROUP_LIST_GRID_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java index 39ad4fcca..3008dee1b 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java @@ -136,8 +136,8 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { } @Override - protected String getTableId() { - return SPUIComponetIdProvider.ROLLOUT_GROUP_TARGETS_LIST_TABLE_ID; + protected String getGridId() { + return SPUIComponetIdProvider.ROLLOUT_GROUP_TARGETS_LIST_GRID_ID; } @Override diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java index 84346149c..c599ef0d0 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIComponetIdProvider.java @@ -738,19 +738,19 @@ public final class SPUIComponetIdProvider { public static final String ROLLOUT_ADD_ICON_ID = "rollout.add.button.id"; /** - * Rollout list table id. + * Rollout list grid id. */ - public static final String ROLLOUT_LIST_TABLE_ID = "rollout.table.id"; + public static final String ROLLOUT_LIST_GRID_ID = "rollout.grid.id"; /** - * Rollout group list table id. + * Rollout group list grid id. */ - public static final String ROLLOUT_GROUP_LIST_TABLE_ID = "rollout.group.table.id"; + public static final String ROLLOUT_GROUP_LIST_GRID_ID = "rollout.group.grid.id"; /** - * Rollout group list table id. + * Rollout group list grid id. */ - public static final String ROLLOUT_GROUP_TARGETS_LIST_TABLE_ID = "rollout.group.targets.table.id"; + public static final String ROLLOUT_GROUP_TARGETS_LIST_GRID_ID = "rollout.group.targets.grid.id"; /** * Rollout delete button id. From 3854061d4ff4a0c6ffb2dab73bdf7b99a8235ce5 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Fri, 4 Mar 2016 14:17:43 +0100 Subject: [PATCH 15/17] Sonar issues fixed Signed-off-by: asharani-murugesh --- .../hawkbit/ui/common/grid/AbstractGrid.java | 8 +- .../client/renderers/HtmlButtonRenderer.java | 13 +- .../client/renderers/HtmlLabelRenderer.java | 15 +- .../client/renderers/LinkRenderer.java | 15 +- .../actionhistory/ActionHistoryTable.java | 4 +- .../ui/rollout/rollout/RolloutListGrid.java | 191 ++++++++------- .../rolloutgroup/RolloutGroupListGrid.java | 178 +++++++------- .../RolloutGroupTargetsListGrid.java | 223 +++++++++--------- .../ui/utils/SPUIStyleDefinitions.java | 11 + .../customstyles/statusprogressbar.scss | 12 - 10 files changed, 350 insertions(+), 320 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java index 0b080a6d9..7cd276258 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/common/grid/AbstractGrid.java @@ -14,6 +14,7 @@ import com.vaadin.data.Container; import com.vaadin.data.Container.Indexed; import com.vaadin.shared.ui.grid.HeightMode; import com.vaadin.ui.Grid; +import com.vaadin.ui.Label; import com.vaadin.ui.themes.ValoTheme; /** @@ -31,15 +32,8 @@ public abstract class AbstractGrid extends Grid { setSizeFull(); setImmediate(true); setId(getGridId()); - //TODO these styles are rwquired?? - addStyleName(ValoTheme.TABLE_NO_VERTICAL_LINES); - addStyleName(ValoTheme.TABLE_SMALL); - - setHeight("100%"); - setHeightMode(HeightMode.CSS); setSelectionMode(SelectionMode.NONE); setColumnReorderingAllowed(true); - addNewContainerDS(); } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java index bb83e5e57..1971f58b8 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlButtonRenderer.java @@ -19,9 +19,14 @@ public class HtmlButtonRenderer extends ButtonRenderer { private void applystyles(Button button) { button.setStyleName(VButton.CLASSNAME); - button.addStyleName("tiny v-button-tiny"); - button.addStyleName("borderless v-button-borderless"); - button.addStyleName("icon-only v-button-icon-only"); - button.addStyleName("button-no-border v-button-button-no-border"); + button.addStyleName(getStyle("tiny")); + button.addStyleName(getStyle("borderless")); + button.addStyleName(getStyle("icon-only")); + button.addStyleName(getStyle("button-no-border")); + } + + + private String getStyle(final String style) { + return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java index 5ff1b1814..84cc001ae 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/HtmlLabelRenderer.java @@ -24,8 +24,7 @@ public class HtmlLabelRenderer extends WidgetRenderer { if (value != null) { label.setHTML("&#x" + Integer.toHexString(Integer.parseInt(value)) + ";"); - } - else{ + } else { label.setHTML(""); } applyStyle(label, style); @@ -33,14 +32,18 @@ public class HtmlLabelRenderer extends WidgetRenderer { } private void applyStyle(VLabel label, String style) { - label.setStylePrimaryName("v-label"); - label.setStyleName("small v-label-small"); - label.addStyleName("font-icon v-label-font-icon"); + label.setStyleName(VLabel.CLASSNAME); + label.addStyleName(getStyle("small")); + label.addStyleName(getStyle("font-icon")); if (style != null) { - label.addStyleName(style + " v-label-" + style); + label.addStyleName(getStyle(style)); } } + private String getStyle(final String style) { + return new StringBuilder(style).append(" ").append(VLabel.CLASSNAME).append("-").append(style).toString(); + } + private Map formatInput(String input) { Map details = new HashMap<>(); String[] tempData = input.split(","); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java index 016fbf8b5..1ccaeee82 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/customrenderers/client/renderers/LinkRenderer.java @@ -2,6 +2,7 @@ package org.eclipse.hawkbit.ui.customrenderers.client.renderers; import com.google.gwt.user.client.ui.Button; import com.vaadin.client.renderers.ButtonRenderer; +import com.vaadin.client.ui.VButton; import com.vaadin.client.widget.grid.RendererCellReference; public class LinkRenderer extends ButtonRenderer { @@ -15,10 +16,14 @@ public class LinkRenderer extends ButtonRenderer { } private void applystyle(Button button) { - button.setStylePrimaryName("v-button"); - button.setStyleName("borderless v-button-borderless"); - button.addStyleName("small v-button-small"); - button.addStyleName("on-focus-no-border v-button-on-focus-no-border"); - button.addStyleName("link v-button-link"); + button.setStyleName(VButton.CLASSNAME); + button.addStyleName(getStyle("borderless")); + button.addStyleName(getStyle("small")); + button.addStyleName(getStyle("on-focus-no-border")); + button.addStyleName(getStyle("link")); + } + + private String getStyle(final String style) { + return new StringBuilder(style).append(" ").append(VButton.CLASSNAME).append("-").append(style).toString(); } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java index df9d8a60d..eccb17c71 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/management/actionhistory/ActionHistoryTable.java @@ -524,7 +524,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { } else if (Action.Status.SCHEDULED == status) { label.setStyleName(statusIconPending); label.setDescription(i18n.get("label.scheduled")); - label.setValue(FontAwesome.BULLSEYE.getHtml()); + label.setValue(FontAwesome.HOURGLASS_1.getHtml()); } else { label.setDescription(""); label.setValue(""); @@ -575,7 +575,7 @@ public class ActionHistoryTable extends TreeTable implements Handler { label.setContentMode(ContentMode.HTML); if (SPUIDefinitions.SCHEDULED.equals(activeValue)) { label.setDescription("Scheduled"); - label.setValue(FontAwesome.BULLSEYE.getHtml()); + label.setValue(FontAwesome.HOURGLASS_1.getHtml()); } else if (SPUIDefinitions.ACTIVE.equals(activeValue)) { label.setDescription("Active"); label.setStyleName("statusIconActive"); diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java index 89bac0b69..625658bfe 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rollout/RolloutListGrid.java @@ -26,6 +26,7 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.eclipse.hawkbit.ui.utils.UINotification; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; @@ -54,8 +55,17 @@ import com.vaadin.ui.renderers.HtmlRenderer; @SpringComponent @ViewScope public class RolloutListGrid extends AbstractGrid { + private static final long serialVersionUID = 4060904914954370524L; + private static final String UPDATE_OPTION = "Update"; + + private static final String RESUME_OPTION = "Resume"; + + private static final String PAUSE_OPTION = "Pause"; + + private static final String START_OPTION = "Start"; + @Autowired private I18N i18n; @@ -248,16 +258,22 @@ public class RolloutListGrid extends AbstractGrid { return cell -> getDescription(cell); } + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new RolloutStatusConverter()); + getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); + getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); + } + private void alignColumns() { setCellStyleGenerator(new CellStyleGenerator() { private static final long serialVersionUID = 5573570647129792429L; @Override public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, - /* - * SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS, - */ SPUILabelDefinitions.ACTION }; + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, SPUILabelDefinitions.ACTION }; if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { return "centeralign"; } @@ -266,14 +282,6 @@ public class RolloutListGrid extends AbstractGrid { }); } - @Override - protected void addColumnRenderes() { - addDetailStatusColumn(); - addStatusCoulmn(); - getColumn(SPUILabelDefinitions.ACTION).setRenderer(new HtmlButtonRenderer(event -> onClickOfActionBtn(event))); - getColumn(SPUILabelDefinitions.VAR_NAME).setRenderer(new LinkRenderer(event -> onClickOfRolloutName(event))); - } - private void onClickOfRolloutName(RendererClickEvent event) { rolloutUIState.setRolloutId((long) event.getItemId()); final String rolloutName = (String) getContainerDataSource().getItem(event.getItemId()) @@ -298,126 +306,66 @@ public class RolloutListGrid extends AbstractGrid { final ContextMenu context = new ContextMenu(); context.addItemClickListener(event -> menuItemClicked(event)); if (rolloutStatus == RolloutStatus.READY) { - final ContextMenuItem startItem = context.addItem("Start"); + final ContextMenuItem startItem = context.addItem(START_OPTION); startItem.setData(new ContextMenuData(rolloutId, ACTION.START)); } else if (rolloutStatus == RolloutStatus.RUNNING) { - final ContextMenuItem pauseItem = context.addItem("Pause"); + final ContextMenuItem pauseItem = context.addItem(PAUSE_OPTION); pauseItem.setData(new ContextMenuData(rolloutId, ACTION.PAUSE)); } else if (rolloutStatus == RolloutStatus.PAUSED) { - final ContextMenuItem resumeItem = context.addItem("Resume"); + final ContextMenuItem resumeItem = context.addItem(RESUME_OPTION); resumeItem.setData(new ContextMenuData(rolloutId, ACTION.RESUME)); } else if (rolloutStatus == RolloutStatus.STARTING || rolloutStatus == RolloutStatus.CREATING) { return context; } if (permissionChecker.hasRolloutUpdatePermission()) { - final ContextMenuItem cancelItem = context.addItem("Update"); + final ContextMenuItem cancelItem = context.addItem(UPDATE_OPTION); cancelItem.setData(new ContextMenuData(rolloutId, ACTION.UPDATE)); } return context; } - private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new Converter() { - private static final long serialVersionUID = 2660476405836705932L; - - @Override - public TotalTargetCountStatus convertToModel(String value, - Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } - - @Override - public String convertToPresentation(TotalTargetCountStatus value, - Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }); - } - - private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), - new Converter() { - private static final long serialVersionUID = 1L; - - @Override - public RolloutStatus convertToModel(final String value, - final Class targetType, final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutStatus value, - final Class targetType, final Locale locale) { - return convertRolloutStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }); - } - private String convertRolloutStatusToString(final RolloutStatus value) { String result = null; switch (value) { case FINISHED: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_GREEN, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case PAUSED: result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.PAUSE.getCodepoint()), - "statusIconBlue", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + SPUIStyleDefinitions.STATUS_ICON_BLUE, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case RUNNING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "yellowSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_YELLOW, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case READY: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STOPPED: result = HawkbitCommonUtil.getStatusLabelDetailsInString(Integer.toString(FontAwesome.STOP.getCodepoint()), - "statusIconRed", SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case CREATING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "greySpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_GREY, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case STARTING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, "blueSpinner", + result = HawkbitCommonUtil.getStatusLabelDetailsInString(null, SPUIStyleDefinitions.STATUS_SPINNER_BLUE, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_CREATING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; case ERROR_STARTING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", - SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_STATUS_LABEL_ID); break; default: break; @@ -486,8 +434,7 @@ public class RolloutListGrid extends AbstractGrid { return null; } } - - + enum ACTION { PAUSE, RESUME, START, UPDATE } @@ -544,6 +491,70 @@ public class RolloutListGrid extends AbstractGrid { public void setAction(final ACTION action) { this.action = action; } + } + + /** + * + * Converter to convert {@link RolloutStatus} to string. + * + */ + class RolloutStatusConverter implements Converter { + + private static final long serialVersionUID = -1217685750825632678L; + + @Override + public RolloutStatus convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutStatus value, final Class targetType, + final Locale locale) { + return convertRolloutStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * Converter to convert {@link TotalTargetCountStatus} to formatted string + * with status and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -5794528427855153924L; + + @Override + public TotalTargetCountStatus convertToModel(String value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 16c65cc32..9700fb76e 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -25,6 +25,7 @@ import org.eclipse.hawkbit.ui.utils.I18N; import org.eclipse.hawkbit.ui.utils.SPUIComponetIdProvider; import org.eclipse.hawkbit.ui.utils.SPUIDefinitions; import org.eclipse.hawkbit.ui.utils.SPUILabelDefinitions; +import org.eclipse.hawkbit.ui.utils.SPUIStyleDefinitions; import org.springframework.beans.factory.annotation.Autowired; import org.vaadin.addons.lazyquerycontainer.BeanQueryFactory; import org.vaadin.addons.lazyquerycontainer.LazyQueryContainer; @@ -213,26 +214,12 @@ public class RolloutGroupListGrid extends AbstractGrid { alignColumns(); } - private void alignColumns() { - setCellStyleGenerator(new CellStyleGenerator() { - private static final long serialVersionUID = 5573570647129792429L; - - @Override - public String getStyle(final CellReference cellReference) { - String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, - SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; - if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { - return "centeralign"; - } - return null; - } - }); - } - @Override protected void addColumnRenderes() { - addDetailStatusColumn(); - addStatusCoulmn(); + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), + new RolloutGroupStatusConverter()); + getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), + new TotalTargetCountStatusConverter()); if (permissionChecker.hasRolloutTargetsReadPermission()) { getColumn(SPUILabelDefinitions.VAR_NAME) .setRenderer(new LinkRenderer(event -> onClickOfRolloutGroupName(event))); @@ -263,62 +250,33 @@ public class RolloutGroupListGrid extends AbstractGrid { eventBus.publish(this, RolloutEvent.SHOW_ROLLOUT_GROUP_TARGETS); } - private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), - new Converter() { - private static final long serialVersionUID = 1L; - - @Override - public RolloutGroupStatus convertToModel(final String value, - final Class targetType, final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final RolloutGroupStatus value, - final Class targetType, final Locale locale) { - return convertRolloutGroupStatusToString(value); - } - - @Override - public Class getModelType() { - return RolloutGroupStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }); - } - private String convertRolloutGroupStatusToString(final RolloutGroupStatus value) { String result = null; switch (value) { case FINISHED: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_GREEN, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case SCHEDULED: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue", + Integer.toString(FontAwesome.HOURGLASS_1.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_PENDING, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case RUNNING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", + Integer.toString(FontAwesome.ADJUST.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_LIGHT_YELLOW, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case READY: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), "statusIconLightBlue", - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + Integer.toString(FontAwesome.DOT_CIRCLE_O.getCodepoint()), + SPUIStyleDefinitions.STATUS_ICON_LIGHT_BLUE, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case ERROR: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", - SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), + SPUIStyleDefinitions.STATUS_ICON_RED, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; default: break; @@ -327,37 +285,6 @@ public class RolloutGroupListGrid extends AbstractGrid { } - private void addDetailStatusColumn() { - getColumn(SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS).setRenderer(new HtmlRenderer(), - new Converter() { - private static final long serialVersionUID = 2660476405836705932L; - - @Override - public TotalTargetCountStatus convertToModel(String value, - Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return null; - } - - @Override - public String convertToPresentation(TotalTargetCountStatus value, - Class targetType, Locale locale) - throws com.vaadin.data.util.converter.Converter.ConversionException { - return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); - } - - @Override - public Class getModelType() { - return TotalTargetCountStatus.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }); - } - private String getDescription(CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { return cell.getProperty().getValue().toString().toLowerCase(); @@ -373,4 +300,85 @@ public class RolloutGroupListGrid extends AbstractGrid { } } + private void alignColumns() { + setCellStyleGenerator(new CellStyleGenerator() { + private static final long serialVersionUID = 5573570647129792429L; + + @Override + public String getStyle(final CellReference cellReference) { + String[] coulmnNames = { SPUILabelDefinitions.VAR_STATUS, + SPUILabelDefinitions.VAR_TOTAL_TARGETS_COUNT_STATUS }; + if (Arrays.asList(coulmnNames).contains(cellReference.getPropertyId())) { + return "centeralign"; + } + return null; + } + }); + } + + /** + * + * Converts {@link TotalTargetCountStatus} into formatted string with status + * and count details. + * + */ + class TotalTargetCountStatusConverter implements Converter { + + private static final long serialVersionUID = -9205943894818450807L; + + @Override + public TotalTargetCountStatus convertToModel(String value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return null; + } + + @Override + public String convertToPresentation(TotalTargetCountStatus value, Class targetType, + Locale locale) throws com.vaadin.data.util.converter.Converter.ConversionException { + return DistributionBarHelper.getDistributionBarAsHTMLString(value.getStatusTotalCountMap()); + } + + @Override + public Class getModelType() { + return TotalTargetCountStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } + + /** + * + * Converts {@link RolloutGroupStatus} to string. + * + */ + class RolloutGroupStatusConverter implements Converter { + + private static final long serialVersionUID = 5448062736373292820L; + + @Override + public RolloutGroupStatus convertToModel(final String value, + final Class targetType, final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final RolloutGroupStatus value, final Class targetType, + final Locale locale) { + return convertRolloutGroupStatusToString(value); + } + + @Override + public Class getModelType() { + return RolloutGroupStatus.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java index 3008dee1b..e3cf24739 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgrouptargets/RolloutGroupTargetsListGrid.java @@ -94,29 +94,27 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { null, false, true); rolloutGroupTargetGridContainer.addContainerProperty(SPUILabelDefinitions.VAR_DESC, String.class, "", false, true); - rolloutGroupTargetGridContainer.addContainerProperty(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER, - String.class, "", false, true); } @Override protected void setColumnExpandRatio() { getColumn(SPUILabelDefinitions.VAR_NAME).setMinimumWidth(20); - getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(250); + getColumn(SPUILabelDefinitions.VAR_NAME).setMaximumWidth(280); getColumn(SPUILabelDefinitions.VAR_STATUS).setMinimumWidth(50); - getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(100); + getColumn(SPUILabelDefinitions.VAR_STATUS).setMaximumWidth(80); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(150); - getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMinimumWidth(50); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMaximumWidth(180); + getColumn(SPUILabelDefinitions.VAR_CREATED_DATE).setMinimumWidth(30); - getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(150); + getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMaximumWidth(180); getColumn(SPUILabelDefinitions.VAR_CREATED_BY).setMinimumWidth(50); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(150); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMinimumWidth(20); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMaximumWidth(180); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setMinimumWidth(30); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(150); - getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMinimumWidth(20); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMaximumWidth(180); + getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setMinimumWidth(50); setFrozenColumnCount(getColumns().size()); @@ -131,8 +129,6 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_DATE).setHeaderCaption(i18n.get("header.modifiedDate")); getColumn(SPUILabelDefinitions.VAR_LAST_MODIFIED_BY).setHeaderCaption(i18n.get("header.modifiedBy")); getColumn(SPUILabelDefinitions.VAR_DESC).setHeaderCaption(i18n.get("header.description")); - getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHeaderCaption(i18n.get("header.assigned.ds")); - } @Override @@ -154,6 +150,23 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { alignColumns(); } + @Override + protected void addColumnRenderes() { + getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), new StatusConverter()); + } + + @Override + protected void setHiddenColumns() { + /** + * No hidden columns. + */ + } + + @Override + protected CellDescriptionGenerator getDescriptionGenerator() { + return cell -> getDescription(cell); + }; + private void alignColumns() { setCellStyleGenerator(new CellStyleGenerator() { private static final long serialVersionUID = 5573570647129792429L; @@ -168,88 +181,81 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { }); } - @Override - protected void addColumnRenderes() { - addStatusCoulmn(); + /** + * + * Converts {@link Status} into string with status icon details. + * + */ + private class StatusConverter implements Converter { + private static final long serialVersionUID = -7467206089699548808L; + + @Override + public Status convertToModel(final String value, final Class targetType, + final Locale locale) { + return null; + } + + @Override + public String convertToPresentation(final Status status, final Class targetType, + final Locale locale) { + if (status == null) { + // Actions are not created for targets when + // rollout's status + // is READY and when duplicate assignment is done. + // In these cases display a appropriate status with + // description + return getStatus(); + } else { + return processActionStatus(status); + } + } + + @Override + public Class getModelType() { + return Status.class; + } + + @Override + public Class getPresentationType() { + return String.class; + } + } - @Override - protected void setHiddenColumns() { - getColumn(SPUILabelDefinitions.ASSIGNED_DISTRIBUTION_NAME_VER).setHidden(true); - } - - private void addStatusCoulmn() { - getColumn(SPUILabelDefinitions.VAR_STATUS).setRenderer(new HtmlLabelRenderer(), - new Converter() { - private static final long serialVersionUID = 1L; - - @Override - public Status convertToModel(final String value, final Class targetType, - final Locale locale) { - return null; - } - - @Override - public String convertToPresentation(final Status status, final Class targetType, - final Locale locale) { - String result = null; - if (status == null) { - // Actions are not created for targets when - // rollout's status - // is READY and when duplicate assignment is done. - // In these cases display a appropriate status with - // description - return getStatus(); - } else { - switch (status) { - case FINISHED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", - null); - break; - case SCHEDULED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.BULLSEYE.getCodepoint()), "statusIconBlue", null); - break; - case RUNNING: - case RETRIEVED: - case WARNING: - case DOWNLOAD: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", null); - break; - case CANCELING: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconPending", - null); - break; - case CANCELED: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconGreen", - null); - break; - case ERROR: - result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), - "statusIconRed", null); - break; - default: - break; - } - return result; - } - } - - @Override - public Class getModelType() { - return Status.class; - } - - @Override - public Class getPresentationType() { - return String.class; - } - }); + private String processActionStatus(final Status status) { + String result = null; + switch (status) { + case FINISHED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.CHECK_CIRCLE.getCodepoint()), "statusIconGreen", null); + break; + case SCHEDULED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.HOURGLASS_1.getCodepoint()), "statusIconPending", null); + break; + case RUNNING: + case RETRIEVED: + case WARNING: + case DOWNLOAD: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.ADJUST.getCodepoint()), "statusIconYellow", null); + break; + case CANCELING: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconPending", null); + break; + case CANCELED: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.TIMES_CIRCLE.getCodepoint()), "statusIconGreen", null); + break; + case ERROR: + result = HawkbitCommonUtil.getStatusLabelDetailsInString( + Integer.toString(FontAwesome.EXCLAMATION_CIRCLE.getCodepoint()), "statusIconRed", null); + break; + default: + break; + } + return result; } private String getStatus() { @@ -267,30 +273,29 @@ public class RolloutGroupTargetsListGrid extends AbstractGrid { } } - @Override - protected CellDescriptionGenerator getDescriptionGenerator() { - return cell -> getDescription(cell); - }; - private String getDescription(CellReference cell) { if (SPUILabelDefinitions.VAR_STATUS.equals(cell.getPropertyId())) { if (null != cell.getProperty().getValue()) { return cell.getProperty().getValue().toString().toLowerCase(); } else { - final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() - ? rolloutUIState.getRolloutGroup().get() : null; - if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { - return RolloutGroupStatus.READY.toString().toLowerCase(); - } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { - String ds = rolloutUIState.getRolloutDistributionSet().isPresent() - ? rolloutUIState.getRolloutDistributionSet().get() : ""; - return i18n.get("message.dist.already.assigned", new Object[] { ds }); - } else { - return "unknown"; - } + return getDescriptionWhenNoAction(); } } return null; } + + private String getDescriptionWhenNoAction() { + final RolloutGroup rolloutGroup = rolloutUIState.getRolloutGroup().isPresent() + ? rolloutUIState.getRolloutGroup().get() : null; + if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.READY) { + return RolloutGroupStatus.READY.toString().toLowerCase(); + } else if (rolloutGroup != null && rolloutGroup.getStatus() == RolloutGroupStatus.FINISHED) { + String ds = rolloutUIState.getRolloutDistributionSet().isPresent() + ? rolloutUIState.getRolloutDistributionSet().get() : ""; + return i18n.get("message.dist.already.assigned", new Object[] { ds }); + } else { + return "unknown"; + } + } } diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java index 0c12df4bd..4ea0a1a77 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java @@ -248,6 +248,17 @@ public final class SPUIStyleDefinitions { * Target filter search progress indicator style. */ public static final String TARGET_FILTER_SEARCH_PROGRESS_INDICATOR_STYLE = "target-filter-spinner"; + + + public static final String STATUS_ICON_RED = "statusIconRed"; + public static final String STATUS_ICON_GREEN = "statusIconGreen"; + public static final String STATUS_ICON_BLUE = "statusIconBlue"; + public static final String STATUS_SPINNER_YELLOW = "yellowSpinner"; + public static final String STATUS_ICON_LIGHT_BLUE = "statusIconLightBlue"; + public static final String STATUS_SPINNER_GREY = "greySpinner"; + public static final String STATUS_SPINNER_BLUE = "blueSpinner"; + public static final String STATUS_ICON_LIGHT_YELLOW = "statusIconYellow"; + public static final String STATUS_ICON_PENDING = "statusIconPending"; /** * Constructor. diff --git a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss index 9cc628022..423ef9084 100644 --- a/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss +++ b/hawkbit-ui/src/main/resources/VAADIN/themes/hawkbit/customstyles/statusprogressbar.scss @@ -50,16 +50,4 @@ } - &.alump-dbar-tooltip { - background-color: rgba(27, 54, 73, 0.9); - border-radius: 3px; - color: white; - z-index: 100; - padding: 3px; - font-size: 10px; - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); - } - } \ No newline at end of file From a9eaacb8b9cd8622a8c3b9672ed0306aaf66a340 Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Fri, 4 Mar 2016 14:24:03 +0100 Subject: [PATCH 16/17] Added documenatation Signed-off-by: asharani-murugesh --- .../rolloutgroup/RolloutGroupListGrid.java | 2 +- .../ui/utils/SPUIStyleDefinitions.java | 40 +++++++++++++++++-- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java index 9700fb76e..372ffe1ad 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/rollout/rolloutgroup/RolloutGroupListGrid.java @@ -265,7 +265,7 @@ public class RolloutGroupListGrid extends AbstractGrid { break; case RUNNING: result = HawkbitCommonUtil.getStatusLabelDetailsInString( - Integer.toString(FontAwesome.ADJUST.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_LIGHT_YELLOW, + Integer.toString(FontAwesome.ADJUST.getCodepoint()), SPUIStyleDefinitions.STATUS_ICON_YELLOW, SPUIComponetIdProvider.ROLLOUT_GROUP_STATUS_LABEL_ID); break; case READY: diff --git a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java index 4ea0a1a77..c50135251 100644 --- a/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java +++ b/hawkbit-ui/src/main/java/org/eclipse/hawkbit/ui/utils/SPUIStyleDefinitions.java @@ -248,16 +248,50 @@ public final class SPUIStyleDefinitions { * Target filter search progress indicator style. */ public static final String TARGET_FILTER_SEARCH_PROGRESS_INDICATOR_STYLE = "target-filter-spinner"; - - + + /** + * Status icon style - red color. + */ public static final String STATUS_ICON_RED = "statusIconRed"; + + /** + * Status icon style - green color. + */ public static final String STATUS_ICON_GREEN = "statusIconGreen"; + + /** + * Status icon style - blue color. + */ public static final String STATUS_ICON_BLUE = "statusIconBlue"; + + /** + * Status icon spinner style - yellow color. + */ public static final String STATUS_SPINNER_YELLOW = "yellowSpinner"; + + /** + * Status icon style - light blue color. + */ public static final String STATUS_ICON_LIGHT_BLUE = "statusIconLightBlue"; + + /** + * Status icon spinner style - grey color. + */ public static final String STATUS_SPINNER_GREY = "greySpinner"; + + /** + * Status icon spinner style - blue color. + */ public static final String STATUS_SPINNER_BLUE = "blueSpinner"; - public static final String STATUS_ICON_LIGHT_YELLOW = "statusIconYellow"; + + /** + * Status icon style - yellow color. + */ + public static final String STATUS_ICON_YELLOW = "statusIconYellow"; + + /** + * Status pending icon. + */ public static final String STATUS_ICON_PENDING = "statusIconPending"; /** From 48906bdea877d1873760df46fe79cf2a77aba29a Mon Sep 17 00:00:00 2001 From: asharani-murugesh Date: Fri, 4 Mar 2016 15:46:45 +0100 Subject: [PATCH 17/17] removed the comment Signed-off-by: asharani-murugesh --- hawkbit-ui/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/hawkbit-ui/pom.xml b/hawkbit-ui/pom.xml index be55a24f3..4af18ffef 100644 --- a/hawkbit-ui/pom.xml +++ b/hawkbit-ui/pom.xml @@ -89,7 +89,6 @@ true - CustomRenderers 1 org.eclipse.hawkbit.ui.customrenderers.CustomRendererWidgetSet