package fr.openwide.core.wicket.more.link.descriptor.mapper;
import org.apache.wicket.model.IModel;
import org.javatuples.Quartet;
import org.javatuples.Triplet;
import fr.openwide.core.wicket.more.util.model.Models;
public abstract class AbstractFourParameterLinkDescriptorMapper<L, T1, T2, T3, T4>
implements IFourParameterLinkDescriptorMapper<L, T1, T2, T3, T4> {
private static final long serialVersionUID = -3040065136637291311L;
@Override
public void detach() { }
@Override
public abstract L map(Quartet<? extends IModel<T1>, ? extends IModel<T2>, ? extends IModel<T3>, ? extends IModel<T4>> param);
@Override
public final L map(IModel<T1> model1, IModel<T2> model2, IModel<T3> model3, IModel<T4> model4) {
return map(Quartet.with(model1, model2, model3, model4));
}
@Override
public IThreeParameterLinkDescriptorMapper<L, T2, T3, T4> setParameter1(final IModel<T1> model1) {
return new AbstractThreeParameterLinkDescriptorMapper<L, T2, T3, T4>() {
private static final long serialVersionUID = 1L;
@Override
public L map(Triplet<? extends IModel<T2>, ? extends IModel<T3>, ? extends IModel<T4>> param) {
return AbstractFourParameterLinkDescriptorMapper.this.map(param.addAt0(model1));
}
@Override
public void detach() {
super.detach();
model1.detach();
AbstractFourParameterLinkDescriptorMapper.this.detach();
}
};
}
@Override
public IThreeParameterLinkDescriptorMapper<L, T2, T3, T4> ignoreParameter1() {
return setParameter1(Models.<T1>placeholder());
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T3, T4> setParameter2(final IModel<T2> model2) {
return new AbstractThreeParameterLinkDescriptorMapper<L, T1, T3, T4>() {
private static final long serialVersionUID = 1L;
@Override
public L map(Triplet<? extends IModel<T1>, ? extends IModel<T3>, ? extends IModel<T4>> param) {
return AbstractFourParameterLinkDescriptorMapper.this.map(param.addAt1(model2));
}
@Override
public void detach() {
super.detach();
model2.detach();
AbstractFourParameterLinkDescriptorMapper.this.detach();
}
};
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T3, T4> ignoreParameter2() {
return setParameter2(Models.<T2>placeholder());
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T4> setParameter3(final IModel<T3> model3) {
return new AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T4>() {
private static final long serialVersionUID = 1L;
@Override
public L map(Triplet<? extends IModel<T1>, ? extends IModel<T2>, ? extends IModel<T4>> param) {
return AbstractFourParameterLinkDescriptorMapper.this.map(param.addAt2(model3));
}
@Override
public void detach() {
super.detach();
model3.detach();
AbstractFourParameterLinkDescriptorMapper.this.detach();
}
};
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T4> ignoreParameter3() {
return setParameter3(Models.<T3>placeholder());
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T3> setParameter4(final IModel<T4> model4) {
return new AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T3>() {
private static final long serialVersionUID = 1L;
@Override
public L map(Triplet<? extends IModel<T1>, ? extends IModel<T2>, ? extends IModel<T3>> param) {
return AbstractFourParameterLinkDescriptorMapper.this.map(param.addAt3(model4));
}
@Override
public void detach() {
super.detach();
model4.detach();
AbstractFourParameterLinkDescriptorMapper.this.detach();
}
};
}
@Override
public AbstractThreeParameterLinkDescriptorMapper<L, T1, T2, T3> ignoreParameter4() {
return setParameter4(Models.<T4>placeholder());
}
}