001    /**
002     *   GRANITE DATA SERVICES
003     *   Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004     *
005     *   This file is part of the Granite Data Services Platform.
006     *
007     *   Granite Data Services is free software; you can redistribute it and/or
008     *   modify it under the terms of the GNU Lesser General Public
009     *   License as published by the Free Software Foundation; either
010     *   version 2.1 of the License, or (at your option) any later version.
011     *
012     *   Granite Data Services is distributed in the hope that it will be useful,
013     *   but WITHOUT ANY WARRANTY; without even the implied warranty of
014     *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015     *   General Public License for more details.
016     *
017     *   You should have received a copy of the GNU Lesser General Public
018     *   License along with this library; if not, write to the Free Software
019     *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020     *   USA, or see <http://www.gnu.org/licenses/>.
021     */
022    package org.granite.messaging.jmf;
023    
024    import java.util.ArrayList;
025    import java.util.Arrays;
026    import java.util.Collections;
027    import java.util.Date;
028    import java.util.HashMap;
029    import java.util.HashSet;
030    import java.util.List;
031    import java.util.Map;
032    import java.util.Set;
033    
034    import org.granite.messaging.AliasRegistry;
035    import org.granite.messaging.DefaultAliasRegistry;
036    import org.granite.messaging.reflect.Reflection;
037    
038    /**
039     * @author Franck WOLFF
040     */
041    public class DefaultSharedContext implements SharedContext {
042    
043            protected static List<String> JAVA_DEFAULT_STORED_STRINGS = Arrays.asList(
044                    Boolean.class.getName(),
045                    Character.class.getName(),
046                    Byte.class.getName(),
047                    Short.class.getName(),
048                    Integer.class.getName(),
049                    Long.class.getName(),
050                    Float.class.getName(),
051                    Double.class.getName(),
052                    
053                    String.class.getName(),
054                    Object.class.getName(),
055    
056                    Date.class.getName(),
057                    
058                    List.class.getName(),
059                    ArrayList.class.getName(),
060                    
061                    Set.class.getName(),
062                    HashSet.class.getName(),
063                    
064                    Map.class.getName(),
065                    HashMap.class.getName(),
066                    
067                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentList",
068                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentMap",
069                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSet",
070                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentBag",
071                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSortedSet",
072                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSortedMap"
073            );
074            
075            protected final CodecRegistry codecRegistry;
076            protected final Reflection reflection;
077            protected final List<String> defaultStoredStrings;
078            protected final AliasRegistry aliasRegistry;
079            
080            public DefaultSharedContext() {
081                    this(null, null, null, null);
082            }
083            
084            public DefaultSharedContext(CodecRegistry codecRegistry) {
085                    this(codecRegistry, null, null, null);
086            }
087    
088            public DefaultSharedContext(CodecRegistry codecRegistry, List<String> defaultStoredStrings) {
089                    this(codecRegistry, defaultStoredStrings, null, null);
090            }
091            
092            public DefaultSharedContext(CodecRegistry codecRegistry, List<String> defaultStoredStrings, Reflection reflection, AliasRegistry aliasRegistry) {
093                    this.codecRegistry = (codecRegistry != null ? codecRegistry : new DefaultCodecRegistry());
094                    
095                    List<String> defaultStoredStringsTmp = new ArrayList<String>(JAVA_DEFAULT_STORED_STRINGS);
096                    if (defaultStoredStrings != null)
097                            defaultStoredStringsTmp.addAll(defaultStoredStrings);
098                    this.defaultStoredStrings = Collections.unmodifiableList(defaultStoredStringsTmp);
099                    
100                    this.reflection = (reflection != null ? reflection : new Reflection(null));
101                    
102                    this.aliasRegistry = aliasRegistry != null ? aliasRegistry : new DefaultAliasRegistry();
103            }
104    
105            public CodecRegistry getCodecRegistry() {
106                    return codecRegistry;
107            }
108    
109            public Reflection getReflection() {
110                    return reflection;
111            }
112    
113            public List<String> getDefaultStoredStrings() {
114                    return defaultStoredStrings;
115            }
116            
117            public AliasRegistry getAliasRegistry() {
118                    return aliasRegistry;
119            }
120            
121            public String getRemoteAlias(String className) {
122                    return aliasRegistry.getAliasForType(className);
123            }
124    
125            public String getClassName(String remoteAlias) {
126                    return aliasRegistry.getTypeForAlias(remoteAlias);
127            }
128    }