package pt.estgp.estgweb.services.assessments;
import com.itextpdf.text.DocumentException;
import jomm.dao.impl.AbstractDao;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.domain.Assessment;
import pt.estgp.estgweb.domain.AssessmentQuestionAnswer;
import pt.estgp.estgweb.domain.AssessmentResponse;
import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.AssessmentQuestionAnswerView;
import pt.estgp.estgweb.domain.views.AssessmentResponseView;
import pt.estgp.estgweb.domain.views.AssessmentView;
import pt.utl.ist.berserk.logic.serviceManager.IService;
import java.io.IOException;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Filipe Matos
* Date: 6/Ago/2013
* Time: 2:20:23
* To change this template use File | Settings | File Templates.
*/
public class EvaluateAssessmentsService
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(EvaluateAssessmentsService.
class);
private LoadAssessmentResponseService loadAssessmentResponseService =
new LoadAssessmentResponseService
();
private GeneratePdfService generatePdfService =
new GeneratePdfService
();
public AssessmentResponseView evaluateAssessmentResponse
(AssessmentResponseView assessmentResponseView, UserSession userSession
)
{
AssessmentResponse response = DaoFactory.
getAssessmentResponseDaoImpl().
get(assessmentResponseView.
getId());
if(response.
isEvaluated()) return null;
for(AssessmentQuestionAnswerView aView : assessmentResponseView.
getAnswers())
{
AssessmentQuestionAnswer answer = DaoFactory.
getAssessmentQuestionAnswerDaoImpl().
get(aView.
getId());
aView.
persistViewInObject(answer
);
answer.
setEvaluated(true);
//se estiver errada
if(aView.
getAnswerCorrectS().
equals("incorrect"))
{
answer.
setQuotation(0
);
}
else{
double quotation = answer.
getPossibleAnswer().
getQuestionItem().
getQuestion().
getQuotation();
if(aView.
getAnswerCorrectS().
equals("correct"))
{
answer.
setQuotation(quotation
);
}
if(aView.
getAnswerCorrectS().
equals("incomplete"))
{
//double quotationAnswer = quotation * (aView.getPercentage()*0.01);
answer.
setQuotation(aView.
getPercentage());
}
}
}
//somar as cotações para atribuir cotação a resposta e colocar como avaliada
double quotationTotal=
0;
for(AssessmentQuestionAnswer aQa : response.
getAnswers())
{
quotationTotal+=aQa.
getQuotation();
}
response.
setEvaluated(true);
response.
setQuotation(quotationTotal
);
try {
generatePdfService.
generateAssessmentResponsePdf(response.
getId(),response.
getAssessment().
getId(),userSession
);
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
e.
printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (DocumentException e
) {
e.
printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
logger.
info("Evaluate assessment response with id: "+assessmentResponseView.
getId());
return loadAssessmentResponseService.
run(assessmentResponseView.
getId(), userSession
);
}
public AssessmentView evaluateQuestionResponses
(List
<AssessmentQuestionAnswerView
> questionAnswersView, UserSession userSession
)
{
long assessmentId=
0; //para usar em baixo
for(AssessmentQuestionAnswerView aView : questionAnswersView
)
{
AssessmentQuestionAnswer answer = DaoFactory.
getAssessmentQuestionAnswerDaoImpl().
get(aView.
getId());
aView.
persistViewInObject(answer
);
answer.
setEvaluated(true);
assessmentId = answer.
getResponse().
getAssessment().
getId();
//se estiver errada
if(aView.
getAnswerCorrectS().
equals("incorrect"))
{
answer.
setQuotation(0
);
}
else{
double quotation = answer.
getPossibleAnswer().
getQuestionItem().
getQuestion().
getQuotation();
if(aView.
getAnswerCorrectS().
equals("correct"))
{
answer.
setQuotation(quotation
);
}
if(aView.
getAnswerCorrectS().
equals("incomplete"))
{
//double quotationAnswer = quotation * (aView.getPercentage()*0.01);
answer.
setQuotation(aView.
getPercentage());
}
}
}
//carregar as respostas e verificar se as answers já estão todas corrigidas
//para somar as cotações para atribuir cotação a resposta e colocar como avaliada
List
<AssessmentResponse
> responses = DaoFactory.
getAssessmentResponseDaoImpl().
loadResponsesByAssessmentIdAnswered(assessmentId
);
for(AssessmentResponse response : responses
)
{
boolean evaluated =
true;
double quotationTotal=
0;
for(AssessmentQuestionAnswer aQa : response.
getAnswers())
{
if(!aQa.
isEvaluated())
{
evaluated=
false;
}
quotationTotal+=aQa.
getQuotation();
}
if(evaluated
)
{
response.
setEvaluated(true);
response.
setQuotation(quotationTotal
);
try {
generatePdfService.
generateAssessmentResponsePdf(response.
getId(),response.
getAssessment().
getId(),userSession
);
} catch (1.5.0/docs/api/java/io/IOException.html">IOException e
) {
e.
printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} catch (DocumentException e
) {
e.
printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
logger.
info("Evaluate questions response");
AbstractDao.
getCurrentSession().
getTransaction().
commit();
AbstractDao.
getCurrentSession().
beginTransaction();
Assessment assessment = DaoFactory.
getAssessmentDaoImpl().
get(assessmentId
);
AssessmentView assessmentView =
new AssessmentView
(assessment
);
return assessmentView
;
}
}