Subversion Repositories bacoAlunos

Rev

Rev 1387 | Rev 1422 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
112 jmachado 1
package pt.estgp.estgweb.domain;
2
 
1312 jmachado 3
import com.owlike.genson.Genson;
4
import com.owlike.genson.TransformationException;
5
import org.apache.log4j.Logger;
995 jmachado 6
import pt.estgp.estgweb.Globals;
1313 jmachado 7
import pt.estgp.estgweb.domain.dao.DaoFactory;
489 jmachado 8
import pt.estgp.estgweb.domain.enums.CourseUnitContentsGrants;
1312 jmachado 9
import pt.estgp.estgweb.domain.test.TestCourseUnit;
10
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport;
11
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
12
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
489 jmachado 13
 
1312 jmachado 14
import java.io.IOException;
146 jmachado 15
import java.io.Serializable;
1337 jmachado 16
import java.util.*;
146 jmachado 17
 
112 jmachado 18
/**
19
 * Created by IntelliJ IDEA.
20
 * User: Jorge Machado
21
 * Date: 7/Mai/2008
22
 * Time: 20:21:15
23
 * To change this template use File | Settings | File Templates.
24
 */
1312 jmachado 25
public class CourseUnitImpl extends CourseUnit implements ICanManage, ClearanceRuled
146 jmachado 26
{
489 jmachado 27
 
1312 jmachado 28
    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(CourseUnitImpl.class);
29
 
489 jmachado 30
    CourseUnitContentsGrants courseUnitContentsGrants = null;
31
 
146 jmachado 32
    public 1.5.0/docs/api/java/io/Serializable.html">Serializable getSerializable()
33
    {
34
        return getId();
35
    }
204 jmachado 36
 
489 jmachado 37
 
38
    public CourseUnitContentsGrants getCourseUnitContentsGrants() {
39
        if(courseUnitContentsGrants == null)
40
            courseUnitContentsGrants = CourseUnitContentsGrants.parse(super.getContentsGrants());
41
        return courseUnitContentsGrants;
42
    }
43
 
44
    public void setCourseUnitContentsGrants(CourseUnitContentsGrants courseUnitContentsGrants) {
45
        super.setContentsGrants(courseUnitContentsGrants.name());
46
        this.courseUnitContentsGrants = courseUnitContentsGrants;
47
    }
48
 
204 jmachado 49
    public boolean isValid()
50
    {
51
        return true;  //To change body of implemented methods use File | Settings | File Templates.
52
    }
53
 
54
    public boolean isOwnedBy(GenericUser u)
55
    {
208 jmachado 56
        return isOwnedBy(u, false);
204 jmachado 57
    }
58
 
208 jmachado 59
    public boolean isOwnedBy(GenericUser u, boolean transaction)
60
    {
61
        return u != null && u instanceof TeacherImpl && ((TeacherImpl)u).hasCourseUnit(getId(),transaction);
62
    }
63
 
204 jmachado 64
    /**
65
     * Not implemented can be variuous teachers
66
     * @return null
67
     * use isOwnedBy in this class
68
     */
69
    public GenericUser getOwner()
70
    {
71
        return null;
72
    }
73
    /**
74
     * Not implemented
75
     * @return
76
     */
77
    public List<String> getOwnerRoles()
78
    {
79
        return null;
80
    }
81
 
82
    /**
83
     * Not implemented
84
     * @return
85
     */
86
    public 1.5.0/docs/api/java/lang/String.html">String getChoosedOwnerRole()
87
    {
88
        return null;
89
    }
90
 
91
    public boolean isInternal()
92
    {
251 jmachado 93
        return true;
204 jmachado 94
    }
208 jmachado 95
 
96
    public CourseUnitBlogImpl getUnitBlog()
97
    {
98
        if(getBlogs()!=null && getBlogs().size() > 0)
99
            return (CourseUnitBlogImpl) getBlogs().iterator().next();
100
        return null;
101
    }
251 jmachado 102
 
1315 jmachado 103
 
1312 jmachado 104
    public boolean equalsSiges(5+0%2Fdocs%2Fapi+Object">Object anotherInstance,boolean turmasSeparadas)
251 jmachado 105
    {
106
        if(anotherInstance instanceof CourseUnitImpl)
107
        {
108
            CourseUnitImpl anCourseUnit = (CourseUnitImpl) anotherInstance;
1312 jmachado 109
            if(turmasSeparadas)
110
            {
111
                boolean turmaVazia = getCdTurma() == null || getCdTurma().trim().length() == 0;
112
                boolean anotherTurmaVazia = anCourseUnit.getCdTurma() == null || anCourseUnit.getCdTurma().trim().length() == 0;
113
                boolean turmasIguais = (turmaVazia && anotherTurmaVazia) || (!turmaVazia && !anotherTurmaVazia && getCdTurma().equals(anCourseUnit.getCdTurma()));
114
                return equalsIgnoringTurma(anotherInstance)
115
                &&
116
                turmasIguais;
117
            }
118
            else
119
                return equalsIgnoringTurma(anotherInstance);
251 jmachado 120
        }
121
        return false;
122
 
123
    }
489 jmachado 124
 
1204 jmachado 125
    public boolean equalsIgnoringTurma(5+0%2Fdocs%2Fapi+Object">Object anotherInstance)
126
    {
127
        if(anotherInstance instanceof CourseUnitImpl)
128
        {
129
            CourseUnitImpl anCourseUnit = (CourseUnitImpl) anotherInstance;
130
 
131
            return anCourseUnit.getCode() != null && getCode() != null && getCode().equals(anCourseUnit.getCode()) &&
132
                    anCourseUnit.getCourseCode() != null && getCourseCode() != null && getCourseCode().equals(anCourseUnit.getCourseCode()) &&
133
                    anCourseUnit.getSemestre() != null && getSemestre() != null && getSemestre().equals(anCourseUnit.getSemestre()) &&
134
                    anCourseUnit.getImportYear() != null && getImportYear() != null && getImportYear().equals(anCourseUnit.getImportYear());
135
        }
136
        return false;
137
 
138
    }
139
 
973 jmachado 140
    /**
141
     * Means that is teacher os responsable teacher or from course commission
142
     * Only works in open transaction
143
     *
144
     * Needs Course and Responsable Teacher loaded
145
     */
146
    public boolean isFromCourseUnitCommission(UserSession userSession)
147
    {
148
        return userSession.getUser()!= null &&
149
                (((UserImpl) userSession.getUser()).isTeacherOfCourseUnit(getId(), true)
150
                        || (getResponsableTeacher() != null && getResponsableTeacher().getId() == userSession.getUser().getId())
151
                        || userSession.getUser().hasRole(getCourse().getValidationRole())
152
                );
153
    }
489 jmachado 154
 
1312 jmachado 155
    public boolean isFromCourseCommission(UserSession userSession)
156
    {
157
        return userSession.getUser()!= null &&
158
                userSession.getUser().hasRole(getCourse().getValidationRole());
159
    }
973 jmachado 160
 
1312 jmachado 161
 
995 jmachado 162
    public 1.5.0/docs/api/java/lang/String.html">String getSummariosPathIntranet()
163
    {
164
        return Globals.FTP_IONLINE_START_PATH + "/" + getPathIntranet() + "/" + Globals.INTRANET_DTP + "/" + Globals.INTRANET_DTP_Sumarios;
165
    }
973 jmachado 166
 
1148 jmachado 167
    public 1.5.0/docs/api/java/lang/String.html">String getInqueritosPedagogicosPathIntranet()
168
    {
169
        return Globals.FTP_IONLINE_START_PATH + getPathIntranet() + "/" + Globals.INTRANET_DTP + "/" + Globals.INTRANET_DTP_InqueritoPedagogico;
170
    }
171
 
172
 
995 jmachado 173
    public 1.5.0/docs/api/java/lang/String.html">String getSummariosPathFileIntranet()
174
    {
175
        return getSummariosPathIntranet() + "/" + getSummariosFileNameIntranet();
176
    }
177
 
178
    public 1.5.0/docs/api/java/lang/String.html">String getSummariosFileNameIntranet(){
179
        return getCode() + "_" + getNormalizedName() + "_sumarios.pdf";
180
    }
181
 
182
 
996 jmachado 183
    public 1.5.0/docs/api/java/lang/String.html">String getSigesUniqueIdentifiers()
184
    {
185
        return "SIGES:" + getCode() + ", COURSE: " + getCourseCode() +
1139 jmachado 186
                ", " + getSemestre() + " of " + getImportYear() + " - " + getName() + " Turma - " + getCdTurma();
996 jmachado 187
    }
188
 
1341 jmachado 189
    public int studentsSize()
190
    {
191
        if(getStudents() !=null)
192
            return getStudents().size();
193
        return 0;
194
    }
1312 jmachado 195
 
1341 jmachado 196
    public int studentsTurmaSize()
197
    {
198
        int countTotalStudentsTurmas = 0;
199
        if(getTurmas() == null)
200
            return 0;
201
        for(CourseUnitTurma turma: getTurmas())
202
        {
203
            if(turma.getStudents() != null)
204
                countTotalStudentsTurmas+=turma.getStudents().size();
205
        }
206
        return countTotalStudentsTurmas;
207
    }
208
 
209
 
1312 jmachado 210
    public boolean hasStudent(long studentId, boolean transaction)
211
    {
212
        Set<StudentImpl> students;
213
        if(transaction)
214
            students = getStudents();
215
        else
216
        {
217
            IServiceManager sm;
218
            try {
219
                sm = ServiceManager.getInstance();
220
                1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
221
                5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{getId()};
222
                students = (Set<StudentImpl>) sm.execute(null, "LoadCourseUnitStudents", args, names);
223
            } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
224
                logger.error(e,e);
225
                return false;
226
            }
227
        }
228
        if(students == null)
229
            return false;
230
        for(Student s: students)
231
        {
232
            if(s.getId() == studentId)
233
                return true;
234
        }
235
        return false;
236
    }
237
 
238
    public boolean hasTeacher(long teacherId, boolean transaction)
239
    {
240
        Set<TeacherImpl> teachers;
241
        if(transaction)
242
            teachers = getTeachers();
243
        else
244
        {
245
            IServiceManager sm;
246
            try {
247
                sm = ServiceManager.getInstance();
248
                1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
249
                5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{getId()};
250
                teachers = (Set<TeacherImpl>) sm.execute(null, "LoadCourseUnitTeachers", args, names);
251
            } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
252
                logger.error(e,e);
253
                return false;
254
            }
255
        }
256
        if(teachers == null)
257
            return false;
258
        for(Teacher t: teachers)
259
        {
260
            if(t.getId() == teacherId)
261
                return true;
262
        }
263
        return false;
264
    }
