sábado, 17 de novembro de 2012

Arquivo ClienteDaoImpl


Nome do arquivo ClienteDaoImpl (ClienteDaoImpl.java)


package daos;
import br.com.cliente.models.Cliente;
import br.com.cliente.utility.DaoGenericoImpl;
import br.com.cliente.utility.HibernateUtility;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
public class ClienteDaoImpl extends DaoGenericoImpl < Cliente , Long > implements ClienteDao {
    @Override
    public List consultar() {
        List lista = new ArrayList();
        Criteria crit = HibernateUtility.getSession().createCriteria(Cliente.class);
        lista = (List) crit.list();
        return lista;
    }
}

Arquivo ClienteDao


Nome do arquivo ClienteDao (ClienteDao.java)


package daos;
import br.com.cliente.models.Cliente;
import br.com.cliente.utility.DaoGenerico;
import java.util.List;
public interface ClienteDao extends DaoGenerico <Cliente, Long> {
    public List consultar();
}

Arquivo HibernateUtility


Nome do arquivo HibernateUtility (HibernateUtility.java)

package br.com.cliente.utility;
 import br.com.cliente.models.Cliente;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
public class HibernateUtility {
    private static final SessionFactory factory;
    private static final ThreadLocal sessionThread = new ThreadLocal();
    private static final ThreadLocal transactionThread = new ThreadLocal();
    public static Session getSession() {
       Session session = (Session) sessionThread.get();
        if ((session == null) || (!(session.isOpen()))) {
            session = factory.openSession();
            sessionThread.set(session);
        }
        return ((Session) sessionThread.get());
    }
    public static void closeSession() {
        Session session = (Session) sessionThread.get();
        if ((session != null) && (session.isOpen())) {
            sessionThread.set(null);
            session.close();
        }
    }
    public static void beginTransaction() {
        Transaction transaction = getSession().beginTransaction();
        transactionThread.set(transaction);
    }
    public static void commitTransaction() {
        Transaction transaction = (Transaction) transactionThread.get();
        if ((transaction != null) && (!(transaction.wasCommitted())) && (!(transaction.wasRolledBack()))) {
            transaction.commit();
            transactionThread.set(null);
        }
    }
    public static void rollbackTransaction() {
        Transaction transaction = (Transaction) transactionThread.get();
        if ((transaction != null) && (!(transaction.wasCommitted())) && (!(transaction.wasRolledBack()))) {
            transaction.rollback();
            transactionThread.set(null);
        }
    }
    static {
        try {
            factory = new Configuration()
//                    /***MYSQL***/

                    .setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLInnoDBDialect") // tipo de dialeto do banco
                    .setProperty("hibernate.connection.driver_class", "com.mysql.jdbc.Driver") // driver do banco
                    .setProperty("hibernate.connection.url", "jdbc:mysql://localhost:3306/cliente") // endereço do banco de dados
                    .setProperty("hibernate.connection.username", "root")

                    .setProperty("hibernate.connection.password", "08515453")

                    .setProperty("hibernate.hbm2ddl.auto", "update")

                    .setProperty("hibernate.c3p0.max_size", "10")

                    .setProperty("hibernate.c3p0.min_size", "2")

                    .setProperty("hibernate.c3p0.timeout", "5000")

                    .setProperty("hibernate.c3p0.max_statements", "10")

                    .setProperty("hibernate.c3p0.idle_test_period", "3000")

                    .setProperty("hibernate.c3p0.acquire_increment", "2")

                    .setProperty("show_sql", "true")

                    .setProperty("use_outer_join", "true")

                    .setProperty("hibernate.generate_statistics", "true")

                    .setProperty("hibernate.use_sql_comments", "true")

                    .setProperty("hibernate.format_sql", "true")

                    //CADASTROS abaixo coloque todas classes que deseja ser modelo para criação do banco de dados

                    .addAnnotatedClass(Cliente.class)

                    //MOVIMENTOS

                    .buildSessionFactory();

        } catch (RuntimeException e) {
            e.printStackTrace();
            throw e;
        }
    }
    public static void main(String [] args) {
    }
}

Arquivo DaoGenericoImpl


Nome do arquivo  DaoGenericoImpl( DaoGenericoImpl.java)


package br.com.cliente.utility;


import java.io.Serializable;

import java.lang.reflect.ParameterizedType;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Set;

import org.hibernate.Criteria;

import org.hibernate.HibernateException;

import org.hibernate.LockOptions;

