package nl.topicus.onderwijs.dashboard.web.pages; import java.util.ArrayList; import nl.topicus.onderwijs.dashboard.datasources.AverageRequestTime; import nl.topicus.onderwijs.dashboard.datasources.Commits; import nl.topicus.onderwijs.dashboard.datasources.Events; import nl.topicus.onderwijs.dashboard.datasources.Issues; import nl.topicus.onderwijs.dashboard.datasources.NumberOfUsers; import nl.topicus.onderwijs.dashboard.datasources.RequestsPerMinute; import nl.topicus.onderwijs.dashboard.datasources.Trains; import nl.topicus.onderwijs.dashboard.keys.Location; import nl.topicus.onderwijs.dashboard.keys.Misc; import nl.topicus.onderwijs.dashboard.keys.Summary; import nl.topicus.onderwijs.dashboard.modules.DataSource; import nl.topicus.onderwijs.dashboard.modules.PlotSourcesService; import nl.topicus.onderwijs.dashboard.web.DashboardMode; import nl.topicus.onderwijs.dashboard.web.WicketApplication; import nl.topicus.onderwijs.dashboard.web.components.alerts.AlertsPanel; import nl.topicus.onderwijs.dashboard.web.components.bargraph.BarGraphPanel; import nl.topicus.onderwijs.dashboard.web.components.events.EventsPanel; import nl.topicus.onderwijs.dashboard.web.components.plot.PlotPanel; import nl.topicus.onderwijs.dashboard.web.components.statustable.StatusTablePanel; import nl.topicus.onderwijs.dashboard.web.components.table.StackedTablesPanel; import nl.topicus.onderwijs.dashboard.web.components.table.TablePanel; import nl.topicus.onderwijs.dashboard.web.components.twitter.TwitterPanel; import nl.topicus.onderwijs.dashboard.web.components.weather.WeatherPanel; import nl.topicus.onderwijs.dashboard.web.resources.ResourceLocator; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.markup.html.IHeaderResponse; import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.model.util.ListModel; import org.apache.wicket.request.mapper.parameter.PageParameters; import org.apache.wicket.request.resource.JavaScriptResourceReference; import org.apache.wicket.spring.injection.annot.SpringBean; import org.odlabs.wiquery.core.IWiQueryPlugin; import org.odlabs.wiquery.core.javascript.JsQuery; import org.odlabs.wiquery.core.javascript.JsStatement; public class DashboardPage extends WebPage implements IWiQueryPlugin { private static final long serialVersionUID = 1L; @SpringBean private PlotSourcesService plotSources; public DashboardPage(final PageParameters parameters) { AjaxLink<Void> liveToRandomModeSwitch = new AjaxLink<Void>("live") { private static final long serialVersionUID = 1L; @Override public void onClick(AjaxRequestTarget target) { WicketApplication.get().switchMode(); target.add(this); } @Override public boolean isVisible() { return getApplication().usesDevelopmentConfig(); } }; add(liveToRandomModeSwitch); liveToRandomModeSwitch.add(new Label("label", new PropertyModel<String>(this, "mode"))); ArrayList<Class<? extends DataSource<? extends Number>>> datasources = new ArrayList<Class<? extends DataSource<? extends Number>>>(); datasources.add(NumberOfUsers.class); datasources.add(AverageRequestTime.class); datasources.add(RequestsPerMinute.class); add(new BarGraphPanel("bargraph", new ListModel<Class<? extends DataSource<? extends Number>>>( datasources))); add(new StatusTablePanel("table")); add(new TablePanel("ns", Trains.class, WicketApplication.get() .getRepository().getKeys(Location.class).get(0), true)); StackedTablesPanel tablestack = new StackedTablesPanel("tablestack"); tablestack.addTable(new TablePanel(tablestack.nextTableId(), Commits.class, Summary.get(), false)); tablestack.addTable(new TablePanel(tablestack.nextTableId(), Issues.class, Summary.get(), false)); add(tablestack); add(new WeatherPanel("weather", WicketApplication.get().getRepository() .getKeys(Location.class).get(0))); StackedTablesPanel plotstack = new StackedTablesPanel("plotstack"); for (int index = 0; index < plotSources.getPlotSources().size(); index++) { plotstack.addTable(new PlotPanel(tablestack.nextTableId(), index)); } add(plotstack); add(new EventsPanel("events", Events.class, Summary.get())); add(new AlertsPanel("alerts")); add(new TwitterPanel("twitter", WicketApplication.get().getRepository() .getKeys(Misc.class).get(0))); } public DashboardMode getMode() { return WicketApplication.get().getMode(); } @Override public void renderHead(IHeaderResponse response) { response.renderJavaScriptReference(new JavaScriptResourceReference( ResourceLocator.class, "jquery.timers-1.1.3.js")); response.renderJavaScriptReference(new JavaScriptResourceReference( DashboardPage.class, "jquery.dashboardclock.js")); } @Override public JsStatement statement() { return new JsQuery(this).$().chain( "dashboardClock", "'resources/application/starttime'", Boolean.toString(WicketApplication.get() .isContextMenuDisabled())); } }