265
 
266
    public boolean isResponsibleTeacher(long teacherId, boolean transaction)
267
    {
268
        Teacher t;
269
        if(transaction)
270
            t = getResponsableTeacher();
271
        else
272
        {
273
            IServiceManager sm;
274
            try {
275
                sm = ServiceManager.getInstance();
276
                1.5.0/docs/api/java/lang/String.html">String[] names = new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
277
                5+0%2Fdocs%2Fapi+Object">Object[] args = new 5+0%2Fdocs%2Fapi+Object">Object[]{getId()};
278
                t = (Teacher) sm.execute(null, "LoadCourseUnitResponsibleTeacher", args, names);
279
            } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
280
                logger.error(e,e);
281
                return false;
282
            }
283
        }
284
        if(t == null)
285
            return false;
286
        if(t.getId() == teacherId)
287
            return true;
288
        return false;
289
    }
290
 
291
    SimpleClearanceRuledSupport clearanceRuledSupport = null;
292
 
293
    public SimpleClearanceRuledSupport getClearanceRuledSupport() {
294
        return clearanceRuledSupport;
295
    }
296
 
297
    public void setClearanceRuledSupport(SimpleClearanceRuledSupport clearanceRuledSupport) {
298
        this.clearanceRuledSupport = clearanceRuledSupport;
299
    }
300
 
301
    @1.5.0/docs/api/java/lang/Override.html">Override
