package fr.openwide.core.wicket.more.model;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Locale;
import org.apache.wicket.Component;
import org.apache.wicket.Session;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IComponentAssignedModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.IWrapModel;
import fr.openwide.core.wicket.more.util.model.Detachables;
public abstract class LocaleAwareReadOnlyModel<T> extends AbstractReadOnlyModel<T> implements IComponentAssignedModel<T> {
private static final long serialVersionUID = 5634025837567024511L;
@Override
public T getObject() {
return getObject(Session.get().getLocale());
}
public abstract T getObject(Locale locale);
@Override
public IWrapModel<T> wrapOnAssignment(Component component) {
return new WrapModel(component);
}
private class WrapModel extends AbstractReadOnlyModel<T> implements IWrapModel<T> {
private static final long serialVersionUID = -1080017215611311157L;
private final Component component;
public WrapModel(Component component) {
super();
this.component = checkNotNull(component);
}
@Override
public T getObject() {
return LocaleAwareReadOnlyModel.this.getObject(component.getLocale());
}
@Override
public IModel<?> getWrappedModel() {
return LocaleAwareReadOnlyModel.this;
}
@Override
public void detach() {
super.detach();
Detachables.detach(getWrappedModel());
}
}
}