package pt.estgp.estgweb.services.questionarios.pedagogico;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.services.jobs.ServiceJob;
import pt.estgp.estgweb.services.logresults.ILogMessages;
import pt.estgp.estgweb.services.logresults.LogMessageTypeEnum;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessage;
import pt.estgp.estgweb.services.logresults.impl.DefaultLogMessages;
import java.util.HashMap;
import java.util.List;
/**
* Created by jorgemachado on 22/03/16.
*/
public class OlapGenerationProcessor
extends ServiceJob
{
//int unidadesNaoUtilizadas = 0;
private static 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(OlapGenerationProcessor.
class);
int unidadesNaoUtilizadas =
0;
int unidadesUtilizadas =
0;
//int unidadesMarcadas = 0;
//int unidadesNaoVistasProf = 0;
//int unidadesNaoVistasAlunos = 0;
int cursosUtilizados =
0;
//int respostasRequisitadas = 0;
int cursosSemDepartamento =
0;
/**
* ############# JOB TASK ############
* ############# JOB TASK ############
* @return
* @throws Throwable
*/
@
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());
DefaultLogMessages logMessages =
new DefaultLogMessages
();
//unidadesNaoUtilizadas = 0;
unidadesNaoUtilizadas =
0;
unidadesUtilizadas =
0;
//unidadesMarcadas = 0;
//unidadesNaoVistasProf = 0;
//unidadesNaoVistasAlunos = 0;
cursosUtilizados =
0;
//respostasRequisitadas = 0;
cursosSemDepartamento =
0;
QuestionarioImpl q =
(QuestionarioImpl
) DaoFactory.
getQuestionarioDaoImpl().
load(questionarioId
);
try{
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapStarFactQuestionarioAnswer.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapStarFactQuestionario.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapEntityQuestionarioUser.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapEntityQuestionarioCurso.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapEntityQuestionarioUnidade.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapEntityQuestionarioPergunta.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
AbstractDao.
getCurrentSession().
createQuery("delete from " + OlapEntityQuestionarioTipologia.
class.
getName() +
" x where x.questionario.id = " + questionarioId
).
executeUpdate();
List
<OlapEntityQuestionario
> questionarios = AbstractDao.
getCurrentSession().
createQuery("select x from x in class " + OlapEntityQuestionario.
class.
getName() +
" where x.questionario.id = " + questionarioId
).
list();
OlapEntityQuestionario olapEntityQuestionario
;
OlapHistoryDimension olapHistoryDimension
;
if(questionarios.
size() > 0
)
{
olapEntityQuestionario = questionarios.
get(0
);
updateOlapQuestionario
(olapEntityQuestionario, q
);
List
<OlapHistoryDimension
> histories = AbstractDao.
getCurrentSession().
createQuery("select x from x in class " + OlapHistoryDimension.
class.
getName() +
" where x.questionario.id = " + questionarioId
).
list();
olapHistoryDimension = histories.
get(0
);
}
else
{
//+++++++ todo CRIANDO OLAP Questionario
olapEntityQuestionario = createQuestionarioOlap
(q
);
olapHistoryDimension =
new OlapHistoryDimension
();
olapHistoryDimension.
setQuestionario(q
);
//+++++++ todo CRIANDO OLAP History
DaoFactory.
getOlapHistoryDimensionDaoImpl().
save(olapHistoryDimension
);
}
olapHistoryDimension.
setNome(q.
getQuestionarioHistoryDrive().
getCodeName());
olapHistoryDimension.
setDescricao(q.
getQuestionarioHistoryDrive().
getDescription());
//Colocamos já aqui o estado para nao se poder mudar o Ano e o Semestre
/**logging**/
1.5.0/docs/api/java/lang/String.html">String msg =
"Starting running service OLAP GENERATION generation for questionario: " + q.
getId() +
" - " + q.
getiAnswersProcessorClass().
getTitle();
serviceLogInfo
(msg
);
logger.
info(msg
);
List
<Long
> cursosAfetosIds = DaoFactory.
getQuestionarioPedagogicoCursoAfetoDaoImpl().
findCursosAfetosIds(questionarioId
);
int count =
0;
int size=cursosAfetosIds.
size();
//+++++++ todo CRIANDO OLAP Perguntas
HashMap
<String,Long
> mapaIdsPerguntasPersistentes = createOlapQuestionarioPergunta
(q
);
for(1.5.0/docs/api/java/lang/Long.html">Long cursoAfetoId : cursosAfetosIds
)
{
count++
;
/** COMMIT OPERATION **/
setProgress
((int)((((float)count
)/
((float)size
))*100.0f
));
commitPartially
();
q =
(QuestionarioImpl
) DaoFactory.
getQuestionarioDaoImpl().
load(questionarioId
);
/** COMMIT OPERATION **/
QuestionarioPedagogicoCursoAfeto cu = DaoFactory.
getQuestionarioPedagogicoCursoAfetoDaoImpl().
get(cursoAfetoId
);
msg =
"(+) Iniciando geração OLAP para o curso " + cu.
getNome() +
" (" + cu.
getCodigoCurso() +
") escola " + cu.
getNomeInstituicao() +
"(" + cu.
getCodigoInstituicao() +
")";
logger.
info(msg
);
serviceLogInfo
(msg
);
//+++++++ todo CRIANDO OLAP Curso
OlapEntityQuestionarioCurso questionarioCurso = createQuestionarioCursoOlap
(logMessages, q, cu
);
int unidades
;
if(cu.
getUnidadesAfetas() !=
null)
{
unidades = cu.
getUnidadesAfetas().
size();
int countUnidades =
0;
for(QuestionarioPedagogicoUnidadeCurricularAfeta unidadeCurricularAfeta: cu.
getUnidadesAfetas())
{
countUnidades++
;
msg = unidadeCurricularAfeta.
isUsar() ? "(+)" :
"(----IGNORADA-----)";
msg +=
"(" + countUnidades +
"/" + unidades +
") Iniciando OLAP de Unidade Curricular Afeta " + unidadeCurricularAfeta.
getCodigoUnidade() +
" - " + unidadeCurricularAfeta.
getNome();
logger.
info(msg
);
serviceLogInfo
(msg
);
if(!unidadeCurricularAfeta.
isUsar() ||
!unidadeCurricularAfeta.
isUsarOlap())
{
unidadesNaoUtilizadas++
;
msg =
"!!! A unidade está marcada para NÃO SER UTILIZADA, passando à próxima";
serviceLogWarn
(msg
);
logger.
warn(msg
);
logMessages.
addMessage(new DefaultLogMessage
("questionario.olap", LogMessageTypeEnum.
WARNING,msg
));
}
else
{
CourseUnitImpl cuImpl =
(CourseUnitImpl
) DaoFactory.
getCourseUnitDaoImpl().
narrow(unidadeCurricularAfeta.
getCourseUnit());
CourseImpl courseImpl =
(CourseImpl
) DaoFactory.
getCourseDaoImpl().
narrow(unidadeCurricularAfeta.
getCourseUnit().
getCourse());
//TODO CRIAR ENTIDADE OLAP UNIDADE
unidadesUtilizadas++
;
List
<CourseUnitImpl.
Tipologia> tipologias
;
for(QuestionarioPedagogicoTipologiaRequisitada tipologiaRequisitada: unidadeCurricularAfeta.
getTipologiasRequisitadas())
{
msg =
"Iniciando OLAP de Tipologia Requisitada " + tipologiaRequisitada.
getDsTipologia() +
" " + tipologiaRequisitada.
getCdTipologia()
+
" docente: " + tipologiaRequisitada.
getCdDocente() +
"(" + tipologiaRequisitada.
getNomeDocente() +
")"
+
" turma: " + tipologiaRequisitada.
getCdTurma();
serviceLogInfo
(msg
);
logger.
info(msg
);
//TODO CRIAR ENTIDADE OLAP TIPOLOGIA
for(QuestionarioPedagogicoAlunoRequisitado alunoRequisitado: tipologiaRequisitada.
getAlunosRequisitados())
{
QuestionarioRespostaRequisitada respostaRequisitada = alunoRequisitado.
getRespostaRequisitada();
//TODO CRIAR/PROCURAR NESTE QUESTIONARIO ENTIDADE PERFIL UTILIZADOR
//TODO CRIAR ENTIDADE FACTO RESPOSTA RESPONDIDA/NAO RESPONDIDA
QuestionarioResposta resposta = respostaRequisitada.
getResposta();
//TODO USAR ENTIDADES RESPOSTAPERGUNTA COM BASE NO QUESTIONARIO EM QUESTAO
if(respostaRequisitada.
getResposta() !=
null)
{
//TODO CRIAR FACTOS RESPOSTA COM BASE NA RESPOSTA
}
}
}
}
}
}
}
/** COMMIT OPERATION **/
setProgress
(100
);
commitPartially
();
DaoFactory.
getQuestionarioDaoImpl().
update(q
);
/** COMMIT OPERATION **/
msg =
"Set courses state as " + QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
OLAP.
name();
serviceLogInfo
(msg
);
logger.
info(msg
);
q.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
OLAP);
commitPartially
();
serviceLogInfo
("######################################");
serviceLogInfo
("######################################");
logger.
info("######################################");
logger.
info("######################################");
}
catch(1.5.0/docs/api/java/lang/Throwable.html">Throwable e
)
{
logger.
error(e,e
);
q.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
CLOSED);
throw e
;
}
return logMessages
;
}
private OlapEntityQuestionarioCurso createQuestionarioCursoOlap
(DefaultLogMessages logMessages, QuestionarioImpl q, QuestionarioPedagogicoCursoAfeto cu
) {
OlapEntityQuestionarioCurso questionarioCurso
;
1.5.0/docs/api/java/lang/String.html">String msg
;
questionarioCurso =
new OlapEntityQuestionarioCurso
();
questionarioCurso.
setQuestionario(q
);
questionarioCurso.
setCodigoCurso(cu.
getCodigoCurso());
questionarioCurso.
setDegree(cu.
getCourse().
getDegree());
if(cu.
getCourse().
getDepartment() ==
null)
{
msg =
"Curso sem departamento corrigir situação: " + cu.
getNome();
logger.
warn(msg
);
serviceLogWarn
(msg
);
logMessages.
addMessage(new DefaultLogMessage
("questionario.olap", LogMessageTypeEnum.
WARNING,msg
));
}
else
{
cursosSemDepartamento++
;
questionarioCurso.
setDepartament(cu.
getCourse().
getDepartment().
getSigla());
}
questionarioCurso.
setNomeCurso(cu.
getNome());
questionarioCurso.
setNomeInstituicao(cu.
getNomeInstituicao());
questionarioCurso.
setCodigoInstituicao(cu.
getCodigoInstituicao());
DaoFactory.
getOlapEntityQuestionarioCursoDaoImpl().
save(questionarioCurso
);
return questionarioCurso
;
}
private OlapEntityQuestionario createQuestionarioUnidadeOlap
(QuestionarioImpl q
)
{
return null;
}
private OlapEntityQuestionario createQuestionarioOlap
(QuestionarioImpl q
)
{
OlapEntityQuestionario olapEntityQuestionario =
new OlapEntityQuestionario
();
DaoFactory.
getOlapEntityQuestionarioDaoImpl().
save(olapEntityQuestionario
);
return updateOlapQuestionario
(olapEntityQuestionario, q
);
}
private OlapEntityQuestionario updateOlapQuestionario
(OlapEntityQuestionario olapEntityQuestionario, QuestionarioImpl q
)
{
olapEntityQuestionario.
setQuestionario(q
);
olapEntityQuestionario.
setAno(q.
getYear());
olapEntityQuestionario.
setSemestre(q.
getSemestre());
return olapEntityQuestionario
;
}
/**
* Return a map of ID's given the question number
* @param q
* @return
*/
private HashMap
<String,Long
> createOlapQuestionarioPergunta
(QuestionarioImpl q
)
{
HashMap
<String,Long
> mapaIdsPerguntasPersistentes =
new HashMap
<String, Long
>();
for(int i =
1; i
< 40;i++
)
{
OlapEntityQuestionarioPergunta pergunta =
new OlapEntityQuestionarioPergunta
();
pergunta.
setNumero("" + i
);
pergunta.
setPergunta(q.
getPergunta("" + i
));
if(pergunta.
getPergunta() ==
null || pergunta.
getPergunta().
trim().
length() == 0
)
continue;
pergunta.
setGrupoCode(q.
getGrupoCode("" + i
));
if(pergunta.
getGrupoCode() ==
null || pergunta.
getGrupoCode().
trim().
length() == 0
)
continue;
pergunta.
setGrupoTitle(q.
getGrupoTitle("" + i
));
pergunta.
setQuestionario(q
);
DaoFactory.
getOlapEntityQuestionarioPerguntaDaoImpl().
save(pergunta
);
mapaIdsPerguntasPersistentes.
put("" + i,pergunta.
getId());
1.5.0/docs/api/java/lang/System.html">System.
out.
println("Pergunta OLAP Entity " + i
);
1.5.0/docs/api/java/lang/System.html">System.
out.
println(pergunta.
getNumero());
1.5.0/docs/api/java/lang/System.html">System.
out.
println(pergunta.
getPergunta());
1.5.0/docs/api/java/lang/System.html">System.
out.
println(pergunta.
getGrupoCode());
1.5.0/docs/api/java/lang/System.html">System.
out.
println(pergunta.
getGrupoTitle());
}
return mapaIdsPerguntasPersistentes
;
}
}