302
    public boolean isClearanceInitialized(UserSessionImpl u) {
303
        return clearanceRuledSupport == null ? false :
304
         clearanceRuledSupport.isClearanceInitialized(u);
305
    }
306
 
307
    @1.5.0/docs/api/java/lang/Override.html">Override
308
    public boolean isClear(UserSessionImpl u, 1.5.0/docs/api/java/lang/String.html">String OP) {
309
 
310
        if(clearanceRuledSupport == null) return false;
311
        if(OP.startsWith("EVALUATION") && !OP.startsWith("EVALUATION_INFO")
312
                && clearanceRuledSupport.isClear(u,CourseUnitClearancesOperation.EVALUATION_ALL.name()))
313
            return true;
314
        return clearanceRuledSupport.isClear(u, OP);
315
    }
316
 
1326 jmachado 317
    @1.5.0/docs/api/java/lang/Override.html">Override
318
    public void initClearances(UserSessionImpl usession,boolean force)
319
    {
320
        CourseUnitImpl c = this;
321
        1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveYear();
322
        List<String> activeDegrees = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveDegrees();
323
        List<Long> activeCourseIds = DaoFactory.getConfigurationDaoImpl().getCourseUnitEvaluationActiveCourseIds();
324
 
325
        boolean isActiveYear = activeYear != null && c.getImportYear().equals(activeYear);
326
        boolean isActiveDegree = activeDegrees!=null && activeDegrees.contains(c.getCourse().getDegree());
327
        boolean isActiveCourseId = activeCourseIds!=null && activeCourseIds.contains(c.getCourse().getId());
328
 
329
        boolean activePeriod = (isActiveYear && (isActiveCourseId || isActiveDegree));
330
        boolean active = activePeriod || c.isEvaluationOpenByAdmin();
331
 
332
        boolean isComplete = c.getCourseUnitEvaluation() != null && c.getCourseUnitEvaluation().isTeacherComplete() && !c.getCourseUnitEvaluation().isClosed();
333
        boolean isClosed = c.getCourseUnitEvaluation() != null && c.getCourseUnitEvaluation().isClosed();
334
        boolean isEdit = !isClosed && !isComplete;
335
 
336
 
337
        SimpleClearanceRuledSupport s = new SimpleClearanceRuledSupport();
338
        s.setDirty();
339
 
340
        if(isEdit)
341
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_STATE_EDIT.name(),usession);
342
        else if(isComplete)
343
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_STATE_COMPLETE.name(),usession);
344
        else if(isClosed)
345
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_STATE_CLOSED.name(),usession);
346
 
347
        if(activePeriod)
348
        {
349
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_ACTIVE.name(),usession);
350
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_ACTIVE_REGULAR_PERIOD.name(),usession);
351
        }
352
        if(c.isEvaluationOpenByAdmin())
353
        {
354
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_ACTIVE.name(),usession);
355
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_ACTIVE_SPECIAL_ADMIN.name(),usession);
356
        }
357
 
358
 
359
        if(usession.getUser() != null && usession.getUser().isSuperuserOrAdmin()
360
                || usession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE))
361
        {
1353 jmachado 362
            s.addClearance(CourseUnitClearancesOperation.STATISTICS_CAN_VIEW.name(),usession);
1326 jmachado 363
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_ALL.name(),usession);
1365 jmachado 364
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_EDIT_PROGRAM.name(), usession);
1350 jmachado 365
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_CAN_VALIDATE.name(),usession);
366
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_TEACHER_PART.name(),usession);
367
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_COORDINATOR_PART.name(),usession);
1326 jmachado 368
        }
369
 
370
        if(usession.getUser() != null && usession.getUser() instanceof Teacher)
371
        {
1350 jmachado 372
            Teacher t = ((Teacher)(usession.getUser()));
1326 jmachado 373
            boolean teacher = ((Teacher)(usession.getUser())).isTeacherOfCourseUnit(c.getId(),true);
374
            boolean responsable = c.getResponsableTeacher()!=null && usession.getUser().getId() == c.getResponsableTeacher().getId();
1350 jmachado 375
            boolean isCoordinator = (c.getCourse().getCoordinator() != null && t.getId() == c.getCourse().getCoordinator().getId()) || (c.getCourse().getValidationRole() != null && t.hasRole(c.getCourse().getValidationRole()));
1326 jmachado 376
            if(teacher)
1350 jmachado 377
            {
1326 jmachado 378
                s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_USER_TEACHER.name(), usession);
1350 jmachado 379
            }
1326 jmachado 380
            if(responsable)
1350 jmachado 381
            {
1326 jmachado 382
                s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_USER_RESP_TEACHER.name(), usession);
1350 jmachado 383
            }
1326 jmachado 384
            if(teacher || responsable)
385
            {
1353 jmachado 386
                s.addClearance(CourseUnitClearancesOperation.STATISTICS_CAN_VIEW.name(),usession);
1326 jmachado 387
                //s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_USER_TEACHER.name(), usession);
388
                s.addClearance(CourseUnitClearancesOperation.EVALUATION_EDITION.name(),usession);
389
                if(active && isEdit)
390
                {
391
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_EDITSAVE.name(),usession);
392
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_PERSIST_TEACHER_PART.name(),usession);
393
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_COMPLETE.name(),usession);
394
                }
395
            }
396
 
1350 jmachado 397
            if(isCoordinator)
1326 jmachado 398
            {
1353 jmachado 399
                s.addClearance(CourseUnitClearancesOperation.STATISTICS_CAN_VIEW.name(),usession);
1350 jmachado 400
                s.addClearance(CourseUnitClearancesOperation.PROGRAM_CAN_VALIDATE.name(),usession);
401
                s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_USER_COMMISSION.name(), usession);
402
                s.addClearance(CourseUnitClearancesOperation.EVALUATION_EDITION.name(), usession);
403
                if(active && isEdit)
404
                {
405
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_EDITSAVE.name(),usession);
406
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_PERSIST_TEACHER_PART.name(),usession);
407
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_PERSIST_COMISSION_PART.name(),usession);
408
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_COMPLETE.name(),usession);
409
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_CLOSE.name(),usession);
410
                }
