Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.web.controllers.courses;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import pt.estgp.estgweb.domain.CourseStudiesPlanImpl;
import pt.estgp.estgweb.domain.views.CourseView;
import pt.estgp.estgweb.filters.exceptions.NotFoundException;
import pt.estgp.estgweb.services.courses.CoursesService;
import pt.estgp.estgweb.services.courses.StudiesPlanImporter;
import pt.estgp.estgweb.services.courses.xsd.Curso;
import pt.estgp.estgweb.services.courses.xsd.PerfilImpl;
import pt.estgp.estgweb.services.courses.xsd.SemestreImpl;
import pt.estgp.estgweb.services.courses.xsd.UnidadeImpl;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedCourses;
import pt.estgp.estgweb.services.courseunits.DirectedCoordinatedUnitsService;
import pt.estgp.estgweb.services.expceptions.AlreadyExistsException;
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.form.courses.CourseForm;
import pt.estgp.estgweb.web.form.courses.CourseStudiesPlansAdminForm;
import pt.estgp.estgweb.web.utils.RequestUtils;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterRetrieveException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.IncompatibleFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterException;
import pt.utl.ist.berserk.logic.filterManager.exceptions.InvalidFilterExpressionException;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.FilterChainFailedException;
import pt.utl.ist.berserk.logic.serviceManager.exceptions.ServiceManagerException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Iterator;

/**
 * @author Jorge Machado
 * @author Fabio Velez
 * @date 26/Fev/2008
 * @time 18:01:54
 * @see pt.estgp.estgweb.web
 */

public class CoursesController extends CourseUnitsController
{

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


    public ActionForward startNew(ActionMapping mapping,
                                  ActionForm form,
                                  HttpServletRequest request,
                                  HttpServletResponse response)
            throws ServletException
    {
        CourseForm cF = (CourseForm) form;
        CourseView cV = cF.getCourseView();
        request.setAttribute("CourseView",cV);
        cF.setCourseView(cV);
        return mapping.findForward("submit");
    }
    private void loadOnlyCourseAndPlans(CourseForm cF, HttpServletRequest request, HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        load(cF,request,response,false,true);

    }

    private void load(CourseForm cF, HttpServletRequest request, HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        load(cF,request,response,true,true);
    }
    private void load(CourseForm cF, HttpServletRequest request, HttpServletResponse response,boolean loadUnits,boolean loadStudiesPlans)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        1.5.0/docs/api/java/lang/String.html">String code = cF.getCourseView().getCode();
        long id = cF.getCourseView().getId();

