package sushi.application.components.table;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.ISortState;
import org.apache.wicket.extensions.markup.html.repeater.data.table.ISortableDataProvider;
import org.apache.wicket.extensions.markup.html.repeater.util.SingleSortState;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import sushi.application.components.table.model.AbstractDataProvider;
import sushi.persistence.Persistable;
public class SushiProvider<E extends Persistable> extends AbstractDataProvider implements ISortableDataProvider<E, String> {
private static final long serialVersionUID = 1L;
protected List<E> entities;
protected List<E> selectedEntities;
protected ISortState<String> sortState = new SingleSortState<String>();
public SushiProvider(List<E> entities) {
this.entities = entities;
this.selectedEntities = new ArrayList<E>();
}
public SushiProvider(List<E> entities, List<E> selectedEntities) {
this.entities = entities;
this.selectedEntities = selectedEntities;
}
@Override
public void detach() {
// attributes = null;
}
public void removeItem(E p) {
this.entities.remove(p);
}
public void addItem(E p) {
this.entities.add(p);
}
@Override
public Iterator<? extends E> iterator(long first, long count) {
List<E> data = entities;
Collections.sort(data, new Comparator<E>() {
public int compare(E e1, E e2) {
return (new Integer(e1.getID()).compareTo(e2.getID()));
}
});
return data.subList((int)first, (int)Math.min(first + count, data.size())).iterator();
}
@Override
public IModel<E> model(E entity) {
return Model.of(entity);
}
@Override
public long size() {
return entities.size();
}
public List<E> getEntities() {
return entities;
}
public List<E> getSelectedEntities(){
return selectedEntities;
}
public void setEntities(List<E> entityList) {
entities = entityList;
}
@Override
public ISortState<String> getSortState() {
return sortState;
}
@Override
public void selectEntry(int entryId) {
for (Iterator<E> iter = entities.iterator(); iter.hasNext(); ) {
E entity = iter.next();
if(entity.getID() == entryId) {
selectEntry(entity);
return;
}
}
}
public void selectEntry(E entity) {
selectedEntities.add(entity);
}
@Override
public void deselectEntry(int entryId) {
for (Iterator<E> iter = entities.iterator(); iter.hasNext(); ) {
E entity = iter.next();
if (entity.getID() == entryId) {
deselectEntry(entity);
return;
}
}
}
public void deselectEntry(E entity) {
selectedEntities.remove(entity);
}
public void clearSelectedEntities() {
selectedEntities.clear();
}
@Override
public boolean isEntrySelected(int entryId) {
for (E entity : selectedEntities) {
if (entity.getID() == entryId) {
return true;
}
}
return false;
}
public boolean isEntrySelected(E notification) {
if (selectedEntities.contains(notification)) {
return true;
}
return false;
}
public void deleteSelectedEntries() {
for (E entity : selectedEntities) {
entities.remove(entity);
entity.remove();
}
}
public void selectAllEntries() {
for (E entity : entities) {
selectedEntities.add(entity);
}
}
@Override
public Object getEntry(int entryId) {
// TODO Auto-generated method stub
return null;
}
}