Tomas Jelinek has uploaded a new change for review.

Change subject: ui: line chart progress bar
......................................................................

ui: line chart progress bar

WIP - just a backup - do not review

Change-Id: I66a577d6e3699c7985a4e6dd4aa66dd5969ebf82
Signed-off-by: Tomas Jelinek <tjeli...@redhat.com>
---
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/LineChartProgressBar.java
3 files changed, 134 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/29549/1

diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
index 297a817..a42d20e 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationTemplates.java
@@ -19,6 +19,12 @@
             "<div class='engine-progress-text'>{1}</div></div>")
     SafeHtml progressBar(int progress, String text, String color);
 
+    @Template("<div>" +
+            "<div style='float:right; width: 26px;'>{1}%</div>" +
+            "<img style='margin-right: 28px; border-left: 1px solid #c0c0c0; 
border-bottom: 1px solid #c0c0c0; height: 1em; width: 95%; margin: auto;' 
src='{0}' />" +
+            "</div>")
+    SafeHtml lineChart(String chartData, int percentage);
+
     /**
      * Creates a tree-item HTML
      *
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
index 925fd6e..484c86a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabVirtualMachineView.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Random;
 
 import com.google.gwt.cell.client.CompositeCell;
 import com.google.gwt.cell.client.HasCell;
@@ -31,9 +32,8 @@
 import 
org.ovirt.engine.ui.webadmin.widget.action.WebAdminImageButtonDefinition;
 import 
org.ovirt.engine.ui.webadmin.widget.action.WebAdminMenuBarButtonDefinition;
 import org.ovirt.engine.ui.webadmin.widget.table.column.CommentColumn;
-import org.ovirt.engine.ui.webadmin.widget.table.column.OneColorPercentColumn;
+import org.ovirt.engine.ui.webadmin.widget.table.column.LineChartProgressBar;
 import org.ovirt.engine.ui.webadmin.widget.table.column.PercentColumn;
-import org.ovirt.engine.ui.webadmin.widget.table.column.ProgressBarColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.ReasonColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.UptimeColumn;
 import org.ovirt.engine.ui.webadmin.widget.table.column.VmStatusColumn;
@@ -43,6 +43,11 @@
 import com.google.inject.Inject;
 
 public class MainTabVirtualMachineView extends 
AbstractMainTabWithDetailsTableView<VM, VmListModel> implements 
MainTabVirtualMachinePresenter.ViewDef {
+
+
+    private List<Integer> toReturn = new ArrayList<Integer>();
+
+    private Random r = new Random();
 
     interface ViewIdHandler extends 
ElementIdHandler<MainTabVirtualMachineView> {
         ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
@@ -159,10 +164,12 @@
         
networkColumn.makeSortable(VmConditionFieldAutoCompleter.NETWORK_USAGE);
         getTable().addColumn(networkColumn, constants.networkVm(), "60px"); 
//$NON-NLS-1$
 
-        PercentColumn<VM> migrationProgressColumn = new 
OneColorPercentColumn<VM>(ProgressBarColumn.ProgressBarColors.GREEN) {
+        LineChartProgressBar<VM> migrationProgressColumn = new 
LineChartProgressBar<VM>() {
+
             @Override
-            public Integer getProgressValue(VM object) {
-                return object.getMigrationProgressPercent();
+            protected List<Integer> getProgressValues(VM object) {
+                toReturn.add(r.nextInt(100));
+                return toReturn;
             }
         };
         
migrationProgressColumn.makeSortable(VmConditionFieldAutoCompleter.MIGRATION_PROGRESS_PERCENT);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/LineChartProgressBar.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/LineChartProgressBar.java
new file mode 100644
index 0000000..ee8cc7e
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/LineChartProgressBar.java
@@ -0,0 +1,116 @@
+package org.ovirt.engine.ui.webadmin.widget.table.column;
+
+import com.google.gwt.canvas.client.Canvas;
+import com.google.gwt.canvas.dom.client.Context2d;
+import com.google.gwt.safehtml.shared.SafeHtml;
+import com.google.gwt.safehtml.shared.SafeHtmlUtils;
+import org.ovirt.engine.ui.common.widget.table.column.SafeHtmlColumn;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+import org.ovirt.engine.ui.webadmin.gin.ClientGinjectorProvider;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public abstract class LineChartProgressBar<T> extends SafeHtmlColumn<T> {
+
+    private static final ApplicationTemplates applicationTemplates = 
ClientGinjectorProvider.getApplicationTemplates();
+
+    private static int stepMax = 30;
+
+    private static int stepMin = 15;
+
+    @Override
+    public SafeHtml getValue(T object) {
+        Canvas canvas = Canvas.createIfSupported();
+
+        canvas.setWidth("200"); //$NON-NLS-1$
+        canvas.setHeight("15"); //$NON-NLS-1$
+
+        List<Integer> progressValues = getProgressValues(object);
+
+        drawChart(canvas, getProgressValues(object), stepMin, stepMax);
+
+//        41a041 line color
+//        c0c0c0 coordinate color
+//        808080 normal text color
+//        ff0000 error text color
+//        629766 green line end
+//        ff0000 red line end
+//        ff8000 yellow line end
+
+        String dataUrl = canvas.toDataUrl();
+        return applicationTemplates.lineChart(dataUrl, 
getLastPoint(progressValues));
+//        return SafeHtmlUtils.fromTrustedString("<img style=\"border-left: 
1px solid #c0c0c0; border-bottom: 1px solid #c0c0c0; height: 1em; width: 95%; 
margin: auto;\" src=\"" + canvas.toDataUrl() + "\" />"); //$NON-NLS-1$ 
//$NON-NLS-2$
+    }
+
+    private int getLastPoint(List<Integer> points) {
+        if (points == null || points.size() == 0) {
+            return 0;
+        }
+
+        return points.get(points.size() - 1);
+    }
+
+    private void drawChart(Canvas canvas, List<Integer> points, int minStep, 
int maxStep) {
+        if (points == null || points.size() == 0) {
+            // nothing to draw
+            return;
+        }
+
+        Context2d context2d = canvas.getContext2d();
+
+        int leftPadding = 5;
+        int bottomPadding = 15;
+
+        context2d.beginPath();
+
+        List<Integer> normalizedPoints = normalizePoints(points, 
canvas.getCoordinateSpaceWidth() - leftPadding, minStep, maxStep);
+
+        context2d.moveTo(leftPadding, calculateHeight(normalizedPoints.get(0), 
canvas.getCoordinateSpaceHeight(), bottomPadding));
+
+        int actualX = leftPadding;
+        int stepSize = calculateStepSize(normalizedPoints, 
canvas.getCoordinateSpaceWidth(), maxStep);
+
+        for (int point : normalizedPoints.subList(1, normalizedPoints.size())) 
{
+            actualX += stepSize;
+            context2d.lineTo(actualX, calculateHeight(point, 
canvas.getCoordinateSpaceHeight(), bottomPadding));
+        }
+
+        context2d.setLineWidth(4);
+        context2d.setStrokeStyle("#629766"); //$NON-NLS-1$
+        context2d.stroke();
+    }
+
+    private int calculateHeight(int point, int drawingAreaHeight, int 
bottomPadding) {
+        return point * (drawingAreaHeight - bottomPadding) / 100 + 
bottomPadding;
+    }
+
+    private List<Integer> normalizePoints(List<Integer> original, int 
drawingAreaWidth, int minStep, int maxStep) {
+        if (drawingAreaWidth / original.size() < minStep) {
+            int correctSize = drawingAreaWidth / minStep;
+            return original.subList(original.size() - correctSize, 
original.size());
+        }
+
+        if (drawingAreaWidth / original.size() > maxStep) {
+            List<Integer> res = new ArrayList<Integer>();
+            res.add(0);
+            res.addAll(original);
+            return res;
+        }
+
+        return original;
+    }
+
+    /**
+     * Expects that the points will be not null and not empty
+     */
+    private int calculateStepSize(List<Integer> points, int drawingAreaWidth, 
int maxStep) {
+        if (drawingAreaWidth / points.size() > maxStep) {
+            return maxStep;
+        }
+
+        return drawingAreaWidth / points.size();
+    }
+
+    protected abstract List<Integer> getProgressValues(T object);
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I66a577d6e3699c7985a4e6dd4aa66dd5969ebf82
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <tjeli...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to