Subversion Repositories bacoAlunos

Rev

Rev 1310 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.courseunits;

import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.estgp.estgweb.services.expceptions.ServiceException;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.util.HashSet;
import java.util.Iterator;


/*
 * @author Goncalo Luiz gedl [AT] rnl [DOT] ist [DOT] utl [DOT] pt
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

/**
 * @author Jorge Machado
 *
 *
 * Created at 17/Out/2003 , 23:45:24
 *
 */

public class UsersUnitsService implements IService
{

    private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger = 1.5.0/docs/api/java/util/logging/Logger.html">Logger.getLogger(UsersUnitsService.class);

    LoadCourseUnitService loadCourseUnitService = new LoadCourseUnitService();

    public CourseUnitView addTeacher(long teacherId,long courseUnitId, UserSession userSession) throws ServiceException
    {
        CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
        TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId);
        if(t != null)
        {
            if(courseUnit.getTeachers() != null)
                courseUnit.getTeachers().remove(t);
            courseUnit.getTeachers().add(t);
            t.addUnitLocaly(courseUnit);
            return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
        }
        else
        {
            CourseUnitView cV = loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
            cV.setNotFound(true);
            return cV;
        }
    }

    public CourseUnitView removeTeacher(long teacherId,long courseUnitId, UserSession userSession) throws ServiceException
    {
        CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
        TeacherImpl t = (TeacherImpl) DaoFactory.getTeacherDaoImpl().get(teacherId);
        t.removeUnitLocaly(courseUnit);
        courseUnit.getTeachers().remove(t);
        return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
    }

    public CourseUnitView addStudent(int code, long courseUnitId, 1.5.0/docs/api/java/lang/String.html">String turmaCode,1.5.0/docs/api/java/lang/String.html">String newTurmaCode,UserSession userSession) throws ServiceException
    {
        CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
        StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
        if(s != null)
        {
            if(courseUnit.getStudents() != null)
                courseUnit.getStudents().remove(s);
            courseUnit.getStudents().add(s);
            s.addUnitLocaly(courseUnit);

            addStudentToTurma(turmaCode, newTurmaCode, courseUnit, s);

            return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
        }
        else
        {
            CourseUnitView cV = loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
            cV.setNotFound(true);
            return cV;
        }
    }

    private void addStudentToTurma(1.5.0/docs/api/java/lang/String.html">String turmaCode, 1.5.0/docs/api/java/lang/String.html">String newTurmaCode, CourseUnit courseUnit, StudentImpl s) {
        boolean found = false;
        for(CourseUnitTurma turma: courseUnit.getTurmas())
        {
            if(turma.getTurma().trim().equals(turmaCode.trim()) || turma.getTurma().trim().equals(newTurmaCode.trim()))
            {
                logger.info("Adding student to turma: " + turma.getTurma() + " in courseunit: " + courseUnit.getCode() + " with id:" + courseUnit.getId());
                found = true;
                if(turma.getStudents() == null)
                    turma.setStudents(new HashSet<StudentImpl>());
                if(!turma.getStudents().contains(s))
                    turma.getStudents().add(s);
                //if(s.getTurmas() == null)
                //    s.setTurmas(new HashSet<CourseUnitTurmaImpl>());
                //if(!s.getTurmas().contains(turma))
                //    s.getTurmas().add((CourseUnitTurmaImpl) turma);
                break;
            }
        }
        if(!found && newTurmaCode.trim().length() > 0)
        {
            logger.info("Creating new turma to student: " + newTurmaCode + " in courseunit: " + courseUnit.getCode() + " with id:" + courseUnit.getId());
            CourseUnitTurma courseUnitTurma = DomainObjectFactory.createCourseUnitTurmaImpl();
            courseUnitTurma.setTurma(newTurmaCode);
            courseUnitTurma.setCourseUnit(courseUnit);
            DaoFactory.getCourseUnitTurmaDaoImpl().save(courseUnitTurma);
            if(courseUnit.getTurmas() == null)
                courseUnit.setTurmas(new HashSet<CourseUnitTurma>());
            courseUnit.getTurmas().add(courseUnitTurma);
            courseUnitTurma.setStudents(new HashSet<StudentImpl>());
            courseUnitTurma.getStudents().add(s);
        }
    }

    public CourseUnitView removeStudent(int code,long courseUnitId, UserSession userSession) throws ServiceException
    {
        CourseUnit courseUnit = DaoFactory.getCourseUnitDaoImpl().get(courseUnitId);
        StudentImpl s = (StudentImpl) DaoFactory.getStudentDaoImpl().loadBySigesCode(code);
        courseUnit.getStudents().remove(s);
        s.removeUnitLocaly(courseUnit);

        removeStudentFromTurma(courseUnit, s);

        return loadCourseUnitService.run(courseUnitId,true,true,false,userSession);
    }

    private void removeStudentFromTurma(CourseUnit courseUnit, StudentImpl s) {
        if(courseUnit.getTurmas()!=null)
        {
            Iterator<CourseUnitTurmaImpl> iter = s.getTurmas().iterator();
            while(iter.hasNext())
            {
                CourseUnitTurma turma=iter.next();
                if(turma.getCourseUnit() == courseUnit)
                {
                    iter.remove();
                    turma.getStudents().remove(s);
                }
            }
        }
    }
}