/* * Copyright 2011 Google Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package com.google.gwt.sample.mobilewebapp.presenter.taskchart; import com.google.gwt.canvas.dom.client.CssColor; import com.google.gwt.dom.client.Style.Unit; import com.google.gwt.sample.mobilewebapp.client.event.TaskListUpdateEvent; import com.google.gwt.sample.mobilewebapp.client.ui.PieChart; import com.google.gwt.sample.mobilewebapp.shared.TaskProxy; import com.google.gwt.sample.ui.client.PresentsWidgets; import com.google.gwt.user.client.ui.Widget; import com.google.web.bindery.event.shared.EventBus; import java.util.Date; import java.util.List; /** * Drives a {@link PieChart} to summarize a set of tasks. */ public class TaskChartPresenter implements PresentsWidgets { /** * A pie chart showing a snapshot of the tasks. */ private final PieChart pieChart; /** * Construct a new {@link TaskChartPresenter}. * * @param pieChart the {@link PieChart} */ public TaskChartPresenter(PieChart pieChart) { this.pieChart = pieChart; } public Widget asWidget() { return pieChart; } @Override public String mayStop() { return null; } public void start(EventBus eventBus) { pieChart.setWidth("90%"); pieChart.setHeight("90%"); pieChart.getElement().getStyle().setMarginLeft(5.0, Unit.PCT); pieChart.getElement().getStyle().setMarginTop(5.0, Unit.PCT); // Listen for events from the task list activity. eventBus.addHandler(TaskListUpdateEvent.TYPE, new TaskListUpdateEvent.Handler() { public void onTaskListUpdated(TaskListUpdateEvent event) { updatePieChart(event.getTasks()); } }); } @Override public void stop() { } /** * Update the pie chart with the list of tasks. * * @param tasks the list of tasks */ @SuppressWarnings("deprecation") private void updatePieChart(List<TaskProxy> tasks) { if (pieChart == null) { return; } // Calculate the slices based on the due date. double pastDue = 0; double dueSoon = 0; double onTime = 0; double noDate = 0; final Date now = new Date(); final Date tomorrow = new Date(now.getYear(), now.getMonth(), now.getDate() + 1, 23, 59, 59); for (TaskProxy task : tasks) { Date dueDate = task.getDueDate(); if (dueDate == null) { noDate++; } else if (dueDate.before(now)) { pastDue++; } else if (dueDate.before(tomorrow)) { dueSoon++; } else { onTime++; } } // Update the pie chart. pieChart.clearSlices(); if (pastDue > 0) { pieChart.addSlice(pastDue, CssColor.make(255, 100, 100)); } if (dueSoon > 0) { pieChart.addSlice(dueSoon, CssColor.make(255, 200, 100)); } if (onTime > 0) { pieChart.addSlice(onTime, CssColor.make(100, 255, 100)); } if (noDate > 0) { pieChart.addSlice(noDate, CssColor.make(200, 200, 200)); } pieChart.redraw(); } }