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 cotação
//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
);
}
}