Subversion Repositories bacoAlunos

Rev

Rev 1306 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

}