lazyquerycontainer JPA Table

Hi i’m very new java programer so please help me

i already have a Usuarios Bean

package com.marcos.model;

import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 * Usuarios entity. @author MyEclipse Persistence Tools
 */
@Entity
@Table(name = "usuarios", schema = "public", uniqueConstraints = @UniqueConstraint(columnNames = {
		"usuario", "clave" }))
public class Usuarios implements java.io.Serializable {

	// Fields

	private Integer idusuario;
	private String usuario;
	private String clave;
	private Set<UsuariosSucursales> usuariosSucursaleses = new HashSet<UsuariosSucursales>(
			0);
	private Set<Factura> facturas = new HashSet<Factura>(0);
	private Set<Auditoria> auditorias = new HashSet<Auditoria>(0);
	private Set<Moneda> monedas = new HashSet<Moneda>(0);
	private Set<UsuariosAlmacenes> usuariosAlmaceneses = new HashSet<UsuariosAlmacenes>(
			0);
	private Set<Compras> comprases = new HashSet<Compras>(0);
	private Set<Grupos> gruposes = new HashSet<Grupos>(0);
	private Set<EntradasDiarios> entradasDiarioses = new HashSet<EntradasDiarios>(
			0);

	// Constructors

	/** default constructor */
	public Usuarios() {
	}

	/** minimal constructor */
	public Usuarios(Integer idusuario, String usuario, String clave) {
		this.idusuario = idusuario;
		this.usuario = usuario;
		this.clave = clave;
	}

	/** full constructor */
	public Usuarios(Integer idusuario, String usuario, String clave,
			Set<UsuariosSucursales> usuariosSucursaleses,
			Set<Factura> facturas, Set<Auditoria> auditorias,
			Set<Moneda> monedas, Set<UsuariosAlmacenes> usuariosAlmaceneses,
			Set<Compras> comprases, Set<Grupos> gruposes,
			Set<EntradasDiarios> entradasDiarioses) {
		this.idusuario = idusuario;
		this.usuario = usuario;
		this.clave = clave;
		this.usuariosSucursaleses = usuariosSucursaleses;
		this.facturas = facturas;
		this.auditorias = auditorias;
		this.monedas = monedas;
		this.usuariosAlmaceneses = usuariosAlmaceneses;
		this.comprases = comprases;
		this.gruposes = gruposes;
		this.entradasDiarioses = entradasDiarioses;
	}

	// Property accessors
	@Id
	@Column(name = "idusuario", unique = true, nullable = false)
	public Integer getIdusuario() {
		return this.idusuario;
	}

	public void setIdusuario(Integer idusuario) {
		this.idusuario = idusuario;
	}

