package com.mycompany;
import java.awt.Color;
import java.util.ArrayList;
import java.util.Date;
import com.vaadin.addon.timeline.Timeline;
import com.vaadin.data.util.IndexedContainer;
import com.mycompany.data.DataProvider;
import com.mycompany.data.DataProvider.Movie;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutListener;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.VerticalLayout;
public class SalesView extends VerticalLayout implements View {
private Timeline timeline;
Color[] colors = new Color[] { new Color(52, 154, 255),
new Color(242, 81, 57), new Color(255, 201, 35),
new Color(83, 220, 164) };
int colorIndex = -1;
@Override
public void enter(ViewChangeEvent event) {
setSizeFull();
addStyleName("timeline");
Label header = new Label("Revenue by Movie Title");
header.addStyleName("h1");
addComponent(header);
HorizontalLayout toolbar = new HorizontalLayout();
toolbar.setWidth("100%");
toolbar.setSpacing(true);
toolbar.setMargin(true);
toolbar.addStyleName("toolbar");
addComponent(toolbar);
final ComboBox movieSelect = new ComboBox();
ArrayList<Movie> movies = DataProvider.getMovies();
for (Movie m : movies) {
movieSelect.addItem(m.title);
}
movieSelect.setWidth("300px");
toolbar.addComponent(movieSelect);
movieSelect.addShortcutListener(new ShortcutListener("Add",
KeyCode.ENTER, null) {
@Override
public void handleAction(Object sender, Object target) {
addSelectedMovie(movieSelect);
}
});
Button add = new Button("Add");
add.addStyleName("default");
add.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
addSelectedMovie(movieSelect);
}
});
toolbar.addComponent(add);
toolbar.setComponentAlignment(add, Alignment.BOTTOM_LEFT);
Button clear = new Button("Clear");
clear.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
timeline.removeAllGraphDataSources();
}
});
toolbar.addComponent(clear);
toolbar.setComponentAlignment(clear, Alignment.BOTTOM_RIGHT);
toolbar.setExpandRatio(clear, 1);
timeline = new Timeline();
timeline.setDateSelectVisible(false);
timeline.setChartModesVisible(false);
timeline.setGraphShadowsEnabled(false);
timeline.setZoomLevelsVisible(false);
timeline.setSizeFull();
timeline.setNoDataSourceCaption("<span class=\"v-label h2 light\">Add a data set from the dropdown above</span>");
addComponent(timeline);
setExpandRatio(timeline, 1);
// Add first 4 by default
int i = 0;
for (Movie m : DataProvider.getMovies()) {
addDataSet(m.title);
if (++i > 3)
break;
}
Date start = new Date();
start.setMonth(start.getMonth() - 2);
Date end = new Date();
if (timeline.getGraphDatasources().size() > 0)
timeline.setVisibleDateRange(start, end);
}
private void addSelectedMovie(final ComboBox movieSelect) {
if (movieSelect.getValue() != null
&& !movieSelect.getValue().equals("")) {
String title = movieSelect.getValue().toString();
addDataSet(title);
movieSelect.removeItem(title);
movieSelect.setValue(null);
}
}
private void addDataSet(String title) {
IndexedContainer revenue = ((MyVaadinUI) getUI()).dataProvider
.getRevenueForTitle(title);
timeline.addGraphDataSource(revenue, "timestamp", "revenue");
colorIndex = (colorIndex >= colors.length - 1 ? 0 : ++colorIndex);
timeline.setGraphOutlineColor(revenue, colors[colorIndex]);
timeline.setBrowserOutlineColor(revenue, colors[colorIndex]);
timeline.setBrowserFillColor(revenue, colors[colorIndex].brighter());
timeline.setGraphLegend(revenue, title);
timeline.setEventCaptionPropertyId("date");
timeline.setVerticalAxisLegendUnit(revenue, "$");
}
}