package org.orienteer.core.component.meta;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
/**
* {@link AbstractModeMetaPanel} that can use getValue and setValue methods for dynamic value resolution
*
* @param <T> the type of an entity
* @param <K> the type of a display mode
* @param <C> the type of a criteria
* @param <V> the type of a value
*/
public abstract class AbstractComplexModeMetaPanel<T, K, C, V> extends AbstractModeMetaPanel<T, K, C, V> {
private static final long serialVersionUID = 1L;
public AbstractComplexModeMetaPanel(String id, IModel<K> modeModel,
IModel<T> entityModel, IModel<C> propertyModel, IModel<V> valueModel)
{
super(id, modeModel, entityModel, propertyModel, valueModel);
}
public AbstractComplexModeMetaPanel(String id, IModel<K> modeModel, IModel<T> entityModel,
IModel<C> criteryModel) {
super(id, modeModel, entityModel, criteryModel);
}
@Override
protected IModel<V> resolveValueModel() {
return new LoadableDetachableModel<V>() {
private static final long serialVersionUID = 1L;
@Override
protected V load() {
return getValue(getEntityObject(), getPropertyObject());
}
@Override
public void setObject(V object) {
setValue(getEntityObject(), getPropertyObject(), object);
super.setObject(object);
}
};
}
protected abstract V getValue(T entity, C critery);
protected abstract void setValue(T entity, C critery, V value);
}