import org.hibernate.criterion.Restrictions;
public class DaoGenericoImpl<T, ID extends Serializable> implements DaoGenerico<T, ID> {
    private final Class<T> oClass;
    public DaoGenericoImpl() {
        this.oClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

    }
    @Override
    public Class<T> getObjectClass() {
        return this.oClass;
    }
    @Override
    public T save(T objeto) {
        try {
            Object obj = null;
            HibernateUtility.beginTransaction();
            obj = HibernateUtility.getSession().merge(objeto);
            HibernateUtility.commitTransaction();
            HibernateUtility.closeSession();
            return (T) obj;
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }
    @Override
    public void delete(T objeto) {
        try {
            HibernateUtility.beginTransaction();
            HibernateUtility.getSession().delete(objeto);
            HibernateUtility.commitTransaction();
            HibernateUtility.closeSession();
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }
    @Override
    public void deleteItem(T objeto) {
        try {
            HibernateUtility.beginTransaction();
            HibernateUtility.getSession().delete(objeto);
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }
    @Override
    public List<T> list() {
        try {
            List list = HibernateUtility.getSession().createCriteria(oClass).list();
            //HibernateUtility.closeSession();
            return (List<T>) list;
        } catch (HibernateException hibernateException) {
            cancel();
           throw hibernateException;
        }
    }
    @Override
    public T getById(Serializable id) {
        try {
            return (T) HibernateUtility.getSession().get(oClass, id);
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }

    }
    @Override

    public T getById(Serializable id, boolean lock) {
        try {
            if (lock) {
                return (T) HibernateUtility.getSession().get(oClass, id, LockOptions.UPGRADE);
            } else {
                return (T) HibernateUtility.getSession().get(oClass, id);
            }
        } catch (HibernateException hibernateException) {
           cancel();
            throw hibernateException;
        }
    }
    @Override
    public List<T> listCriterio(String subClazz, Map<String, Object> filtrosConsulta, int tipoConsulta) {
        List<T> lista = new ArrayList<T>();
        Set entradas = filtrosConsulta.entrySet();
        try {
            Criteria crit = HibernateUtility.getSession().createCriteria(oClass);
            if (subClazz == null) {
                for (Iterator it = entradas.iterator(); it.hasNext();) {
                    Entry object = (Entry) it.next();
                    if (object.getValue() instanceof Enum) {
                        crit.add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 0) {
                        crit.add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    } else if (tipoConsulta == 1) {
                        crit.add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.add(Restrictions.gt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 3) {
                        crit.add(Restrictions.ge(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 4) {
                        crit.add(Restrictions.lt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 5) {
                        crit.add(Restrictions.le(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.add(Restrictions.ne(object.getKey().toString(), object.getValue()));
                    }
                }
            } else {
                for (Iterator it = entradas.iterator(); it.hasNext();) {
                    Entry object = (Entry) it.next();
                    //crit.createCriteria(subClazz).add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    if (object.getValue() instanceof Enum) {
                    } else if (tipoConsulta == 0) {
                        crit.createCriteria(subClazz).add(Restrictions.ilike(object.getKey().toString(), "%" + object.getValue() + "%"));
                    } else if (tipoConsulta == 1) {
                        crit.createCriteria(subClazz).add(Restrictions.eq(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.createCriteria(subClazz).add(Restrictions.gt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 3) {
                        crit.createCriteria(subClazz).add(Restrictions.ge(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 4) {
                        crit.createCriteria(subClazz).add(Restrictions.lt(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 5) {
                        crit.createCriteria(subClazz).add(Restrictions.le(object.getKey().toString(), object.getValue()));
                    } else if (tipoConsulta == 2) {
                        crit.createCriteria(subClazz).add(Restrictions.ne(object.getKey().toString(), object.getValue()));

                    }

                }
            }
            crit.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            crit.setMaxResults(20);
            lista = (List<T>) crit.list();
            //HibernateUtility.closeSession();
            return lista;
        } catch (HibernateException hibernateException) {
            cancel();
            throw hibernateException;
        }
    }
    @Override
    public List<T> consultaHQL(String consulta) {
        return (List<T>) HibernateUtility.getSession().createQuery(consulta).list();
    }
    @Override
    public void cancel() {
        HibernateUtility.rollbackTransaction();
        HibernateUtility.closeSession();      
    }
}

Arquivo DaoGenerico


Nome do arquivo DaoGenerico (DaoGenerico.java)

package br.com.cliente.utility;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public interface DaoGenerico<T, ID extends Serializable> {
    public Class<T> getObjectClass();
    public T save(T objeto);
    public void delete(T objeto);
    public void deleteItem(T objeto);
    public List<T> list();
    public List<T> listCriterio(String subClazz, Map<String, Object> filtrosConsulta, int tipoConsulta);
    public T getById(Serializable id);
    public T getById(Serializable id, boolean lock);
    public List<T> consultaHQL(String consulta);
    public void cancel();
}

Arquivo Cliente


Nome do Arquivo classe java (Cliente.java)

package br.com.cliente.models;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Cliente implements Serializable {
    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private Long  idCliente;
    @Column(name="NOME", length=80)
    private String Nome;
    @Column(name="EMAIL", length=80)
    private String email;
    public Long getIdCliente() {
        return idCliente;
    }
    public void setIdCliente(Long idCliente) {
        this.idCliente = idCliente;
    }
    public String getNome() {
        return Nome;
    }
    public void setNome(String Nome) {
        this.Nome = Nome;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
 
}

Arquivo ClienteBean


Arquivo classe Java (ClienteBean.java)

package br.com.cliente.controller;
import br.com.cliente.models.Cliente;
import daos.ClienteDao;
import daos.ClienteDaoImpl;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
@ManagedBean
@SessionScoped
public class ClienteBean implements Serializable {
    private Cliente cliente = new Cliente();
    private List<Cliente> clientes = new ArrayList<Cliente>();
    private ClienteDao dao = new ClienteDaoImpl();
    public ClienteBean() {
        clientes = dao.consultar(); // busca todos registros do banco e popula a lista de clientes
    }
    public void salvar(ActionEvent event) {
        dao.save(cliente); // salvando no banco de dados
        cliente = new Cliente(); // criando um novo objeto para caso for inserir novamente
        clientes = dao.consultar();// busca os dados no banco após salvar para apresentar na tabela
    }
    public void editar() {
        cliente = dao.getById(cliente.getIdCliente()); // busca no banco de dados qual registro que vai ser alterado.
    }
    public void excluir() {
        dao.delete(cliente); // deleta do banco o cliente que está no objeto cliente, que foi setado na view.
        clientes = dao.consultar();// busca os dados no banco após excluir para apresentar na tabela
    }
    public Cliente getCliente() {
        return cliente;
    }
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
    public List<Cliente> getClientes() {
        return clientes;
    }
    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }
}

Arquivo Cliente.xhtml


Nome do arquivo Cliente.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:p="http://primefaces.prime.com.tr/ui"
      xmlns:ui="http://java.sun.com/jsf/facelets">
    <h:head>
        <title>Cliente</title>
    </h:head>
    <h:body>
        <h:form id="form">
       <p:panel header="CLIENTE">
       <p:messages />
         <h:panelGrid columns="2">
            <h:outputLabel value="NOME:" for="nome" />
            <p:inputText id="nome" label="nome" value="#{clienteBean.cliente.nome}" maxlength="40" size="40"  />
         
            <h:outputLabel value="EMAIL:" for="email"/>
            <p:inputText id="email" label="email" value="#{clienteBean.cliente.email}" maxlength="40" size="40"/>
            <p:commandButton id="btnSalvar" value="SALVAR" actionListener="#{clienteBean.salvar}" update="form" />
          </h:panelGrid>
            <!--criando minha tabela, incluido no value a lista de cliente, definino um variavel de acesso para cada registro, para acessar um unico registro-->
            <p:dataTable id="tabela" value="#{clienteBean.clientes}" var="cli" emptyMessage="Nenhum registro incluido." paginator="true" rows="10">
                <!--                    Definindo o cabeçalho da Tabela-->
                <f:facet name="header">
                    Lista de Clientes
                </f:facet>
                <!--Criando uma coluna para receber um determinando dado que tem em um objeto da nossa lista, nesse caso nome de cliente-->
                <p:column headerText="NOME" style="text-align: center">
                    <!--Aqui onde acesso o objeto cli.nome e apresentamos na tabela, e assim com os seguintes-->

                    <h:outputText value="#{cli.nome}" />

                </p:column>
                         
                <p:column headerText="E-MAIL" style="text-align: center">
                    <h:outputText value="#{cli.email}" />
                </p:column>
       
                <p:column headerText="ALTERAR - EXCLUIR" style="text-align: center">
                    <!--Abaixo o botão editar com uma Action do nosso metodo editar que criamos no Bean-->
                    <p:commandButton action="#{clienteBean.editar}" value="EDITAR" title="Editar" ajax="false"  >
                        <!-- Abaixo temos o setPropertyActionListener que é utilizado para pegar o objeto cli e setar no objeto cliente la no nosso bean, para editarmos-->
                        <f:setPropertyActionListener value="#{cli}" target="#{clienteBean.cliente}" />
                    </p:commandButton>
                    <!-- Abaixo temos o botão excluir com a propriedade onclick contendo o nome do modal e acessando um método de abri-lo que é o show, também existe o hide que é para feixa-lo.-->
                    <p:commandButton value="EXCLUIR" title="Excluir" onclick="confirmation.show()" style="margin-left: 5px" >
                        <!-- Abaixo temos o setPropertyActionListener que é utilizado para pegar o objeto cli e setar no objeto cliente la no nosso bean, para posteriomente excluirmos-->
                        <f:setPropertyActionListener value="#{cli}" target="#{clienteBean.cliente}" />
                    </p:commandButton>
                </p:column>
            </p:dataTable>
        </p:panel>
        </h:form>
        <!-- Abaixo temos um modal de confirmação de exclusão repare que ele é fora do form principal, pois se colocarmos dentro podemos ter alguns problemas com isso.-->
        <h:form id="dlg">
            <p:confirmDialog message="Deseja realmente excluir este registro?" hideEffect="explode" header="Aviso" severity="alert" widgetVar="confirmation" modal="true">
                <!--caso seja sim chamo o metodo excluir, e fecho o modal com o oncomplete, tenho o process que estou dizendo para processar o form, e update para atualizar a tabela-->
                <p:commandButton id="btnSim" value="Sim" oncomplete="confirmation.hide();" actionListener="#{clienteBean.excluir}" process="@form" update="form:tabela" />
                <!--caso seja não somente fecha o modal-->
                <p:commandButton id="btnNao" value="Não" onclick="confirmation.hide();" type="button"/>
            </p:confirmDialog>
        </h:form>
    </h:body>
</html>

JSF com Modelo MVC