public class GananciaUsuarioStatsPanel extends Panel { private Usuario usuario; private List unidades; private List subastas; private Iterator subastasIterator; @EJB(name="ejb/usuarioDAO") private UsuarioDAO userManager; @EJB(name="ejb/unidadDAO") private UnidadDAO unidadManager; public GananciaUsuarioStatsPanel(String id, Usuario usuario, int visibleRows) { super(id); this.usuario = usuario; List columnas = new ArrayList(); unidades = unidadManager.getUnidadesGroupByUsuario(usuario); //This is here to prevent exceptions, needs to be improved subastas = userManager.getSubastasIterativasConGanancia(usuario.getId()); if (subastas.size() == 0) { columnas.add(new PropertyColumn(new Model("Etapa"), "")); int i = 0; for (Unidad unidad : unidades) columnas.add(new GananciaColumn(new Model(unidad.getRenderer()), i++)); } else { columnas.add(new AbstractColumn(new Model("Etapa")) { public void populateItem(Item cellItem, String componentId, IModel model) { cellItem.add(new Label(componentId, String.valueOf(subastasIterator.next().getEtapa()))); } }); int i = 0; for (Unidad unidad : unidades) { columnas.add(new GananciaColumn(new Model(unidad.getRenderer()), i++)); } } AjaxFallbackDefaultDataTable tabla = new AjaxFallbackDefaultDataTable( "usuarioStats", columnas, new UsuarioStatsDataProvider(), visibleRows); add(tabla); } private class GananciaColumn extends AbstractColumn { private int index; GananciaColumn(IModel model, int index) { super(model); this.index = index; } public void populateItem(Item cellItem, String componentId, IModel model) { List ofertas = (List) model.getObject(); double ganancia; ganancia = ofertas.get(index).getGanancia(); if (ganancia == 0.0000011) ganancia = 0; cellItem.add(new Label(componentId, String.valueOf(ganancia))); } } private class UsuarioStatsDataProvider extends SortableDataProvider { public int size() { return userManager.getSubastasIterativasConGanancia(usuario.getId()).size(); } public IModel model(Object object) { return new GananciaListDetachableModel( ((SubastaIterativa)object).getEtapa()); } public Iterator iterator(int first, int count) { subastas = userManager.getSubastasIterativasConGanancia(usuario.getId()). subList(first, first+count); subastasIterator = subastas.iterator(); return subastas.iterator(); } } private class GananciaListDetachableModel extends LoadableDetachableModel { private int id; GananciaListDetachableModel(int etapa) { super(unidadManager.getGananciasUsuarioByEtapa(usuario.getId(), etapa)); this.id = etapa; } @Override protected Object load() { return unidadManager.getGananciasUsuarioByEtapa(usuario.getId(), id); } } }