Java tutorial
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package br.eti.danielcamargo.backend.hsnpts.core.business; import br.eti.danielcamargo.backend.hsnpts.core.business.exceptions.ProgramaFinalizadoException; import br.eti.danielcamargo.backend.hsnpts.core.persistence.FrequenciaSemanal; import br.eti.danielcamargo.backend.hsnpts.core.persistence.Microciclo; import br.eti.danielcamargo.backend.hsnpts.core.persistence.ObjetivoPrograma; import br.eti.danielcamargo.backend.hsnpts.core.persistence.Programa; import br.eti.danielcamargo.backend.hsnpts.core.persistence.Sessao; import br.eti.danielcamargo.backend.hsnpts.core.persistence.Treino; import br.eti.danielcamargo.backend.hsnpts.core.xml.HsnPersonal; import br.eti.danielcamargo.backend.hsnpts.core.xml.HsnPersonalUtils; import java.util.Date; import java.util.List; import java.util.Set; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * * @author Daniel */ @Service public class MicrocicloService { @PersistenceContext private EntityManager em; /** * Se o microciclo existir e for incompleto, ele retornado. * <br /> * Se o microciclo no existir ou estiver completo, cria um novo. * * @param alunoId * @return * @throws * br.eti.danielcamargo.backend.hsnpts.core.business.exceptions.ProgramaFinalizadoException */ @Transactional public Microciclo resolverMicrociclo(Long alunoId) throws ProgramaFinalizadoException { StringBuilder hql = new StringBuilder(); hql.append("SELECT "); hql.append(" p "); hql.append("FROM "); hql.append(" Programa p "); hql.append("WHERE "); hql.append(" p.aluno.id = :alunoId "); hql.append(" AND p.dataTermino IS NULL "); TypedQuery<Programa> queryPrograma = em.createQuery(hql.toString(), Programa.class); queryPrograma.setParameter("alunoId", alunoId); Programa programa = queryPrograma.getSingleResult(); hql.append("SELECT "); hql.append(" m "); hql.append("FROM "); hql.append(" Microciclo m "); hql.append("WHERE "); hql.append(" m.programa = :programa "); hql.append("ORDER BY "); hql.append(" m.numero DESC "); TypedQuery<Microciclo> queryMicrociclo = em.createQuery(hql.toString(), Microciclo.class); queryMicrociclo.setParameter("programa", programa); queryMicrociclo.setMaxResults(1); List<Microciclo> result = queryMicrociclo.getResultList(); HsnPersonal hsnPersonal = HsnPersonalUtils.getInstance(); ObjetivoPrograma objetivoPrograma = programa.getObjetivoPrograma(); FrequenciaSemanal frequenciaSemanal = programa.getFrequenciaSemanal(); if (result.isEmpty()) { //criar primeiro microciclo Microciclo microciclo = hsnPersonal.buscarMicrociclo(objetivoPrograma, frequenciaSemanal, 1); microciclo.setPrograma(programa); save(microciclo); return microciclo; } else { //verificar se o programa esta finalizado Microciclo microciclo = result.get(0); if (microciclo.getDataTermino() != null) { if (microciclo.getNumero().equals(24)) { throw new ProgramaFinalizadoException(); } microciclo = hsnPersonal.buscarMicrociclo(objetivoPrograma, frequenciaSemanal, 1); microciclo.setPrograma(programa); save(microciclo); return microciclo; } return microciclo; } } private void save(Microciclo microciclo) { microciclo.setDataInicio(new Date()); em.persist(microciclo); Set<Treino> treinos = microciclo.getTreinos(); for (Treino treino : treinos) { treino.setMicrociclo(microciclo); em.persist(treino); Set<Sessao> sessoes = treino.getSessoes(); for (Sessao sessao : sessoes) { sessao.setTreino(treino); em.persist(sessao); } } } }