package fr.openwide.core.wicket.more.markup.html.model; import java.util.List; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; public class ListItemModel<T> implements IModel<T> { private static final long serialVersionUID = -7747826759295752059L; private final IModel<? extends List<T>> listModel; private final IModel<Integer> indexModel; public ListItemModel(IModel<? extends List<T>> listModel, int index) { this(listModel, Model.of(index)); } public ListItemModel(IModel<? extends List<T>> listModel, IModel<Integer> indexModel) { super(); this.listModel = listModel; this.indexModel = indexModel; } @Override public int hashCode() { return new HashCodeBuilder() .append(listModel) .append(indexModel) .toHashCode(); } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (obj == this) { return true; } if (!(obj instanceof ListItemModel)) { return false; } ListItemModel<?> other = (ListItemModel<?>) obj; return new EqualsBuilder() .append(listModel, other.listModel) .append(indexModel, other.indexModel) .build(); } @Override public T getObject() { return listModel.getObject().get(indexModel.getObject()); } @Override public void setObject(T object) { listModel.getObject().set(indexModel.getObject(), object); } @Override public void detach() { listModel.detach(); indexModel.detach(); } public IModel<? extends List<T>> getListModel() { return listModel; } public IModel<Integer> getIndexModel() { return indexModel; } }