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