	@Column(name = "usuario", nullable = false, length = 40)
	public String getUsuario() {
		return this.usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	@Column(name = "clave", nullable = false, length = 12)
	public String getClave() {
		return this.clave;
	}

	public void setClave(String clave) {
		this.clave = clave;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<UsuariosSucursales> getUsuariosSucursaleses() {
		return this.usuariosSucursaleses;
	}

	public void setUsuariosSucursaleses(
			Set<UsuariosSucursales> usuariosSucursaleses) {
		this.usuariosSucursaleses = usuariosSucursaleses;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<Factura> getFacturas() {
		return this.facturas;
	}

	public void setFacturas(Set<Factura> facturas) {
		this.facturas = facturas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<Auditoria> getAuditorias() {
		return this.auditorias;
	}

	public void setAuditorias(Set<Auditoria> auditorias) {
		this.auditorias = auditorias;
	}

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "usuarios_moneda", schema = "public", joinColumns = { @JoinColumn(name = "idusuario", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idmoneda", nullable = false, updatable = false) })
	public Set<Moneda> getMonedas() {
		return this.monedas;
	}

	public void setMonedas(Set<Moneda> monedas) {
		this.monedas = monedas;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<UsuariosAlmacenes> getUsuariosAlmaceneses() {
		return this.usuariosAlmaceneses;
	}

	public void setUsuariosAlmaceneses(
			Set<UsuariosAlmacenes> usuariosAlmaceneses) {
		this.usuariosAlmaceneses = usuariosAlmaceneses;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<Compras> getComprases() {
		return this.comprases;
	}

	public void setComprases(Set<Compras> comprases) {
		this.comprases = comprases;
	}

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "grupos_usuarios", schema = "public", joinColumns = { @JoinColumn(name = "idusuario", nullable = false, updatable = false) }, inverseJoinColumns = { @JoinColumn(name = "idgrupo", nullable = false, updatable = false) })
	public Set<Grupos> getGruposes() {
		return this.gruposes;
	}

	public void setGruposes(Set<Grupos> gruposes) {
		this.gruposes = gruposes;
	}

	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "usuarios")
	public Set<EntradasDiarios> getEntradasDiarioses() {
		return this.entradasDiarioses;
	}

	public void setEntradasDiarioses(Set<EntradasDiarios> entradasDiarioses) {
		this.entradasDiarioses = entradasDiarioses;
	}

}

then i create a UsuariosQuery

package com.marcos.test;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.vaadin.addons.lazyquerycontainer.Query;
import org.vaadin.addons.lazyquerycontainer.QueryDefinition;

import com.marcos.model.EntityManagerHelper;
import com.marcos.model.Usuarios;
import com.vaadin.data.Item;
import com.vaadin.data.util.BeanItem;

public class UsuariosQuery implements Query {

	private EntityManager entityManager;
	private QueryDefinition definition;
	private String criteria = " ORDER BY m.title ASC";

	public UsuariosQuery(EntityManager entityManager,
			QueryDefinition definition, Object[] sortPropertyIds,
			boolean[] sortStates) {
		super();
		this.entityManager = entityManager;
		this.definition = definition;

		for (int i = 0; i < sortPropertyIds.length; i++) {
			if (i == 0) {
				criteria = " ORDER BY";
			} else {
				criteria += ",";
			}
			criteria += " m." + sortPropertyIds[i]
;
			if (sortStates[i]
) {
				criteria += " ASC";
			} else {
				criteria += " DESC";
			}
		}
	}

	@Override
	public Item constructItem() {
		Usuarios usuarios = new Usuarios();
		usuarios.setIdusuario(null);
		usuarios.setUsuario("");
		usuarios.setClave("");
		return new BeanItem<Usuarios>(usuarios);
	}

	@Override
	public boolean deleteAllItems() {
		throw new UnsupportedOperationException();
	}

	@Override
	public List<Item> loadItems(int startIndex, int count) {
		javax.persistence.Query query = entityManager
				.createQuery("SELECT m from Usuarios as m" + criteria);
		query.setFirstResult(startIndex);
		query.setMaxResults(count);

		List<Usuarios> usuarios = query.getResultList();
		List<Item> items = new ArrayList<Item>();
		for (Usuarios usuario : usuarios) {
			items.add(new BeanItem<Usuarios>(usuario));
		}

		return items;
	}

	@Override
	public void saveItems(List<Item> addedItems, List<Item> modifiedItems,
			List<Item> removedItems) {
		entityManager.getTransaction().begin();
		for (Item item : addedItems) {
			Usuarios movie = (Usuarios) ((BeanItem) item).getBean();
			entityManager.persist(movie);
		}
		for (Item item : modifiedItems) {
			Usuarios movie = (Usuarios) ((BeanItem) item).getBean();
			entityManager.persist(movie);
		}
		for (Item item : removedItems) {
			Usuarios movie = (Usuarios) ((BeanItem) item).getBean();
			entityManager.remove(movie);
		}
		entityManager.getTransaction().commit();

	}

	@Override
	public int size() {
		javax.persistence.Query query = EntityManagerHelper.getEntityManager()
				.createQuery("SELECT count(m) from Usuarios as m");
		return (int) ((Long) query.getSingleResult()).longValue();

	}

}

And UsuariosQueryFactory

package com.marcos.test;

import javax.persistence.EntityManager;

import org.vaadin.addons.lazyquerycontainer.Query;
import org.vaadin.addons.lazyquerycontainer.QueryDefinition;
import org.vaadin.addons.lazyquerycontainer.QueryFactory;

public class UsuariosQueryFactory implements QueryFactory {

	private EntityManager entityManager;
	private QueryDefinition definition;

	public UsuariosQueryFactory(EntityManager entityManager) {
		super();
		this.entityManager = entityManager;
	}

	@Override
	public Query constructQuery(Object[] sortPropertyIds,
			boolean[] ascendingStates) {
		return new UsuariosQuery(entityManager, definition, sortPropertyIds,
				ascendingStates);
	}

	@Override
	public void setQueryDefinition(QueryDefinition queryDefinition) {
		this.definition = queryDefinition;

	}

}

But now i don’t know how to fill the table with it on my UI

package com.marcos.form;

import com.marcos.model.EntityManagerHelper;
import com.marcos.test.UsuariosQueryFactory;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;

/**
 * 
 * @author eneldo Create on 13 agosto 2010
 * @version 0.0.1
 * 
 */
public class FormControlDeUsuarios extends Window implements ClickListener {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7248288036475085904L;

	private static final ThemeResource USERLIST_ICO = new ThemeResource(
			"images/ico16/user.png");
	private static final ThemeResource USERGROUP_ICO = new ThemeResource(
			"images/ico16/users.png");

	VerticalLayout usuariosLayout = new VerticalLayout();
	VerticalLayout gruposLayout = new VerticalLayout();
	TabSheet tabSheet;

	public FormControlDeUsuarios() {

		super.setCaption("Control de usuarios");
		super.center();
		super.setSizeUndefined();

		tabSheet = new TabSheet();
		tabSheet.addTab(createUserList(), "Control de usuarios", USERLIST_ICO);
		tabSheet.addTab(gruposLayout, "Control de grupos", USERGROUP_ICO);
		tabSheet.setSizeFull();

		setContent(tabSheet);
	}

	private VerticalLayout createUserList() {
		// /Here is where i what to create the table
		UsuariosQueryFactory factory = new UsuariosQueryFactory(
				EntityManagerHelper.getEntityManager());

		return null;
	}

	@Override
	public void buttonClick(ClickEvent event) {
		// TODO Auto-generated method stub

	}

}

Please help me

Hi Eneldo

Here is a little bit of example code. You can also add your query factory directly as constructor parameter to LazyQueryContainer:


table=new Table();
                
                table.setHeight("200px");
                                
                mockQueryFactory=new MockQueryFactory(100,10,20);
                LazyQueryView view=new LazyQueryView(mockQueryFactory,5);
                container=new LazyQueryContainer(view);
                
                container.addContainerProperty(LazyQueryView.PROPERTY_ID_ITEM_STATUS, QueryItemStatus.class, QueryItemStatus.None, true, false);
                container.addContainerProperty("Index", Integer.class, 0, true, true);
                container.addContainerProperty("ReverseIndex", Integer.class, 0, true, true);
                container.addContainerProperty("Editable", String.class, "", false, false);
                container.addContainerProperty(LazyQueryView.DEBUG_PROPERTY_ID_QUERY_INDEX, Integer.class, 0, true, false);
                container.addContainerProperty(LazyQueryView.DEBUG_PROPERTY_ID_BATCH_INDEX, Integer.class, 0, true, false);
                container.addContainerProperty(LazyQueryView.DEBUG_PROPERTY_ID_BATCH_QUERY_TIME, Integer.class, 0, true, false);
                
                table.setContainerDataSource(container);
        
                visibleColumnIds.add(LazyQueryView.PROPERTY_ID_ITEM_STATUS);
                visibleColumnIds.add("Index");
                visibleColumnIds.add("ReverseIndex");
                visibleColumnIds.add("Editable");
                visibleColumnIds.add(LazyQueryView.DEBUG_PROPERTY_ID_QUERY_INDEX);
                visibleColumnIds.add(LazyQueryView.DEBUG_PROPERTY_ID_BATCH_INDEX);
                visibleColumnIds.add(LazyQueryView.DEBUG_PROPERTY_ID_BATCH_QUERY_TIME);

                visibleColumnLabels.add("");
                visibleColumnLabels.add("Index");
                visibleColumnLabels.add("Reverse Index");
                visibleColumnLabels.add("Editable");
                visibleColumnLabels.add("Query");
                visibleColumnLabels.add("Batch");
                visibleColumnLabels.add("Time [ms]
");

                table.setVisibleColumns(visibleColumnIds.toArray());
                table.setColumnHeaders(visibleColumnLabels.toArray(new String[0]
));

Regards,
Tommi

Thank a lot i get it, and i love vaadin :slight_smile: