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

Source Code of nl.topicus.onderwijs.dashboard.web.components.bargraph.BarGraphBarPanel

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

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import nl.topicus.onderwijs.dashboard.keys.Key;
import nl.topicus.onderwijs.dashboard.keys.Project;
import nl.topicus.onderwijs.dashboard.modules.DashboardRepository;
import nl.topicus.onderwijs.dashboard.modules.DataSource;
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.model.IModel;
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 BarGraphBarPanel extends Panel implements IWiQueryPlugin {
  private static final long serialVersionUID = 1L;
  private JsonResourceBehavior<Map<String, BarData>> dataResource;
  private IModel<List<Class<? extends DataSource<? extends Number>>>> dataSetsModel;

  public BarGraphBarPanel(
      String id,
      IModel<Project> projectModel,
      IModel<List<Class<? extends DataSource<? extends Number>>>> dataSetsModel) {
    super(id, projectModel);
    this.dataSetsModel = dataSetsModel;
    this.dataResource = new JsonResourceBehavior<Map<String, BarData>>(
        new AbstractReadOnlyModel<Map<String, BarData>>() {
          private static final long serialVersionUID = 1L;

          @Override
          public Map<String, BarData> getObject() {
            return retrieveDataFromApplication();
          }
        });
    add(dataResource);
  }

  protected Map<String, BarData> retrieveDataFromApplication() {
    Map<String, BarData> ret = new HashMap<String, BarData>();
    for (Class<? extends DataSource<? extends Number>> datasource : dataSetsModel
        .getObject()) {
      getDataFromDataSource(ret, datasource);
    }
    return ret;
  }

  private void getDataFromDataSource(Map<String, BarData> ret,
      Class<? extends DataSource<? extends Number>> datasourceType) {
    DashboardRepository repository = WicketApplication.get()
        .getRepository();

    Project project = getProject();

    Map<Key, ? extends DataSource<? extends Number>> data = repository
        .getData(datasourceType);
    DataSource<? extends Number> datasource = data.get(project);

    if (datasource != null) {
      long max = 0;
      for (DataSource<? extends Number> status : data.values()) {
        Number number = status.getValue();
        max = Math.max(number == null ? 0 : number.longValue(), max);
      }

      Number sourceValue = datasource.getValue();
      if (sourceValue != null) {
        long number = sourceValue.longValue();
        double value = max == 0 ? 0 : (100.0 * number) / max;
        ret.put(datasourceType.getSimpleName(), new BarData(value,
            sourceValue.toString()));
      }
    }
  }

  @Override
  public void renderHead(IHeaderResponse response) {
    response.renderJavaScriptReference(WidgetJavaScriptResourceReference
        .get());
    response.renderJavaScriptReference(new JavaScriptResourceReference(
        BarGraphBarPanel.class, "jquery.ui.dashboardbargraph.js"));
  }

  public Project getProject() {
    return (Project) getDefaultModelObject();
  }

  @Override
  public JsStatement statement() {
    Options options = new Options();
    options.putLiteral("projectName", getProject().getName());
    options.putLiteral("dataUrl", dataResource.getCallbackUrl().toString());
    JsQuery jsq = new JsQuery(this);
    return jsq.$().chain("dashboardBarGraph",
        options.getJavaScriptOptions());
  }

  @Override
  protected void onDetach() {
    super.onDetach();
    dataSetsModel.detach();
  }
}
TOP

Related Classes of nl.topicus.onderwijs.dashboard.web.components.bargraph.BarGraphBarPanel

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.