package fr.openwide.core.wicket.more.markup.html.factory;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.StringResourceModel;
import com.google.common.base.Function;
import fr.openwide.core.wicket.more.model.ReadOnlyModel;
import fr.openwide.core.wicket.more.util.model.Detachables;
public final class ModelFactories {
private ModelFactories() {
}
public static final <T> IDetachableFactory<IModel<? extends T>, StringResourceModel> stringResourceModel(
final String resourceKey) {
return new AbstractDetachableFactory<IModel<? extends T>, StringResourceModel>() {
private static final long serialVersionUID = 1L;
@Override
public StringResourceModel create(IModel<? extends T> parameter) {
return new StringResourceModel(resourceKey, parameter)
.setParameters(parameter);
}
};
}
public static final <T> IDetachableFactory<IModel<? extends T>, StringResourceModel> stringResourceModel(
final String resourceKey, final Function<? super T, ?> positionalParameterFunction) {
return new AbstractDetachableFactory<IModel<? extends T>, StringResourceModel>() {
private static final long serialVersionUID = 1L;
@Override
public StringResourceModel create(IModel<? extends T> parameter) {
return new StringResourceModel(resourceKey, parameter)
.setParameters(ReadOnlyModel.of(parameter, positionalParameterFunction));
}
};
}
public static final <R extends IModel<?>, T> IDetachableFactory<T, R> constant(final R model) {
return new AbstractDetachableFactory<T, R>() {
private static final long serialVersionUID = 1L;
@Override
public R create(T parameter) {
return model;
}
@Override
public void detach() {
Detachables.detach(model);
}
};
}
}