Subversion Repositories bacoAlunos

Rev

Rev 1310 | 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.utils.FilesUtils;
import org.apache.log4j.Logger;
import org.apache.struts.upload.FormFile;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.*;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.views.*;
import pt.estgp.estgweb.filters.chains.ResourceAccessControlEnum;
import pt.estgp.estgweb.services.data.RepositoryService;
import pt.utl.ist.berserk.logic.serviceManager.IService;

import java.io.IOException;
import java.util.Date;

/**
 * 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 InsertAssessmentAnswersService 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(InsertAssessmentAnswersService.class);

    private LoadAssessmentService loadAssessmentService = new LoadAssessmentService();
    private RepositoryService repositoryService = new RepositoryService();
    private GeneratePdfService generatePdfService = new GeneratePdfService();

    public AssessmentView run(long responseId, AssessmentView assessmentView, UserSession userSession)
    {
        AssessmentResponse response = DaoFactory.getAssessmentResponseDaoImpl().get(responseId);

        if(response.isAnswered()) return null;

        for(AssessmentQuestionView qView : assessmentView.getQuestions())
        {
            for(AssessmentQuestionItemView iView : qView.getQuestionItems())
            {
                for(AssessmentQuestionPossibleAnswerView pView : iView.getPossibleAnswers())
                {
                    for(AssessmentQuestionAnswerView aView : pView.getAnswers())
                    {
                        if(aView.getId() <= 0)
                        {
                            AssessmentQuestionAnswerImpl a = DomainObjectFactory.createAssessmentQuestionAnswerImpl();
                            aView.persistViewInObject(a);

                            AssessmentQuestionPossibleAnswerImpl p = (AssessmentQuestionPossibleAnswerImpl) DaoFactory.getAssessmentQuestionPossibleAnswerDaoImpl().get(pView.getId());

                            a.setPossibleAnswer(p);
                            a.setResponse(response);
                            a.setEvaluated(false);
                            if(iView.getUploadFile() != null && iView.getUploadFile().getFileSize()>0)
                            {   //tratar de salvar o ficheiro e guardar o identifier
                                FormFile file = iView.getUploadFile();
                                1.5.0/docs/api/java/lang/String.html">String extension = FilesUtils.getExtension(file.getFileName());
                                1.5.0/docs/api/java/lang/String.html">String description = "assessment.answer.file "+assessmentView.getCourseUnit().getName()+" of "+ userSession.getUser().getUsername();
                                1.5.0/docs/api/java/lang/String.html">String identifier = null;
                                try {

                                    identifier = repositoryService.storeRepositoryFile(file.getInputStream(),file.getContentType(),extension,file.getFileSize(),file.getFileName(),description, ResourceAccessControlEnum.publicDomain,userSession);
                                    a.setIdentifier(identifier);

                                } 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.
                                }
                            }
                            //verificar se sao questoes de correccao automatica para atribuir cotacao
                            //e serem colocadas como corrigidas
                            if(qView.getType().equals(Globals.ASSESSMENT_QUESTION_TYPE_RADIO)
                                    || qView.getType().equals(Globals.ASSESSMENT_QUESTION_TYPE_MATRIX)
                                    || qView.getType().equals(Globals.ASSESSMENT_QUESTION_TYPE_CHECK))
                            {
                                a.setQuotation(p.getQuotation());
                                a.setEvaluated(true);
                            }

                            DaoFactory.getAssessmentQuestionAnswerDaoImpl().save(a);
                        }
                    }
                }
            }
        }

        response.setDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        response.setAnswered(true);
        //verificar se so respondeu a questoes de correccao automatica para ser ja colocada a nota
        //e definida a resposta como avaliada
        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("Answer inserted to assessment with id: "+assessmentView.getId());

        return loadAssessmentService.run(assessmentView.getId(), userSession);
    }

}