001/*
002  GRANITE DATA SERVICES
003  Copyright (C) 2011 GRANITE DATA SERVICES S.A.S.
004
005  This file is part of Granite Data Services.
006
007  Granite Data Services is free software; you can redistribute it and/or modify
008  it under the terms of the GNU Library General Public License as published by
009  the Free Software Foundation; either version 2 of the License, or (at your
010  option) any later version.
011
012  Granite Data Services is distributed in the hope that it will be useful, but
013  WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
014  FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
015  for more details.
016
017  You should have received a copy of the GNU Library General Public License
018  along with this library; if not, see <http://www.gnu.org/licenses/>.
019*/
020
021package org.granite.context;
022
023import java.util.Map;
024
025import org.granite.config.GraniteConfig;
026import org.granite.config.flex.ServicesConfig;
027
028/**
029 * @author Franck WOLFF
030 */
031public abstract class GraniteContext {
032
033        public static final String SESSION_LAST_ACCESSED_TIME_KEY = "org.granite.session.lastAccessedTime";
034
035    private static ThreadLocal<GraniteContext> instance = new ThreadLocal<GraniteContext>() {
036        @Override
037        protected GraniteContext initialValue() {
038            return (null);
039        }
040    };
041
042    private final GraniteConfig graniteConfig;
043    private final ServicesConfig servicesConfig;
044    private final AMFContext amfContext;
045    private final String sessionId;
046    private final String clientType;
047
048    public GraniteContext(GraniteConfig graniteConfig, ServicesConfig servicesConfig, String sessionId) {
049        this(graniteConfig, servicesConfig, sessionId, null);
050    }
051    public GraniteContext(GraniteConfig graniteConfig, ServicesConfig servicesConfig, String sessionId, String clientType) {
052        this.servicesConfig = servicesConfig;
053        this.graniteConfig = graniteConfig;
054        this.amfContext = new AMFContextImpl();
055        this.sessionId = sessionId;
056        this.clientType = clientType != null ? clientType : "as3";
057    }
058
059    public static GraniteContext getCurrentInstance() {
060        return instance.get();
061    }
062
063    protected static void setCurrentInstance(GraniteContext context) {
064        instance.set(context);
065    }
066
067    public static void release() {
068        instance.set(null);
069    }
070
071    public ServicesConfig getServicesConfig() {
072        return servicesConfig;
073    }
074
075    public GraniteConfig getGraniteConfig() {
076        return graniteConfig;
077    }
078
079    public AMFContext getAMFContext() {
080        return amfContext;
081    }
082    
083    public String getClientType() {
084        return clientType;
085    }
086    
087    public String getSessionId() {
088        return sessionId;
089    }
090    
091    public abstract Object getSessionLock();
092
093    public abstract Map<String, String> getInitialisationMap();
094    public abstract Map<String, Object> getApplicationMap();
095    public abstract Map<String, Object> getSessionMap();
096    public abstract Map<String, Object> getSessionMap(boolean create);
097    public abstract Map<String, Object> getRequestMap();
098}