IEnrolment enrolment = new Enrolment();
IEnrollment enrolment = new Enrolment();
	public List run(Integer curricularCourseID, Integer studentNumber, String executionYear)		throws FenixServiceException	{		List enrolmentEvaluations = null;		InfoTeacher infoTeacher = null;		List infoSiteEnrolmentEvaluations = new ArrayList();		IEnrolment enrolment = new Enrolment();		IEnrolmentEvaluation enrolmentEvaluation = new EnrolmentEvaluation();		try		{			ISuportePersistente sp = SuportePersistenteOJB.getInstance();			IPersistentEnrolmentEvaluation persistentEnrolmentEvaluation =				sp.getIPersistentEnrolmentEvaluation();			IPersistentTeacher persistentTeacher = sp.getIPersistentTeacher();			//read curricularCourse by ID			ICurricularCourse curricularCourse = new CurricularCourse();			curricularCourse.setIdInternal(curricularCourseID);			curricularCourse =				(ICurricularCourse) sp.getIPersistentCurricularCourse().readByOId(					curricularCourse,					false);			final ICurricularCourse curricularCourseTemp = curricularCourse;			//			IStudentCurricularPlan studentCurricularPlan =			//				sp.getIStudentCurricularPlanPersistente().readActiveStudentCurricularPlan(			//					studentNumber,			//					TipoCurso.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 =				sp.getIStudentCurricularPlanPersistente().readByStudentNumberAndDegreeType(					studentNumber,					TipoCurso.MESTRADO_OBJ);			IStudentCurricularPlan studentCurricularPlan =				(IStudentCurricularPlan) CollectionUtils.find(studentCurricularPlans, new Predicate()			{				public boolean evaluate(Object object)				{					IStudentCurricularPlan studentCurricularPlanElem = (IStudentCurricularPlan) object;					if (studentCurricularPlanElem						.getDegreeCurricularPlan()						.equals(curricularCourseTemp.getDegreeCurricularPlan()))					{						return true;					}					return false;				}			});			if (studentCurricularPlan == null)			{				throw new ExistingServiceException();			}			//			}			if (executionYear != null)			{				enrolment =					sp						.getIPersistentEnrolment()						.readEnrolmentByStudentCurricularPlanAndCurricularCourse(						studentCurricularPlan,						curricularCourse,						executionYear);			}			else			{				// TODO: No se sabe se este comportamento est correcto!				List enrollments =					sp.getIPersistentEnrolment().readByStudentCurricularPlanAndCurricularCourse(						studentCurricularPlan,						curricularCourse);								enrolment = (IEnrolment) enrollments.get(0);			}			if (enrolment != null)			{				//						ListIterator iter1 = enrolments.listIterator();				//						while (iter1.hasNext()) {				//							enrolment = (IEnrolment) iter1.next();				EnrolmentEvaluationState enrolmentEvaluationState =					new EnrolmentEvaluationState(EnrolmentEvaluationState.FINAL);				enrolmentEvaluations =					persistentEnrolmentEvaluation.readEnrolmentEvaluationByEnrolmentEvaluationState(						enrolment,						enrolmentEvaluationState);				//				enrolmentEvaluations = enrolment.getEvaluations();				List infoTeachers = new ArrayList();				if (enrolmentEvaluations != null && enrolmentEvaluations.size() > 0)				{					IPessoa person =						((IEnrolmentEvaluation) enrolmentEvaluations.get(0))							.getPersonResponsibleForGrade();					ITeacher teacher = persistentTeacher.readTeacherByUsername(person.getUsername());					infoTeacher = Cloner.copyITeacher2InfoTeacher(teacher);					infoTeachers.add(infoTeacher);				}				List infoEnrolmentEvaluations = new ArrayList();				if (enrolmentEvaluations != null && enrolmentEvaluations.size() > 0)				{					ListIterator iter = enrolmentEvaluations.listIterator();					while (iter.hasNext())					{						enrolmentEvaluation = (IEnrolmentEvaluation) iter.next();						InfoEnrolmentEvaluation infoEnrolmentEvaluation =							Cloner.copyIEnrolmentEvaluation2InfoEnrolmentEvaluation(enrolmentEvaluation);						infoEnrolmentEvaluation.setInfoEnrolment(							Cloner.copyIEnrolment2InfoEnrolment(enrolmentEvaluation.getEnrolment()));						if (enrolmentEvaluation != null)						{							if (enrolmentEvaluation.getEmployee() != null)							{								IPessoa person = new Pessoa();								person.setIdInternal(									enrolmentEvaluation.getEmployee().getPerson().getIdInternal());								IPessoa person2 =									(IPessoa) sp.getIPessoaPersistente().readByOId(person, false);								infoEnrolmentEvaluation.setInfoEmployee(									Cloner.copyIPerson2InfoPerson(person2));							}						}						infoEnrolmentEvaluations.add(infoEnrolmentEvaluation);					}				}				InfoSiteEnrolmentEvaluation infoSiteEnrolmentEvaluation =					new InfoSiteEnrolmentEvaluation();				infoSiteEnrolmentEvaluation.setEnrolmentEvaluations(infoEnrolmentEvaluations);				infoSiteEnrolmentEvaluation.setInfoTeacher(infoTeacher);				infoSiteEnrolmentEvaluations.add(infoSiteEnrolmentEvaluation);			}		}		catch (ExcepcaoPersistencia ex)		{			ex.printStackTrace();			FenixServiceException newEx = new FenixServiceException("Persistence layer error");			newEx.fillInStackTrace();			throw newEx;		}		return infoSiteEnrolmentEvaluations;	}