411
                else if(active && isComplete)
412
                {
413
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_EDITSAVE.name(),usession);
414
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_PERSIST_TEACHER_PART.name(),usession);
415
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_PERSIST_COMISSION_PART.name(),usession);
416
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_CLOSE.name(),usession);
417
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_EDIT.name(),usession);
418
                }
419
                else if(active && isClosed)
420
                {
421
                    s.addClearance(CourseUnitClearancesOperation.EVALUATION_TRANSITATE_TO_EDIT.name(),usession);
422
                }
1326 jmachado 423
            }
1350 jmachado 424
 
425
 
426
            if(!c.isValidProgram())
1326 jmachado 427
            {
1350 jmachado 428
                if(teacher)
1365 jmachado 429
                {
430
                    s.addClearance(CourseUnitClearancesOperation.PROGRAM_EDIT_PROGRAM.name(), usession);
1350 jmachado 431
                    s.addClearance(CourseUnitClearancesOperation.PROGRAM_TEACHER_PART.name(), usession);
1365 jmachado 432
                }
1350 jmachado 433
                if(isCoordinator)
434
                {
1365 jmachado 435
                    s.addClearance(CourseUnitClearancesOperation.PROGRAM_EDIT_PROGRAM.name(), usession);
1350 jmachado 436
                    s.addClearance(CourseUnitClearancesOperation.PROGRAM_TEACHER_PART.name(), usession);
437
                    s.addClearance(CourseUnitClearancesOperation.PROGRAM_COORDINATOR_PART.name(), usession);
438
                }
1326 jmachado 439
            }
1350 jmachado 440
            else
1326 jmachado 441
            {
1350 jmachado 442
                s.addClearance(CourseUnitClearancesOperation.PROGRAM_INFO_VALID_NOT_ACTIVE.name(), usession);
1326 jmachado 443
            }
1350 jmachado 444
 
1326 jmachado 445
        }
1350 jmachado 446
 
1326 jmachado 447
        c.setClearanceRuledSupport(s);
448
    }
449
 
1312 jmachado 450
    public static enum CourseUnitClearancesOperation
451
    {
452
        EVALUATION_ALL, //SPECIAL OPERATION FOR DENY AND PERMIT REPLACE FULL CONTROL
453
 
454
        //COURSE UNIT EVALUATION
455
        EVALUATION_PERSIST_TEACHER_PART, //SERVICE PERSIST THIS PART
456
        EVALUATION_PERSIST_COMISSION_PART, //SERVICE PERSIST THIS PART
457
 
458
        EVALUATION_EDITION, //CAN SEE EDITION SCREEN
459
        EVALUATION_EDITSAVE, //CAN PRESS SAVE
460
        EVALUATION_TRANSITATE_TO_COMPLETE, //CAN_TRANSITATE
461
        EVALUATION_TRANSITATE_TO_CLOSE, //CAN CLOSE
462
        EVALUATION_TRANSITATE_TO_EDIT, //CAN REVERT
463
 
464
        EVALUATION_INFO_ACTIVE, //INFO CLEARANCE WHEN ACTIVE
465
        EVALUATION_INFO_ACTIVE_SPECIAL_ADMIN, //INFO CLEARANCE REASON OF BEING ACTIVE
466
        EVALUATION_INFO_ACTIVE_REGULAR_PERIOD, //INFO CLEARANCE REASON OF BEING ACTIVE
467
 
468
        EVALUATION_INFO_STATE_EDIT, //INFO CLEARANCE
469
        EVALUATION_INFO_STATE_COMPLETE, //INFO CLEARANCE
470
        EVALUATION_INFO_STATE_CLOSED, //INFO CLEARANCE
471
 
472
        EVALUATION_INFO_USER_TEACHER, //INFO CLEARANCE
473
        EVALUATION_INFO_USER_RESP_TEACHER, //INFO CLEARANCE
474
        EVALUATION_INFO_USER_COMMISSION, //INFO CLEARANCE
475
 
1350 jmachado 476
 
1365 jmachado 477
        PROGRAM_EDIT_PROGRAM,
1350 jmachado 478
        PROGRAM_COORDINATOR_PART,
479
        PROGRAM_TEACHER_PART,
1365 jmachado 480
 
1350 jmachado 481
        PROGRAM_CAN_VALIDATE,
1353 jmachado 482
        PROGRAM_INFO_VALID_NOT_ACTIVE,
1350 jmachado 483
 
1353 jmachado 484
        STATISTICS_CAN_VIEW,
485
 
486
 
1312 jmachado 487
        ;
488
 
489
        public static CourseUnitClearancesOperation parse(1.5.0/docs/api/java/lang/String.html">String clearance)
490
        {
491
            if(clearance == null)
492
                return null;
493
            for(CourseUnitClearancesOperation op: CourseUnitClearancesOperation.values())
494
            {
495
                if(op.name().equals(clearance))
496
                    return op;
497
            }
498
            return null;
499
        }
500
    }
501
 
502
 
503
    public Tipologias getTipologiasClass() throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
504
    {
505
        return Tipologias.deserialize(getTipologias());
506
    }
507
 
508
    public void setTipologiasClass(Tipologias tipologias) throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
509
    {
510
        if(tipologias != null)
511
            setTipologias(tipologias.serialize());
512
    }
513
 
1406 jmachado 514
    public static class TipologiaLoadExeption extends 1.5.0/docs/api/java/lang/Exception.html">Exception
1313 jmachado 515
    {
1406 jmachado 516
        boolean teacherFail = false;
517
        boolean turmaFail = false;
518
 
519
        public TipologiaLoadExeption(boolean teacherFail, boolean turmaFail) {
520
            this.teacherFail = teacherFail;
521
            this.turmaFail = turmaFail;
522
        }
523
 
524
        public boolean isTeacherFail() {
525
            return teacherFail;
526
        }
527
 
528
        public boolean isTurmaFail() {
529
            return turmaFail;
530
        }
531
 
532
        @1.5.0/docs/api/java/lang/Override.html">Override
533
        public 1.5.0/docs/api/java/lang/String.html">String getMessage() {
534
            return "Professor: " + (teacherFail? "Falhou" : "OK") + " Turma: " + (turmaFail? "Falhou" : "OK");
535
        }
536
    }
