Index: SystemFlavorMap.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/awt/datatransfer/SystemFlavorMap.java,v
retrieving revision 1.6
diff -u -r1.6 SystemFlavorMap.java
--- SystemFlavorMap.java 2 Jul 2005 20:32:26 -0000 1.6
+++ SystemFlavorMap.java 25 Nov 2005 22:06:23 -0000
@@ -41,6 +41,7 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.WeakHashMap;
/**
* This class maps between native platform type names and DataFlavors.
@@ -54,9 +55,10 @@
public final class SystemFlavorMap implements FlavorMap, FlavorTable
{
/**
- * The default (instance) flavor map.
+ * The map which maps the thread's ClassLoaders
to
+ * SystemFlavorMaps
.
*/
- private static FlavorMap defaultFlavorMap;
+ private static final Map systemFlavorMaps = new WeakHashMap();
/**
* Private constructor.
@@ -98,14 +100,31 @@
}
/**
- * Returns the default (instance) (System)FlavorMap.
+ * Returns the (System)FlavorMap for the current thread's
+ * ClassLoader.
*/
public static FlavorMap getDefaultFlavorMap ()
{
- if (defaultFlavorMap == null)
- defaultFlavorMap = new SystemFlavorMap ();
-
- return defaultFlavorMap;
+ ClassLoader classLoader = Thread.currentThread()
+ .getContextClassLoader();
+
+ //if ContextClassLoader not set, use system default
+ if(classLoader == null)
+ {
+ classLoader = ClassLoader.getSystemClassLoader();
+ }
+
+ synchronized(systemFlavorMaps)
+ {
+ FlavorMap map = (FlavorMap)
+ systemFlavorMaps.get(classLoader);
+ if(map == null)
+ {
+ map = new SystemFlavorMap();
+ systemFlavorMaps.put(classLoader, map);
+ }
+ return map;
+ }
}
/**