package pt.estgp.estgweb.services.questionarios;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.QuestionarioView;
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.util.List;
/**
* Created by jorgemachado on 21/03/16.
*/
public class QuestionariosService
implements IService
{
//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
);
}
}
}