package pt.estgp.estgweb.services.questionarios;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.dao.impl.AnnouncementDaoImpl;
import pt.estgp.estgweb.domain.views.QuestionarioView;
import pt.estgp.estgweb.services.email.EMAILJob;
import pt.estgp.estgweb.services.email.SendEmailService;
import pt.estgp.estgweb.services.jobs.JobScheduleService;
import pt.estgp.estgweb.utils.Email;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by jorgemachado on 21/03/16.
*/
public class QuestionariosService
implements IService
{
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(QuestionariosService.
class);
//NEW QUESTIONARIOS COME BY THIS SERVICE
public QuestionarioImpl newQuestionarioForm
(QuestionarioImpl qform, UserSession userSession
) throws NotAuthorizedException
{
if(qform.
getQuestionarioHistoryDrive().
getId() > 0
)
{
QuestionarioHistoryDrive hist = DaoFactory.
getQuestionarioHistoryDriveDaoImpl().
load(qform.
getQuestionarioHistoryDrive().
getId());
qform.
setQuestionarioHistoryDrive(hist
);
}
else
{
qform.
setQuestionarioHistoryDrive(null);
}
DaoFactory.
getQuestionarioDaoImpl().
save(qform
);
return qform
;
}
public QuestionarioImpl saveQuestionarioForm
(QuestionarioImpl qform, UserSession userSession, QuestionarioImpl questionarioCleared
) throws NotAuthorizedException
{
if(qform.
getQuestionarioHistoryDrive().
getId() > 0
)
{
QuestionarioHistoryDrive hist = DaoFactory.
getQuestionarioHistoryDriveDaoImpl().
load(qform.
getQuestionarioHistoryDrive().
getId());
qform.
setQuestionarioHistoryDrive(hist
);
}
else
{
qform.
setQuestionarioHistoryDrive(null);
}
Questionario qPersistent = questionarioCleared
;
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SAVE_FORM.
name()))
{
QuestionarioView qv =
new QuestionarioView
(qform
);
if(questionarioCleared.
isClear((UserSessionImpl
) userSession, QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SAVE_ANSWER_PROCESSOR.
name()))
{
qv.
persistAnswersProcessor(qPersistent
);
}
qv.
persistViewInObjectForm(qPersistent
);
qPersistent.
setQuestionarioHistoryDrive(qform.
getQuestionarioHistoryDrive());
}
else
throw new NotAuthorizedException
("Não pode alterar o formulário porque o questionário está num estado avançado");
return loadInit
(questionarioCleared
);
}
public QuestionarioImpl setAssignDetailsState
(long id, UserSession userSession, QuestionarioImpl questionarioCleared
) throws NotAuthorizedException
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_SET_STATE_ASSIGNATION_DETAILS.
name()))
{
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNATION_DETAILS);
questionarioCleared.
getiAnswersProcessorClass().
startAfetacoes(questionarioCleared
);
}
else
throw new NotAuthorizedException
("Não alterar o questionário para este estado neste momento");
return loadInit
(questionarioCleared
);
}
/**
* Questionario comes already cleared from Filter
* @param questionarioId
* @param questionarioCleared
* @param userSession
* @return
*/
public QuestionarioImpl loadQuestionario
(long questionarioId,UserSession userSession,QuestionarioImpl questionarioCleared
)
{
return loadInit
(questionarioCleared
);
}
/**
* just to load proxys
* @param questionarioCleared
* @return
*/
private QuestionarioImpl loadInit
(QuestionarioImpl questionarioCleared
)
{
questionarioCleared.
getDescription();//to load proxy just in case
if(questionarioCleared.
getQuestionarioHistoryDrive() !=
null)
questionarioCleared.
getQuestionarioHistoryDrive().
getCodeName();
IAnswersProcessor processor = questionarioCleared.
getiAnswersProcessorClass();
processor.
initQuestionarioAfetacoesVariables(questionarioCleared
);
return questionarioCleared
;
}
public void loadInit
(List
<QuestionarioImpl
> questionarioCleared
)
{
for(QuestionarioImpl q: questionarioCleared
)
{
loadInit
(q
);
}
}
public void deleteQuestionario
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_DELETE.
name()))
{
DaoFactory.
getQuestionarioDaoImpl().
delete(questionarioCleared
);
}
}
/**
* Passa para o estado ASSIGNED_ANSWERS
* @param questionarioId
* @param userSession
* @param questionarioCleared
* @return
*/
public QuestionarioImpl putAssignedAnswers
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_PUT_ANSWERS_ASSIGNED.
toString()))
{
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNED_ANSWERS);
}
return questionarioCleared
;
}
public QuestionarioImpl revertAssignationDetails
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_REVERT_TO_ASSIGNATION_DETAILS.
toString()))
{
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNATION_DETAILS);
}
return questionarioCleared
;
}
public QuestionarioImpl startProcessement
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession, QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_START_PROCESSEMENT.
toString()))
{
if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNED_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING);
else if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
STOPED_WITH_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS);
}
return questionarioCleared
;
}
public QuestionarioImpl stopProcessement
(long questionarioId, UserSession userSession,QuestionarioImpl questionarioCleared
)
{
if(questionarioCleared.
isClear((UserSessionImpl
) userSession,QuestionarioImpl.
QuestionarioClearancesOperation.
QUESTIONARIO_STOP_PROCESSEMENT.
toString()))
{
if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
ASSIGNED_ANSWERS);
else if(questionarioCleared.
getStateEnum() == QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS)
questionarioCleared.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
STOPED_WITH_ANSWERS);
}
return questionarioCleared
;
}
public void salvarResposta
(QuestionarioResposta resposta,
1.5.0/docs/api/java/lang/Long.html">Long alunoRequisitadoId,UserSession userSession
) throws NotAuthorizedException
{
Questionario q = DaoFactory.
getQuestionarioDaoImpl().
load(resposta.
getQuestionario().
getId());
QuestionarioImpl questionario =
(QuestionarioImpl
) DaoFactory.
getQuestionarioDaoImpl().
narrow(q
);
QuestionarioPedagogicoAlunoRequisitado alunoRequisitado = DaoFactory.
getQuestionarioPedagogicoAlunoRequisitadoDaoImpl().
load(alunoRequisitadoId
);
if(questionario.
getStateEnum() != QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING && questionario.
getStateEnum() != QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS )
{
throw new NotAuthorizedException
("O questionário interrompido por razões administrativas, por favor tente mais tarde");
}
if(!((alunoRequisitado.
getRespostaRequisitada().
getQuestionario().
getId() == questionario.
getId())
&&
alunoRequisitado.
getRespostaRequisitada().
getResposta() ==
null
&&
alunoRequisitado.
getAluno().
getId() == userSession.
getUser().
getId()))
{
throw new NotAuthorizedException
("Não está autorizado a submeter esta resposta.");
}
resposta.
setId(0
);
resposta.
setQuestionario(questionario
);
resposta.
setUser(alunoRequisitado.
getAluno());
alunoRequisitado.
getRespostaRequisitada().
setResposta(resposta
);
DaoFactory.
getQuestionarioRespostaDaoImpl().
save(resposta
);
questionario.
setStateClass(QuestionarioImpl.
1.5.0/docs/api/org/omg/PortableServer/POAManagerPackage/State.html">State.
PROCESSING_WITH_ANSWERS);
}
SendEmailService sendEmailService =
new SendEmailService
();
public int sendMessage
(boolean onlyNotAnswered,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">String source =
"questionario message";
AnnouncementDaoImpl.
FindUsersResult result = DaoFactory.
getQuestionarioDaoImpl().
findUsersEmails(id,onlyNotAnswered
);
return sendEmails
(id, msg, emailFrom, personFrom, subject, userSession, source, result
);
}
private int sendEmails
(1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject, UserSession userSession,
1.5.0/docs/api/java/lang/String.html">String source, AnnouncementDaoImpl.
FindUsersResult result
) {
List
<String
> usersToConsume = result.
emails;
logger.
info("Scheduling mail jobs to " + result.
users +
" users: " + usersToConsume.
size() +
" recipients");
while(usersToConsume.
size() > 0
)
{
Iterator
<String
> iter = usersToConsume.
iterator();
List
<String
> usersToJob =
new ArrayList
<String
>();
int contador =
0;
while(iter.
hasNext() && contador
< 20
)
{
usersToJob.
add(iter.
next());
iter.
remove();
contador++
;
}
Email e = sendEmailService.
getMessageEmailAdulteredFromEmailIpp(emailFrom,
personFrom,
subject,
msg,
usersToJob,
userSession.
getUser());
e.
setHtml(true);
EMAILJob emailJob =
new EMAILJob
(e
);
JobScheduleService.
getInstance().
scheduleNow(emailJob,
"Message Email (" + source +
":id " + id +
") from " + userSession.
getUsername() +
" as " + personFrom +
" - subject:" + subject ,userSession
);
}
return result.
users;
}
public int sendMessageCursoAfeto
(boolean onlyNotAnswered,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">String source =
"questionario curso message";
AnnouncementDaoImpl.
FindUsersResult result = DaoFactory.
getQuestionarioDaoImpl().
findUsersEmailsPedagogico(onlyNotAnswered,id,0
);
return sendEmails
(id, msg, emailFrom, personFrom, subject, userSession, source, result
);
}
public int sendMessageUnidadeAfeta
(boolean onlyNotAnswered,
1.5.0/docs/api/java/lang/Long.html">Long id,
1.5.0/docs/api/java/lang/String.html">String msg,
1.5.0/docs/api/java/lang/String.html">String emailFrom,
1.5.0/docs/api/java/lang/String.html">String personFrom,
1.5.0/docs/api/java/lang/String.html">String subject,UserSession userSession
)
{
1.5.0/docs/api/java/lang/String.html">String source =
"questionario unidade message";
AnnouncementDaoImpl.
FindUsersResult result = DaoFactory.
getQuestionarioDaoImpl().
findUsersEmailsPedagogico(onlyNotAnswered,0,id
);
return sendEmails
(id, msg, emailFrom, personFrom, subject, userSession, source, result
);
}
}