Subversion Repositories bacoAlunos

Rev

Rev 1945 | 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 org.json.JSONObject;
import pt.estgp.estgweb.domain.CourseStudiesPlanImpl;
import pt.estgp.estgweb.domain.Teacher;
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.CursoImpl;
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.services.users.ReplaceRoleResult;
import pt.estgp.estgweb.web.controllers.configuration.UserRolesController;
import pt.estgp.estgweb.web.controllers.courseunits.CourseUnitsController;
import pt.estgp.estgweb.web.controllers.widgetmodel.ModelWidgetController;
import pt.estgp.estgweb.web.exceptions.NoCookiesException;
import pt.estgp.estgweb.web.filters.UserRoleProxy;
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;

/**
 * @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");
            //return mapping.findForward("load.directed.coordinated.courses");
            return loadCoursesPrograms(mapping,form,request,response);

        }
        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();

            //FEITO aqui neste ponto apanhar o plano Curso em JSON e criar a classe colocar a classe como argumento em vez de frm.getPlanoEstudos()
            //FEITO criar um campo de texto para colocar o JSON do plano no form
            CursoImpl c = CursoImpl.loadFromJson(frm.getPlanoEstudosJsonInterface());
            frm.setPlanoEstudos(c);

            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 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();

            //FEITO aqui neste ponto apanhar o plano Curso em JSON e criar a classe colocar a classe como argumento em vez de frm.getPlanoEstudos()
            //FEITO criar um campo de texto para colocar o JSON do plano no form
            //NAO E USADO MAS SE VIER A SER JA ESTAMOS A GARANTIR QUE O PLANO VEM CERTO
            CursoImpl c = CursoImpl.loadFromJson(frm.getPlanoEstudosJsonInterface());
            frm.setPlanoEstudos(c);

            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");
        }
    }

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

            //FEITO aqui neste ponto apanhar o plano Curso em JSON e criar a classe colocar a classe como argumento em vez de frm.getPlanoEstudos()
            //FEITO criar um campo de texto para colocar o JSON do plano no form
            CursoImpl c = CursoImpl.loadFromJson(frm.getPlanoEstudosJsonInterface());
            frm.setPlanoEstudos(c);


            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.getFormFileImport2().getInputStream(),planId};
            StudiesPlanImporter importer = (StudiesPlanImporter) sm.execute(RequestUtils.getRequester(request, response), "MergeStudiesPlanVersionFromFile", args, names);
            frm.setPlanoEstudos(importer.mergePlanoEstudosCurso(frm.getPlanoEstudos()));
            addMessage(request, "course.studies.plan.merged");
            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");
        }
    }



    /**Widget Controller*/
    public 1.5.0/docs/api/java/lang/Boolean.html">Boolean addCourseComissionRole(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
        1.5.0/docs/api/java/lang/String.html">String courseId = request.getParameter("courseId");

        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[]{1.5.0/docs/api/java/lang/Long.html">Long.parseLong(courseId)};
        ReplaceRoleResult result = (ReplaceRoleResult) sm.execute(RequestUtils.getRequester(request, response), "CreateRoleCourseComission", args, names);
        UserRolesController.evaluateUpdateRoleResult(this,request,result);
        UserRoleProxy.setDirty();
        return true;
    }

    public JSONObject changeCoordinator(ActionForm form,HttpServletRequest request, HttpServletResponse response) throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable {
        1.5.0/docs/api/java/lang/String.html">String courseId = request.getParameter("courseId");
        1.5.0/docs/api/java/lang/String.html">String teacherId = request.getParameter("teacherId");

        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[]{1.5.0/docs/api/java/lang/Long.html">Long.parseLong(teacherId),1.5.0/docs/api/java/lang/Long.html">Long.parseLong(courseId)};
        Teacher t = (Teacher) sm.execute(RequestUtils.getRequester(request, response), "ChangeCourseCoordinator", args, names);
        JSONObject tJson = ModelWidgetController.getJsonUser(t);
        addMessage(request,"course.coordinator.added.success");
        return tJson;
    }





}