Subversion Repositories bacoAlunos

Rev

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

package pt.estgp.estgweb.services.questionarios.pedagogico;

import org.apache.log4j.Logger;
import org.json.JSONArray;
import org.json.JSONException;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.JobDeamon;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import pt.estgp.estgweb.services.questionarios.QuestionariosService;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.util.HashSet;
import java.util.List;
import java.util.Set;


/**
 * Created by jorgemachado on 22/03/16.
 */

public class UpdateCoursesAndUnitsJobService extends ServiceJob implements IService
{

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

    //return similar questionarios in same year, semestre and history category
    public List<QuestionarioImpl> setAnoSemestre(1.5.0/docs/api/java/lang/String.html">String year, 1.5.0/docs/api/java/lang/String.html">String semestre, long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared) throws NotAuthorizedException
    {
        if(questionarioCleared.isClear((UserSessionImpl) userSession,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SET_ANO_SEMESTRE.name()))
        {
            questionarioCleared.setYear(year);
            questionarioCleared.setSemestre(semestre);
            questionarioCleared.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.YEAR_SEMESTRE_ASSIGNED);
            List<QuestionarioImpl> similar = DaoFactory.getQuestionarioDaoImpl().findAnoSemestre(year, semestre, questionarioCleared.getQuestionarioHistoryDrive().getId());
            new QuestionariosService().loadInit(similar);
            return similar;
        }
        else
            throw new NotAuthorizedException("Não pode alterar o formulário porque o questionário está num estado avançado");
    }


    public 1.5.0/docs/api/java/lang/String.html">String[] deserializeCoursesList(QuestionarioImpl questionario)
    {
        JobServiceTaskImpl job = questionario.getCourseSelectionTaskId() > 0 ?
                (JobServiceTaskImpl) DaoFactory.getJobServiceTaskDaoImpl().load(questionario.getCourseSelectionTaskId()) :
                null;
        if(job == null)
            return new 1.5.0/docs/api/java/lang/String.html">String[0];

        1.5.0/docs/api/java/lang/String.html">String courses = job.getParameter(ServiceJob.JOB_questionario_courseList_KEY).getObject();

        try {

            JSONArray jsonArray = new JSONArray(courses);
            1.5.0/docs/api/java/lang/String.html">String[] coursesList = new 1.5.0/docs/api/java/lang/String.html">String[jsonArray.length()];
            for(int i=0;i <jsonArray.length();i++)
            {
                coursesList[i] = ""+ jsonArray.get(i);
            }
            return coursesList;
        } catch (JSONException e) {
            logger.error(e,e);
        }
        return new 1.5.0/docs/api/java/lang/String.html">String[0];
    }
   //todo falta validar as clearances
    //todo falta meter a tarefa no Questionario
    public QuestionarioImpl runJobSelectCourses(long questionarioId,1.5.0/docs/api/java/lang/String.html">String[] coursesList,UserSession session,QuestionarioImpl questionarioCleared) throws NotAuthorizedException {

        if(!questionarioCleared.isClear((UserSessionImpl) session,QuestionarioImpl.QuestionarioClearancesOperation.QUESTIONARIO_SCHEDULLE_SELECT_COURSES.name()))
        {
            throw new NotAuthorizedException("Nao tem autorização para agendar atribuições de cursos");
        }
        ((QuestionarioImpl) questionarioCleared).setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.ASSIGNING_COURSES);
        JSONArray jsonArray = new JSONArray();
        for(1.5.0/docs/api/java/lang/String.html">String sele: coursesList)
        {
            jsonArray.put(new 1.5.0/docs/api/java/lang/Long.html">Long(sele));
        }

        Set<JobServiceTaskParameter> paramsJob = new HashSet<JobServiceTaskParameter>();

        JobServiceTaskParameterImpl paramJobL = DomainObjectFactory.createJobServiceTaskParameterImpl();
        paramJobL.setName(ServiceJob.JOB_questionario_courseList_KEY);
        paramJobL.setDescription("lista de cursos a associar");
        paramJobL.setObject(jsonArray.toString());
        paramsJob.add(paramJobL);


        JobServiceTaskParameterImpl paramJob = DomainObjectFactory.createJobServiceTaskParameterImpl();
        paramJob.setName(ServiceJob.JOB_questionario_id_KEY);
        paramJob.setDescription("ID do questionário");
        paramJob.setObject("" + questionarioId);
        paramsJob.add(paramJob);

        JobServiceTask job = JobDeamon.createServiceJob(UpdateCoursesAndUnitsJobService.class, session.getUser(), paramsJob,
                "Service: Atribuição de Cursos e Unidades a um questionário Pedagógico");
        questionarioCleared.setCourseSelectionTaskId(job.getId());
        return questionarioCleared;
    }

    @1.5.0/docs/api/java/lang/Override.html">Override
    protected ILogMessages runJobServiceTask() throws 1.5.0/docs/api/java/lang/Throwable.html">Throwable
    {
        long questionarioId = 1.5.0/docs/api/java/lang/Long.html">Long.parseLong(getParametersMap().get(ServiceJob.JOB_questionario_id_KEY).getObject());
        QuestionarioImpl q = (QuestionarioImpl) DaoFactory.getQuestionarioDaoImpl().load(questionarioId);

        1.5.0/docs/api/java/lang/String.html">String[] coursesList = deserializeCoursesList((QuestionarioImpl) q);
        //Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre

        serviceLogInfo("Starting running service  ");
        long total = 5000;
        long start = 1.5.0/docs/api/java/lang/System.html">System.currentTimeMillis();
        //Thread.sleep(20000);
        while(true)
        {
            1.5.0/docs/api/java/lang/Thread.html">Thread.sleep(5000);
            long elapsed = 1.5.0/docs/api/java/lang/System.html">System.currentTimeMillis() - start;
            setProgress((int) (((float)elapsed)/((float)total)*100.0f));
            commitPartially();
            DaoFactory.getQuestionarioDaoImpl().reattach(q);
            if(1.5.0/docs/api/java/lang/System.html">System.currentTimeMillis() - start > total)
                break;
        }
        setProgress(100);

        serviceLogInfo("Set courses state as " + QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED.name());
        q.setSubStatePedagogicoClass(QuestionarioImpl.SubStatePedagogico.COURSES_ASSIGNED);
        commitPartially();
        return new DefaultLogMessages();
    }
}