001 package org.picocontainer.defaults;
002
003 import java.util.Map;
004
005 /**
006 * A simple factory for ordered maps: use JDK1.4's java.util.LinkedHashMap if available,
007 * or commons-collection's LinkedMap, or defaults to unordered java.util.HashMap
008 *
009 * @author Gregory Joseph
010 * @version $Revision: $
011 */
012 public class MapFactory {
013 private static final String JDK14 = "java.util.LinkedHashMap";
014 private static final String COMMONS = "org.apache.commons.collections.map.LinkedMap";
015 private static final String NON_ORDERED = "java.util.HashMap";
016
017 private Class clazz;
018
019 public MapFactory() {
020 try {
021 clazz = Class.forName(JDK14);
022 } catch (ClassNotFoundException e) {
023 try {
024 clazz = Class.forName(COMMONS);
025 } catch (ClassNotFoundException e1) {
026 try {
027 clazz = Class.forName(NON_ORDERED);
028 } catch (ClassNotFoundException e2) {
029 throw new IllegalStateException("What kind of JRE is this ? No " + NON_ORDERED + " class was found.");
030 }
031 }
032 }
033 }
034
035 public Map newInstance() {
036 try {
037 return (Map) clazz.newInstance();
038 } catch (InstantiationException e) {
039 throw new RuntimeException("Could not instantiate " + clazz + " : " + e.getMessage());
040 } catch (IllegalAccessException e) {
041 throw new RuntimeException("Could not instantiate " + clazz + " : " + e.getMessage());
042 }
043 }
044 }