/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * $Id: TableKeeper.java 490 2006-10-01 16:08:04Z metlov $ * * This file is part of the Java Expressions Library (JEL). * For more information about JEL visit : * http://kinetic.ac.donetsk.ua/JEL/ * * (c) 1998 -- 2007 by Konstantin Metlov(metlov@kinetic.ac.donetsk.ua); * * JEL is Distributed under the terms of GNU General Public License. * This code comes with ABSOLUTELY NO WARRANTY. * For license details see COPYING file in this directory. */ package gnu.jel; import java.util.*; import java.io.*; import gnu.jel.debug.Debug; public class TableKeeper { private static final Hashtable<String,Object> tables; private static final ResourceBundle msgs; static { Hashtable<String,Object> temp=new Hashtable<String,Object>(); PropertyResourceBundle resB=null; try { Class c=Class.forName("gnu.jel.DVMap"); // Read messages resB= new PropertyResourceBundle(c.getResourceAsStream("JEL.properties")); // Read tables ObjectInputStream ios= new ObjectInputStream(c.getResourceAsStream("tables.dat")); temp=(Hashtable<String,Object>)ios.readObject(); // work around the serialization bug that classes representing the // primitive types can be serialized but can not be deserealized String[] specialTypesStr=(String[]) temp.get("specialTypes"); String[] specialClassesAddStr=(String[]) temp.get("specialClasses"); Class[] specialTypes=new Class[specialTypesStr.length]; Class[] specialClasses=new Class[specialTypesStr.length+ specialClassesAddStr.length]; for(int i=10; i<specialTypesStr.length;i++) specialClasses[i]=specialTypes[i]=Class.forName(specialTypesStr[i]); for(int i=0;i<8;i++) specialClasses[i]=specialTypes[i]=(Class) Class.forName(specialTypesStr[i+20]).getField("TYPE").get(null); // specialTypes[8]=null, // Generic reference // 8 specialClasses[9]=specialTypes[9]=Void.TYPE; // 9 temp.put("specialTypes",specialTypes); Class[] specialClassesAdd=new Class[specialClassesAddStr.length]; for (int i=0; i<specialClassesAddStr.length;i++) specialClasses[specialTypesStr.length+i]= Class.forName(specialClassesAddStr[i]); temp.put("specialClasses",specialClasses); } catch (Exception exc) { if (Debug.enabled) { Debug.println("Exception when reading tables:"); Debug.reportThrowable(exc); }; }; tables=temp; msgs=resB; }; /** * Used to get a reference to the named int[][] table. * @return reference to the table */ public static Object getTable(String name) { return tables.get(name); }; public static String getMsg(int code,Object[] params) { return java.text.MessageFormat.format(msgs.getString("e"+code),params); }; }