537
    /**
538
     *
539
     * @param myTipo
540
     * @return
541
     */
542
    public TipologiaPersistent loadPersistent(Tipologia myTipo) throws TipologiaLoadExeption
543
    {
1313 jmachado 544
        TipologiaPersistent tipologiaPersistent = new TipologiaPersistent();
545
        tipologiaPersistent.setHorRef(myTipo.isHorRef());
546
        tipologiaPersistent.setExtra(myTipo.isExtra());
547
        tipologiaPersistent.setTeacher(DaoFactory.getTeacherDaoImpl().loadBySigesCode(1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(myTipo.getCdDocente())));
548
        tipologiaPersistent.setCdTipologia(myTipo.getCdTipologia());
549
        tipologiaPersistent.setOcorrencias(myTipo.getOcorrencias());
1326 jmachado 550
        tipologiaPersistent.setMarkWarning(myTipo.isMarkWarning());
551
        tipologiaPersistent.setUse(myTipo.isUse());
1313 jmachado 552
 
553
        tipologiaPersistent.setCourseUnitTurma(findTurma(myTipo.getCdTurma()));
554
        if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null)
555
        {
1338 jmachado 556
            logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.getCdTurma() + " teacher code: " + myTipo.getCdDocente());
1406 jmachado 557
            throw new TipologiaLoadExeption(tipologiaPersistent.getTeacher() == null,tipologiaPersistent.getCourseUnitTurma() == null);
1313 jmachado 558
        }
559
        return tipologiaPersistent;
560
    }
561
 
562
    public CourseUnitTurma findTurma(1.5.0/docs/api/java/lang/String.html">String turma)
563
    {
564
        if(getTurmas() == null)
565
            return null;
566
        for(CourseUnitTurma t: getTurmas())
567
        {
568
            if(t.getTurma().equals(turma))
569
                return t;
570
        }
571
        return null;
572
    }
573
 
574
 
575
    public static class TipologiaPersistent
576
    {
577
        private Teacher teacher;
578
        private CourseUnitTurma courseUnitTurma;
579
        private 1.5.0/docs/api/java/lang/String.html">String cdTipologia;
580
        private 1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias = 0;
581
        protected boolean extra;
582
        protected boolean horRef;
1326 jmachado 583
        protected boolean use;   //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
584
        //por omissão apenas as que têm sumários
585
        protected boolean markWarning; //camp
1313 jmachado 586
 
1326 jmachado 587
        public boolean isUse() {
588
            return use;
589
        }
590
 
591
        public void setUse(boolean use) {
592
            this.use = use;
593
        }
594
 
595
        public boolean isMarkWarning() {
596
            return markWarning;
597
        }
598
 
599
        public void setMarkWarning(boolean markWarning) {
600
            this.markWarning = markWarning;
601
        }
602
 
1313 jmachado 603
        public boolean isExtra() {
604
            return extra;
605
        }
606
 
607
        public boolean isHorRef() {
608
            return horRef;
609
        }
610
 
611
        public boolean isSumario() {
612
            return ocorrencias != null && ocorrencias > 0;
613
        }
614
 
615
        public void setExtra(boolean extra) {
616
            this.extra = extra;
617
        }
618
 
619
        public void setHorRef(boolean horRef) {
620
            this.horRef = horRef;
621
        }
622
 
623
        public Teacher getTeacher() {
624
            return teacher;
625
        }
626
 
627
        public void setTeacher(Teacher teacher) {
628
            this.teacher = teacher;
629
        }
630
 
631
        public CourseUnitTurma getCourseUnitTurma() {
632
            return courseUnitTurma;
633
        }
634
 
635
        public void setCourseUnitTurma(CourseUnitTurma courseUnitTurma) {
636
            this.courseUnitTurma = courseUnitTurma;
637
        }
638
 
639
        public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia() {
640
            return cdTipologia;
641
        }
642
 
643
        public void setCdTipologia(1.5.0/docs/api/java/lang/String.html">String cdTipologia) {
644
            this.cdTipologia = cdTipologia;
645
        }
646
 
647
        public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias() {
1338 jmachado 648
            return ocorrencias == null ? 0:ocorrencias;
1313 jmachado 649
        }
650
 
651
        public void setOcorrencias(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias) {
652
            this.ocorrencias = ocorrencias;
653
        }
654
    }
1312 jmachado 655
    /**
656
     * Os codigos de tipologia devem ser limitados a T TP OT etc
657
     */
658
    public static class Tipologia
659
    {
1313 jmachado 660
        protected 1.5.0/docs/api/java/lang/String.html">String cdDocente;
661
        protected 1.5.0/docs/api/java/lang/String.html">String cdTurma;
662
        protected 1.5.0/docs/api/java/lang/String.html">String cdTipologia;
663
        protected 1.5.0/docs/api/java/lang/String.html">String dsTipologia;
1338 jmachado 664
        protected 1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias = 0; // apenas faz sentido nos sumarios. no horario ref nao.
1312 jmachado 665
 
1325 jmachado 666
        protected boolean use;   //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
667
                                //por omissão apenas as que têm sumários
668
        protected boolean markWarning; //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
669
 
1313 jmachado 670
        protected boolean extra;
671
        protected boolean horRef;
672
 
1325 jmachado 673
        public boolean isUse() {
674
            return use;
675
        }
676
 
677
        public void setUse(boolean use) {
678
            this.use = use;
679
        }
680
 
681
        public boolean isMarkWarning() {
682
            return markWarning;
683
        }
684
 
685
        public void setMarkWarning(boolean markWarning) {
686
            this.markWarning = markWarning;
687
        }
688
 
1312 jmachado 689
        public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias() {
1338 jmachado 690
            return ocorrencias == null ? 0:ocorrencias;
1312 jmachado 691
        }
692
 
1338 jmachado 693
        public boolean hasOcorrencias() {
694
            return ocorrencias != null && ocorrencias > 0;
695
        }
696
 
1312 jmachado 697
        public void setOcorrencias(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias) {
698
            this.ocorrencias = ocorrencias;
699
        }
700
 
701
        public 1.5.0/docs/api/java/lang/String.html">String getCdDocente() {
702
            return cdDocente;
703
        }
704
 
705
        public void setCdDocente(1.5.0/docs/api/java/lang/String.html">String cdDocente) {
706
            this.cdDocente = cdDocente;
707
        }
708
 
709
        public 1.5.0/docs/api/java/lang/String.html">String getCdTurma() {
710
            return cdTurma;
711
        }
