package nl.topicus.onderwijs.dashboard.web.components.plot;
import nl.topicus.onderwijs.dashboard.modules.PlotSource;
import nl.topicus.onderwijs.dashboard.modules.PlotSourcesService;
import nl.topicus.wqplot.components.JQPlot;
import org.apache.wicket.ajax.AbstractDefaultAjaxBehavior;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.panel.Panel;
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;
import org.odlabs.wiquery.core.options.Options;
import org.odlabs.wiquery.ui.commons.WiQueryUIPlugin;
import org.odlabs.wiquery.ui.widget.WidgetJavaScriptResourceReference;
@WiQueryUIPlugin
public class PlotPanel extends Panel implements IWiQueryPlugin {
private class PlotUpdateBehavior extends AbstractDefaultAjaxBehavior {
private static final long serialVersionUID = 1L;
@Override
protected void respond(AjaxRequestTarget target) {
replace(plot = getPlotSource().createPlot(plot.getId()));
target.add(plot);
}
@Override
public CharSequence getCallbackScript() {
return "function() {" + super.getCallbackScript() + "}";
}
}
private static final long serialVersionUID = 1L;
private PlotUpdateBehavior updateBehavior;
private JQPlot plot;
@SpringBean
private PlotSourcesService plotSources;
private int plotSourceIndex;
public PlotPanel(String id, int plotSourceIndex) {
super(id);
this.plotSourceIndex = plotSourceIndex;
updateBehavior = new PlotUpdateBehavior();
add(updateBehavior);
add(plot = getPlotSource().createPlot("plot"));
}
private PlotSource getPlotSource() {
return plotSources.getPlotSources().get(plotSourceIndex);
}
@Override
public void renderHead(IHeaderResponse response) {
response.renderJavaScriptReference(WidgetJavaScriptResourceReference
.get());
response.renderJavaScriptReference(new JavaScriptResourceReference(
PlotPanel.class, "jquery.ui.dashboardplot.js"));
}
@Override
public JsStatement statement() {
Options options = new Options();
options.put("callback", updateBehavior.getCallbackScript().toString());
JsQuery jsq = new JsQuery(this);
return jsq.$().chain("dashboardPlot", options.getJavaScriptOptions());
}
}