package fr.openwide.core.wicket.more.jqplot.data.adapter; import java.util.Collection; import java.util.Collections; import javax.annotation.Nullable; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import fr.openwide.core.wicket.more.jqplot.data.provider.IJQPlotDataProvider; import fr.openwide.core.wicket.more.util.model.Models; public abstract class AbstractMissingValuesJQPlotDataAdapter<S, K, V> extends AbstractJQPlotDataAdapter<S, K, V> { private static final long serialVersionUID = 51423240690775236L; private final IModel<? extends Collection<? extends S>> seriesModel; private final IModel<? extends Collection<? extends K>> keysModel; private final IModel<? extends V> missingValueReplacementModel; public AbstractMissingValuesJQPlotDataAdapter( final IJQPlotDataProvider<S, K, V> dataProvider, @Nullable IModel<? extends Collection<? extends S>> seriesModel, @Nullable IModel<? extends Collection<? extends K>> keysModel, @Nullable IModel<? extends V> missingValueReplacementModel) { super(dataProvider); this.seriesModel = seriesModel != null ? seriesModel : new AbstractReadOnlyModel<Collection<? extends S>>() { private static final long serialVersionUID = 1L; @Override public Collection<? extends S> getObject() { return dataProvider.getSeries(); } @Override public void detach() { dataProvider.detach(); } }; this.keysModel = keysModel != null ? keysModel : new AbstractReadOnlyModel<Collection<? extends K>>() { private static final long serialVersionUID = 1L; @Override public Collection<? extends K> getObject() { return dataProvider.getKeys(); } @Override public void detach() { dataProvider.detach(); } }; this.missingValueReplacementModel = missingValueReplacementModel == null ? Models.<V>placeholder() : missingValueReplacementModel; } @Override public void detach() { super.detach(); seriesModel.detach(); keysModel.detach(); } @Override public Collection<S> getSeriesTicks() { return Collections.unmodifiableCollection(seriesModel.getObject()); } @Override public Collection<K> getKeysTicks() { return Collections.unmodifiableCollection(keysModel.getObject()); } @Override public V getValue(S serie, K key) { V value = super.getValue(serie, key); if (value == null) { return missingValueReplacementModel.getObject(); } else { return value; } } }