        IServiceManager sm = ServiceManager.getInstance();
        1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
        5+0%2Fdocs%2Fapi+Object">Object[] args;
        1.5.0/docs/api/java/lang/String.html">String serviceName;
        if(code != null)
        {
            args = new 5+0%2Fdocs%2Fapi+Object">Object[]{code,loadUnits};
            if(loadStudiesPlans)
                serviceName = "LoadCourseByCodeAndStudiesPlans";
            else
                serviceName = "LoadCourseByCode";
        }
        else
        {
            args = new 5+0%2Fdocs%2Fapi+Object">Object[]{id,loadUnits};
            if(loadStudiesPlans)
                serviceName = "LoadCourseAndStudiesPlans";
            else
                serviceName = "LoadCourse";
        }
        CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), serviceName, args, names);
        request.setAttribute("CourseView",cV);
        cF.setCourseView(cV);
    }

    private void loadForPublic(CourseForm cF, HttpServletRequest request, HttpServletResponse response)
            throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable, InvalidFilterException, ServiceManagerException, InvalidFilterExpressionException, IncompatibleFilterException, FilterRetrieveException, NoCookiesException
    {
        load(cF,request,response,false,false);
       /* String code = cF.getCourseView().getCode();
        long id = cF.getCourseView().getId();

        IServiceManager sm = ServiceManager.getInstance();
        String[] names = new String[]{"serializable"};
        Object[] args;
        String serviceName;
        if(code != null)
        {
            args = new Object[]{code,false};
            serviceName = "LoadCourseByCode";
        }
        else
        {
            args = new Object[]{id,false};
            serviceName = "LoadCourse";
        }
        CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), serviceName, args, names);
        request.setAttribute("CourseView",cV);
        cF.setCourseView(cV);*/

    }

    public ActionForward loadPlan(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws ServletException
    {
        try
        {
            load((CourseForm) form,request,response);
            return mapping.findForward("loadPlan");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward load(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws ServletException
    {
        try
        {
            load((CourseForm) form,request,response);
            return mapping.findForward("load");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }


      public ActionForward loadSeparators(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws ServletException
    {
        try
        {
            loadForPublic((CourseForm) form,request,response);
            return mapping.findForward("loadSeparators");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }


    public ActionForward loadMenu(ActionMapping mapping,
                                 ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
               throws ServletException
       {
           try
           {
               load((CourseForm) form,request,response);
               return mapping.findForward("loadMenu");
           }
           catch (FilterChainFailedException e)
           {
               return mapping.findForward("error401");
           }
           catch (NotFoundException e)
           {
               return mapping.findForward("error404");
           }
           catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
           {
               logger.error(e, e);
               return mapping.findForward("error500");
           }
       }


    public ActionForward edit(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws ServletException
    {
        try
        {
            load((CourseForm) form,request,response);
            return mapping.findForward("submit");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward editAdmin(ActionMapping mapping,
                              ActionForm form,
                              HttpServletRequest request,
                              HttpServletResponse response)
            throws ServletException
    {
        try
        {
            loadOnlyCourseAndPlans((CourseForm) form, request, response);
            return mapping.findForward("submit");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward submitAndAdminStudyPlan(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws ServletException
    {
        ActionForward forward = submit(mapping,form,request,response);
        if(forward.getPath() == mapping.getInputForward().getPath())
        {
            CourseForm cF = (CourseForm) form;
            long id = cF.getCourseView().getId();
            request.setAttribute("courseId",id);
            return mapping.findForward("adminStudiesPlans");
        }
        return forward;

    }

    public ActionForward submit(ActionMapping mapping,
                                ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseForm cF = (CourseForm) form;
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"object"};
            5+0%2Fdocs%2Fapi+Object">Object[] args;

            if(cF.getStudiesPlan() == null || cF.getStudiesPlan().getFileSize() <= 0)
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{cF.getCourseView(),null,null,0,null};
            else                              //ring name, int size, String contentType, String extensio
                args = new 5+0%2Fdocs%2Fapi+Object">Object[]{cF.getCourseView(),cF.getStudiesPlan().getInputStream(),cF.getStudiesPlan().getFileName(),cF.getStudiesPlan().getFileSize(),cF.getStudiesPlan().getContentType()};

            long id = cF.getCourseView().getId();
            CourseView cV = (CourseView) sm.execute(RequestUtils.getRequester(request, response), "SubmitCourse", args, names);
            request.setAttribute("CourseView",cV);
            if(cV.getHtmlResult() != null)
            {
                return mapping.findForward("submit");
            }

            cF.setCourseView(cV);
            if(id > 0)
                addMessage(request,"course.updated.success","" + cV.getCode());
            else
                addMessage(request,"course.created.success","" + cV.getCode());
            return mapping.getInputForward();
        }
        catch (AlreadyExistsException e)
        {
            addErrorWithKeys(request,"course.exists",e.getMessage());
            try
            {
                load((CourseForm) form,request,response);
                return mapping.findForward("submit");
            }
            catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable throwable)
            {
                logger.error(e, e);
                return mapping.findForward("error500");
            }
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }




    public ActionForward loadCoursesPrograms(ActionMapping mapping,
                                             ActionForm form,
                                             HttpServletRequest request,
                                             HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseForm cF = (CourseForm) form;
            1.5.0/docs/api/java/lang/String.html">String importYear = cF.getImportYear();
            long courseId = cF.getCourseId();
            if(courseId <= 0)
            {
                addError(request,"courses.fill.course");
                return mapping.findForward("load.courses.programs");
            }
            1.5.0/docs/api/java/lang/String.html">String semestre = cF.getSemestre();
            1.5.0/docs/api/java/lang/String.html">String area = cF.getArea();
            DirectedCoordinatedUnitsService.TeachersSituationEnum teachersSituationEnum = cF.getTeacherSituationEnum();
            1.5.0/docs/api/java/lang/String.html">String institutionCode = cF.getInstitutionCode();

            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"importYear","courseId","semestre","area","teachersSituationEnum","institutionCode"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{importYear,courseId,semestre,area,teachersSituationEnum,institutionCode};
            DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadCoursesProgramsForServices", args, names);
            cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
            cF.setArea(directedCoordinatedCourses.getArea());
            cF.setCourseId(directedCoordinatedCourses.getCourseId());
            return mapping.findForward("load.courses.programs");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward loadDirectedCoordininatedCourses(ActionMapping mapping,
                                                          ActionForm form,
                                                          HttpServletRequest request,
                                                          HttpServletResponse response)
            throws ServletException
    {
        try
        {

            CourseForm cF = (CourseForm) form;
            1.5.0/docs/api/java/lang/String.html">String importYear = cF.getImportYear();
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"importYear"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 1.5.0/docs/api/java/lang/String.html">String[]{importYear};
            DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "LoadDirectedCoordinatedCoursesForUserInSession", args, names);
            cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
            return mapping.findForward("load.directed.coordinated.courses");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward updateDirectedCoordininatedCourses(ActionMapping mapping,
                                                            ActionForm form,
                                                            HttpServletRequest request,
                                                            HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseForm cF = (CourseForm) form;
            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"directedCoordinatedCourses"};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{cF.getDirectedCoordinatedCourses()};
            DirectedCoordinatedCourses directedCoordinatedCourses = (DirectedCoordinatedCourses) sm.execute(RequestUtils.getRequester(request, response), "UpdateDirectedCoordinatedCoursesForUserInSession", args, names);
            cF.setDirectedCoordinatedCourses(directedCoordinatedCourses);
            addMessage(request,"course.directed.coordinated.courses.updated.success",""+directedCoordinatedCourses.getUpdated());
            return mapping.findForward("confirm.courses.programs");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }


    /**
     * StudiesPlans Controller Functions
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws ServletException
     */

    public ActionForward addNewVersion(ActionMapping mapping,
                                       ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            long courseId = frm.getCourseId();

            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{courseId,frm.getCourseStudiesPlan()};
            sm.execute(RequestUtils.getRequester(request, response), "AddNewStudiesPlan", args, names);
            addMessage(request, "course.studies.plan.added");
            return mapping.findForward("loadstudyplans");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward savePlano(ActionMapping mapping,
                                       ActionForm form,
                                       HttpServletRequest request,
                                       HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            long courseId = frm.getCourseId();

            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{courseId,frm.getCourseStudiesPlan().getId(),frm.getPlanoEstudos(),frm.getCourseStudiesPlan()};
            sm.execute(RequestUtils.getRequester(request, response), "SavePlanoEstudos", args, names);
            addMessage(request, "course.studies.plan.saved");
            request.setAttribute("courseId",courseId);
            return mapping.findForward("adminStudyPlans");
        }
        catch (FilterChainFailedException e)
        {
            return mapping.findForward("error401");
        }
        catch (NotFoundException e)
        {
            return mapping.findForward("error404");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward addUnidadePerfil(ActionMapping mapping,
                                            ActionForm form,
                                            HttpServletRequest request,
                                            HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String perfilId = frm.getPerfilId();
            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()){
                for(Curso.Semestre.Perfil perfil: semestre.getPerfil())
                {
                    if(perfil.getPerfilId().equals(perfilId))
                    {
                        perfil.getUnidade().add(new UnidadeImpl());
                        break;
                    }
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }
    public ActionForward removePerfil(ActionMapping mapping,
                                          ActionForm form,
                                          HttpServletRequest request,
                                          HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String perfilId = frm.getPerfilId();
            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre()){
                Iterator<Curso.Semestre.Perfil> iterPerfil = semestre.getPerfil().iterator();
                while(iterPerfil.hasNext())
                {
                    Curso.Semestre.Perfil perfil = iterPerfil.next();
                    if(perfil.getPerfilId().equals(perfilId))
                    {
                        iterPerfil.remove();
                        break;
                    }
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }
    public ActionForward addUnidadeSemestre(ActionMapping mapping,
                                   ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String semestreId = frm.getSemestreId();
            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre())
            {
                if(semestre.getSemestreId().equals(semestreId))
                {
                    semestre.getUnidade().add(new UnidadeImpl());
                    break;
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward removeSemestre(ActionMapping mapping,
                                            ActionForm form,
                                            HttpServletRequest request,
                                            HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String semestreId = frm.getSemestreId();
            Iterator<Curso.Semestre> iteSem = frm.getPlanoEstudos().getSemestre().iterator();
            while(iteSem.hasNext())
            {
                Curso.Semestre semestre = iteSem.next();
                if(semestre.getSemestreId().equals(semestreId))
                {
                    iteSem.remove();
                    break;
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward addNewSemestre(ActionMapping mapping,
                                        ActionForm form,
                                        HttpServletRequest request,
                                        HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            frm.getPlanoEstudos().getSemestre().add(new SemestreImpl());
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward addPerfilSemestre(ActionMapping mapping,
                                            ActionForm form,
                                            HttpServletRequest request,
                                            HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String semestreId = frm.getSemestreId();
            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre())
            {
                if(semestre.getSemestreId().equals(semestreId))
                {
                    semestre.getPerfil().add(new PerfilImpl());
                    break;
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward sendUpSemestre(ActionMapping mapping,
                                           ActionForm form,
                                           HttpServletRequest request,
                                           HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String semestreId = frm.getSemestreId();
            for(int i = 0; i < frm.getPlanoEstudos().getSemestre().size();i++)
            {
                Curso.Semestre semestre = frm.getPlanoEstudos().getSemestre().get(i);
                if(semestre.getSemestreId().equals(semestreId))
                {
                    int nextPos = i-1;
                    frm.getPlanoEstudos().getSemestre().remove(i);
                    if(nextPos < 0)
                        nextPos = 0;
                    frm.getPlanoEstudos().getSemestre().add(nextPos,semestre);
                    break;
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }
    public ActionForward sendDownSemestre(ActionMapping mapping,
                                        ActionForm form,
                                        HttpServletRequest request,
                                        HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String semestreId = frm.getSemestreId();
            for(int i = 0; i < frm.getPlanoEstudos().getSemestre().size();i++)
            {
                Curso.Semestre semestre = frm.getPlanoEstudos().getSemestre().get(i);
                if(semestre.getSemestreId().equals(semestreId))
                {
                    int nextPos = i+1;
                    frm.getPlanoEstudos().getSemestre().remove(i);
                    if(nextPos >= frm.getPlanoEstudos().getSemestre().size())
                        frm.getPlanoEstudos().getSemestre().add(semestre);
                    else
                        frm.getPlanoEstudos().getSemestre().add(nextPos,semestre);
                    break;
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward sendUpPerfil(ActionMapping mapping,
                                        ActionForm form,
                                        HttpServletRequest request,
                                        HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String perfilId = frm.getPerfilId();

            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre())
            {
                for(int i = 0; i < semestre.getPerfil().size();i++)
                {
                    Curso.Semestre.Perfil perfil = semestre.getPerfil().get(i);
                    if(perfil.getPerfilId().equals(perfilId))
                    {
                        int nextPos = i-1;
                        semestre.getPerfil().remove(i);
                        if(nextPos < 0)
                            nextPos = 0;
                        semestre.getPerfil().add(nextPos,perfil);
                        break;
                    }
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }
    public ActionForward sendDownPerfil(ActionMapping mapping,
                                      ActionForm form,
                                      HttpServletRequest request,
                                      HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            1.5.0/docs/api/java/lang/String.html">String perfilId = frm.getPerfilId();

            for(Curso.Semestre semestre: frm.getPlanoEstudos().getSemestre())
            {
                for(int i = 0; i < semestre.getPerfil().size();i++)
                {
                    Curso.Semestre.Perfil perfil = semestre.getPerfil().get(i);
                    if(perfil.getPerfilId().equals(perfilId))
                    {
                        int nextPos = i+1;
                        semestre.getPerfil().remove(i);
                        if(nextPos >= semestre.getPerfil().size())
                            semestre.getPerfil().add(perfil);
                        else
                            semestre.getPerfil().add(nextPos,perfil);
                        break;
                    }
                }
            }
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }

    public ActionForward clonarPlano(ActionMapping mapping,
                                          ActionForm form,
                                          HttpServletRequest request,
                                          HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            long planId = frm.getCourseStudiesPlan().getId();
            long sourcePlanId = frm.getSourcePlanId();

            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{sourcePlanId,planId,frm.getCourseId()};
            CourseStudiesPlanImpl novoPlano = (CourseStudiesPlanImpl) sm.execute(RequestUtils.getRequester(request, response), "CloneStudiesPlanVersionFrom", args, names);
            frm.setCourseStudiesPlan(novoPlano);
            frm.setPlanoEstudos(new CoursesService().loadCursoPlanoFromXml(novoPlano.getXml()));
            addMessage(request, "course.studies.plan.cloned");
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }


    public ActionForward importarPlano(ActionMapping mapping,
                                     ActionForm form,
                                     HttpServletRequest request,
                                     HttpServletResponse response)
            throws ServletException
    {
        try
        {
            CourseStudiesPlansAdminForm frm = (CourseStudiesPlansAdminForm) form;
            long planId = frm.getCourseStudiesPlan().getId();


            IServiceManager sm = ServiceManager.getInstance();
            1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{};
            5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{frm.getFormFileImport().getInputStream(),planId};
            StudiesPlanImporter importer = (StudiesPlanImporter) sm.execute(RequestUtils.getRequester(request, response), "ImportStudiesPlanVersionFromFile", args, names);
            frm.setPlanoEstudos(importer.getPlanoEstudosCurso());
            addMessage(request, "course.studies.plan.imported");
            frm.getCourseStudiesPlan().setImportLog(importer.getLog());
            return mapping.findForward("editStudyPlan");
        }
        catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e)
        {
            logger.error(e, e);
            return mapping.findForward("error500");
        }
    }





}