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 }