001    /*
002      GRANITE DATA SERVICES
003      Copyright (C) 2013 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    
021    package org.granite.messaging.jmf;
022    
023    import java.util.ArrayList;
024    import java.util.Arrays;
025    import java.util.Collections;
026    import java.util.Date;
027    import java.util.HashMap;
028    import java.util.HashSet;
029    import java.util.List;
030    import java.util.Map;
031    import java.util.Set;
032    
033    import org.granite.messaging.jmf.reflect.Reflection;
034    
035    /**
036     * @author Franck WOLFF
037     */
038    public class DefaultSharedContext implements SharedContext {
039    
040            protected static List<String> JAVA_DEFAULT_STORED_STRINGS = Arrays.asList(
041                    Boolean.class.getName(),
042                    Character.class.getName(),
043                    Byte.class.getName(),
044                    Short.class.getName(),
045                    Integer.class.getName(),
046                    Long.class.getName(),
047                    Float.class.getName(),
048                    Double.class.getName(),
049                    
050                    String.class.getName(),
051                    Object.class.getName(),
052    
053                    Date.class.getName(),
054                    
055                    List.class.getName(),
056                    ArrayList.class.getName(),
057                    
058                    Set.class.getName(),
059                    HashSet.class.getName(),
060                    
061                    Map.class.getName(),
062                    HashMap.class.getName(),
063                    
064                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentList",
065                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentMap",
066                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSet",
067                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentBag",
068                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSortedSet",
069                    JMFConstants.CLIENT_PERSISTENCE_COLLECTION_PACKAGE + ".PersistentSortedMap"
070            );
071            
072            protected final CodecRegistry codecRegistry;
073            protected final Reflection reflection;
074            protected final List<String> defaultStoredStrings;
075            
076            public DefaultSharedContext() {
077                    this(null, null, null);
078            }
079            
080            public DefaultSharedContext(CodecRegistry codecRegistry) {
081                    this(codecRegistry, null, null);
082            }
083            
084            public DefaultSharedContext(CodecRegistry codecRegistry, ClassLoader classLoader) {
085                    this(codecRegistry, classLoader, null);
086            }
087            
088            public DefaultSharedContext(CodecRegistry codecRegistry, ClassLoader classLoader, List<String> defaultStoredStrings) {
089                    this.codecRegistry = (codecRegistry != null ? codecRegistry : new DefaultCodecRegistry());
090                    
091                    this.reflection = new Reflection(classLoader);
092                    
093                    Set<String> defaultStoredStringsSet = new HashSet<String>(JAVA_DEFAULT_STORED_STRINGS);
094                    if (defaultStoredStrings != null)
095                            defaultStoredStringsSet.addAll(defaultStoredStrings);
096                    this.defaultStoredStrings = Collections.unmodifiableList(new ArrayList<String>(defaultStoredStringsSet));
097            }
098    
099            public CodecRegistry getCodecRegistry() {
100                    return codecRegistry;
101            }
102    
103            public Reflection getReflection() {
104                    return reflection;
105            }
106    
107            public List<String> getDefaultStoredStrings() {
108                    return defaultStoredStrings;
109            }
110    
111            public String getAlias(String className) {
112                    return className;
113            }
114    }