package pt.estgp.estgweb.filters.filters;
import org.apache.log4j.Logger;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.domain.CourseUnitImpl;
import pt.estgp.estgweb.domain.CourseUnitImpl.CourseUnitClearancesOperation;
import pt.estgp.estgweb.domain.Teacher;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.domain.utils.SimpleClearanceRuledSupport;
import pt.estgp.estgweb.filters.chains.LoadControlFilter;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import java.util.List;
/**
* @author Jorge Machado
* @date 4/Jun/2008
* @see pt.estgp.estgweb.filters.filters
*/
public class CourseUnitEvaluationClearancesFilter
extends LoadControlFilter
{
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(CourseUnitEvaluationClearancesFilter.
class);
public static final 1.5.0/docs/api/java/lang/String.html">String COURSEUNIT_EVALUATION_CLEARED_SERV_PARAM =
"COURSEUNIT_EVALUATION_CLEARED";
public void execute
(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters
) throws FilterException,
1.5.0/docs/api/java/lang/Exception.html">Exception
{
UserSessionImpl usession =
(UserSessionImpl
) request.
getServiceParameters().
getParameter(Globals.
USER_SESSION_KEY);
1.5.0/docs/api/java/lang/Long.html">Long unitId =
(1.5.0/docs/api/java/lang/Long.html">Long) request.
getServiceParameters().
getParameter((1.5.0/docs/api/java/lang/String.html">String) filterParameters.
parametersArray()[0
]);
CourseUnitImpl c =
(CourseUnitImpl
) DaoFactory.
getCourseUnitDaoImpl().
get(unitId
);
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.
EVALUATION_ALL.
name(),usession
);
}
if(usession.
getUser() !=
null && usession.
getUser() instanceof Teacher
)
{
boolean teacher =
((Teacher
)(usession.
getUser())).
isTeacherOfCourseUnit(c.
getId(),
true);
boolean responsable = c.
getResponsableTeacher()!=
null && usession.
getUser().
getId() == c.
getResponsableTeacher().
getId();
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.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(usession.
getUser() !=
null && usession.
getUser() instanceof Teacher
&& (((usession.
getUser())).
hasRole(c.
getCourse().
getValidationRole())
||
((usession.
getUser()) == c.
getCourse().
getCoordinator()))
)
{
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
);
}
}
c.
setClearanceRuledSupport(s
);
request.
getServiceParameters().
addParameter(COURSEUNIT_EVALUATION_CLEARED_SERV_PARAM,c
);
}
}