/* This file is part of OpenMyEWB. OpenMyEWB is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenMyEWB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenMyEWB. If not, see <http://www.gnu.org/licenses/>. OpenMyEWB is Copyright 2005-2009 Nicolas Kruchten (nicolas@kruchten.com), Francis Kung, Engineers Without Borders Canada, Michael Trauttmansdorff, Jon Fishbein, David Kadish */ package ca.myewb.model; import java.util.ArrayList; import java.util.Date; import org.hibernate.Session; import ca.myewb.frame.HibernateUtil; import ca.myewb.logic.ApplicationLogic; public class ApplicationModel extends ApplicationLogic { private ApplicationModel(ApplicationSessionModel session, UserModel user) { super(session, user); } public ApplicationModel() { super(); } public static ApplicationModel newApplication(ApplicationSessionModel session, UserModel user) { ApplicationModel app = new ApplicationModel(session, user); HibernateUtil.currentSession().save(app); return app; } public ApplicationAnswerModel answerQuestion(ApplicationQuestionModel question, String answer) { ApplicationAnswerModel a = (ApplicationAnswerModel)HibernateUtil.currentSession().createQuery("FROM ApplicationAnswerModel WHERE questionid = :question AND appid = :application").setInteger("question", question.getId()).setInteger("application", getId()).uniqueResult(); if (a == null) { a = ApplicationAnswerModel.newApplicationAnswer(question, this, answer); getAnswers().add(a); } else { a.setAnswer(answer); } return a; } public void unlinkSession() { //this is basically shorthand for 'delete' getSession().getApplications().remove(this); setSession(null); getUser().getApplications().remove(this); setUser(null); } public void save(int englishWriting, int englishReading, int englishSpeaking, int frenchWriting, int frenchReading, int frenchSpeaking, String schooling, String resume, String references, float gpa) { setEnglishReading(englishReading); setEnglishWriting(englishWriting); setEnglishSpeaking(englishSpeaking); setFrenchReading(frenchReading); setFrenchSpeaking(frenchSpeaking); setFrenchWriting(frenchWriting); setSchooling(schooling); setRefs(references); setResume(resume); setGPA(gpa); setModified(new Date()); } public ApplicationAnswerModel getAnswerForQuestion(ApplicationQuestionModel question) { Session session = HibernateUtil.currentSession(); return (ApplicationAnswerModel)session.createQuery("FROM ApplicationAnswerModel WHERE questionid = :questionid AND appid = :appid").setInteger("appid", getId()).setInteger("questionid", question.getId()).uniqueResult(); } public String[] getIncompleteQuestions() { ArrayList<String> workingSet = new ArrayList<String>(); if(getSchooling() == null || getSchooling().equals("")) { workingSet.add("Education Background"); } if(getGPA() <= 0) { workingSet.add("Final Graduation Grade Percentage"); } if(getResume() == null || getResume().equals("")) { workingSet.add("Resumé"); } if(getRefs() == null || getRefs().equals("")) { workingSet.add("References"); } for (ApplicationQuestionModel q : getSession().getQuestions()) { if(getAnswerForQuestion(q) == null || getAnswerForQuestion(q).getAnswer().equals("")) { workingSet.add("Application Question " + q.getQuestionOrder()); } } return workingSet.toArray(new String[0]); } public void evaluateForCriteria(EvaluationCriteriaModel crit, int response) { if(getEvaluation() == null) { EvaluationModel eval = EvaluationModel.newEvaluationModel(this); setEvaluation(eval); } getEvaluation().responseForCriteria(crit, response); } }