Subversion Repositories bacoAlunos

Rev

Rev 1623 | Rev 1627 | 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())
1585 jmachado 151
                        || ((CourseImpl)getCourse()).isFromCourseCommission(userSession)
973 jmachado 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
 
1554 jmachado 359
        if(usession.getUser() != null && (usession.getUser().isSuperuserOrAdmin() || usession.getUser().hasRole(Globals.SERVICES_PROGRAMS_ROLE)))
1326 jmachado 360
        {
1353 jmachado 361
            s.addClearance(CourseUnitClearancesOperation.STATISTICS_CAN_VIEW.name(),usession);
1326 jmachado 362
            s.addClearance(CourseUnitClearancesOperation.EVALUATION_ALL.name(),usession);
1365 jmachado 363
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_EDIT_PROGRAM.name(), usession);
1350 jmachado 364
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_CAN_VALIDATE.name(),usession);
365
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_TEACHER_PART.name(),usession);
366
            s.addClearance(CourseUnitClearancesOperation.PROGRAM_COORDINATOR_PART.name(),usession);
1326 jmachado 367
        }
368
 
369
        if(usession.getUser() != null && usession.getUser() instanceof Teacher)
370
        {
1350 jmachado 371
            Teacher t = ((Teacher)(usession.getUser()));
1326 jmachado 372
            boolean teacher = ((Teacher)(usession.getUser())).isTeacherOfCourseUnit(c.getId(),true);
373
            boolean responsable = c.getResponsableTeacher()!=null && usession.getUser().getId() == c.getResponsableTeacher().getId();
1585 jmachado 374
            boolean isCoordinator = ((CourseImpl) DaoFactory.getCourseDaoImpl().narrow(c.getCourse())).isFromCourseCommission(t);
375
 
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();
1626 jmachado 545
        tipologiaPersistent.tipologiaOriginal = myTipo;
1313 jmachado 546
        tipologiaPersistent.setTeacher(DaoFactory.getTeacherDaoImpl().loadBySigesCode(1.5.0/docs/api/java/lang/Integer.html">Integer.parseInt(myTipo.getCdDocente())));
547
        tipologiaPersistent.setCourseUnitTurma(findTurma(myTipo.getCdTurma()));
548
        if(tipologiaPersistent.getCourseUnitTurma() == null || tipologiaPersistent.getTeacher() == null)
549
        {
1338 jmachado 550
            logger.error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.getCdTurma() + " teacher code: " + myTipo.getCdDocente());
1406 jmachado 551
            throw new TipologiaLoadExeption(tipologiaPersistent.getTeacher() == null,tipologiaPersistent.getCourseUnitTurma() == null);
1313 jmachado 552
        }
553
        return tipologiaPersistent;
554
    }
555
 
556
    public CourseUnitTurma findTurma(1.5.0/docs/api/java/lang/String.html">String turma)
557
    {
558
        if(getTurmas() == null)
559
            return null;
560
        for(CourseUnitTurma t: getTurmas())
561
        {
562
            if(t.getTurma().equals(turma))
563
                return t;
564
        }
565
        return null;
566
    }
567
 
568
 
569
    public static class TipologiaPersistent
570
    {
571
        private Teacher teacher;
572
        private CourseUnitTurma courseUnitTurma;
1626 jmachado 573
        Tipologia tipologiaOriginal;
574
 
575
        /*private String cdTipologia;
1313 jmachado 576
        private Integer ocorrencias = 0;
577
        protected boolean extra;
578
        protected boolean horRef;
1326 jmachado 579
        protected boolean use;   //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
580
        //por omissão apenas as que têm sumários
1626 jmachado 581
        protected boolean markWarning; //camp*/
1313 jmachado 582
 
1626 jmachado 583
 
1326 jmachado 584
        public boolean isUse() {
1626 jmachado 585
            return tipologiaOriginal.isUse();
1326 jmachado 586
        }
587
 
588
        public void setUse(boolean use) {
1626 jmachado 589
            tipologiaOriginal.use = use;
1326 jmachado 590
        }
591
 
592
        public boolean isMarkWarning() {
1626 jmachado 593
            return tipologiaOriginal.markWarning;
1326 jmachado 594
        }
595
 
596
        public void setMarkWarning(boolean markWarning) {
1626 jmachado 597
            tipologiaOriginal.markWarning = markWarning;
1326 jmachado 598
        }
599
 
1313 jmachado 600
        public boolean isExtra() {
1626 jmachado 601
            return tipologiaOriginal.extra;
1313 jmachado 602
        }
603
 
604
        public boolean isHorRef() {
1626 jmachado 605
            return tipologiaOriginal.horRef;
1313 jmachado 606
        }
607
 
608
        public boolean isSumario() {
1626 jmachado 609
            return tipologiaOriginal.ocorrencias != null && tipologiaOriginal.ocorrencias > 0;
1313 jmachado 610
        }
611
 
612
        public void setExtra(boolean extra) {
1626 jmachado 613
            tipologiaOriginal.extra = extra;
1313 jmachado 614
        }
615
 
616
        public void setHorRef(boolean horRef) {
1626 jmachado 617
            tipologiaOriginal.horRef = horRef;
1313 jmachado 618
        }
619
 
620
        public Teacher getTeacher() {
621
            return teacher;
622
        }
623
 
624
        public void setTeacher(Teacher teacher) {
625
            this.teacher = teacher;
626
        }
627
 
628
        public CourseUnitTurma getCourseUnitTurma() {
629
            return courseUnitTurma;
630
        }
631
 
632
        public void setCourseUnitTurma(CourseUnitTurma courseUnitTurma) {
633
            this.courseUnitTurma = courseUnitTurma;
634
        }
635
 
636
        public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia() {
1626 jmachado 637
            return tipologiaOriginal.cdTipologia;
1313 jmachado 638
        }
639
 
640
        public void setCdTipologia(1.5.0/docs/api/java/lang/String.html">String cdTipologia) {
1626 jmachado 641
            tipologiaOriginal.cdTipologia = cdTipologia;
1313 jmachado 642
        }
643
 
644
        public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias() {
1626 jmachado 645
            return tipologiaOriginal.ocorrencias == null ? 0:tipologiaOriginal.ocorrencias;
1313 jmachado 646
        }
647
 
648
        public void setOcorrencias(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias) {
1626 jmachado 649
            tipologiaOriginal.ocorrencias = ocorrencias;
1313 jmachado 650
        }
1626 jmachado 651
 
652
        public boolean isExclude() {
653
            return tipologiaOriginal.exclude;
654
        }
655
 
656
        public void setExclude(boolean exclude) {
657
            tipologiaOriginal.exclude = exclude;
658
        }
1313 jmachado 659
    }
1312 jmachado 660
    /**
661
     * Os codigos de tipologia devem ser limitados a T TP OT etc
662
     */
663
    public static class Tipologia
664
    {
1313 jmachado 665
        protected 1.5.0/docs/api/java/lang/String.html">String cdDocente;
666
        protected 1.5.0/docs/api/java/lang/String.html">String cdTurma;
667
        protected 1.5.0/docs/api/java/lang/String.html">String cdTipologia;
668
        protected 1.5.0/docs/api/java/lang/String.html">String dsTipologia;
1338 jmachado 669
        protected 1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias = 0; // apenas faz sentido nos sumarios. no horario ref nao.
1312 jmachado 670
 
1325 jmachado 671
        protected boolean use;   //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
672
                                //por omissão apenas as que têm sumários
673
        protected boolean markWarning; //campo auxiliar para marcar se vai ser ou não usada  nas afetacoes especificas
674
 
1313 jmachado 675
        protected boolean extra;
676
        protected boolean horRef;
1422 jmachado 677
        protected boolean tdocturma = false;
1313 jmachado 678
 
1626 jmachado 679
        //NOVO
680
        protected boolean exclude = false;
681
 
1422 jmachado 682
        public boolean isTdocturma() {
683
            return tdocturma;
684
        }
685
 
686
        public void setTdocturma(boolean tdocturma) {
687
            this.tdocturma = tdocturma;
688
        }
689
 
1325 jmachado 690
        public boolean isUse() {
691
            return use;
692
        }
693
 
1626 jmachado 694
        public boolean isExclude() {
695
            return exclude;
696
        }
697
 
698
        public void setExclude(boolean exclude) {
699
            this.exclude = exclude;
700
        }
701
 
1325 jmachado 702
        public void setUse(boolean use) {
703
            this.use = use;
704
        }
705
 
706
        public boolean isMarkWarning() {
707
            return markWarning;
708
        }
709
 
710
        public void setMarkWarning(boolean markWarning) {
711
            this.markWarning = markWarning;
712
        }
713
 
1312 jmachado 714
        public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias() {
1338 jmachado 715
            return ocorrencias == null ? 0:ocorrencias;
1312 jmachado 716
        }
717
 
1338 jmachado 718
        public boolean hasOcorrencias() {
719
            return ocorrencias != null && ocorrencias > 0;
720
        }
721
 
1312 jmachado 722
        public void setOcorrencias(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias) {
723
            this.ocorrencias = ocorrencias;
724
        }
725
 
726
        public 1.5.0/docs/api/java/lang/String.html">String getCdDocente() {
727
            return cdDocente;
728
        }
729
 
730
        public void setCdDocente(1.5.0/docs/api/java/lang/String.html">String cdDocente) {
731
            this.cdDocente = cdDocente;
732
        }
733
 
734
        public 1.5.0/docs/api/java/lang/String.html">String getCdTurma() {
735
            return cdTurma;
736
        }
737
 
738
        public void setCdTurma(1.5.0/docs/api/java/lang/String.html">String cdTurma) {
739
            this.cdTurma = cdTurma;
740
        }
741
 
742
        public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia() {
743
            return cdTipologia;
744
        }
745
 
746
        public void setCdTipologia(1.5.0/docs/api/java/lang/String.html">String cdTipologia) {
747
            this.cdTipologia = cdTipologia;
748
        }
749
 
1313 jmachado 750
        public 1.5.0/docs/api/java/lang/String.html">String getDsTipologia() {
751
            return dsTipologia;
752
        }
