Subversion Repositories bacoAlunos

Rev

Blame | Compare with Previous | Last modification | View Log | RSS feed

package pt.estgp.estgweb.filters.filters;

import pt.estgp.estgweb.domain.UserSession;
import pt.estgp.estgweb.domain.DomainObjectFactory;
import pt.estgp.estgweb.domain.SessionObject;
import pt.estgp.estgweb.domain.UserSessionImpl;
import pt.estgp.estgweb.domain.dao.DaoFactory;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.filters.chains.FlowFilter;
import pt.utl.ist.berserk.ServiceRequest;
import pt.utl.ist.berserk.ServiceResponse;
import pt.utl.ist.berserk.logic.filterManager.exceptions.FilterException;
import pt.utl.ist.berserk.logic.filterManager.FilterParameters;

import java.io.Serializable;
import java.util.Date;

import org.hibernate.ObjectNotFoundException;
import org.apache.log4j.Logger;
import jomm.dao.impl.AbstractDao;

/**
 * @author Jorge Machado
 * @date 28/Fev/2008
 * @time 3:49:03
 * @see pt.estgp.estgweb.filters
 */

public class Session extends FlowFilter
{

    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(Session.class);

    public static final int TIMEOUT_SESSION = ConfigProperties.getShortProperty("user.session.timeout.minutes") * 60 * 1000;

    private void putSessionInArgs(UserSession userSession, ServiceRequest request)
    {
        request.getServiceParameters().addParameter(Globals.USER_SESSION_KEY,userSession);
    }

    public void execute(ServiceRequest request, ServiceResponse response, FilterParameters filterParameters) throws FilterException, 1.5.0/docs/api/java/lang/Exception.html">Exception {
        UserSessionImpl userSession = null;
        try
        {
            userSession = (UserSessionImpl) DaoFactory.getUserSessionDaoImpl().get((1.5.0/docs/api/java/io/Serializable.html">Serializable) request.getRequester());
            if(userSession != null && userSession.getObjects() != null)
                for(SessionObject sessionObject: userSession.getObjects())
                {
                    sessionObject.getXmlObject();
                }
            if(userSession != null && new 5+0%2Fdocs%2Fapi+Date">Date().getTime() - userSession.getSaveDate().getTime() < TIMEOUT_SESSION)
            {
                putSessionInArgs(userSession,request);
                return;
            }
        }
        catch(ObjectNotFoundException e)
        {
            logger.debug("object not found for requester:" + request.getRequester());
        }

        if(userSession == null)
        {
            userSession = DomainObjectFactory.createUserSessionImpl();
            userSession.setCookie((1.5.0/docs/api/java/lang/String.html">String) request.getRequester());
        }
        else
        {
            userSession.reset();
        }
        userSession.setSaveDate(new 5+0%2Fdocs%2Fapi+Date">Date());
        DaoFactory.getUserSessionDaoImpl().saveOrUpdate(userSession);
        putSessionInArgs(userSession,request);
    }
}