From 4664896693d4c0e8d95d69708f1ce6a336fa2a0d Mon Sep 17 00:00:00 2001 From: Diego Pino Date: Mon, 30 Apr 2012 01:06:09 +0200 Subject: [PATCH] Recode 'Task Completation Lead/Lag' chart using jqplot4java FEA: ItEr76S15OrganizingPerProjectDashboard --- .../web/dashboard/DashboardController.java | 121 +++++++++--------- .../webapp/dashboard/_dashboardfororder.zul | 110 +++------------- 2 files changed, 80 insertions(+), 151 deletions(-) diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java index c74935290..a9b94eeb1 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/dashboard/DashboardController.java @@ -27,6 +27,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.commons.lang.StringUtils; import org.libreplan.business.orders.entities.Order; @@ -45,12 +46,14 @@ import org.zkoss.zul.Window; import br.com.digilabs.jqplot.Chart; import br.com.digilabs.jqplot.JqPlotUtils; +import br.com.digilabs.jqplot.chart.BarChart; import br.com.digilabs.jqplot.chart.PieChart; +import br.com.digilabs.jqplot.elements.Serie; /** * @author Nacho Barrientos * @author Diego Pino García - * + * * Controller for dashboardfororder view */ @Component @@ -113,14 +116,27 @@ public class DashboardController extends GenericForwardComposer { } private void renderTaskCompletationLag() { - Map taskCompletationData = dashboardModel - .calculateTaskCompletation(); - TaskCompletationLag taskCompletation = TaskCompletationLag.create(); - for (Interval each : taskCompletationData.keySet()) { - Integer value = taskCompletationData.get(each); - taskCompletation.data(each.toString(), value); - } - taskCompletation.render(); + final String divId = "task-completation-lag"; + + BarChart barChart; + barChart = new BarChart("Task Completation Lead/Lag"); + + barChart.setFillZero(true); + barChart.setHighlightMouseDown(true); + barChart.setStackSeries(false); + barChart.setBarMargin(30); + + barChart.addSeries(new Serie("Tasks")); + + TaskCompletationData taskCompletationData = TaskCompletationData + .create(dashboardModel); + barChart.setTicks(taskCompletationData.getTicks()); + barChart.addValues(taskCompletationData.getValues()); + + barChart.getAxes().getXaxis() + .setLabel(_("Number of Days / Days Interval")); + + renderChart(barChart, divId); } private void renderTasksSummary() { @@ -189,9 +205,9 @@ public class DashboardController extends GenericForwardComposer { } /** - * + * * @author Diego Pino García - * + * */ static class GlobalProgress { @@ -262,7 +278,7 @@ public class DashboardController extends GenericForwardComposer { /** * The order of the ticks is taken from the keys in current - * + * * @return */ public String getTicks() { @@ -279,9 +295,9 @@ public class DashboardController extends GenericForwardComposer { } /** - * + * * @author Diego Pino García - * + * */ static class Series { @@ -314,61 +330,48 @@ public class DashboardController extends GenericForwardComposer { } - static class TaskCompletationLag { + /** + * + * @author Diego Pino García + * + */ + static class TaskCompletationData { - private final String id = "task_completation_lag"; + private final IDashboardModel dashboardModel; - private final Map data = new LinkedHashMap(); - - private TaskCompletationLag() { + private Map taskCompletationData; + private TaskCompletationData(IDashboardModel dashboardModel) { + this.dashboardModel = dashboardModel; } - public static TaskCompletationLag create() { - return new TaskCompletationLag(); + public static TaskCompletationData create(IDashboardModel dashboardModel) { + return new TaskCompletationData(dashboardModel); } - public void data(String interval, Integer value) { - data.put(interval, value); + private Map getData() { + if (taskCompletationData == null) { + taskCompletationData = dashboardModel + .calculateTaskCompletation(); + } + return taskCompletationData; } - public void render() { - String _data = JSONHelper.values(data); - String ticks = JSONHelper.keys(data); - String command = String.format("%s.render(%s, %s);", id, _data, - ticks); - Clients.evalJavaScript(command); + public String[] getTicks() { + Set intervals = getData().keySet(); + String[] result = new String[intervals.size()]; + int i = 0; + for (Interval each : intervals) { + result[i++] = each.toString(); + + } + return result; + } + + public Collection getValues() { + return getData().values(); } } - static class JSONHelper { - - public static String format(Map data) { - List result = new ArrayList(); - for (String key : data.keySet()) { - Integer value = data.get(data); - result.add(String.format("[\"%s\", %d]", key, value)); - } - return String.format("'[%s]'", StringUtils.join(result, ',')); - } - - public static String keys(Map map) { - List result = new ArrayList(); - for (String each : map.keySet()) { - result.add(String.format("\"%s\"", each)); - } - return String.format("'[%s]'", StringUtils.join(result, ',')); - } - - public static String values(Map map) { - List result = new ArrayList(); - for (Integer each : map.values()) { - result.add(each.toString()); - } - return String.format("'[%s]'", StringUtils.join(result, ',')); - } - - } - -} \ No newline at end of file +} diff --git a/libreplan-webapp/src/main/webapp/dashboard/_dashboardfororder.zul b/libreplan-webapp/src/main/webapp/dashboard/_dashboardfororder.zul index 837c3bcaa..d471754c5 100644 --- a/libreplan-webapp/src/main/webapp/dashboard/_dashboardfororder.zul +++ b/libreplan-webapp/src/main/webapp/dashboard/_dashboardfororder.zul @@ -27,7 +27,7 @@
@@ -39,12 +39,12 @@
- - + + - - - + + + @@ -73,18 +73,18 @@ - - + + - - + + - - - - - + + + + +
@@ -101,22 +101,8 @@ - - .tooltip { - display:none; - position:absolute; - border:1px solid #333; - background-color:#161616; - border-radius:5px; - padding:10px; - color:#fff; - font-size:12px Arial; - } - - - +