package net.databinder.models.ao;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Iterator;
import net.databinder.ao.Databinder;
import net.databinder.models.PropertyDataProvider;
import net.java.ao.Query;
import net.java.ao.RawEntity;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.model.IModel;
import org.apache.wicket.util.lang.Objects;
@SuppressWarnings("unchecked")
public class EntityProvider extends PropertyDataProvider {
private Class entityType;
private Query query;
private Object managerKey;
public EntityProvider(Class entityType) {
this (entityType, Query.select());
}
public EntityProvider(Class entityType, Query query) {
this.entityType = entityType;
this.query = query;
}
public Iterator iterator(int first, int count) {
try {
Query q = ((Query) Objects.cloneObject(query)).offset(first).limit(count);
return Arrays.asList(Databinder.getEntityManager(managerKey).find(entityType, q)).iterator();
} catch (SQLException e) {
throw new WicketRuntimeException(e);
}
}
public int size() {
try {
return Databinder.getEntityManager(managerKey).count(entityType, query);
} catch (SQLException e) {
throw new WicketRuntimeException(e);
}
}
@Override
protected IModel dataModel(Object object) {
return new EntityModel((RawEntity)object);
}
public void detach() { }
public Object getManagerKey() {
return managerKey;
}
public void setManagerKey(Object managerKey) {
this.managerKey = managerKey;
}
}