    001    //  Copyright 2011 The Apache Software Foundation
    002    //
    003    //  Licensed under the Apache License, Version 2.0 (the "License");
    004    //  you may not use this file except in compliance with the License.
    005    //  You may obtain a copy of the License at
    006    //
    007    //  http://www.apache.org/licenses/LICENSE-2.0
    008    //
    009    //  Unless required by applicable law or agreed to in writing, software
    010    //  distributed under the License is distributed on an "AS IS" BASIS,
    011    //  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012    //  See the License for the specific language governing permissions and
    013    //  limitations under the License.
    014
    015    package org.apache.tapestry5.internal.services;
    016
    017    import org.apache.tapestry5.SymbolConstants;
    018    import org.apache.tapestry5.ioc.annotations.Symbol;
    019    import org.apache.tapestry5.services.Session;
    020    import org.apache.tapestry5.services.SessionPersistedObjectAnalyzer;
    021
    022    import javax.servlet.http.HttpServletRequest;
    023    import javax.servlet.http.HttpSession;
    024
    025    public class TapestrySessionFactoryImpl implements TapestrySessionFactory
    026    {
    027        private boolean clustered;
    028        private final SessionPersistedObjectAnalyzer analyzer;
    029        private final HttpServletRequest request;
    030
    031        public TapestrySessionFactoryImpl(
    032                @Symbol(SymbolConstants.CLUSTERED_SESSIONS)
    033                boolean clustered,
    034                SessionPersistedObjectAnalyzer analyzer,
    035                HttpServletRequest request)
    036        {
    037            this.clustered = clustered;
    038            this.analyzer = analyzer;
    039            this.request = request;
    040        }
    041
    042        public Session getSession(boolean create)
    043        {
    044            final HttpSession httpSession = request.getSession(create);
    045
    046            if (httpSession == null)
    047            {
    048                return null;
    049            }
    050
    051            if (clustered)
    052            {
    053                return new ClusteredSessionImpl(request, httpSession, analyzer);
    054            }
    055
    056            return new SessionImpl(request, httpSession);
    057        }
    058    }