blob: 6692092635f9256e5b5daa49f6149f486edb5d68 [file] [log] [blame]
/*
* 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();
}
}