package fr.openwide.core.wicket.more.jqplot.data.adapter; import java.util.Collection; import java.util.Locale; import java.util.Map; import org.apache.wicket.Component; import org.apache.wicket.Session; import org.apache.wicket.model.IModel; import org.apache.wicket.model.IWrapModel; import org.apache.wicket.util.lang.Classes; import fr.openwide.core.wicket.more.jqplot.data.provider.AbstractJQPlotDataProvider; import fr.openwide.core.wicket.more.jqplot.data.provider.IJQPlotDataProvider; import nl.topicus.wqplot.data.AbstractSeries; import nl.topicus.wqplot.options.PlotOptions; import nl.topicus.wqplot.options.PlotSeries; import nl.topicus.wqplot.options.PlotTick; public abstract class AbstractJQPlotDataAdapter<S, K, V> extends AbstractJQPlotDataProvider<S, K, V> implements IJQPlotDataAdapter<S, K, V> { private static final long serialVersionUID = 51423240690775236L; private final IJQPlotDataProvider<S, K, V> dataProvider; public AbstractJQPlotDataAdapter(IJQPlotDataProvider<S, K, V> dataProvider) { super(); this.dataProvider = dataProvider; } @Override public final Collection<? extends AbstractSeries<?, V, ?>> getObject() { return getObject(Session.get().getLocale()); } protected abstract Collection<? extends AbstractSeries<?, V, ?>> getObject(Locale locale); @Override public void setObject(Collection<? extends AbstractSeries<?, V, ?>> object) { setObject(object, Session.get().getLocale()); } protected void setObject(Collection<? extends AbstractSeries<?, ?, ?>> object, Locale locale) { throw new UnsupportedOperationException("Cannot set the value of a " + Classes.simpleName(getClass())); } @Override public Collection<S> getSeries() { return dataProvider.getSeries(); } @Override public Collection<K> getKeys() { return dataProvider.getKeys(); } @Override public V getValue(S serie, K key) { return dataProvider.getValue(serie, key); } @Override public Collection<V> getValues() { return dataProvider.getValues(); } @Override public Collection<S> getSeriesTicks() { return getSeries(); } @Override public Collection<K> getKeysTicks() { return getKeys(); } @Override public void configure(PlotOptions options, Map<? extends S, PlotSeries> seriesMap, Map<? extends K, PlotTick> keysMap, Locale locale) { // Does nothing. // To be overriden by subclasses. } @Override public void afterConfigure(PlotOptions options, Map<? extends S, PlotSeries> seriesMap, Map<? extends K, PlotTick> keysMap, Locale locale) { // Does nothing. // To be overriden by subclasses. } @Override public void detach() { dataProvider.detach(); } @Override public IWrapModel<Collection<? extends AbstractSeries<?, V, ?>>> wrapOnAssignment(Component component) { return new WrapModel(component); } protected class WrapModel implements IWrapModel<Collection<? extends AbstractSeries<?, V, ?>>> { private static final long serialVersionUID = -3127520838702743514L; private final Component component; public WrapModel(Component component) { super(); this.component = component; } @Override public Collection<? extends AbstractSeries<?, V, ?>> getObject() { return AbstractJQPlotDataAdapter.this.getObject(component.getLocale()); } @Override public void setObject(Collection<? extends AbstractSeries<?, V, ?>> object) { AbstractJQPlotDataAdapter.this.setObject(object, component.getLocale()); } @Override public void detach() { AbstractJQPlotDataAdapter.this.detach(); } @Override public IModel<?> getWrappedModel() { return AbstractJQPlotDataAdapter.this; } } }