package nl.topicus.onderwijs.dashboard.web.components.twitter;
import java.util.List;
import nl.topicus.onderwijs.dashboard.datasources.TwitterMentions;
import nl.topicus.onderwijs.dashboard.datasources.TwitterTimeline;
import nl.topicus.onderwijs.dashboard.datatypes.TwitterStatus;
import nl.topicus.onderwijs.dashboard.keys.Key;
import nl.topicus.onderwijs.dashboard.modules.DashboardRepository;
import nl.topicus.onderwijs.dashboard.web.WicketApplication;
import nl.topicus.onderwijs.dashboard.web.components.JsonResourceBehavior;
import org.apache.wicket.markup.html.IHeaderResponse;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.request.resource.JavaScriptResourceReference;
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 TwitterPanel extends Panel implements IWiQueryPlugin {
private static final long serialVersionUID = 1L;
private JsonResourceBehavior<List<TwitterStatus>> timelineDataResource;
private JsonResourceBehavior<List<TwitterStatus>> mentionsDataResource;
public TwitterPanel(String id, final Key key) {
super(id);
this.timelineDataResource = new JsonResourceBehavior<List<TwitterStatus>>(
new AbstractReadOnlyModel<List<TwitterStatus>>() {
private static final long serialVersionUID = 1L;
@Override
public List<TwitterStatus> getObject() {
DashboardRepository repository = WicketApplication
.get().getRepository();
return repository.getData(TwitterTimeline.class)
.get(key).getValue();
}
});
add(timelineDataResource);
this.mentionsDataResource = new JsonResourceBehavior<List<TwitterStatus>>(
new AbstractReadOnlyModel<List<TwitterStatus>>() {
private static final long serialVersionUID = 1L;
@Override
public List<TwitterStatus> getObject() {
DashboardRepository repository = WicketApplication
.get().getRepository();
return repository.getData(TwitterMentions.class)
.get(key).getValue();
}
});
add(mentionsDataResource);
}
@Override
public void renderHead(IHeaderResponse response) {
response.renderJavaScriptReference(WidgetJavaScriptResourceReference
.get());
response.renderJavaScriptReference(new JavaScriptResourceReference(
TwitterPanel.class, "jquery.ui.dashboardtwitter.js"));
}
@Override
public JsStatement statement() {
Options options = new Options();
options.putLiteral("timelineUrl", timelineDataResource.getCallbackUrl()
.toString());
options.putLiteral("mentionsUrl", mentionsDataResource.getCallbackUrl()
.toString());
JsQuery jsq = new JsQuery(this);
return jsq.$()
.chain("dashboardTwitter", options.getJavaScriptOptions());
}
}