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