Package nl.topicus.onderwijs.dashboard.web.components.table

Source Code of nl.topicus.onderwijs.dashboard.web.components.table.TablePanel

package nl.topicus.onderwijs.dashboard.web.components.table;

import nl.topicus.onderwijs.dashboard.datasources.DataSourceAnnotationReader;
import nl.topicus.onderwijs.dashboard.keys.Key;
import nl.topicus.onderwijs.dashboard.modules.DashboardRepository;
import nl.topicus.onderwijs.dashboard.modules.DataSource;
import nl.topicus.onderwijs.dashboard.modules.DataSourceSettings;
import nl.topicus.onderwijs.dashboard.modules.KeyProperty;
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.WebMarkupContainer;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@WiQueryUIPlugin
public class TablePanel extends Panel implements IWiQueryPlugin {
  private static final Logger log = LoggerFactory.getLogger(TablePanel.class);
  private static final long serialVersionUID = 1L;
  private WebMarkupContainer table;
  private JsonResourceBehavior<Object> dataResource;
  private Class<? extends DataSource<?>> dataSource;
  private Key key;
  private boolean useKeyLabel;

  public TablePanel(String id, Class<? extends DataSource<?>> dataSource,
      Key key, boolean useKeyLabel) {
    super(id);
    this.dataSource = dataSource;
    this.key = key;
    this.useKeyLabel = useKeyLabel;

    this.dataResource = new JsonResourceBehavior<Object>(
        new AbstractReadOnlyModel<Object>() {
          private static final long serialVersionUID = 1L;

          @Override
          public Object getObject() {
            try {
              DashboardRepository repository = WicketApplication
                  .get().getRepository();
              return repository
                  .getData(TablePanel.this.dataSource)
                  .get(TablePanel.this.key).getValue();
            } catch (NullPointerException e) {
              log.error("Cannot find datasource for "
                  + TablePanel.this.dataSource.getName()
                  + " for " + TablePanel.this.key.getCode());
              return null;
            }
          }
        });
    add(dataResource);

    table = new WebMarkupContainer("table");
    add(table);
  }

  @Override
  public void renderHead(IHeaderResponse response) {
    response.renderJavaScriptReference(WidgetJavaScriptResourceReference
        .get());
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        TablePanel.class, "jquery.ui.dashboardtable.js"));
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        TablePanel.class, "dashboardnstable.js"));
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        TablePanel.class, "dashboardalerttable.js"));
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        TablePanel.class, "dashboardissuetable.js"));
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        TablePanel.class, "dashboardcommittable.js"));
  }

  @Override
  public JsStatement statement() {
    DataSourceSettings settings = DataSourceAnnotationReader
        .getSettings(dataSource);
    KeyProperty keyProperty = DataSourceAnnotationReader
        .getKeyProperty(dataSource);
    Options options = new Options();
    options.putLiteral("dataUrl", dataResource.getCallbackUrl().toString());
    options.putLiteral("label",
        useKeyLabel ? key.getName() : settings.label());
    options.putLiteral("htmlClass", settings.htmlClass());
    options.putLiteral("conversion", settings.conversion());
    options.putLiteral("keyProperty", keyProperty.value());
    JsQuery jsq = new JsQuery(table);
    return jsq.$().chain("dashboardTable", options.getJavaScriptOptions());
  }
}
TOP

Related Classes of nl.topicus.onderwijs.dashboard.web.components.table.TablePanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.