package pt.estgp.estgweb.domain;
import com.owlike.genson.Genson;
import com.owlike.genson.GensonBuilder;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.utils.Globals;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.enums.CourseUnitContentsGrants;
import pt.estgp.estgweb.domain.test.TestCourseUnit;
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport;
import pt.estgp.estgweb.utils.StringsUtils;
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager;
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager;
import java.io.IOException;
import java.io.Serializable;
import java.util.*;
/**
* Created by IntelliJ IDEA.
* User: Jorge Machado
* Date: 7/Mai/2008
* Time: 20:21:15
* To change this template use File | Settings | File Templates.
*/
public class CourseUnitImpl
extends CourseUnit
implements ICanManage, ClearanceRuled
{
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);
CourseUnitContentsGrants courseUnitContentsGrants =
null;
public 1.5.0/docs/api/java/io/Serializable.html">Serializable getSerializable
()
{
return getId
();
}
public 1.5.0/docs/api/java/lang/String.html">String getCourseNameInitials
()
{
if(getCourseName
() !=
null)
{
return StringsUtils.
getInitials(getCourseName
());
}
else
return null;
}
public CourseUnitContentsGrants getCourseUnitContentsGrants
() {
if(courseUnitContentsGrants ==
null)
courseUnitContentsGrants = CourseUnitContentsGrants.
parse(super.
getContentsGrants());
return courseUnitContentsGrants
;
}
public void setCourseUnitContentsGrants
(CourseUnitContentsGrants courseUnitContentsGrants
) {
super.
setContentsGrants(courseUnitContentsGrants.
name());
this.
courseUnitContentsGrants = courseUnitContentsGrants
;
}
public boolean isValid
()
{
return true; //To change body of implemented methods use File | Settings | File Templates.
}
public boolean checkIsOwnedBy
(GenericUser u
)
{
return checkIsOwnedBy
(u,
false);
}
public boolean checkIsOwnedBy
(GenericUser u,
boolean transaction
)
{
return u
!=
null && u
instanceof TeacherImpl
&& ((TeacherImpl
)u
).
hasCourseUnit(getId
(),transaction
);
}
/**
* Not implemented can be variuous teachers
* @return null
* use checkIsOwnedBy in this class
*/
public GenericUser getOwner
()
{
return null;
}
/**
* Not implemented
* @return
*/
public List
<String
> getOwnerRoles
()
{
return null;
}
/**
* Not implemented
* @return
*/
public 1.5.0/docs/api/java/lang/String.html">String getChoosedOwnerRole
()
{
return null;
}
public boolean isInternal
()
{
return true;
}
public CourseUnitBlogImpl getUnitBlog
()
{
if(getBlogs
()!=
null && getBlogs
().
size() > 0
)
return (CourseUnitBlogImpl
) getBlogs
().
iterator().
next();
return null;
}
public boolean equalsSiges
(5+0%2Fdocs%2Fapi+Object">Object anotherInstance,
boolean turmasSeparadas
)
{
if(anotherInstance
instanceof CourseUnitImpl
)
{
CourseUnitImpl anCourseUnit =
(CourseUnitImpl
) anotherInstance
;
if(turmasSeparadas
)
{
boolean turmaVazia = getCdTurma
() ==
null || getCdTurma
().
trim().
length() ==
0;
boolean anotherTurmaVazia = anCourseUnit.
getCdTurma() ==
null || anCourseUnit.
getCdTurma().
trim().
length() ==
0;
boolean turmasIguais =
(turmaVazia
&& anotherTurmaVazia
) ||
(!turmaVazia
&& !anotherTurmaVazia
&& getCdTurma
().
equals(anCourseUnit.
getCdTurma()));
return equalsIgnoringTurma
(anotherInstance
)
&&
turmasIguais
;
}
else
return equalsIgnoringTurma
(anotherInstance
);
}
return false;
}
public boolean equalsIgnoringTurma
(5+0%2Fdocs%2Fapi+Object">Object anotherInstance
)
{
if(anotherInstance
instanceof CourseUnitImpl
)
{
CourseUnitImpl anCourseUnit =
(CourseUnitImpl
) anotherInstance
;
return anCourseUnit.
getCode() !=
null && getCode
() !=
null && getCode
().
equals(anCourseUnit.
getCode()) &&
anCourseUnit.
getCourseCode() !=
null && getCourseCode
() !=
null && getCourseCode
().
equals(anCourseUnit.
getCourseCode()) &&
anCourseUnit.
getSemestre() !=
null && getSemestre
() !=
null && getSemestre
().
equals(anCourseUnit.
getSemestre()) &&
anCourseUnit.
getImportYear() !=
null && getImportYear
() !=
null && getImportYear
().
equals(anCourseUnit.
getImportYear());
}
return false;
}
/**
* Means that is teacher os responsable teacher or from course commission
* Only works in open transaction
*
* Needs Course and Responsable Teacher loaded
*/
public boolean isFromCourseUnitCommission
(UserSession userSession
)
{
return userSession.
getUser()!=
null &&
(((UserImpl
) userSession.
getUser()).
checkIsTeacherOfCourseUnit(getId
(),
true)
||
(getResponsableTeacher
() !=
null && getResponsableTeacher
().
getId() == userSession.
getUser().
getId())
||
((CourseImpl
)getCourse
()).
isFromCourseCommission(userSession
)
);
}
public boolean isFromCourseCommission
(UserSession userSession
)
{
return userSession.
getUser()!=
null &&
userSession.
getUser().
hasRole(getCourse
().
getValidationRole());
}
public 1.5.0/docs/api/java/lang/String.html">String getSummariosPathIntranet
()
{
return Globals.
FTP_IONLINE_START_PATH +
"/" + getPathIntranet
() +
"/" + Globals.
INTRANET_DTP +
"/" + Globals.
INTRANET_DTP_Sumarios;
}
public 1.5.0/docs/api/java/lang/String.html">String getInqueritosPedagogicosPathIntranet
()
{
return Globals.
FTP_IONLINE_START_PATH + getPathIntranet
() +
"/" + Globals.
INTRANET_DTP +
"/" + Globals.
INTRANET_DTP_InqueritoPedagogico;
}
public 1.5.0/docs/api/java/lang/String.html">String getSummariosPathFileIntranet
()
{
return getSummariosPathIntranet
() +
"/" + getSummariosFileNameIntranet
();
}
public 1.5.0/docs/api/java/lang/String.html">String getSummariosFileNameIntranet
(){
return getCode
() +
"_" + getNormalizedName
() +
"_sumarios.pdf";
}
public 1.5.0/docs/api/java/lang/String.html">String getSigesUniqueIdentifiers
()
{
return "SIGES:" + getCode
() +
", COURSE: " + getCourseCode
() +
", " + getSemestre
() +
" of " + getImportYear
() +
" - " + getName
() +
" Turma - " + getCdTurma
();
}
public int studentsSize
()
{
if(getStudents
() !=
null)
return getStudents
().
size();
return 0;
}
public int studentsTurmaSize
()
{
int countTotalStudentsTurmas =
0;
if(getTurmas
() ==
null)
return 0;
for(CourseUnitTurma turma: getTurmas
())
{
if(turma.
getStudents() !=
null)
countTotalStudentsTurmas+=turma.
getStudents().
size();
}
return countTotalStudentsTurmas
;
}
public boolean hasStudent
(long studentId,
boolean transaction
)
{
Set
<StudentImpl
> students
;
if(transaction
)
students = getStudents
();
else
{
IServiceManager sm
;
try {
sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{getId
()};
students =
(Set
<StudentImpl
>) sm.
execute(null,
"LoadCourseUnitStudents", args, names
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
) {
logger.
error(e,e
);
return false;
}
}
if(students ==
null)
return false;
for(Student s: students
)
{
if(s.
getId() == studentId
)
return true;
}
return false;
}
public boolean hasTeacher
(long teacherId,
boolean transaction
)
{
Set
<TeacherImpl
> teachers
;
if(transaction
)
teachers = getTeachers
();
else
{
IServiceManager sm
;
try {
sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{getId
()};
teachers =
(Set
<TeacherImpl
>) sm.
execute(null,
"LoadCourseUnitTeachers", args, names
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
) {
logger.
error(e,e
);
return false;
}
}
if(teachers ==
null)
return false;
for(Teacher t: teachers
)
{
if(t.
getId() == teacherId
)
return true;
}
return false;
}
public boolean isResponsibleTeacher
(long teacherId,
boolean transaction
)
{
Teacher t
;
if(transaction
)
t = getResponsableTeacher
();
else
{
IServiceManager sm
;
try {
sm = ServiceManager.
getInstance();
1.5.0/docs/api/java/lang/String.html">String[] names =
new 1.5.0/docs/api/java/lang/String.html">String[]{"serializable"};
5+0%2Fdocs%2Fapi+Object">Object[] args =
new 5+0%2Fdocs%2Fapi+Object">Object[]{getId
()};
t =
(Teacher
) sm.
execute(null,
"LoadCourseUnitResponsibleTeacher", args, names
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
) {
logger.
error(e,e
);
return false;
}
}
if(t ==
null)
return false;
if(t.
getId() == teacherId
)
return true;
return false;
}
SimpleClearanceRuledSupport clearanceRuledSupport =
null;
public SimpleClearanceRuledSupport getClearanceRuledSupport
() {
return clearanceRuledSupport
;
}
public void setClearanceRuledSupport
(SimpleClearanceRuledSupport clearanceRuledSupport
) {
this.
clearanceRuledSupport = clearanceRuledSupport
;
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public boolean isClearanceInitialized
(UserSessionImpl u
) {
return clearanceRuledSupport ==
null ? false :
clearanceRuledSupport.
isClearanceInitialized(u
);
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public boolean isClear
(UserSessionImpl u,
1.5.0/docs/api/java/lang/String.html">String OP
) {
if(clearanceRuledSupport ==
null) return false;
if(OP.
startsWith("EVALUATION") && !OP.
startsWith("EVALUATION_INFO")
&& clearanceRuledSupport.
isClear(u,CourseUnitClearancesOperation.
EVALUATION_ALL.
name()))
return true;
return clearanceRuledSupport.
isClear(u, OP
);
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public void initClearances
(UserSessionImpl usession,
boolean force
)
{
CourseUnitImpl c =
this;
1.5.0/docs/api/java/lang/String.html">String activeYear = DaoFactory.
getConfigurationDaoImpl().
getCourseUnitEvaluationActiveYear();
List
<String
> activeDegrees = DaoFactory.
getConfigurationDaoImpl().
getCourseUnitEvaluationActiveDegrees();
List
<Long
> activeCourseIds = DaoFactory.
getConfigurationDaoImpl().
getCourseUnitEvaluationActiveCourseIds();
boolean isActiveYear = activeYear
!=
null && c.
getImportYear().
equals(activeYear
);
boolean isActiveDegree = activeDegrees
!=
null && activeDegrees.
contains(c.
getCourse().
getDegree());
boolean isActiveCourseId = activeCourseIds
!=
null && activeCourseIds.
contains(c.
getCourse().
getId());
boolean activePeriod =
(isActiveYear
&& (isActiveCourseId || isActiveDegree
));
boolean active = activePeriod || c.
isEvaluationOpenByAdmin();
boolean isComplete = c.
getCourseUnitEvaluation() !=
null && c.
getCourseUnitEvaluation().
isTeacherComplete() && !c.
getCourseUnitEvaluation().
isClosed();
boolean isClosed = c.
getCourseUnitEvaluation() !=
null && c.
getCourseUnitEvaluation().
isClosed();
boolean isEdit =
!isClosed
&& !isComplete
;
SimpleClearanceRuledSupport s =
new SimpleClearanceRuledSupport
();
s.
setDirty();
if(isEdit
)
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_STATE_EDIT.
name(),usession
);
else if(isComplete
)
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_STATE_COMPLETE.
name(),usession
);
else if(isClosed
)
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_STATE_CLOSED.
name(),usession
);
if(activePeriod
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_ACTIVE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_ACTIVE_REGULAR_PERIOD.
name(),usession
);
}
if(c.
isEvaluationOpenByAdmin())
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_ACTIVE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_ACTIVE_SPECIAL_ADMIN.
name(),usession
);
}
if(usession.
getUser() !=
null && (usession.
getUser().
isSuperuserOrAdmin() || usession.
getUser().
hasRole(Globals.
SERVICES_PROGRAMS_ROLE)))
{
s.
addClearance(CourseUnitClearancesOperation.
STATISTICS_CAN_VIEW.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_ALL.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_EDIT_PROGRAM.
name(), usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_CAN_VALIDATE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_TEACHER_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_COORDINATOR_PART.
name(),usession
);
}
if(usession.
getUser() !=
null && usession.
getUser() instanceof Teacher
)
{
Teacher t =
((Teacher
)(usession.
getUser()));
boolean teacher =
((Teacher
)(usession.
getUser())).
checkIsTeacherOfCourseUnit(c.
getId(),
true);
boolean responsable = c.
getResponsableTeacher()!=
null && usession.
getUser().
getId() == c.
getResponsableTeacher().
getId();
boolean isCoordinator =
((CourseImpl
) DaoFactory.
getCourseDaoImpl().
narrow(c.
getCourse())).
isFromCourseCommission(t
);
if(teacher
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_USER_TEACHER.
name(), usession
);
}
if(responsable
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_USER_RESP_TEACHER.
name(), usession
);
}
if(teacher || responsable
)
{
s.
addClearance(CourseUnitClearancesOperation.
STATISTICS_CAN_VIEW.
name(),usession
);
//s.addClearance(CourseUnitClearancesOperation.EVALUATION_INFO_USER_TEACHER.name(), usession);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_EDITION.
name(),usession
);
if(active
&& isEdit
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_EDITSAVE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_PERSIST_TEACHER_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_COMPLETE.
name(),usession
);
}
}
if(isCoordinator
)
{
s.
addClearance(CourseUnitClearancesOperation.
STATISTICS_CAN_VIEW.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_CAN_VALIDATE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_INFO_USER_COMMISSION.
name(), usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_EDITION.
name(), usession
);
if(active
&& isEdit
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_EDITSAVE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_PERSIST_TEACHER_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_PERSIST_COMISSION_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_COMPLETE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_CLOSE.
name(),usession
);
}
else if(active
&& isComplete
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_EDITSAVE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_PERSIST_TEACHER_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_PERSIST_COMISSION_PART.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_CLOSE.
name(),usession
);
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_EDIT.
name(),usession
);
}
else if(active
&& isClosed
)
{
s.
addClearance(CourseUnitClearancesOperation.
EVALUATION_TRANSITATE_TO_EDIT.
name(),usession
);
}
}
if(!c.
isValidProgram())
{
if(teacher
)
{
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_EDIT_PROGRAM.
name(), usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_TEACHER_PART.
name(), usession
);
}
if(isCoordinator
)
{
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_EDIT_PROGRAM.
name(), usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_TEACHER_PART.
name(), usession
);
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_COORDINATOR_PART.
name(), usession
);
}
}
else
{
s.
addClearance(CourseUnitClearancesOperation.
PROGRAM_INFO_VALID_NOT_ACTIVE.
name(), usession
);
}
}
c.
setClearanceRuledSupport(s
);
}
public static enum CourseUnitClearancesOperation
{
EVALUATION_ALL,
//SPECIAL OPERATION FOR DENY AND PERMIT REPLACE FULL CONTROL
//COURSE UNIT EVALUATION
EVALUATION_PERSIST_TEACHER_PART,
//SERVICE PERSIST THIS PART
EVALUATION_PERSIST_COMISSION_PART,
//SERVICE PERSIST THIS PART
EVALUATION_EDITION,
//CAN SEE EDITION SCREEN
EVALUATION_EDITSAVE,
//CAN PRESS SAVE
EVALUATION_TRANSITATE_TO_COMPLETE,
//CAN_TRANSITATE
EVALUATION_TRANSITATE_TO_CLOSE,
//CAN CLOSE
EVALUATION_TRANSITATE_TO_EDIT,
//CAN REVERT
EVALUATION_INFO_ACTIVE,
//INFO CLEARANCE WHEN ACTIVE
EVALUATION_INFO_ACTIVE_SPECIAL_ADMIN,
//INFO CLEARANCE REASON OF BEING ACTIVE
EVALUATION_INFO_ACTIVE_REGULAR_PERIOD,
//INFO CLEARANCE REASON OF BEING ACTIVE
EVALUATION_INFO_STATE_EDIT,
//INFO CLEARANCE
EVALUATION_INFO_STATE_COMPLETE,
//INFO CLEARANCE
EVALUATION_INFO_STATE_CLOSED,
//INFO CLEARANCE
EVALUATION_INFO_USER_TEACHER,
//INFO CLEARANCE
EVALUATION_INFO_USER_RESP_TEACHER,
//INFO CLEARANCE
EVALUATION_INFO_USER_COMMISSION,
//INFO CLEARANCE
PROGRAM_EDIT_PROGRAM,
PROGRAM_COORDINATOR_PART,
PROGRAM_TEACHER_PART,
PROGRAM_CAN_VALIDATE,
PROGRAM_INFO_VALID_NOT_ACTIVE,
STATISTICS_CAN_VIEW,
;
public static CourseUnitClearancesOperation parse
(1.5.0/docs/api/java/lang/String.html">String clearance
)
{
if(clearance ==
null)
return null;
for(CourseUnitClearancesOperation op: CourseUnitClearancesOperation.
values())
{
if(op.
name().
equals(clearance
))
return op
;
}
return null;
}
}
public Tipologias getTipologiasClass
() throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
return Tipologias.
deserialize(getTipologias
());
}
public void setTipologiasClass
(Tipologias tipologias
) throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
if(tipologias
!=
null)
setTipologias
(tipologias.
serialize());
}
public static class TipologiaLoadExeption
extends 1.5.0/docs/api/java/lang/Exception.html">Exception
{
boolean teacherFail =
false;
boolean turmaFail =
false;
public TipologiaLoadExeption
(boolean teacherFail,
boolean turmaFail
) {
this.
teacherFail = teacherFail
;
this.
turmaFail = turmaFail
;
}
public boolean isTeacherFail
() {
return teacherFail
;
}
public boolean isTurmaFail
() {
return turmaFail
;
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public 1.5.0/docs/api/java/lang/String.html">String getMessage
() {
return "Professor: " +
(teacherFail
? "Falhou" :
"OK") +
" Turma: " +
(turmaFail
? "Falhou" :
"OK");
}
}
/**
*
* @param myTipo
* @return
*/
public TipologiaPersistent loadPersistent
(Tipologia myTipo
) throws TipologiaLoadExeption
{
TipologiaPersistent tipologiaPersistent =
new TipologiaPersistent
();
tipologiaPersistent.
tipologiaOriginal = myTipo
;
tipologiaPersistent.
setTeacher(DaoFactory.
getTeacherDaoImpl().
loadBySigesCode(1.5.0/docs/api/java/lang/Integer.html">Integer.
parseInt(myTipo.
getCdDocente())));
tipologiaPersistent.
setCourseUnitTurma(findTurma
(myTipo.
getCdTurma()));
if(tipologiaPersistent.
getCourseUnitTurma() ==
null || tipologiaPersistent.
getTeacher() ==
null)
{
logger.
error("Turma ou professor nao encontrados enquanto fazia uma tipologia persistente: turma:" + myTipo.
getCdTurma() +
" teacher code: " + myTipo.
getCdDocente());
throw new TipologiaLoadExeption
(tipologiaPersistent.
getTeacher() ==
null,tipologiaPersistent.
getCourseUnitTurma() ==
null);
}
return tipologiaPersistent
;
}
public CourseUnitTurma findTurma
(1.5.0/docs/api/java/lang/String.html">String turma
)
{
if(getTurmas
() ==
null)
return null;
for(CourseUnitTurma t: getTurmas
())
{
if(t.
getTurma().
equals(turma
))
return t
;
}
return null;
}
public static class TipologiaPersistent
{
private Teacher teacher
;
private CourseUnitTurma courseUnitTurma
;
Tipologia tipologiaOriginal
;
/*private String cdTipologia;
private Integer ocorrencias = 0;
protected boolean extra;
protected boolean horRef;
protected boolean use; //campo auxiliar para marcar se vai ser ou não usada nas afetacoes especificas
//por omissão apenas as que têm sumários
protected boolean markWarning; //camp*/
public boolean isUse
() {
return tipologiaOriginal.
isUse();
}
public void setUse
(boolean use
) {
tipologiaOriginal.
use = use
;
}
public boolean isMarkWarning
() {
return tipologiaOriginal.
markWarning;
}
public void setMarkWarning
(boolean markWarning
) {
tipologiaOriginal.
markWarning = markWarning
;
}
public boolean isExtra
() {
return tipologiaOriginal.
extra;
}
public boolean isHorRef
() {
return tipologiaOriginal.
horRef;
}
public boolean isSumario
() {
return tipologiaOriginal.
ocorrencias !=
null && tipologiaOriginal.
ocorrencias > 0;
}
public void setExtra
(boolean extra
) {
tipologiaOriginal.
extra = extra
;
}
public void setHorRef
(boolean horRef
) {
tipologiaOriginal.
horRef = horRef
;
}
public Teacher getTeacher
() {
return teacher
;
}
public void setTeacher
(Teacher teacher
) {
this.
teacher = teacher
;
}
public CourseUnitTurma getCourseUnitTurma
() {
return courseUnitTurma
;
}
public void setCourseUnitTurma
(CourseUnitTurma courseUnitTurma
) {
this.
courseUnitTurma = courseUnitTurma
;
}
public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia
() {
return tipologiaOriginal.
cdTipologia;
}
public void setCdTipologia
(1.5.0/docs/api/java/lang/String.html">String cdTipologia
) {
tipologiaOriginal.
cdTipologia = cdTipologia
;
}
public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias
() {
return tipologiaOriginal.
ocorrencias ==
null ? 0:tipologiaOriginal.
ocorrencias;
}
public void setOcorrencias
(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias
) {
tipologiaOriginal.
ocorrencias = ocorrencias
;
}
public boolean isExclude
() {
return tipologiaOriginal.
exclude;
}
public void setExclude
(boolean exclude
) {
tipologiaOriginal.
exclude = exclude
;
}
}
/**
* Os codigos de tipologia devem ser limitados a T TP OT etc
*/
public static class Tipologia
{
protected 1.5.0/docs/api/java/lang/String.html">String cdDocente
;
protected 1.5.0/docs/api/java/lang/String.html">String cdTurma
;
protected 1.5.0/docs/api/java/lang/String.html">String cdTipologia
;
protected 1.5.0/docs/api/java/lang/String.html">String dsTipologia
;
protected 1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias =
0; // apenas faz sentido nos sumarios. no horario ref nao.
protected boolean tdocturma =
false;
//NOVO NESTE MOMENTO NAS TIPOLOGIAS APENAS O EXCLUDED É UTILIZADO
//O USE NAO É UTILIZADO, APENAS EM REAL TIME PARA VER SE SE USA OU NAO UMA TIPO
//NOS METODOS DE MERGE, POR EXEMPLO SO SE USAM AS QUE TEM SUMARIO, NAS SIMPES
//TODAS AS GERADAS SE USAM
//O MARKWARNING É USADO EM REAL TIME QUANDO UM AVISO É ENCONTRADO
//AS extras e as horarioRef são marcadas em tempo real caso estejam numa lista
//ou noutra assim como as tdocturma
protected boolean exclude =
false;
protected boolean use
; //campo auxiliar para marcar se vai ser ou não usada nas afetacoes especificas
protected boolean markWarning
; //campo auxiliar para marcar se vai ser ou não usada nas afetacoes especificas
protected boolean extra
;
protected boolean horRef
;
public boolean isTdocturma
() {
return tdocturma
;
}
public void setTdocturma
(boolean tdocturma
) {
this.
tdocturma = tdocturma
;
}
public boolean isUse
() {
return use
;
}
public boolean isExclude
() {
return exclude
;
}
public void setExclude
(boolean exclude
) {
this.
exclude = exclude
;
}
public void setUse
(boolean use
) {
this.
use = use
;
}
public boolean isMarkWarning
() {
return markWarning
;
}
public void setMarkWarning
(boolean markWarning
) {
this.
markWarning = markWarning
;
}
public 1.5.0/docs/api/java/lang/Integer.html">Integer getOcorrencias
() {
return ocorrencias ==
null ? 0:ocorrencias
;
}
public boolean hasOcorrencias
() {
return ocorrencias
!=
null && ocorrencias
> 0;
}
public void setOcorrencias
(1.5.0/docs/api/java/lang/Integer.html">Integer ocorrencias
) {
this.
ocorrencias = ocorrencias
;
}
public 1.5.0/docs/api/java/lang/String.html">String getCdDocente
() {
return cdDocente
;
}
public void setCdDocente
(1.5.0/docs/api/java/lang/String.html">String cdDocente
) {
this.
cdDocente = cdDocente
;
}
public 1.5.0/docs/api/java/lang/String.html">String getCdTurma
() {
return cdTurma
;
}
public void setCdTurma
(1.5.0/docs/api/java/lang/String.html">String cdTurma
) {
this.
cdTurma = cdTurma
;
}
public 1.5.0/docs/api/java/lang/String.html">String getCdTipologia
() {
return cdTipologia
;
}
public void setCdTipologia
(1.5.0/docs/api/java/lang/String.html">String cdTipologia
) {
this.
cdTipologia = cdTipologia
;
}
public 1.5.0/docs/api/java/lang/String.html">String getDsTipologia
() {
return dsTipologia
;
}
public void setDsTipologia
(1.5.0/docs/api/java/lang/String.html">String dsTipologia
) {
this.
dsTipologia = dsTipologia
;
}
public boolean isExtra
() {
return extra
;
}
public boolean isSumario
() {
return ocorrencias
!=
null && ocorrencias
> 0;
}
public boolean isHorRef
() {
return horRef
;
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public boolean equals
(5+0%2Fdocs%2Fapi+Object">Object o
)
{
if(o
instanceof Tipologia
){
boolean equalTurma =
(
(((Tipologia
)o
).
getCdTurma() ==
null && getCdTurma
() ==
null)
||
(((Tipologia
)o
).
getCdTurma().
equals(getCdTurma
()))
);
boolean equalDocente =
(
(((Tipologia
)o
).
getCdDocente() ==
null && getCdDocente
() ==
null)
||
(((Tipologia
)o
).
getCdDocente().
equals(getCdDocente
()))
);
if(equalTurma
&& equalDocente
)
{
if(((Tipologia
)o
).
getCdTipologia() ==
null && getCdTipologia
() ==
null)
return true;
if(((Tipologia
)o
).
getCdTipologia().
equals(getCdTipologia
()))
return true;
//Se uma das tipologias é simples virtual tem de ser sempre igual à outra seja ela qual for
//pois a simples tem de fazer match em todas
if(((Tipologia
)o
).
getCdTipologia().
equals(Globals.
BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE)
||
getCdTipologia
().
equals(Globals.
BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE))
return true;
}
}
return false;
}
public boolean equalsIncDsFields
(5+0%2Fdocs%2Fapi+Object">Object o
)
{
return o
instanceof Tipologia
&&
equals
(o
)
&&
(
(((Tipologia
)o
).
getDsTipologia() ==
null && getDsTipologia
() ==
null)
||
(((Tipologia
)o
).
getDsTipologia().
equals(getDsTipologia
())))
&&
(
(((Tipologia
)o
).
getOcorrencias() ==
null && getOcorrencias
() ==
null)
||
(((Tipologia
)o
).
getOcorrencias().
equals(getOcorrencias
())))
;
}
}
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
)
{
}
/**
* Marca uma tipologia como excluida em todas as Listas
* @param cdDocente
* @param cdTipologia
* @param cdTurma
*/
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
)
{
try {
boolean found =
false;
Tipologias tipoClass = getTipologiasClass
();
Tipologia proto =
new Tipologia
();
proto.
setCdDocente(cdDocente
);
proto.
setCdTipologia(cdTipologia
);
proto.
setCdTurma(cdTurma
);
if(tipoClass.
getTipologiasSumarios() !=
null)
for(Tipologia tipo: tipoClass.
getTipologiasSumarios())
{
if(tipo.
equals(proto
))
{
tipo.
setExclude(excluded
);
found =
true;
}
}
if(tipoClass.
getTipologiasHorarioReferencia() !=
null)
for(Tipologia tipo: tipoClass.
getTipologiasHorarioReferencia())
{
if(tipo.
equals(proto
))
{
tipo.
setExclude(excluded
);
found =
true;
}
}
if(tipoClass.
getTipologiasExtraAdicionadas() !=
null)
for(Tipologia tipo: tipoClass.
getTipologiasExtraAdicionadas())
{
if(tipo.
equals(proto
))
{
tipo.
setExclude(excluded
);
found =
true;
}
}
if(tipoClass.
getTipologiasTdocTurma() !=
null)
for(Tipologia tipo: tipoClass.
getTipologiasTdocTurma())
{
if(tipo.
equals(proto
))
{
tipo.
setExclude(excluded
);
found =
true;
}
}
if(!found
)
{
logger.
info("Tipologia não encontrada para excluir, provavelmente é uma tipologia que foi carregada da lista de docentes por não pertencer às tipologias");
logger.
info("Vamos adicionar tipologia Extra à lista de tipologias da unidade");
Tipologia tipoExtra =
new Tipologia
();
tipoExtra.
cdDocente = cdDocente
;
tipoExtra.
cdTurma = cdTurma
;
tipoExtra.
cdTipologia = Globals.
BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE;
tipoExtra.
dsTipologia = Globals.
BACO_TIPOLOGIA_SIMPLES_DS;
tipoExtra.
extra =
true;
tipoExtra.
exclude = excluded
;
if(tipoClass.
getTipologiasExtraAdicionadas() ==
null)
tipoClass.
setTipologiasExtraAdicionadas(new ArrayList
<Tipologia
>());
tipoClass.
getTipologiasExtraAdicionadas().
add(tipoExtra
);
}
setTipologiasClass
(tipoClass
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable e
) {
logger.
error(e,e
);
}
}
public static class MergedTipologias
{
ArrayList
<Tipologia
> tipologiasWithMarkedAndUsed =
new ArrayList
<Tipologia
>();
public ArrayList
<Tipologia
> getTipologiasWithMarkedAndUsed
() {
return tipologiasWithMarkedAndUsed
;
}
public void setTipologiasWithMarkedAndUsed
(ArrayList
<Tipologia
> tipologiasWithMarkedAndUsed
) {
this.
tipologiasWithMarkedAndUsed = tipologiasWithMarkedAndUsed
;
}
}
public static class Tipologias
{
ArrayList
<Tipologia
> tipologiasHorarioReferencia =
new ArrayList
<Tipologia
>();
ArrayList
<Tipologia
> tipologiasSumarios =
new ArrayList
<Tipologia
>();
ArrayList
<Tipologia
> tipologiasExtraAdicionadas =
new ArrayList
<Tipologia
>();
ArrayList
<Tipologia
> tipologiasUsadas =
new ArrayList
<Tipologia
>();
ArrayList
<Tipologia
> tipologiasMarcadas =
new ArrayList
<Tipologia
>();
ArrayList
<Tipologia
> tipologiasTdocTurma =
new ArrayList
<Tipologia
>();
public ArrayList
<Tipologia
> getTipologiasTdocTurma
() {
return tipologiasTdocTurma ==
null ? new ArrayList
<Tipologia
>() : tipologiasTdocTurma
;
}
public void setTipologiasTdocTurma
(ArrayList
<Tipologia
> tipologiasTdocTurma
) { this.
tipologiasTdocTurma = tipologiasTdocTurma
; }
public ArrayList
<Tipologia
> getTipologiasHorarioReferencia
() {
return tipologiasHorarioReferencia ==
null ? new ArrayList
<Tipologia
>() : tipologiasHorarioReferencia
;
}
public void setTipologiasHorarioReferencia
(ArrayList
<Tipologia
> tipologiasHorarioReferencia
) {
this.
tipologiasHorarioReferencia = tipologiasHorarioReferencia
;
}
public ArrayList
<Tipologia
> getTipologiasSumarios
() {
return tipologiasSumarios ==
null ? new ArrayList
<Tipologia
>() : tipologiasSumarios
;
}
public void setTipologiasSumarios
(ArrayList
<Tipologia
> tipologiasSumarios
) {
this.
tipologiasSumarios = tipologiasSumarios
;
}
public ArrayList
<Tipologia
> getTipologiasExtraAdicionadas
() {
return tipologiasExtraAdicionadas ==
null ? new ArrayList
<Tipologia
>() : tipologiasExtraAdicionadas
;
}
public void setTipologiasExtraAdicionadas
(ArrayList
<Tipologia
> tipologiasExtraAdicionadas
) {
this.
tipologiasExtraAdicionadas = tipologiasExtraAdicionadas
;
}
public ArrayList
<Tipologia
> getTipologiasUsadas
() {
return tipologiasUsadas ==
null ? new ArrayList
<Tipologia
>() : tipologiasUsadas
;
}
public void setTipologiasUsadas
(ArrayList
<Tipologia
> tipologiasUsadas
) { this.
tipologiasUsadas = tipologiasUsadas
; }
public ArrayList
<Tipologia
> getTipologiasMarcadas
() {
return tipologiasMarcadas ==
null ? new ArrayList
<Tipologia
>() : tipologiasMarcadas
;
}
public void setTipologiasMarcadas
(ArrayList
<Tipologia
> tipologiasMarcadas
) { this.
tipologiasMarcadas = tipologiasMarcadas
; }
private static Genson getGenson
(){
Genson genson =
new GensonBuilder
()
.
exclude(5+0%2Fdocs%2Fapi+Object">Object.
class)
.
include(1.5.0/docs/api/java/lang/Boolean.html">Boolean.
class)
.
include(1.5.0/docs/api/java/lang/Integer.html">Integer.
class)
.
include(1.5.0/docs/api/java/lang/Long.html">Long.
class)
.
include(1.5.0/docs/api/java/lang/Double.html">Double.
class)
.
include(1.5.0/docs/api/java/lang/Float.html">Float.
class)
.
include("tipologiasExtraAdicionadas", Tipologias.
class)
.
include("tipologiasSumarios", Tipologias.
class)
.
include("tipologiasHorarioReferencia", Tipologias.
class)
.
include("tipologiasUsadas", Tipologias.
class)
.
include("tipologiasMarcadas", Tipologias.
class)
.
include("tipologiasTdocTurma", Tipologias.
class)
.
include("cdTipologia", Tipologia.
class)
.
include("cdDocente", Tipologia.
class)
.
include("cdTurma", Tipologia.
class)
.
include("dsTipologia",Tipologia.
class)
.
include("ocorrencias", Tipologia.
class)
.
include("tdocturma", Tipologia.
class)
.
include("exclude", Tipologia.
class)
.
create();
return genson
;
}
/*
private static Genson getGensonMergedTipologiasComplete(){
Genson genson = new GensonBuilder()
.exclude(Object.class)
.include(Boolean.class)
.include(Integer.class)
.include(Long.class)
.include(Double.class)
.include(Float.class)
.include("tipologiasWithMarkedAndUsed", MergedTipologias.class)
.include("cdTipologia", Tipologia.class)
.include("cdDocente", Tipologia.class)
.include("cdTurma", Tipologia.class)
.include("dsTipologia",Tipologia.class)
.include("ocorrencias", Tipologia.class)
.include("horRef", Tipologia.class)
.include("exclude", Tipologia.class)
.include("extra", Tipologia.class)
.include("use", Tipologia.class)
.include("tdocturma", Tipologia.class)
.include("markWarning", Tipologia.class)
.create();
return genson;
}*/
public 1.5.0/docs/api/java/lang/String.html">String serialize
() throws 1.5.0/docs/api/java/io/IOException.html">IOException
{
Genson genson = getGenson
();
return genson.
serialize(this);
}
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
{
if(serial ==
null)
return new Tipologias
();
return getGenson
().
deserialize(serial, Tipologias.
class);
}
public static void main
(1.5.0/docs/api/java/lang/String.html">String [] args
)
{
new TestCourseUnit
().
testTipologias();
}
/* Metodos em plenos funcionamento mas não sao usados para simplificar revisões foram comentados
public static String serializeMergedList(ArrayList<Tipologia> tipologias) throws IOException
{
MergedTipologias mergedTipologias = new MergedTipologias();
if(tipologias != null)
{
mergedTipologias.setTipologiasWithMarkedAndUsed(tipologias);
}
Genson genson = getGensonMergedTipologiasComplete();
return genson.serialize(mergedTipologias);
}
*/
/*
public static ArrayList<Tipologia> deserializeMergedTipologias(String serial) throws IOException
{
if(serial == null)
return new ArrayList<Tipologia>();
MergedTipologias mergedTipologias = getGensonMergedTipologiasComplete().deserialize(serial, MergedTipologias.class);
if(mergedTipologias.getTipologiasWithMarkedAndUsed() == null)
return new ArrayList<Tipologia>();
return mergedTipologias.getTipologiasWithMarkedAndUsed();
}
*/
/*
public String obtainMergeTipologiasSerialized() throws IOException
{
return serializeMergedList(obtainMergeTipologias());
}
*/
/**
* Junta todas as tipologias obtidas dos
* sumarios, horario(ref+trab) + extra + tdoc turma
* As restantes listas são as marcadas e as usadas
* que apenas estarão disponiveis quando houver gestão de marcação de tipologias
* e coloca todas numa lista de unicas
* Marca-as com isHorario, isSumario, isExtra
* @return
*/
public ArrayList
<Tipologia
> obtainMergeTipologias
()
{
ArrayList
<Tipologia
> merge =
new ArrayList
<Tipologia
>();
if(getTipologiasSumarios
() !=
null)
merge.
addAll(getTipologiasSumarios
());
/**
* OBTER TODAS DAS LISTAS SUMARIOS HORARIOS EXTRA E TDOC TURMA
*/
if(getTipologiasHorarioReferencia
() !=
null)
for(Tipologia tipo: getTipologiasHorarioReferencia
())
{
if(!merge.
contains(tipo
))
{
merge.
add(tipo
);
}
}
if(getTipologiasExtraAdicionadas
() !=
null)
for(Tipologia tipo: getTipologiasExtraAdicionadas
())
{
if(!merge.
contains(tipo
))
{
merge.
add(tipo
);
}
}
if(getTipologiasTdocTurma
() !=
null)
for(Tipologia tipo: getTipologiasTdocTurma
())
{
if(!merge.
contains(tipo
))
{
merge.
add(tipo
);
}
}
/**
* FIM DE OBTER TODAS DAS LISTAS SUMARIOS HORARIOS EXTRA E TDOC TURMA
*/
for(Tipologia tipo: merge
)
{
tipo.
setMarkWarning(false);
tipo.
setUse(false);
if(getTipologiasHorarioReferencia
() !=
null && getTipologiasHorarioReferencia
().
contains(tipo
))
{
tipo.
horRef =
true;
}
if(getTipologiasExtraAdicionadas
() !=
null && getTipologiasExtraAdicionadas
().
contains(tipo
))
{
tipo.
extra =
true;
}
//NOVO
if(getTipologiasTdocTurma
() !=
null && getTipologiasTdocTurma
().
contains(tipo
))
{
tipo.
tdocturma =
true;
}
}
if(getTipologiasMarcadas
() !=
null)
for(Tipologia t: getTipologiasMarcadas
())
{
for(Tipologia tMerge: merge
)
{
if(tMerge.
equals(t
))
{
tMerge.
setMarkWarning(true);
break;
}
}
}
if(getTipologiasUsadas
() !=
null)
for(Tipologia t: getTipologiasUsadas
())
{
for(Tipologia tMerge: merge
)
{
if(tMerge.
equals(t
))
{
tMerge.
setUse(true);
break;
}
}
}
//NAO SERVE PARA NADA
if(getTipologiasTdocTurma
() !=
null)
for(Tipologia t: getTipologiasTdocTurma
())
{
for(Tipologia tMerge: merge
)
{
if(tMerge.
equals(t
))
{
tMerge.
setUse(true);
break;
}
}
}
return merge
;
}
/**
*
*
* @param courseUnit
* @return
*/
public ArrayList
<Tipologia
> obtainTipologiasSimples
(CourseUnit courseUnit
)
{
ArrayList
<Tipologia
> merge =
new ArrayList
<Tipologia
>();
Map
<String,Map
<String,Tipologia
>> docenteTurmas =
new HashMap
<String,Map
<String,Tipologia
>>();
fullfillTipologiasSimples
(getTipologiasSumarios
(), docenteTurmas
);
fullfillTipologiasSimples
(getTipologiasExtraAdicionadas
(), docenteTurmas
);
fullfillTipologiasSimples
(getTipologiasHorarioReferencia
(), docenteTurmas
);
fullfillTipologiasSimples
(getTipologiasMarcadas
(), docenteTurmas
);
fullfillTipologiasSimples
(getTipologiasUsadas
(), docenteTurmas
);
fullfillTipologiasSimples
(getTipologiasTdocTurma
(), docenteTurmas
);
if(docenteTurmas.
size() ==
0)
{
//NAO Há sumários vamos associar todos os docentes a todas as turmas
obtainTipologiasSimplesParaEstesTeachersParaTodasAsTurmas
(courseUnit,
new HashSet
<Teacher
>(courseUnit.
getTeachers()), merge
);
}
else
{
for(1.5.0/docs/api/java/util/Map.html">Map.
Entry<String,Map
<String,Tipologia
>> docentes: docenteTurmas.
entrySet())
{
for(Tipologia tipologia: docentes.
getValue().
values())
{
merge.
add(tipologia
);
}
}
//NOVO
//FRAGMENTO PARA OS QUE FALTAM APENAS POR SEGURANÇA JA DEVIAM TER VINDO DO T_DOC_TURMA
//DO SINC
//NO LOCAL ONDE AS TIPOLOGIAS SAO INCIALIZADAS NO IMPORT
//ISTO E MAU PORQUE SE HOUVER TURMAS OS DOCENTES SAO ASSOCIADOS
//A TODAS E SO DEVERIAM SER ASSOCIADOS AS QUE ESTAO ASSOCAIDOS NO SIGES
//POR ISSO E QUE ISTO SO SE RESOLVE NO DisciplinaDao durante a Sincronizacao
//para saber as relacoes TDOC TURMA
Map
<String,Teacher
> professoresEsperados =
new HashMap
<String, Teacher
>();
for(Teacher t: courseUnit.
getTeachers())
{
professoresEsperados.
put(t.
getSigesCode() +
"", t
);
}
for(CourseUnitImpl.
Tipologia tMerge: merge
)
{
professoresEsperados.
remove(tMerge.
getCdDocente());
}
obtainTipologiasSimplesParaEstesTeachersParaTodasAsTurmas
(courseUnit, professoresEsperados.
values(), merge
);
//FRAGMENTO EM FALTA PARA INTRODUZIR PROFS SEM SUMARIO
}
return merge
;
}
private void obtainTipologiasSimplesParaEstesTeachersParaTodasAsTurmas
(CourseUnit courseUnit, Collection
<Teacher
> teachers, ArrayList
<Tipologia
> merge
) {
if(courseUnit.
getTurmas() !=
null && courseUnit.
getTeachers() !=
null)
{
for(CourseUnitTurma turma: courseUnit.
getTurmas())
{
for(Teacher t : teachers
)
{
Tipologia simples =
new Tipologia
();
simples.
setMarkWarning(true);
//simples.setUse(true);
simples.
setCdDocente(""+t.
getSigesCode());
simples.
setCdTurma(turma.
getTurma());
simples.
setCdTipologia(Globals.
BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
simples.
setDsTipologia(Globals.
BACO_TIPOLOGIA_SIMPLES_DS);
merge.
add(simples
);
}
}
}
}
/**
* Cria uma tipologia Simples para cada par Docente-Turma nesta cadeira olhando para
* todas as tipologias existentes, uma vez que o Baco não guarda associações entre
* Docentes e Turmas isso será retirado das tipologias importadas
*
* @param tipologias
* @param docenteTurmas
*/
private void fullfillTipologiasSimples
(ArrayList
<Tipologia
> tipologias, Map
<String, Map
<String, Tipologia
>> docenteTurmas
) {
if(tipologias
!=
null)
for(Tipologia tipo: tipologias
)
{
Map
<String,Tipologia
> turmasDocente = docenteTurmas.
get(tipo.
getCdDocente());
if(turmasDocente ==
null)
turmasDocente =
new HashMap
<String,Tipologia
>();
docenteTurmas.
put(tipo.
getCdDocente(),turmasDocente
);
Tipologia simples = turmasDocente.
get(tipo.
getCdTurma());
//Se nao tiver entrado o sumario vai entrar aqui como TDOC Turma com 0 ocorrencias
if(simples==
null)
{
simples =
new Tipologia
();
simples.
setCdDocente(tipo.
getCdDocente());
simples.
setCdTurma(tipo.
getCdTurma());
simples.
setCdTipologia(Globals.
BACO_TIPOLOGIA_SIMPLES_VIRTUAL_CODE);
simples.
setDsTipologia(Globals.
BACO_TIPOLOGIA_SIMPLES_DS);
//simples.setUse(true);//TODAS USADAS
if(tipo.
hasOcorrencias())
{
simples.
setOcorrencias(tipo.
getOcorrencias());
}
turmasDocente.
put(tipo.
getCdTurma(), simples
);
if(tipo.
isHorRef())
simples.
horRef =
true;
if(tipo.
isExtra())
simples.
extra =
true;
if(tipo.
isTdocturma())
simples.
setTdocturma(true);
if(tipo.
isExclude())
simples.
setExclude(true);
}
//se for tDocturma e ja tiver entrado como sumário nao entra aqui sequer
//Nunca entra primeiro como TDOC Turma se já entrou como sumário
else if(tipo.
hasOcorrencias())
{
if(tipo.
isHorRef())
simples.
horRef =
true;
if(tipo.
isExtra())
simples.
extra =
true;
if(simples.
getOcorrencias() ==
null)
simples.
setOcorrencias(0
);
simples.
setOcorrencias(simples.
getOcorrencias()+tipo.
getOcorrencias());
if(tipo.
isTdocturma())
simples.
setTdocturma(true);
//Nao devera fazer falta porque quando excluimos uma simples excluimos todas
if(tipo.
isExclude())
simples.
setExclude(true);
}
}
}
}
/**Services**/
/**
* Require Open Transaction
* @return 1, 2, 3, 4
*/
public int getAnoPlanoFromStudiesPlan
()
{
CourseImpl courseImpl =
(CourseImpl
) DaoFactory.
getCourseDaoImpl().
narrow(getCourse
());
1.5.0/docs/api/java/lang/Integer.html">Integer ano = courseImpl.
getUnidadeAnoPlano(getSemestre
(),getCode
());
if(ano ==
null)
return -
1;
else
return ano
;
}
/**
* Require Open Transaction
* @return S1, .., S8, T1 .. T8, A1 .. A4
*/
public 1.5.0/docs/api/java/lang/String.html">String getPeriodoPlanoFromStudiesPlan
()
{
CourseImpl courseImpl =
(CourseImpl
) DaoFactory.
getCourseDaoImpl().
narrow(getCourse
());
return courseImpl.
getUnidadePeriodoPlano(getSemestre
(), getCode
());
}
/**
* Require Open Transaction
* @return S1 = 1, S2 = 2,S3 = 3,S4 = 4 ...T1 e T2 = 1, T2 e T3 = 2, T4 e T5 = 3 ...
*/
public int getSemestrePlanoConvertido
()
{
CourseImpl courseImpl =
(CourseImpl
) DaoFactory.
getCourseDaoImpl().
narrow(getCourse
());
1.5.0/docs/api/java/lang/Integer.html">Integer semestre = courseImpl.
getUnidadeSemestrePlanoConvertido(getSemestre
(), getCode
());
if(semestre ==
null)
return -
1;
else
return semestre
;
}
/**
* Require Open Transaction
* @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
*/
public int getSemestrePlanoAbsoluto
()
{
1.5.0/docs/api/java/lang/String.html">String id = getSemestre
();
if(id.
equals("S1"))
return 1;
else if(id.
equals("S2"))
return 2;
else if(id.
equals("A"))
return -
1;
else if(id.
equals("T1"))
return 1;
else if(id.
equals("T2"))
return 1;
else if(id.
equals("T3"))
return 2;
else if(id.
equals("T4"))
return 2;
return -
1;
}
public 1.5.0/docs/api/java/lang/String.html">String getSemestreAbsolutoS1S2
()
{
1.5.0/docs/api/java/lang/String.html">String id = getSemestre
();
if(id.
equals("S1"))
return "S1";
else if(id.
equals("S2"))
return "S2";
else if(id.
equals("A"))
return "S2";
else if(id.
equals("T1"))
return "S1";
else if(id.
equals("T2"))
return "S1";
else if(id.
equals("T3"))
return "S2";
else if(id.
equals("T4"))
return "S2";
return "S2";
}
}