InfoLesson infoLesson = Cloner.copyILesson2InfoLesson(aula);
InfoLesson infoLesson = InfoLesson.newInfoFromDomain(aula);
    public List run(InfoRoom infoRoom, Calendar day, InfoExecutionPeriod infoExecutionPeriod) {        List infoShowOccupations = new ArrayList();        try {            ISuportePersistente sp = PersistenceSupportFactory.getDefaultPersistenceSupport();            IPersistentExecutionPeriod persistentExecutionPeriod = sp.getIPersistentExecutionPeriod();            IAulaPersistente lessonDAO = sp.getIAulaPersistente();            IPersistentExam examDAO = sp.getIPersistentExam();            //IExecutionPeriod executionPeriod = persistentExecutionPeriod.readActualExecutionPeriod();            IExecutionPeriod executionPeriod = (IExecutionPeriod) persistentExecutionPeriod.readByOID(ExecutionPeriod.class, infoExecutionPeriod.getIdInternal());            Calendar startDay = Calendar.getInstance();            startDay.setTimeInMillis(day.getTimeInMillis());            startDay.add(Calendar.DATE, Calendar.MONDAY - day.get(Calendar.DAY_OF_WEEK));            Calendar endDay = Calendar.getInstance();            endDay.setTimeInMillis(startDay.getTimeInMillis());            endDay.add(Calendar.DATE, 6);            Period weekPeriod = new Period(day, endDay);            IRoom room = Cloner.copyInfoRoom2Room(infoRoom);            Period lessonsPeriod = calculateLessonsSeason(executionPeriod);            if (lessonsPeriod.intersectPeriods(weekPeriod)) {                //adicionar as aulas                List lessonList = lessonDAO.readByRoomAndExecutionPeriod(room, executionPeriod);                Iterator iterator = lessonList.iterator();                while (iterator.hasNext()) {                    ILesson aula = (ILesson) iterator.next();                    IRoomOccupation roomOccupation = aula.getRoomOccupation();                    IPeriod period = roomOccupation.getPeriod();                    if (period.intersectPeriods(weekPeriod)) {                        boolean add = true;                        if ((roomOccupation.getFrequency().intValue() == RoomOccupation.QUINZENAL)                                && (!RoomOccupation.periodQuinzenalContainsWeekPeriod(period,                                        roomOccupation.getWeekOfQuinzenalStart().intValue(),                                        roomOccupation.getDayOfWeek(), weekPeriod))) {                            add = false;                        }                        if (roomOccupation.getFrequency().intValue() == RoomOccupation.SEMANAL) {                            Calendar dayOfLesson = Calendar.getInstance();                            dayOfLesson.setTimeInMillis(day.getTimeInMillis());                            dayOfLesson.add(Calendar.DATE, roomOccupation.getDayOfWeek().getDiaSemana()                                    .intValue()                                    - Calendar.MONDAY);                            if (!period.intersectPeriods(new Period(dayOfLesson, dayOfLesson))) {                                add = false;                            }                        }                        if (add) {                            InfoLesson infoLesson = Cloner.copyILesson2InfoLesson(aula);                            IShift shift = aula.getShift();                            if (shift == null) {                                continue;                            }                            InfoShift infoShift = InfoShift.newInfoFromDomain(shift);                            infoLesson.setInfoShift(infoShift);                            infoShowOccupations.add(infoLesson);                        }                    }                }            }            //adicionar os exames            List examList = examDAO.readByRoomAndWeek(room, day);            Iterator iteratorExams = examList.iterator();            while (iteratorExams.hasNext()) {                IExam elem = (IExam) iteratorExams.next();                InfoExam infoExam = Cloner.copyIExam2InfoExam(elem);                infoShowOccupations.add(infoExam);            }        } catch (ExcepcaoPersistencia ex) {            ex.printStackTrace();        } catch (Exception ex) {            ex.printStackTrace();        }        return infoShowOccupations;    }