diff options
Diffstat (limited to 'src/jake2/game/SuperAdapter.java')
-rw-r--r-- | src/jake2/game/SuperAdapter.java | 87 |
1 files changed, 58 insertions, 29 deletions
diff --git a/src/jake2/game/SuperAdapter.java b/src/jake2/game/SuperAdapter.java index 67285aa..29dcfb5 100644 --- a/src/jake2/game/SuperAdapter.java +++ b/src/jake2/game/SuperAdapter.java @@ -19,51 +19,80 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 09.01.2004 by RST. -// $Id: SuperAdapter.java,v 1.1 2004-07-07 19:59:24 hzi Exp $ +// $Id: SuperAdapter.java,v 1.2 2004-08-20 21:29:58 salomo Exp $ package jake2.game; import jake2.qcommon.Com; +import java.util.Hashtable; import java.util.Vector; +public class SuperAdapter +{ -// import jake2.*; -// import jake2.client.*; -// import jake2.game.*; -// import jake2.qcommon.*; -// import jake2.render.*; -// import jake2.server.*; - -public class SuperAdapter { - - // registration - private static void register(SuperAdapter sa) + /** Adapter registration. */ + private static void register(SuperAdapter sa, String id) { - adapters.add(sa); - //Com.Println("registering adapter " + sa.getID() + " (" + sa.getClass().getSuperclass() + ")"); + adapters.put(id, sa); } - - private static int id=0; - private static Vector adapters = new Vector(); - - - private static SuperAdapter find(int num) + + /** Adapter repository. */ + private static Hashtable adapters= new Hashtable(); + + /** Returns the adapter from the repository given by its ID. */ + public static SuperAdapter getFromID(String key) { - return (SuperAdapter) adapters.elementAt(num); + System.out.println("SuperAdapter.getFromID(\"" + key + "\")"); + SuperAdapter sa = (SuperAdapter) adapters.get(key); + + // try to create the adapter + if (sa == null) + { + System.out.println("adapter not found:" + key); + int pos = key.indexOf('$'); + String classname = key; + if (pos != -1) + classname = key.substring(0, pos); + + // load class and instantiate + try + { + System.err.println("loading class " + classname); + Class.forName(classname).newInstance(); + } + catch(Exception e) + { + System.err.println("jake2: class not found:" + classname); + } + + // try it again... + sa = (SuperAdapter) adapters.get(key); + + if (sa == null) + System.err.println("jake2: could not load adapter:" + key); + } + + return sa; } - - // constructor + + /** Constructor, does the adapter registration. */ public SuperAdapter() - { - adapterid = id++; - register(this); + { + StackTraceElement tr[] = new Throwable().getStackTrace(); + adapterid= tr[2].getClassName(); + if (adapterid == "") + new Throwable("error in creating an adapter id!").printStackTrace(); + else + register(this, adapterid); } - - public int getID() + + /** Returns the Adapter-ID. */ + public String getID() { return adapterid; } - private int adapterid; + /** Adapter id. */ + private String adapterid; } |