Java tutorial
/*** Copyright (c) 2012 - 2020 Hrcules S. S. Jos Este arquivo parte do programa Oramento Domstico. Oramento Domstico um software livre; voc pode redistribui-lo e/ou modific-lo dentro dos termos da Licena Pblica Geral Menor GNU como publicada pela Fundao do Software Livre (FSF); na verso 2.1 da Licena. Este programa distribudo na esperana que possa ser til, mas SEM NENHUMA GARANTIA; sem uma garantia implcita de ADEQUAO a qualquer MERCADO ou APLICAO EM PARTICULAR. Veja a Licena Pblica Geral Menor GNU em portugus para maiores detalhes. Voc deve ter recebido uma cpia da Licena Pblica Geral Menor GNU sob o nome de "LICENSE.TXT" junto com este programa, se no, acesse o site do projeto no endereco https://github.com/herculeshssj/orcamento ou escreva para a Fundao do Software Livre(FSF) Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. Para mais informaes sobre o programa Oramento Domstico e seu autor entre em contato pelo e-mail herculeshssj@outlook.com, ou ainda escreva para Hrcules S. S. Jos, Av. Ministro Lafaeyte de Andrade, 1683 - Bl. 3 Apt 404, Marco II - Nova Iguau, RJ, Brasil. ***/ package br.com.hslife.orcamento.repository; import java.util.Date; import java.util.List; import org.hibernate.Criteria; import org.hibernate.criterion.MatchMode; import org.hibernate.criterion.Order; import org.hibernate.criterion.Restrictions; import org.springframework.stereotype.Repository; import br.com.hslife.orcamento.entity.Agenda; import br.com.hslife.orcamento.entity.Usuario; import br.com.hslife.orcamento.model.CriterioAgendamento; @Repository public class AgendaRepository extends AbstractCRUDRepository<Agenda> { public AgendaRepository() { super(new Agenda()); } @SuppressWarnings("unchecked") public List<Agenda> findByUsuario(Usuario usuario) { Criteria criteria = getSession().createCriteria(Agenda.class); criteria.add(Restrictions.eq("usuario.id", usuario.getId())); return criteria.addOrder(Order.asc("descricao")).list(); } @SuppressWarnings("unchecked") public List<Agenda> findByCriterioAgendamento(CriterioAgendamento criterioBusca) { Criteria criteria = getSession().createCriteria(Agenda.class); if (criterioBusca.getDescricao() != null && !criterioBusca.getDescricao().trim().isEmpty()) { criteria.add(Restrictions.ilike("descricao", criterioBusca.getDescricao(), MatchMode.ANYWHERE)); } if (criterioBusca.getInicio() != null) { criteria.add(Restrictions.ge("inicio", criterioBusca.getInicio())); } if (criterioBusca.getFim() != null) { criteria.add(Restrictions.le("fim", criterioBusca.getFim())); } if (criterioBusca.getTipo() != null) { criteria.add(Restrictions.eq("tipoAgendamento", criterioBusca.getTipo())); } if (criterioBusca.getUsuario() != null) { criteria.add(Restrictions.eq("usuario.id", criterioBusca.getUsuario().getId())); } return criteria.addOrder(Order.asc("descricao")).list(); } public long countAgendamentoByDataInicioAndDataFimAndAlertaAndUsuario(Date inicio, Date fim, boolean emiteAlerta, Usuario usuario) { return (Long) getQuery( "SELECT COUNT(*) FROM Agenda agenda WHERE agenda.inicio >= :inicio AND agenda.fim <= :fim AND agenda.emitirAlerta = :alerta AND agenda.usuario.id = :idUsuario") .setTimestamp("inicio", inicio).setTimestamp("fim", fim).setBoolean("alerta", emiteAlerta) .setLong("idUsuario", usuario.getId()).uniqueResult(); } public long countAgendamentoByDataInicioOrDataFimAndAlerta(Date inicio, Date fim, boolean emiteAlerta, Usuario usuario) { return (Long) getQuery( "SELECT COUNT(*) FROM Agenda agenda WHERE ((agenda.inicio BETWEEN :inicio AND :fim) OR (agenda.fim BETWEEN :inicio AND :fim)) AND agenda.emitirAlerta = :alerta AND agenda.usuario.id = :idUsuario") .setTimestamp("inicio", inicio).setTimestamp("fim", fim).setBoolean("alerta", emiteAlerta) .setLong("idUsuario", usuario.getId()).uniqueResult(); } @SuppressWarnings("unchecked") public List<Agenda> findAgendamentoByDataInicioAndDataFimAndAlerta(Date inicio, Date fim, boolean emiteAlerta) { return (List<Agenda>) getQuery( "FROM Agenda agenda WHERE agenda.inicio >= :inicio AND agenda.fim <= :fim AND agenda.emitirAlerta = :alerta") .setTimestamp("inicio", inicio).setTimestamp("fim", fim).setBoolean("alerta", emiteAlerta) .list(); } @SuppressWarnings("unchecked") public List<Agenda> findAgendamentoByOrDataInicioOrDataFimAndAlerta(Date inicio, Date fim, boolean emiteAlerta) { return (List<Agenda>) getQuery( "FROM Agenda agenda WHERE ((agenda.inicio BETWEEN :inicio AND :fim) OR (agenda.fim BETWEEN :inicio AND :fim)) AND agenda.emitirAlerta = :alerta") .setTimestamp("inicio", inicio).setTimestamp("fim", fim).setBoolean("alerta", emiteAlerta) .list(); } }