Subversion Repositories bacoAlunos

Rev

Rev 1306 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.services.courseunits;

import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.CourseUnitView;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

/**
 * Created by jorgemachado on 15/12/15.
 */

public class DeleteCourseUnitService 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(DeleteCourseUnitService.class);

    public static class CourseUnitContentsInfo
    {
        public List<String> warnings = new ArrayList<String>();
        public 1.5.0/docs/api/java/lang/String.html">String messageResult = "";
        boolean canDelete = false;
        public CourseUnitView cuv;

        public List<String> getWarnings() {
            return warnings;
        }

        public 1.5.0/docs/api/java/lang/String.html">String getMessageResult() {
            return messageResult;
        }

        public boolean isCanDelete() {
            return canDelete;
        }

        public CourseUnitView getCuv() {
            return cuv;
        }
    }
    /**
     *
     * @param courseUnitId
     * @return a list of warnings
     *
     */

    public CourseUnitContentsInfo checkDelete(long courseUnitId,UserSession session)
    {
        CourseUnitContentsInfo result = new CourseUnitContentsInfo();
        result.canDelete = true;

        CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(courseUnitId);

        boolean alert = false;
        if(cu.getStudents() != null && cu.getStudents().size() > 0)
        {
            result.warnings.add("ALERT - Tem Alunos (NAO PODE APAGAR, remova os alunos primeiro)");
            result.canDelete  = false;
        }
        if(cu.getTeachers() != null && cu.getTeachers().size() > 0)
        {
            result.warnings.add("ALERT - Tem Professores");
        }
        if(cu.getAnnouncements() != null && cu.getAnnouncements().size() > 0)
        {
            result.warnings.add("ALERT - Tem Anuncios");
        }
        if(cu.getAssignements() != null && cu.getAssignements().size() > 0)
        {
            result.warnings.add("ALERT - Tem Trabalhos (NAO PODE APAGAR, remova os trabalhos primeiro (tarefa do professor))");
        }
        if(cu.getBlogs() != null && cu.getBlogs().size() > 0)
        {
            result.warnings.add("ALERT - Tem BLOGS");
        }
        if(cu.getCourseUnitEvaluation() != null)
        {
            result.warnings.add("ALERT - Tem Relatorio de Avaliacao (NAO PODE APAGAR, contacte a equipa de desenvolvimento para encontrar solucao)");
            result.canDelete = false;
        }
        if(cu.getCourseUnitProgram() != null)
        {
            result.warnings.add("ALERT - Tem ficha curricular, nao vai apagar a ficha fica em backup id ficha: (" + cu.getCourseUnitProgram().getId() + ") pdf: (http://SITE_URL/repositoryStream/" + cu.getProgramStreamId() + "), exporte a ficha para backup");
        }
        if(cu.getSummaries() != null && cu.getSummaries().size() > 0)
        {
            result.warnings.add("ALERT - Tem Sumarios, vai apagar os sumarios localmente");
        }
        if(result.canDelete)
        {
            result.messageResult ="Pode Apagar";
        }
        else
        {
            result.messageResult ="Não é permitido apagar esta unidade";
        }
        result.cuv = new CourseUnitView(cu,false,false,false,false);
        return result;
    }

    /**
     *
     * @param courseUnitId
     * @return a list of warnings
     *
     */

    public CourseUnitContentsInfo tryDelete(long courseUnitId,UserSession session)
    {
        CourseUnitContentsInfo result = checkDelete(courseUnitId,session);

        if(result.canDelete)
        {
            CourseUnit cu = DaoFactory.getCourseUnitDaoImpl().load(courseUnitId);
            logger.warn("Will Delete courseUnit: " + cu.getImportYear() + ";" + cu.getSemestre() + ";" + cu.getCode() + ";" + cu.getName() + ";" + cu.getCourseCode() + ";" + cu.getCourseName());

            if(cu.getTeachers() != null && cu.getTeachers().size() > 0)
            {
                Iterator<TeacherImpl> teachers = cu.getTeachers().iterator();
                while(teachers.hasNext())
                {
                    Teacher t = teachers.next();
                    teachers.remove();
                    t.getTeachedUnits().remove(cu);
                    logger.warn("Removing Teacher: " + t.getSigesCode() + " - id:" + t.getId() + " name:" + t.getName());
                }
            }
            if(cu.getAnnouncements() != null && cu.getAnnouncements().size() > 0)
            {
                Iterator<CourseUnitAnnouncement> annoucements = cu.getAnnouncements().iterator();
                while(annoucements.hasNext())
                {
                    CourseUnitAnnouncement a = annoucements.next();
                    annoucements.remove();
                    a.setCourseUnit(null);
                    logger.warn("Removing Annoucement: " + a.getId());
                    DaoFactory.getAnnouncementDaoImpl().delete(a);
                }
            }
            if(cu.getBlogs() != null && cu.getBlogs().size() > 0)
            {
                Iterator<CourseUnitBlog> blogs = cu.getBlogs().iterator();
                while(blogs.hasNext())
                {
                    CourseUnitBlog a = blogs.next();
                    blogs.remove();
                    Set<BlogPost> posts = a.getPosts();
                    Iterator<BlogPost> postsIter = posts.iterator();
                    while(postsIter.hasNext())
                    {
                        BlogPost bp = postsIter.next();
                        a.getPosts().remove(bp);
                        bp.setBlog(null);
                        DaoFactory.getBlogPostDaoImpl().delete(bp);
                    }
                    a.setCourseUnit(null);
                    logger.warn("Removing Blog: " + a.getId());
                    DaoFactory.getCourseUnitBlogDaoImpl().delete(a);
                }
            }

            if(cu.getCourseUnitProgram() != null)
            {
                result.warnings.add("ALERT - Tem ficha curricular, nao vai apagar a ficha fica em backup id ficha: (" + cu.getCourseUnitProgram().getId() + ") pdf: (http://SITE_URL/repositoryStream/" + cu.getProgramStreamId() + "), exporte a ficha para backup");
                cu.setCourseUnitProgram(null);
            }
            if(cu.getSummaries() != null && cu.getSummaries().size() > 0)
            {
                result.warnings.add("ALERT - Tem Sumarios, vai apagar os sumarios localmente");
                Iterator<CourseUnitSummary> summaries = cu.getSummaries().iterator();
                while(summaries.hasNext())
                {
                    CourseUnitSummary a = summaries.next();
                    summaries.remove();
                    a.setCourseUnit(null);
                    logger.warn("Removing Summary: " + a.getId());
                    DaoFactory.getCourseUnitSummaryDaoImpl().delete(a);
                }

            }
            DaoFactory.getCourseUnitDaoImpl().delete(cu);
            result.messageResult = "Unidade Apagada";
        }

        return result;
    }

    public List<CourseUnitContentsInfo> loadDeleteCandidates(1.5.0/docs/api/java/lang/String.html">String importYear,UserSession session)
    {
        List<CourseUnitContentsInfo> courseUnitContentsInfos = new ArrayList<CourseUnitContentsInfo>();
        1.5.0/docs/api/javax/management/Query.html">Query q = AbstractDao.getCurrentSession().createQuery("select c.id from c in class " + CourseUnit.class.getName() +
                " where size(c.students) = 0 and c.importYear = ?  order by c.importYear, c.semestre, c.code");
        q.setString(0,importYear);
        1.5.0/docs/api/java/util/Iterator.html">Iterator iter = q.iterate();
        while(iter.hasNext())
        {
            1.5.0/docs/api/java/lang/Long.html">Long id = (1.5.0/docs/api/java/lang/Long.html">Long) iter.next();
            CourseUnitContentsInfo cuInfo = checkDelete(id,session);
            courseUnitContentsInfos.add(cuInfo);
        }
        return courseUnitContentsInfos;
    }
}