List infoTeachers = new ArrayList();
	public List run(Integer curricularCourseID, Integer studentNumber, String executionYear)			throws FenixServiceException, ExcepcaoPersistencia {		List enrolmentEvaluations = null;		InfoTeacher infoTeacher = null;		List infoSiteEnrolmentEvaluations = new ArrayList();		IPersistentEnrolmentEvaluation persistentEnrolmentEvaluation = persistentSupport				.getIPersistentEnrolmentEvaluation();		IPersistentTeacher persistentTeacher = persistentSupport.getIPersistentTeacher();		// read curricularCourse by ID		CurricularCourse curricularCourse = (CurricularCourse) persistentObject				.readByOID(CurricularCourse.class, curricularCourseID);		final CurricularCourse curricularCourseTemp = curricularCourse;		// StudentCurricularPlan studentCurricularPlan =		// persistentSupport.getIStudentCurricularPlanPersistente().readActiveStudentCurricularPlan(		// studentNumber,		// DegreeType.MESTRADO_OBJ);		//		// if (studentCurricularPlan == null)		// {		//		// throw new ExistingServiceException();		// }		// get student curricular Plan		// in case student has school part concluded his curricular plan is		// not in active state		List studentCurricularPlans = persistentSupport.getIStudentCurricularPlanPersistente()				.readByStudentNumberAndDegreeType(studentNumber, DegreeType.MASTER_DEGREE);		StudentCurricularPlan studentCurricularPlan = (StudentCurricularPlan) CollectionUtils.find(				studentCurricularPlans, new Predicate() {					public boolean evaluate(Object object) {						StudentCurricularPlan studentCurricularPlanElem = (StudentCurricularPlan) object;						if (studentCurricularPlanElem.getDegreeCurricularPlan().equals(								curricularCourseTemp.getDegreeCurricularPlan())) {							return true;						}						return false;					}				});		if (studentCurricularPlan == null) {			studentCurricularPlan = (StudentCurricularPlan) CollectionUtils.find(					studentCurricularPlans, new Predicate() {						public boolean evaluate(Object object) {							StudentCurricularPlan studentCurricularPlanElem = (StudentCurricularPlan) object;							if (studentCurricularPlanElem.getDegreeCurricularPlan().getDegree().equals(									curricularCourseTemp.getDegreeCurricularPlan().getDegree())) {								return true;							}							return false;						}					});			if (studentCurricularPlan == null) {				throw new ExistingServiceException();			}		}		// }		Enrolment enrolment = null;		if (executionYear != null) {			enrolment = persistentSupport.getIPersistentEnrolment().readEnrolmentByStudentNumberAndCurricularCourse(					studentCurricularPlan.getStudent().getNumber(), curricularCourse.getIdInternal(),					executionYear);		} else {			// TODO: No se sabe se este comportamento est correcto!			List enrollments = persistentSupport.getIPersistentEnrolment()					.readByStudentCurricularPlanAndCurricularCourse(							studentCurricularPlan.getIdInternal(), curricularCourse.getIdInternal());			if (enrollments.isEmpty()) {				throw new ExistingServiceException();			}			enrolment = (Enrolment) enrollments.get(0);		}		if (enrolment != null) {			// ListIterator iter1 = enrolments.listIterator();			// while (iter1.hasNext()) {			// enrolment = (Enrolment) iter1.next();			EnrolmentEvaluationState enrolmentEvaluationState = new EnrolmentEvaluationState(					EnrolmentEvaluationState.FINAL);			enrolmentEvaluations = persistentEnrolmentEvaluation					.readEnrolmentEvaluationByEnrolmentEvaluationState(enrolment.getIdInternal(),							enrolmentEvaluationState);			// enrolmentEvaluations = enrolment.getEvaluations();			List infoTeachers = new ArrayList();			if (enrolmentEvaluations != null && enrolmentEvaluations.size() > 0) {				Person person = ((EnrolmentEvaluation) enrolmentEvaluations.get(0))						.getPersonResponsibleForGrade();				Teacher teacher = persistentTeacher.readTeacherByUsername(person.getUsername());				infoTeacher = InfoTeacherWithPerson.newInfoFromDomain(teacher);				infoTeachers.add(infoTeacher);			}			List infoEnrolmentEvaluations = new ArrayList();			if (enrolmentEvaluations != null && enrolmentEvaluations.size() > 0) {				ListIterator iter = enrolmentEvaluations.listIterator();				while (iter.hasNext()) {					EnrolmentEvaluation enrolmentEvaluation = (EnrolmentEvaluation) iter.next();					InfoEnrolmentEvaluation infoEnrolmentEvaluation = InfoEnrolmentEvaluationWithResponsibleForGrade							.newInfoFromDomain(enrolmentEvaluation);					InfoEnrolment infoEnrolment = InfoEnrolmentWithStudentPlanAndCourseAndExecutionPeriod							.newInfoFromDomain(enrolmentEvaluation.getEnrolment());					infoEnrolmentEvaluation.setInfoEnrolment(infoEnrolment);					if (enrolmentEvaluation != null) {						if (enrolmentEvaluation.getEmployee() != null) {							Person person2 = (Person) persistentObject									.readByOID(											Person.class,											enrolmentEvaluation.getEmployee().getPerson()													.getIdInternal());							infoEnrolmentEvaluation.setInfoEmployee(InfoPersonWithInfoCountry									.newInfoFromDomain(person2));						}					}					infoEnrolmentEvaluations.add(infoEnrolmentEvaluation);				}			}			InfoSiteEnrolmentEvaluation infoSiteEnrolmentEvaluation = new InfoSiteEnrolmentEvaluation();			infoSiteEnrolmentEvaluation.setEnrolmentEvaluations(infoEnrolmentEvaluations);			infoSiteEnrolmentEvaluation.setInfoTeacher(infoTeacher);			infoSiteEnrolmentEvaluations.add(infoSiteEnrolmentEvaluation);		}		return infoSiteEnrolmentEvaluations;	}