712
 
713
        public void setCdTurma(1.5.0/docs/api/java/lang/String.html">String cdTurma) {
714
            this.cdTurma = cdTurma;
715
        }
716
 
717
        public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia() {
718
            return cdTipologia;
719
        }
720
 
721
        public void setCdTipologia(1.5.0/docs/api/java/lang/String.html">String cdTipologia) {
722
            this.cdTipologia = cdTipologia;
723
        }
724
 
1313 jmachado 725
        public 1.5.0/docs/api/java/lang/String.html">String getDsTipologia() {
726
            return dsTipologia;
727
        }
728
 
729
        public void setDsTipologia(1.5.0/docs/api/java/lang/String.html">String dsTipologia) {
730
            this.dsTipologia = dsTipologia;
731
        }
732
 
733
        public boolean isExtra() {
734
            return extra;
735
        }
736
 
737
        public boolean isSumario() {
738
            return ocorrencias != null && ocorrencias > 0;
739
        }
740
 
741
        public boolean isHorRef() {
742
            return horRef;
743
        }
744
 
745
 
746
 
1312 jmachado 747
        @1.5.0/docs/api/java/lang/Override.html">Override
748
        public boolean equals(5+0%2Fdocs%2Fapi+Object">Object o)
749
        {
750
            return o instanceof Tipologia &&
751
                    ((((Tipologia)o).getCdTurma() == null && getCdTurma() == null)
752
                            ||
753
                     (((Tipologia)o).getCdTurma().equals(getCdTurma())))
754
                    &&
755
 
756
                    (
757
                     (((Tipologia)o).getCdDocente() == null && getCdDocente() == null)
758
                            ||
759
                     (((Tipologia)o).getCdDocente().equals(getCdDocente())))
760
                    &&
761
 
762
                    (
763
                     (((Tipologia)o).getCdTipologia() == null && getCdTipologia() == null)
764
                                    ||
765
                     (((Tipologia)o).getCdTipologia().equals(getCdTipologia())));
766
        }
1313 jmachado 767
 
768
        public boolean equalsIncDsFields(5+0%2Fdocs%2Fapi+Object">Object o)
769
        {
770
            return o instanceof Tipologia &&
771
                    equals(o)
772
                    &&
773
                    (
774
                            (((Tipologia)o).getDsTipologia() == null && getDsTipologia() == null)
775
                                    ||
776
                                    (((Tipologia)o).getDsTipologia().equals(getDsTipologia())))
777
                    &&
778
 
779
                    (
780
                            (((Tipologia)o).getOcorrencias() == null && getOcorrencias() == null)
781
                                    ||
782
                                    (((Tipologia)o).getOcorrencias().equals(getOcorrencias())))
783
                    ;
784
        }
1312 jmachado 785
    }
786
 
1326 jmachado 787
    public static class MergedTipologias
788
    {
789
        ArrayList<Tipologia> tipologiasWithMarkedAndUsed = new ArrayList<Tipologia>();
790
 
791
        public ArrayList<Tipologia> getTipologiasWithMarkedAndUsed() {
792
            return tipologiasWithMarkedAndUsed;
793
        }
794
 
795
        public void setTipologiasWithMarkedAndUsed(ArrayList<Tipologia> tipologiasWithMarkedAndUsed) {
796
            this.tipologiasWithMarkedAndUsed = tipologiasWithMarkedAndUsed;
797
        }
798
    }
1312 jmachado 799
    public static class Tipologias
800
    {
1313 jmachado 801
        ArrayList<Tipologia> tipologiasHorarioReferencia = new ArrayList<Tipologia>();
802
        ArrayList<Tipologia> tipologiasSumarios = new ArrayList<Tipologia>();
803
        ArrayList<Tipologia> tipologiasExtraAdicionadas = new ArrayList<Tipologia>();
1326 jmachado 804
        ArrayList<Tipologia> tipologiasUsadas = new ArrayList<Tipologia>();
805
        ArrayList<Tipologia> tipologiasMarcadas = new ArrayList<Tipologia>();
1312 jmachado 806
 
807
        public ArrayList<Tipologia> getTipologiasHorarioReferencia() {
1333 jmachado 808
 
809
            return tipologiasHorarioReferencia == null ? new ArrayList<Tipologia>() : tipologiasHorarioReferencia;
810
 
1312 jmachado 811
        }
812
 
813
        public void setTipologiasHorarioReferencia(ArrayList<Tipologia> tipologiasHorarioReferencia) {
814
            this.tipologiasHorarioReferencia = tipologiasHorarioReferencia;
815
        }
816
 
817
        public ArrayList<Tipologia> getTipologiasSumarios() {
1333 jmachado 818
            return tipologiasSumarios == null ? new ArrayList<Tipologia>() : tipologiasSumarios;
1312 jmachado 819
        }
820
 
821
        public void setTipologiasSumarios(ArrayList<Tipologia> tipologiasSumarios) {
822
            this.tipologiasSumarios = tipologiasSumarios;
823
        }
824
 
825
        public ArrayList<Tipologia> getTipologiasExtraAdicionadas() {
1333 jmachado 826
            return tipologiasExtraAdicionadas == null ? new ArrayList<Tipologia>() : tipologiasExtraAdicionadas;
1312 jmachado 827
        }
828
 
829
        public void setTipologiasExtraAdicionadas(ArrayList<Tipologia> tipologiasExtraAdicionadas) {
830
            this.tipologiasExtraAdicionadas = tipologiasExtraAdicionadas;
831
        }
832
 
1333 jmachado 833
        public ArrayList<Tipologia> getTipologiasUsadas() {
834
            return tipologiasUsadas == null ? new ArrayList<Tipologia>() : tipologiasUsadas;
835
        }
1326 jmachado 836
 
837
        public void setTipologiasUsadas(ArrayList<Tipologia> tipologiasUsadas) { this.tipologiasUsadas = tipologiasUsadas; }
838
 
1333 jmachado 839
        public ArrayList<Tipologia> getTipologiasMarcadas() {
840
            return tipologiasMarcadas == null ? new ArrayList<Tipologia>() : tipologiasMarcadas;
841
        }
1326 jmachado 842
 
843
        public void setTipologiasMarcadas(ArrayList<Tipologia> tipologiasMarcadas) { this.tipologiasMarcadas = tipologiasMarcadas; }
844
 
1312 jmachado 845
        private static Genson getGenson(){
846
            Genson genson = new Genson.Builder()
847
                    .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
848
                    .include("tipologiasExtraAdicionadas", Tipologias.class)
849
                    .include("tipologiasSumarios", Tipologias.class)
850
                    .include("tipologiasHorarioReferencia", Tipologias.class)
1326 jmachado 851
                    .include("tipologiasUsadas", Tipologias.class)
852
                    .include("tipologiasMarcadas", Tipologias.class)
1312 jmachado 853
                    .include("cdTipologia", Tipologia.class)
854
                    .include("cdDocente", Tipologia.class)
855
                    .include("cdTurma", Tipologia.class)
1313 jmachado 856
                    .include("dsTipologia",Tipologia.class)
1312 jmachado 857
                    .include("ocorrencias", Tipologia.class)
858
                    .create();
859
            return genson;
860
        }
861
 
1326 jmachado 862
        private static Genson getGensonMergedTipologiasComplete(){
863
            Genson genson = new Genson.Builder()
864
                    .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
865
 
866
                    .include("tipologiasWithMarkedAndUsed", MergedTipologias.class)
867
                    .include("cdTipologia", Tipologia.class)
868
                    .include("cdDocente", Tipologia.class)
869
                    .include("cdTurma", Tipologia.class)
870
                    .include("dsTipologia",Tipologia.class)
871
                    .include("ocorrencias", Tipologia.class)
872
                    .include("horRef", Tipologia.class)
873
                    .include("extra", Tipologia.class)
874
                    .include("use", Tipologia.class)
875
                    .include("markWarning", Tipologia.class)
876
                    .create();
877
            return genson;
878
        }
879
 
1312 jmachado 880
        public 1.5.0/docs/api/java/lang/String.html">String serialize() throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
881
        {
882
            Genson genson = getGenson();
883
            try {
884
                return genson.serialize(this);
885
            } catch (TransformationException e) {
886
                throw e;
887
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
888
                throw e;
889
            }
890
        }
891
        public static Tipologias deserialize(1.5.0/docs/api/java/lang/String.html">String serial) throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
892
        {
893
            if(serial == null)
1333 jmachado 894
                return new Tipologias();
1312 jmachado 895
            try {
896
                return getGenson().deserialize(serial, Tipologias.class);
897
            } catch (TransformationException e) {
898
                throw e;
899
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
900
                throw e;
901
            }
902
        }
903
 
904
        public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
905
        {
906
            new TestCourseUnit().testTipologias();
907
        }
1313 jmachado 908
 
1326 jmachado 909
        public static 1.5.0/docs/api/java/lang/String.html">String serializeMergedList(ArrayList<Tipologia> tipologias) throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
1313 jmachado 910
        {
1326 jmachado 911
            MergedTipologias mergedTipologias = new MergedTipologias();
1333 jmachado 912
            if(tipologias != null)
913
            {
914
                mergedTipologias.setTipologiasWithMarkedAndUsed(tipologias);
915
            }
1326 jmachado 916
            Genson genson = getGensonMergedTipologiasComplete();
917
            try {
918
                return genson.serialize(mergedTipologias);
919
            } catch (TransformationException e) {
920
                throw e;
921
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
922
                throw e;
923
            }
924
        }
925
        public static ArrayList<Tipologia> deserializeMergedTipologias(1.5.0/docs/api/java/lang/String.html">String serial) throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
926
        {
927
            if(serial == null)
1333 jmachado 928
                return new ArrayList<Tipologia>();
1326 jmachado 929
            try {
930
                MergedTipologias mergedTipologias = getGensonMergedTipologiasComplete().deserialize(serial, MergedTipologias.class);
931
                if(mergedTipologias.getTipologiasWithMarkedAndUsed() == null)
932
                    return new ArrayList<Tipologia>();
933
                return mergedTipologias.getTipologiasWithMarkedAndUsed();
934
            } catch (TransformationException e) {
935
                throw e;
936
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
937
                throw e;
938
            }
939
        }
1332 jmachado 940
        public 1.5.0/docs/api/java/lang/String.html">String obtainMergeTipologiasSerialized() throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
941
        {
942
            return serializeMergedList(obtainMergeTipologias());
943
        }
1337 jmachado 944
 
1387 jmachado 945
 
946
        /**
947
         * Junta todas as tipologias obtidas dos sumarios, horario(ref+trab) + extra
948
         * e coloca todas numa lista de unicas
949
         * Marca-as com isHorario, isSumario, isExtra
950
         * @return
951
         */
952
 
1326 jmachado 953
        public ArrayList<Tipologia> obtainMergeTipologias()
954
        {
955
            ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
1315 jmachado 956
            if(getTipologiasSumarios() != null)
957
                merge.addAll(getTipologiasSumarios());
1313 jmachado 958
 
1315 jmachado 959
            if(getTipologiasHorarioReferencia() != null)
960
                for(Tipologia tipo: getTipologiasHorarioReferencia())
1313 jmachado 961
                {
1315 jmachado 962
                    if(!merge.contains(tipo))
963
                    {
964
                        merge.add(tipo);
965
                    }
1313 jmachado 966
                }
1315 jmachado 967
            if(getTipologiasExtraAdicionadas() != null)
968
                for(Tipologia tipo: getTipologiasExtraAdicionadas())
1313 jmachado 969
                {
1315 jmachado 970
                    if(!merge.contains(tipo))
971
                    {
972
                        merge.add(tipo);
973
                    }
1313 jmachado 974
                }
975
            for(Tipologia tipo: merge)
976
            {
1326 jmachado 977
                tipo.setMarkWarning(false);
978
                tipo.setUse(false);
1315 jmachado 979
                if(getTipologiasHorarioReferencia() != null && getTipologiasHorarioReferencia().contains(tipo))
1313 jmachado 980
                {
981
                    tipo.horRef = true;
982
                }
983
 
1315 jmachado 984
                if(getTipologiasExtraAdicionadas() != null && getTipologiasExtraAdicionadas().contains(tipo))
1313 jmachado 985
                {
986
                    tipo.extra = true;
987
                }
988
            }
1326 jmachado 989
 
990
            if(getTipologiasMarcadas() != null)
991
                for(Tipologia t: getTipologiasMarcadas())
992
                {
993
                    for(Tipologia tMerge: merge)
994
                    {
995
                        if(tMerge.equals(t))
996
                        {
997
                            tMerge.setMarkWarning(true);
998
                            break;
999
                        }
1000
                    }
1001
                }
1002
            if(getTipologiasUsadas() != null)
1003
                for(Tipologia t: getTipologiasUsadas())
1004
                {
1005
                    for(Tipologia tMerge: merge)
1006
                    {
1007
                        if(tMerge.equals(t))
1008
                        {
1009
                            tMerge.setUse(true);
1010
                            break;
1011
                        }
1012
                    }
1013
                }
1313 jmachado 1014
            return merge;
1015
        }
1016
 
1387 jmachado 1017
        /**
1018
         *
1019
         *
1020
         * @param courseUnit
1021
         * @return
1022
         */
1337 jmachado 1023
        public ArrayList<Tipologia> obtainTipologiasSimples(CourseUnit courseUnit)
1024
        {
1025
            ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
1026
 
1027
            Map<String,Map<String,Tipologia>> docenteTurmas = new HashMap<String,Map<String,Tipologia>>();
1028
 
1029
            fullfillTipologiasSimples(getTipologiasSumarios(), docenteTurmas);
1030
            fullfillTipologiasSimples(getTipologiasExtraAdicionadas(), docenteTurmas);
1031
            fullfillTipologiasSimples(getTipologiasHorarioReferencia(), docenteTurmas);
1032
            fullfillTipologiasSimples(getTipologiasMarcadas(), docenteTurmas);
1033
            fullfillTipologiasSimples(getTipologiasUsadas(), docenteTurmas);
1034
 
1035
 
1036
            if(docenteTurmas.size() == 0)
1037
            {
1038
                //NAO Há sumários vamos associar todos os docentes a todas as turmas
1039
                if(courseUnit.getTurmas() != null && courseUnit.getTeachers() != null)
1040
                {
1041
                    for(CourseUnitTurma turma: courseUnit.getTurmas())
1042
                    {
1043
                        for(Teacher t : courseUnit.getTeachers())
1044
                        {
1045
                            Tipologia simples = new Tipologia();
1046
                            simples.setMarkWarning(true);
1387 jmachado 1047
                            //simples.setUse(true);
1337 jmachado 1048
                            simples.setCdDocente(""+t.getSigesCode());
1049
                            simples.setCdTurma(turma.getTurma());
1050
                            simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
1051
                            simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
1052
                            merge.add(simples);
1053
                        }
1054
                    }
1055
                }
1056
            }
1057
            else
1058
            {
1059
                for(1.5.0/docs/api/java/util/Map.html">Map.Entry<String,Map<String,Tipologia>> docentes: docenteTurmas.entrySet())
1060
                {
1061
                    for(Tipologia tipologia: docentes.getValue().values())
1062
                    {
1063
                        merge.add(tipologia);
1064
                    }
1065
                }
1066
            }
1067
            return merge;
1068
        }
1069
 
1387 jmachado 1070
        /**
1071
         * Cria uma tipologia Simples para cada par Docente-Turma nesta cadeira olhando para
1072
         * todas as tipologias existentes, uma vez que o Baco não guarda associações entre
1073
         * Docentes e Turmas isso será retirado das tipologias importadas
1074
         *
1075
         * @param tipologias
1076
         * @param docenteTurmas
1077
         */
1337 jmachado 1078
        private void fullfillTipologiasSimples(ArrayList<Tipologia> tipologias, Map<String, Map<String, Tipologia>> docenteTurmas) {
1079
            if(tipologias != null)
1080
                for(Tipologia tipo: tipologias)
1081
                {
1082
                    Map<String,Tipologia> turmasDocente = docenteTurmas.get(tipo.getCdDocente());
1083
                    if(turmasDocente == null)
1084
                        turmasDocente = new HashMap<String,Tipologia>();
1085
                    docenteTurmas.put(tipo.getCdDocente(),turmasDocente);
1086
                    Tipologia simples = turmasDocente.get(tipo.getCdTurma());
1087
                    if(simples==null)
1088
                    {
1089
                        simples = new Tipologia();
1090
                        simples.setCdDocente(tipo.getCdDocente());
1091
                        simples.setCdTurma(tipo.getCdTurma());
1092
                        simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
1093
                        simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
1387 jmachado 1094
                        //simples.setUse(true);//TODAS USADAS
1338 jmachado 1095
                        if(tipo.hasOcorrencias())
1337 jmachado 1096
                        {
1097
                            simples.setOcorrencias(tipo.getOcorrencias());
1098
                        }
1099
                        turmasDocente.put(tipo.getCdTurma(),simples);
1100
                    }
1387 jmachado 1101
                    else if(tipo.hasOcorrencias())
1337 jmachado 1102
                    {
1338 jmachado 1103
                        if(simples.getOcorrencias() == null)
1104
                            simples.setOcorrencias(0);
1337 jmachado 1105
                        simples.setOcorrencias(simples.getOcorrencias()+tipo.getOcorrencias());
1106
                    }
1107
 
1108
                }
1109
        }
1110
 
1111
 
1312 jmachado 1112
    }
1113
 
1114
 
1115
 
1116
 
1117
 
112 jmachado 1118
}