Subversion Repositories bacoAlunos

Rev

Rev 1312 | Rev 1326 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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);
    }
}