753
 
754
        public void setDsTipologia(1.5.0/docs/api/java/lang/String.html">String dsTipologia) {
755
            this.dsTipologia = dsTipologia;
756
        }
757
 
758
        public boolean isExtra() {
759
            return extra;
760
        }
761
 
762
        public boolean isSumario() {
763
            return ocorrencias != null && ocorrencias > 0;
764
        }
765
 
766
        public boolean isHorRef() {
767
            return horRef;
768
        }
769
 
770
 
771
 
1312 jmachado 772
        @1.5.0/docs/api/java/lang/Override.html">Override
773
        public boolean equals(5+0%2Fdocs%2Fapi+Object">Object o)
774
        {
1626 jmachado 775
            if(o instanceof Tipologia){
776
                boolean equalTurma = (
777
                        (((Tipologia)o).getCdTurma() == null && getCdTurma() == null)
778
                        ||
779
                        (((Tipologia)o).getCdTurma().equals(getCdTurma()))
780
                );
781
                boolean equalDocente = (
782
                        (((Tipologia)o).getCdDocente() == null && getCdDocente() == null)
783
                        ||
784
                        (((Tipologia)o).getCdDocente().equals(getCdDocente()))
785
                );
786
                if(equalTurma && equalDocente)
787
                {
1312 jmachado 788
 
1626 jmachado 789
                    if(((Tipologia)o).getCdTipologia() == null && getCdTipologia() == null)
790
                        return true;
791
                    if(((Tipologia)o).getCdTipologia().equals(getCdTipologia()))
792
                        return true;
793
                    //Se uma das tipologias é simples virtual tem de ser sempre igual à outra seja ela qual for
794
                    //pois a simples tem de fazer match em todas
795
                    if(((Tipologia)o).getCdTipologia().equals(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE)
1312 jmachado 796
                            ||
1626 jmachado 797
                            getCdTipologia().equals(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE))
798
                        return true;
799
                }
800
            }
801
            return false;
1312 jmachado 802
        }
1313 jmachado 803
 
804
        public boolean equalsIncDsFields(5+0%2Fdocs%2Fapi+Object">Object o)
805
        {
806
            return o instanceof Tipologia &&
807
                    equals(o)
808
                    &&
809
                    (
810
                            (((Tipologia)o).getDsTipologia() == null && getDsTipologia() == null)
811
                                    ||
812
                                    (((Tipologia)o).getDsTipologia().equals(getDsTipologia())))
813
                    &&
814
 
815
                    (
816
                            (((Tipologia)o).getOcorrencias() == null && getOcorrencias() == null)
817
                                    ||
818
                                    (((Tipologia)o).getOcorrencias().equals(getOcorrencias())))
819
                    ;
820
        }
1312 jmachado 821
    }
822
 
1626 jmachado 823
    public void canUse(1.5.0/docs/api/java/lang/String.html">String cdDocente,1.5.0/docs/api/java/lang/String.html">String cdTipologia,1.5.0/docs/api/java/lang/String.html">String cdTurma)
824
    {
825
 
826
    }
827
    /**
828
     * Marca uma tipologia como excluida em todas as Listas
829
     * @param cdDocente
830
     * @param cdTipologia
831
     * @param cdTurma
832
     */
833
    public void setExcludedTipologia(boolean excluded, 1.5.0/docs/api/java/lang/String.html">String cdDocente,1.5.0/docs/api/java/lang/String.html">String cdTipologia,1.5.0/docs/api/java/lang/String.html">String cdTurma)
834
    {
835
        try {
836
            Tipologias tipoClass = getTipologiasClass();
837
 
838
            Tipologia proto = new Tipologia();
839
            proto.setCdDocente(cdDocente);
840
            proto.setCdTipologia(cdTipologia);
841
            proto.setCdTurma(cdTurma);
842
            if(tipoClass.getTipologiasSumarios() != null)
843
                for(Tipologia tipo: tipoClass.getTipologiasSumarios())
844
                {
845
                    if(tipo.equals(proto))
846
                    {
847
                        tipo.setExclude(excluded);
848
                    }
849
                }
850
            if(tipoClass.getTipologiasHorarioReferencia() != null)
851
                for(Tipologia tipo: tipoClass.getTipologiasHorarioReferencia())
852
                {
853
                    if(tipo.equals(proto))
854
                    {
855
                        tipo.setExclude(excluded);
856
                    }
857
                }
858
            if(tipoClass.getTipologiasExtraAdicionadas() != null)
859
                for(Tipologia tipo: tipoClass.getTipologiasExtraAdicionadas())
860
                {
861
                    if(tipo.equals(proto))
862
                    {
863
                        tipo.setExclude(excluded);
864
                    }
865
                }
866
            if(tipoClass.getTipologiasTdocTurma() != null)
867
                for(Tipologia tipo: tipoClass.getTipologiasTdocTurma())
868
                {
869
                    if(tipo.equals(proto))
870
                    {
871
                        tipo.setExclude(excluded);
872
                    }
873
                }
874
 
875
            setTipologiasClass(tipoClass);
876
 
877
        } catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e) {
878
            logger.error(e,e);
879
        }
880
    }
881
 
1326 jmachado 882
    public static class MergedTipologias
883
    {
884
        ArrayList<Tipologia> tipologiasWithMarkedAndUsed = new ArrayList<Tipologia>();
885
 
886
        public ArrayList<Tipologia> getTipologiasWithMarkedAndUsed() {
887
            return tipologiasWithMarkedAndUsed;
888
        }
889
 
890
        public void setTipologiasWithMarkedAndUsed(ArrayList<Tipologia> tipologiasWithMarkedAndUsed) {
891
            this.tipologiasWithMarkedAndUsed = tipologiasWithMarkedAndUsed;
892
        }
893
    }
1312 jmachado 894
    public static class Tipologias
895
    {
1313 jmachado 896
        ArrayList<Tipologia> tipologiasHorarioReferencia = new ArrayList<Tipologia>();
897
        ArrayList<Tipologia> tipologiasSumarios = new ArrayList<Tipologia>();
898
        ArrayList<Tipologia> tipologiasExtraAdicionadas = new ArrayList<Tipologia>();
1326 jmachado 899
        ArrayList<Tipologia> tipologiasUsadas = new ArrayList<Tipologia>();
900
        ArrayList<Tipologia> tipologiasMarcadas = new ArrayList<Tipologia>();
1422 jmachado 901
        ArrayList<Tipologia> tipologiasTdocTurma = new ArrayList<Tipologia>();
1312 jmachado 902
 
1422 jmachado 903
        public ArrayList<Tipologia> getTipologiasTdocTurma() {
904
            return tipologiasTdocTurma == null ? new ArrayList<Tipologia>() : tipologiasTdocTurma;
905
        }
906
 
907
        public void setTipologiasTdocTurma(ArrayList<Tipologia> tipologiasTdocTurma) { this.tipologiasTdocTurma = tipologiasTdocTurma; }
908
 
1312 jmachado 909
        public ArrayList<Tipologia> getTipologiasHorarioReferencia() {
1333 jmachado 910
 
911
            return tipologiasHorarioReferencia == null ? new ArrayList<Tipologia>() : tipologiasHorarioReferencia;
912
 
1312 jmachado 913
        }
914
 
915
        public void setTipologiasHorarioReferencia(ArrayList<Tipologia> tipologiasHorarioReferencia) {
916
            this.tipologiasHorarioReferencia = tipologiasHorarioReferencia;
917
        }
918
 
919
        public ArrayList<Tipologia> getTipologiasSumarios() {
1333 jmachado 920
            return tipologiasSumarios == null ? new ArrayList<Tipologia>() : tipologiasSumarios;
1312 jmachado 921
        }
922
 
923
        public void setTipologiasSumarios(ArrayList<Tipologia> tipologiasSumarios) {
924
            this.tipologiasSumarios = tipologiasSumarios;
925
        }
926
 
927
        public ArrayList<Tipologia> getTipologiasExtraAdicionadas() {
1333 jmachado 928
            return tipologiasExtraAdicionadas == null ? new ArrayList<Tipologia>() : tipologiasExtraAdicionadas;
1312 jmachado 929
        }
930
 
931
        public void setTipologiasExtraAdicionadas(ArrayList<Tipologia> tipologiasExtraAdicionadas) {
932
            this.tipologiasExtraAdicionadas = tipologiasExtraAdicionadas;
933
        }
934
 
1333 jmachado 935
        public ArrayList<Tipologia> getTipologiasUsadas() {
936
            return tipologiasUsadas == null ? new ArrayList<Tipologia>() : tipologiasUsadas;
937
        }
1326 jmachado 938
 
939
        public void setTipologiasUsadas(ArrayList<Tipologia> tipologiasUsadas) { this.tipologiasUsadas = tipologiasUsadas; }
940
 
1333 jmachado 941
        public ArrayList<Tipologia> getTipologiasMarcadas() {
942
            return tipologiasMarcadas == null ? new ArrayList<Tipologia>() : tipologiasMarcadas;
943
        }
1326 jmachado 944
 
945
        public void setTipologiasMarcadas(ArrayList<Tipologia> tipologiasMarcadas) { this.tipologiasMarcadas = tipologiasMarcadas; }
946
 
1312 jmachado 947
        private static Genson getGenson(){
948
            Genson genson = new Genson.Builder()
949
                    .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
950
                    .include("tipologiasExtraAdicionadas", Tipologias.class)
951
                    .include("tipologiasSumarios", Tipologias.class)
952
                    .include("tipologiasHorarioReferencia", Tipologias.class)
1326 jmachado 953
                    .include("tipologiasUsadas", Tipologias.class)
954
                    .include("tipologiasMarcadas", Tipologias.class)
1422 jmachado 955
                    .include("tipologiasTdocTurma", Tipologias.class)
1312 jmachado 956
                    .include("cdTipologia", Tipologia.class)
957
                    .include("cdDocente", Tipologia.class)
958
                    .include("cdTurma", Tipologia.class)
1313 jmachado 959
                    .include("dsTipologia",Tipologia.class)
1312 jmachado 960
                    .include("ocorrencias", Tipologia.class)
1422 jmachado 961
                    .include("tdocturma", Tipologia.class)
1626 jmachado 962
                    .include("exclude", Tipologia.class)
1312 jmachado 963
                    .create();
964
            return genson;
965
        }
966
 
1326 jmachado 967
        private static Genson getGensonMergedTipologiasComplete(){
968
            Genson genson = new Genson.Builder()
969
                    .exclude(5+0%2Fdocs%2Fapi+Object">Object.class)
970
 
971
                    .include("tipologiasWithMarkedAndUsed", MergedTipologias.class)
972
                    .include("cdTipologia", Tipologia.class)
973
                    .include("cdDocente", Tipologia.class)
974
                    .include("cdTurma", Tipologia.class)
975
                    .include("dsTipologia",Tipologia.class)
976
                    .include("ocorrencias", Tipologia.class)
977
                    .include("horRef", Tipologia.class)
1626 jmachado 978
                    .include("exclude", Tipologia.class)
1326 jmachado 979
                    .include("extra", Tipologia.class)
980
                    .include("use", Tipologia.class)
1422 jmachado 981
                    .include("tdocturma", Tipologia.class)
1326 jmachado 982
                    .include("markWarning", Tipologia.class)
983
                    .create();
984
            return genson;
985
        }
986
 
1312 jmachado 987
        public 1.5.0/docs/api/java/lang/String.html">String serialize() throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
988
        {
989
            Genson genson = getGenson();
990
            try {
991
                return genson.serialize(this);
992
            } catch (TransformationException e) {
993
                throw e;
994
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
995
                throw e;
996
            }
997
        }
998
        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
999
        {
1000
            if(serial == null)
1333 jmachado 1001
                return new Tipologias();
1312 jmachado 1002
            try {
1003
                return getGenson().deserialize(serial, Tipologias.class);
1004
            } catch (TransformationException e) {
1005
                throw e;
1006
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
1007
                throw e;
1008
            }
1009
        }
1010
 
1011
        public static void main(1.5.0/docs/api/java/lang/String.html">String [] args)
1012
        {
1013
            new TestCourseUnit().testTipologias();
1014
        }
1313 jmachado 1015
 
1326 jmachado 1016
        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 1017
        {
1326 jmachado 1018
            MergedTipologias mergedTipologias = new MergedTipologias();
1333 jmachado 1019
            if(tipologias != null)
1020
            {
1021
                mergedTipologias.setTipologiasWithMarkedAndUsed(tipologias);
1022
            }
1326 jmachado 1023
            Genson genson = getGensonMergedTipologiasComplete();
1024
            try {
1025
                return genson.serialize(mergedTipologias);
1026
            } catch (TransformationException e) {
1027
                throw e;
1028
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
1029
                throw e;
1030
            }
1031
        }
1032
        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
1033
        {
1034
            if(serial == null)
1333 jmachado 1035
                return new ArrayList<Tipologia>();
1326 jmachado 1036
            try {
1037
                MergedTipologias mergedTipologias = getGensonMergedTipologiasComplete().deserialize(serial, MergedTipologias.class);
1038
                if(mergedTipologias.getTipologiasWithMarkedAndUsed() == null)
1039
                    return new ArrayList<Tipologia>();
1040
                return mergedTipologias.getTipologiasWithMarkedAndUsed();
1041
            } catch (TransformationException e) {
1042
                throw e;
1043
            } catch (1.5.0/docs/api/java/io/IOException.html">IOException e) {
1044
                throw e;
1045
            }
1046
        }
1332 jmachado 1047
        public 1.5.0/docs/api/java/lang/String.html">String obtainMergeTipologiasSerialized() throws 1.5.0/docs/api/java/io/IOException.html">IOException, TransformationException
1048
        {
1049
            return serializeMergedList(obtainMergeTipologias());
1050
        }
1337 jmachado 1051
 
1387 jmachado 1052
 
1626 jmachado 1053
 
1054
 
1387 jmachado 1055
        /**
1623 jmachado 1056
         * Junta todas as tipologias obtidas dos
1057
         * sumarios, horario(ref+trab) + extra + tdoc turma
1626 jmachado 1058
         * As restantes  listas são as marcadas e as usadas
1623 jmachado 1059
         * que apenas estarão disponiveis quando houver gestão de marcação de tipologias
1387 jmachado 1060
         * e coloca todas numa lista de unicas
1061
         * Marca-as com isHorario, isSumario, isExtra
1062
         * @return
1063
         */
1064
 
1326 jmachado 1065
        public ArrayList<Tipologia> obtainMergeTipologias()
1066
        {
1067
            ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
1315 jmachado 1068
            if(getTipologiasSumarios() != null)
1069
                merge.addAll(getTipologiasSumarios());
1313 jmachado 1070
 
1623 jmachado 1071
 
1072
            /**
1073
             * OBTER TODAS DAS LISTAS SUMARIOS HORARIOS EXTRA E TDOC TURMA
1074
             */
1315 jmachado 1075
            if(getTipologiasHorarioReferencia() != null)
1076
                for(Tipologia tipo: getTipologiasHorarioReferencia())
1313 jmachado 1077
                {
1315 jmachado 1078
                    if(!merge.contains(tipo))
1079
                    {
1080
                        merge.add(tipo);
1081
                    }
1313 jmachado 1082
                }
1315 jmachado 1083
            if(getTipologiasExtraAdicionadas() != null)
1084
                for(Tipologia tipo: getTipologiasExtraAdicionadas())
1313 jmachado 1085
                {
1315 jmachado 1086
                    if(!merge.contains(tipo))
1087
                    {
1088
                        merge.add(tipo);
1089
                    }
1313 jmachado 1090
                }
1623 jmachado 1091
            //novo
1092
            if(getTipologiasTdocTurma() != null)
1093
                for(Tipologia tipo: getTipologiasTdocTurma())
1094
                {
1095
                    if(!merge.contains(tipo))
1096
                    {
1097
                        merge.add(tipo);
1098
                    }
1099
                }
1100
 
1101
            /**
1102
             * FIM DE OBTER TODAS DAS LISTAS SUMARIOS HORARIOS EXTRA E TDOC TURMA
1103
             */
1104
 
1105
 
1106
 
1313 jmachado 1107
            for(Tipologia tipo: merge)
1108
            {
1326 jmachado 1109
                tipo.setMarkWarning(false);
1110
                tipo.setUse(false);
1315 jmachado 1111
                if(getTipologiasHorarioReferencia() != null && getTipologiasHorarioReferencia().contains(tipo))
1313 jmachado 1112
                {
1113
                    tipo.horRef = true;
1114
                }
1115
 
1315 jmachado 1116
                if(getTipologiasExtraAdicionadas() != null && getTipologiasExtraAdicionadas().contains(tipo))
1313 jmachado 1117
                {
1118
                    tipo.extra = true;
1119
                }
1623 jmachado 1120
                //NOVO
1121
                if(getTipologiasTdocTurma() != null && getTipologiasTdocTurma().contains(tipo))
1122
                {
1123
                    tipo.tdocturma = true;
1124
                }
1313 jmachado 1125
            }
1326 jmachado 1126
 
1127
            if(getTipologiasMarcadas() != null)
1128
                for(Tipologia t: getTipologiasMarcadas())
1129
                {
1130
                    for(Tipologia tMerge: merge)
1131
                    {
1132
                        if(tMerge.equals(t))
1133
                        {
1134
                            tMerge.setMarkWarning(true);
1135
                            break;
1136
                        }
1137
                    }
1138
                }
1139
            if(getTipologiasUsadas() != null)
1140
                for(Tipologia t: getTipologiasUsadas())
1141
                {
1142
                    for(Tipologia tMerge: merge)
1143
                    {
1144
                        if(tMerge.equals(t))
1145
                        {
1146
                            tMerge.setUse(true);
1147
                            break;
1148
                        }
1149
                    }
1150
                }
1626 jmachado 1151
            //NAO SERVE PARA NADA
1422 jmachado 1152
            if(getTipologiasTdocTurma() != null)
1153
                for(Tipologia t: getTipologiasTdocTurma())
1154
                {
1155
                    for(Tipologia tMerge: merge)
1156
                    {
1157
                        if(tMerge.equals(t))
1158
                        {
1159
                            tMerge.setUse(true);
1160
                            break;
1161
                        }
1162
                    }
1163
                }
1313 jmachado 1164
            return merge;
1165
        }
1166
 
1387 jmachado 1167
        /**
1168
         *
1169
         *
1170
         * @param courseUnit
1171
         * @return
1172
         */
1337 jmachado 1173
        public ArrayList<Tipologia> obtainTipologiasSimples(CourseUnit courseUnit)
1174
        {
1175
            ArrayList<Tipologia> merge = new ArrayList<Tipologia>();
1176
 
1177
            Map<String,Map<String,Tipologia>> docenteTurmas = new HashMap<String,Map<String,Tipologia>>();
1178
 
1179
            fullfillTipologiasSimples(getTipologiasSumarios(), docenteTurmas);
1180
            fullfillTipologiasSimples(getTipologiasExtraAdicionadas(), docenteTurmas);
1181
            fullfillTipologiasSimples(getTipologiasHorarioReferencia(), docenteTurmas);
1182
            fullfillTipologiasSimples(getTipologiasMarcadas(), docenteTurmas);
1183
            fullfillTipologiasSimples(getTipologiasUsadas(), docenteTurmas);
1422 jmachado 1184
            fullfillTipologiasSimples(getTipologiasTdocTurma(), docenteTurmas);
1337 jmachado 1185
 
1186
 
1187
            if(docenteTurmas.size() == 0)
1188
            {
1189
                //NAO Há sumários vamos associar todos os docentes a todas as turmas
1622 jmachado 1190
                getTipologiasSimplesParaEstesTeachersParaTodasAsTurmas(courseUnit,new HashSet<Teacher>(courseUnit.getTeachers()), merge);
1337 jmachado 1191
            }
1192
            else
1193
            {
1194
                for(1.5.0/docs/api/java/util/Map.html">Map.Entry<String,Map<String,Tipologia>> docentes: docenteTurmas.entrySet())
1195
                {
1196
                    for(Tipologia tipologia: docentes.getValue().values())
1197
                    {
1198
                        merge.add(tipologia);
1199
                    }
1200
                }
1622 jmachado 1201
                //NOVO
1202
                //FRAGMENTO PARA OS QUE FALTAM APENAS POR SEGURANÇA JA DEVIAM TER VINDO DO T_DOC_TURMA
1203
                //DO SINC
1204
                //NO LOCAL ONDE AS TIPOLOGIAS SAO INCIALIZADAS NO IMPORT
1205
                //ISTO E MAU PORQUE SE HOUVER TURMAS OS DOCENTES SAO ASSOCIADOS
1206
                //A TODAS E SO DEVERIAM SER ASSOCIADOS AS QUE ESTAO ASSOCAIDOS NO SIGES
1207
                //POR ISSO E QUE ISTO SO SE RESOLVE NO DisciplinaDao durante a Sincronizacao
1208
                //para saber as relacoes TDOC TURMA
1209
                Map<String,Teacher> professoresEsperados = new HashMap<String, Teacher>();
1210
                for(Teacher t: courseUnit.getTeachers())
1211
                {
1212
                    professoresEsperados.put(t.getSigesCode() + "", t);
1213
                }
1214
 
1215
                for(CourseUnitImpl.Tipologia tMerge: merge)
1216
                {
1217
                    professoresEsperados.remove(tMerge.getCdDocente());
1218
                }
1219
                getTipologiasSimplesParaEstesTeachersParaTodasAsTurmas(courseUnit,professoresEsperados.values(), merge);
1220
                //FRAGMENTO EM FALTA PARA INTRODUZIR PROFS SEM SUMARIO
1221
 
1222
 
1223
 
1337 jmachado 1224
            }
1622 jmachado 1225
 
1226
 
1337 jmachado 1227
            return merge;
1228
        }
1229
 
1622 jmachado 1230
        private void getTipologiasSimplesParaEstesTeachersParaTodasAsTurmas(CourseUnit courseUnit,Collection<Teacher> teachers, ArrayList<Tipologia> merge) {
1231
            if(courseUnit.getTurmas() != null && courseUnit.getTeachers() != null)
1232
            {
1233
                for(CourseUnitTurma turma: courseUnit.getTurmas())
1234
                {
1235
                    for(Teacher t : teachers)
1236
                    {
1237
                        Tipologia simples = new Tipologia();
1238
                        simples.setMarkWarning(true);
1239
                        //simples.setUse(true);
1240
                        simples.setCdDocente(""+t.getSigesCode());
1241
                        simples.setCdTurma(turma.getTurma());
1242
                        simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
1243
                        simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
1244
                        merge.add(simples);
1245
                    }
1246
                }
1247
            }
1248
        }
1249
 
1387 jmachado 1250
        /**
1251
         * Cria uma tipologia Simples para cada par Docente-Turma nesta cadeira olhando para
1252
         * todas as tipologias existentes, uma vez que o Baco não guarda associações entre
1253
         * Docentes e Turmas isso será retirado das tipologias importadas
1254
         *
1255
         * @param tipologias
1256
         * @param docenteTurmas
1257
         */
1337 jmachado 1258
        private void fullfillTipologiasSimples(ArrayList<Tipologia> tipologias, Map<String, Map<String, Tipologia>> docenteTurmas) {
1259
            if(tipologias != null)
1260
                for(Tipologia tipo: tipologias)
1261
                {
1262
                    Map<String,Tipologia> turmasDocente = docenteTurmas.get(tipo.getCdDocente());
1263
                    if(turmasDocente == null)
1264
                        turmasDocente = new HashMap<String,Tipologia>();
1265
                    docenteTurmas.put(tipo.getCdDocente(),turmasDocente);
1266
                    Tipologia simples = turmasDocente.get(tipo.getCdTurma());
1623 jmachado 1267
                    //Se nao tiver entrado o sumario vai entrar aqui como TDOC Turma com 0 ocorrencias
1337 jmachado 1268
                    if(simples==null)
1269
                    {
1270
                        simples = new Tipologia();
1271
                        simples.setCdDocente(tipo.getCdDocente());
1272
                        simples.setCdTurma(tipo.getCdTurma());
1273
                        simples.setCdTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
1274
                        simples.setDsTipologia(Globals.BACO_TIPOLOGIA_SIMPLES_DS);
1387 jmachado 1275
                        //simples.setUse(true);//TODAS USADAS
1338 jmachado 1276
                        if(tipo.hasOcorrencias())
1337 jmachado 1277
                        {
1278
                            simples.setOcorrencias(tipo.getOcorrencias());
1279
                        }
1623 jmachado 1280
                        turmasDocente.put(tipo.getCdTurma(), simples);
1626 jmachado 1281
                        if(tipo.isHorRef())
1282
                            simples.horRef = true;
1283
                        if(tipo.isExtra())
1284
                            simples.extra = true;
1422 jmachado 1285
                        if(tipo.isTdocturma())
1286
                            simples.setTdocturma(true);
1626 jmachado 1287
                        if(tipo.isExclude())
1288
                            simples.setExclude(true);
1337 jmachado 1289
                    }
1623 jmachado 1290
                    //se for tDocturma e ja tiver entrado como sumário nao entra aqui sequer
1291
                    //Nunca entra primeiro como TDOC Turma se já entrou como sumário 
1387 jmachado 1292
                    else if(tipo.hasOcorrencias())
1337 jmachado 1293
                    {
1626 jmachado 1294
                        if(tipo.isHorRef())
1295
                            simples.horRef = true;
1296
                        if(tipo.isExtra())
1297
                            simples.extra = true;
1338 jmachado 1298
                        if(simples.getOcorrencias() == null)
1299
                            simples.setOcorrencias(0);
1337 jmachado 1300
                        simples.setOcorrencias(simples.getOcorrencias()+tipo.getOcorrencias());
1422 jmachado 1301
                        if(tipo.isTdocturma())
1302
                            simples.setTdocturma(true);
1626 jmachado 1303
                        //Nao devera fazer falta porque quando excluimos uma simples excluimos todas
1304
                        if(tipo.isExclude())
1305
                            simples.setExclude(true);
1337 jmachado 1306
                    }
1307
 
1308
                }
1309
        }
1310
 
1311
 
1312 jmachado 1312
    }
1313
 
1314
 
1546 jmachado 1315
    /**Services**/
1312 jmachado 1316
 
1546 jmachado 1317
    /**
1318
     * Require Open Transaction
1319
     * @return 1, 2, 3, 4
1320
     */
1321
    public int getAnoPlanoFromStudiesPlan()
1322
    {
1323
        CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(getCourse());
1324
        return courseImpl.getUnidadeAnoPlano(getSemestre(),getCode());
1325
    }
1312 jmachado 1326
 
1546 jmachado 1327
    /**
1328
     * Require Open Transaction
1329
     * @return S1, .., S8, T1 .. T8, A1 .. A4
1330
     */
1331
    public 1.5.0/docs/api/java/lang/String.html">String getPeriodoPlanoFromStudiesPlan()
1332
    {
1333
        CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(getCourse());
1547 jmachado 1334
        return courseImpl.getUnidadePeriodoPlano(getSemestre(), getCode());
1546 jmachado 1335
    }
1312 jmachado 1336
 
1546 jmachado 1337
    /**
1338
     * Require Open Transaction
1339
     * @return  S1 = 1, S2 = 2,S3 = 3,S4 = 4 ...T1 e T2 = 1, T2 e T3 = 2, T4 e T5 = 3 ...
1340
     */
1341
    public int getSemestrePlanoConvertido()
1342
    {
1343
        CourseImpl courseImpl = (CourseImpl) DaoFactory.getCourseDaoImpl().narrow(getCourse());
1547 jmachado 1344
        return courseImpl.getUnidadeSemestrePlanoConvertido(getSemestre(), getCode());
1546 jmachado 1345
    }
1346
 
1347
    /**
1348
     * Require Open Transaction
1349
     * @return S1 = 1, S2 = 2, S3 = 1, S4 = 2 ... T1 e T2 = 1,  T2 e T3 = 2, T4 e T5 = 1, T6 e T7 = 2
1350
     */
1351
    public int getSemestrePlanoAbsoluto()
1352
    {
1547 jmachado 1353
        1.5.0/docs/api/java/lang/String.html">String id = getSemestre();
1354
        if(id.equals("S1"))
1355
            return 1;
1356
        else if(id.equals("S2"))
1357
            return 2;
1358
        else if(id.equals("A"))
1359
            return -1;
1546 jmachado 1360
 
1547 jmachado 1361
        else if(id.equals("T1"))
1362
            return 1;
1363
        else if(id.equals("T2"))
1364
            return 1;
1365
        else if(id.equals("T3"))
1366
            return 2;
1367
        else if(id.equals("T4"))
1368
            return 2;
1546 jmachado 1369
 
1370
 
1547 jmachado 1371
        return -1;
1546 jmachado 1372
 
1547 jmachado 1373
    }
1546 jmachado 1374
 
1547 jmachado 1375
 
112 jmachado 1376
}