All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nl.crashdata.chartjs.components.panels.SimpleGraphPanel Maven / Gradle / Ivy

package nl.crashdata.chartjs.components.panels;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import nl.crashdata.chartjs.components.resources.ChartJSJavaScriptResourceReference;
import nl.crashdata.chartjs.data.ChartJsConfig;
import nl.crashdata.chartjs.data.ChartJsDataset;
import nl.crashdata.chartjs.serialization.ChartJsObjectMapperFactory;
import org.apache.wicket.Application;
import org.apache.wicket.RuntimeConfigurationType;
import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
import org.apache.wicket.markup.head.IHeaderResponse;
import org.apache.wicket.markup.head.JavaScriptHeaderItem;
import org.apache.wicket.markup.head.OnDomReadyHeaderItem;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.GenericPanel;
import org.apache.wicket.model.IModel;

public class SimpleGraphPanel> extends GenericPanel
{
	private static final long serialVersionUID = 1L;

	private WebMarkupContainer canvas;

	public SimpleGraphPanel(String id, IModel model)
	{
		super(id, model);
	}

	@Override
	protected void onInitialize()
	{
		super.onInitialize();
		add(canvas = new WebMarkupContainer("canvas"));
	}

	@Override
	public void renderHead(IHeaderResponse response)
	{
		super.renderHead(response);
		response
			.render(JavaScriptHeaderItem.forReference(ChartJSJavaScriptResourceReference.get()));
		response.render(OnDomReadyHeaderItem
			.forScript("moment.locale('\" + Session.get().getLocale().toLanguageTag() + \"');\n"
				+ "document.getElementById(\"" + canvas.getMarkupId() + "\").chartjs = "
				+ "new Chart(document.getElementById(\"" + canvas.getMarkupId()
				+ "\").getContext(\"2d\"), " + marshal(getModelObject()) + ");"));
	}

	private String marshal(Object obj)
	{
		boolean isDevelopment = Application.exists() && RuntimeConfigurationType.DEVELOPMENT
			.equals(Application.get().getConfigurationType());
		try
		{
			ObjectMapper mapper = ChartJsObjectMapperFactory.getObjectMapper(isDevelopment);
			return mapper.writeValueAsString(obj);
		}
		catch (JsonProcessingException e)
		{
			throw new RuntimeException(e);
		}
	}

	public void update(IPartialPageRequestHandler target)
	{
		target.appendJavaScript("document.getElementById(\"" + canvas.getMarkupId()
			+ "\").chartjs.options = " + marshal(getModelObject().getOptions()) + ";");
		int index = 0;
		for (ChartJsDataset< ? > curDataset : getModelObject().getData().getDatasets())
		{
			target
				.appendJavaScript("Object.assign(document.getElementById(\"" + canvas.getMarkupId()
					+ "\").chartjs.data.datasets[" + index + "], " + marshal(curDataset) + ");");
			index++;
		}
		target.appendJavaScript(
			"document.getElementById(\"" + canvas.getMarkupId() + "\").chartjs.update();");
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy