Main Page | Packages | Class Hierarchy | Class List | Directories | File List | Class Members | Related Pages

DBObjectManager.java

Go to the documentation of this file.
00001 package cedar.jetweb.db;
00002 
00003 import java.sql.*;
00004 import java.lang.reflect.*;
00005 import java.util.Vector;
00006 import java.util.HashMap;
00007 import java.util.Arrays;
00008 import java.util.List;
00009 import java.io.ByteArrayInputStream;
00010 import java.util.Collections;
00011 
00012 import cedar.jetweb.*;
00013 
00022 public class DBObjectManager{
00023 
00024     //map giving the tables in each database
00025     private HashMap<String, Vector<String> > tableNames_ = 
00026     new HashMap<String, Vector<String> > ();
00027 
00028     private static HashMap<String, HashMap<String, Vector<Method> > >
00029     availableMethodsMap_ = 
00030     new HashMap<String, HashMap<String, Vector<Method> > >();
00031 
00032     private static HashMap<Class, String> allowedTypes_
00033     = new HashMap<Class, String>();
00034     private static HashMap<Class, Method> listTypes_
00035     =new HashMap<Class, Method>();
00036     private static boolean allowedTypesInit_ = true;
00037 
00038     private static HashMap<String, String> primitiveTypes_
00039     = new HashMap<String, String>();
00040     private static boolean primitiveTypesInit_ = true;
00041 
00042     private DBConnectionManager db_=null;
00044 
00051     public DBObjectManager passDBConnection(DBConnectionManager theDataBase){
00052 
00053     db_ = theDataBase;
00054 
00055     return(this);
00056     }
00058 
00063     public DBConnectionManager getDBConnection(){
00064     return(db_);
00065     }
00067 
00072     public synchronized int fillObject(Object obj, ResultSet dbrs)
00073     throws SQLException{
00074 
00075     int numberFilled = 0;
00076     
00077     //Examine the database metadata and put the available
00078         //columns in a vector
00079     
00080         ResultSetMetaData metaData = dbrs.getMetaData();
00081     HashMap<String, Vector<String> > availableColumns = 
00082         new HashMap<String, Vector<String> >();
00083         int numberOfColumns = metaData.getColumnCount();
00084         ++numberOfColumns;
00085     
00086         for(int ii=1; ii!=numberOfColumns; ++ii){
00087 
00088         String colName = metaData.getColumnName(ii);
00089 
00090         Vector<String> colInf = new Vector<String>();
00091         colInf.add(colName);
00092         colInf.add(metaData.getColumnClassName(ii));
00093 
00094         availableColumns.put
00095         (strip_(colName), colInf);
00096     }
00097     
00098         --numberOfColumns;
00099 
00100     Vector<Method> methods = availableMethods(obj, "set");
00101 
00102     initPrimitiveTypes();
00103 
00104     for(int ii=0; ii!= methods.size(); ++ii){
00105 
00106         Method method = methods.get(ii);
00107 
00108         String columnName = method.getName().substring(3);
00109 
00110         char toDeCapitalise = columnName.charAt(0);
00111         columnName = Character.toLowerCase(toDeCapitalise) +
00112         columnName.substring(1);
00113 
00114         Vector<String> colInf = availableColumns.get
00115         (columnName);
00116 
00117         if(colInf!=null){
00118 
00119         String columnType = colInf.get(1);
00120         
00121         Class[] parameterTypes = method.getParameterTypes();
00122         
00123         if(parameterTypes.length == 1 &&
00124            columnType!=null){
00125             
00126             String parameterType = parameterTypes[0].getName();
00127             
00128             if(parameterType == columnType ||
00129                primitiveTypes_.get(parameterType)==columnType){
00130             
00131             Object[] param = {dbrs.getObject(colInf.get(0))};
00132             try{
00133 
00134                 method.invoke(obj, param);
00135                 ++numberFilled;
00136             }catch (IllegalAccessException e){
00137                 System.out.println(e.getMessage());
00138             }catch (InvocationTargetException e){
00139             System.out.println(e.getMessage());
00140             }
00141             }else if(columnType.equals("[B")){// can always attempt 
00142                                            // to convert blob into
00143                                            // anything for filling.
00144             
00145             Blob blob = dbrs.getBlob(colInf.get(0));
00146 
00147             Object param = 
00148                 DBBlob2Array.convert
00149                  (blob, parameterTypes[0]);
00150 
00151             if(param!=null){
00152                 try{
00153                 Object paramArray[] = {param};
00154                 method.invoke(obj, paramArray);
00155                 ++numberFilled;
00156                 }catch (IllegalAccessException e){
00157                 System.out.println(e.getMessage());
00158                 }catch (InvocationTargetException e){
00159                 System.out.println(e.getMessage());
00160                 }
00161             }
00162             }
00163         }
00164         }
00165     }
00166 
00167     return(numberFilled);
00168     };
00170     
00171 
00179     public synchronized void writeObject(Object obj, 
00180                      String tableName,
00181                      String dbName) 
00182     throws JetWebException {
00183 
00184     Vector<String> foundTables=null;
00185     boolean overWriteTableNames = false;
00186     
00187     String connectedDBName = null;
00188     DatabaseMetaData metaData = null;
00189 
00190     try{
00191         
00192         connectedDBName = db_.getConnection(dbName).getCatalog();
00193         
00194         metaData = db_.getConnection(dbName).getMetaData();
00195         
00196         //ResultSet existingTables = metaData.getCatalogs();
00197        
00198         if(!tableNames_.containsKey(dbName)){
00199         
00200         overWriteTableNames = true;
00201         
00202         ResultSet existingTables = 
00203             metaData.getTables
00204             (db_.getConnection(dbName).getCatalog(), null, "", null);
00205         
00206         foundTables = new Vector<String>();
00207         while(existingTables.next()){
00208                     
00209             foundTables.add
00210             (existingTables.getString("TABLE_NAME"));
00211         }
00212         
00213         }else{
00214         foundTables = tableNames_.get(dbName);
00215         }
00216         
00217     }catch(SQLException e){
00218         System.out.println("Unable to get metadata for catalogue "+
00219                    tableName +
00220                    " in database "+dbName);
00221         System.out.println(e.getMessage());
00222         throw new JetWebException(e);
00223     }
00224     
00225     //does the table we want exist.
00226     
00227     boolean tableExists = foundTables.contains(tableName);
00228 
00229     if(!tableExists){
00230         
00231         tableExists = createTable(obj, tableName, dbName);
00232         foundTables.add(tableName);
00233         overWriteTableNames = true;
00234     }
00235 
00236     if(overWriteTableNames){
00237         tableNames_.put(dbName, foundTables);
00238     }
00239 
00240     Vector<Method> methods = availableMethods(obj, "get");
00241     int numColumns = 0;
00242 
00243     HashMap<String, Object>  columnsToWrite = 
00244         new HashMap<String, Object>();
00245 
00246     HashMap<String, Vector<String> > columnMap = 
00247         new HashMap<String, Vector<String> >();
00248 
00249     try{
00250         ResultSet existingColumns = 
00251         metaData.getColumns
00252         (db_.getConnection(dbName).getCatalog(), null,tableName, "");
00253             
00254         while(existingColumns.next()){
00255         
00256         Vector<String> colInf = new Vector<String>();
00257         colInf.add(existingColumns.getString("TYPE_NAME"));
00258         colInf.add(existingColumns.getString("COLUMN_SIZE"));
00259         colInf.add(existingColumns.getString("COLUMN_NAME"));
00260         
00261         columnMap.put
00262             (strip_(existingColumns.getString("COLUMN_NAME")), colInf);
00263 
00264         }
00265 
00266     }catch(SQLException e){
00267         System.out.println(e.getMessage());
00268     }
00269     
00270     Statement stmt = null;
00271 
00272     try{
00273         stmt = db_.getConnection(dbName).createStatement();
00274     }catch (SQLException e){
00275         System.out.println(e.getMessage());
00276         throw new JetWebException(e);
00277     }
00278 
00279     Vector<Vector<String> > stuffToWrite = new Vector<Vector<String> >();
00280     Vector<ByteArrayInputStream> blobsToWrite = 
00281         new Vector<ByteArrayInputStream>();
00282     int numBlobs = 0;
00283 
00284     int numRows = 0;
00285 
00286     for( Method method: methods){
00287 
00288         String colName = method.getName().substring(3);
00289 
00290         Vector<String> colInf = columnMap.get(deCapitalise(colName));
00291 
00292         if(colInf !=null){// Means a column with the same name as 
00293                       // the method exists.
00294         String methodType = null;
00295         String dbType = colInf.get(0);
00296         //colInf.add(colName);
00297         
00298         try{
00299             methodType = sqlType(obj, method);
00300 
00301         }catch(Exception e){
00302             System.out.println(e.getMessage());
00303             throw new JetWebException(e);
00304         }
00305 
00306         if(methodType.substring
00307            (0, dbType.length()).equalsIgnoreCase(dbType)||
00308            dbType.equalsIgnoreCase("blob")||//can always write a blob!
00309            dbType.equalsIgnoreCase("enum")||
00310            dbType.equalsIgnoreCase("set")){//can always attempt
00311                                            //to write an enum 
00312             
00313             //then we write it to the database.
00314 
00315             Object result = null;
00316             try{
00317             result = method.invoke(obj);
00318             }catch (IllegalAccessException e){
00319             System.out.println(e.getMessage());
00320             }catch (InvocationTargetException e){
00321             System.out.println(e.getMessage());
00322             }
00323 
00324             boolean isAList = false;
00325             boolean isABlob = dbType.equalsIgnoreCase("blob");
00326             boolean notNull = false;
00327 
00328             if(result!=null){
00329             notNull = true;
00330             Class[] interfaces = result.getClass().getInterfaces();
00331             
00332             //boolean carryOn = true;
00333             for(int kk=0; 
00334                 kk!= interfaces.length && 
00335                 !isAList; ++kk){
00336                 if(interfaces[kk].equals(List.class)){
00337                 //carryOn = false;
00338                 isAList = true;
00339                 }
00340             }
00341             }
00342             int maxEntryLength = 0;
00343 
00344             if(isAList && !isABlob){
00345 
00346             try{
00347                 Class[] getParamType = {Integer.class};
00348                 Method size = result.getClass().getMethod("size");
00349 
00350                 Method[] resultMethods = 
00351                 result.getClass().getMethods();
00352 
00353                 Method get =null;
00354                 for(int kk=0; kk!=resultMethods.length; ++kk){
00355                 if(resultMethods[kk].getName().equals
00356                      ("get")){
00357                     get = resultMethods[kk];
00358                 }
00359                 }
00360  
00361                 Integer resultSize = (Integer) size.invoke(result);
00362                 for(Integer kk = 0; !resultSize.equals(kk); ++kk){
00363                 Object[] kkArray = {kk};
00364                 Object returnedObj = 
00365                     get.invoke(result, kkArray);
00366                 if(returnedObj!=null){
00367                     String entry = "'"+
00368                     get.invoke(result, kkArray).toString()
00369                     +"'";
00370                     if(entry.length()>maxEntryLength){
00371                     maxEntryLength = entry.length();
00372                     }
00373                     
00374                     colInf.add(entry);
00375                 }else{
00376                     colInf.add(null);
00377                 }
00378                 }
00379             }catch(Throwable e){
00380                 System.out.println(e.getClass().getName()+
00381                            ": "+
00382                            e.getMessage());
00383                 System.out.println("Caused by "+
00384                            e.getCause());
00385             }
00386             
00387             }else if(notNull&&isABlob){
00388             String entry="?";
00389                 ++numBlobs;
00390 
00391                 ByteArrayInputStream blobInput = null;
00392 
00393                 blobInput = new ByteArrayInputStream
00394                 (DBBlob2Array.byteMe(result));
00395     
00396                 blobsToWrite.add(blobInput);
00397                 colInf.add(entry);
00398             }else if(notNull&&!isAList){
00399 
00400             String entry = "'"+result.toString()+"'";
00401             
00402             colInf.add(entry);
00403             maxEntryLength = entry.length();
00404             }
00405 
00406             if(colInf.size()>numRows) numRows = colInf.size();
00407 
00408             stuffToWrite.add(colInf);
00409 
00410             Integer colLength = new Integer(colInf.get(1));
00411 
00412             if(dbType.equals("varchar")&&
00413                colLength<maxEntryLength&&
00414                tableExists){
00415             //then we need to increase the length of the column
00416 
00417             String colIncr = "ALTER TABLE " +
00418                 tableName +
00419                 " MODIFY "+
00420                 unCamelMe(colName) +
00421                 " VARCHAR("+
00422                 maxEntryLength+
00423                 ") DEFAULT ''";
00424 
00425             try{
00426                 stmt.execute(colIncr);
00427             }catch (SQLException e){
00428                 System.out.println(e.getMessage());
00429             }
00430             }
00431         }
00432         }
00433     }
00434 
00435     int numCols = stuffToWrite.size()-1;
00436     Vector<String> cmd1 = new Vector<String>();
00437     Vector<String> cmd2 = new Vector<String>();
00438 
00439     int numEntries = numRows - 3;
00440 
00441     for(int ii=0; ii!=numEntries; ++ii){
00442         cmd1.add("INSERT INTO " + tableName +" (");
00443         cmd2.add("VALUES(");
00444     }
00445 
00446     for(int jj=0; jj!=numEntries; ++jj){
00447         boolean thereIsAnEntry = false;
00448         for(int ii=0; ii!=stuffToWrite.size(); ++ii){
00449         
00450         if(stuffToWrite.get(ii).size()>jj+3){
00451             if(stuffToWrite.get(ii).get(jj+3)!=null){
00452             if(thereIsAnEntry){
00453                 cmd1.set(jj, cmd1.get(jj)+", ");
00454                 cmd2.set(jj, cmd2.get(jj)+", ");
00455             }
00456             
00457             thereIsAnEntry = true;
00458             cmd1.set(jj, cmd1.get(jj)+stuffToWrite.get(ii).get(2));
00459 
00460             String val = stuffToWrite.get(ii).get(jj+3);
00461 
00462             if(val.equals("'true'")){
00463                 val="1";
00464             }else if(val.equals("'false'")){
00465                 val = "0";
00466             }
00467             cmd2.set(jj, cmd2.get(jj) + val);
00468             }
00469         }
00470         }
00471     }
00472 
00473     for(int ii=0; ii!= cmd2.size()&&tableExists; ++ii){
00474         cmd2.set(ii, cmd1.get(ii) + 
00475              ") " + 
00476              cmd2.get(ii) +
00477              ") ");
00478         try{
00479         //System.out.println(cmd2.get(ii));
00480         
00481         if(numBlobs==0){
00482             stmt.execute(cmd2.get(ii));
00483 
00484         }else{
00485 
00486             //System.out.println(cmd2.get(ii));
00487 
00488             PreparedStatement pstmt = 
00489             db_.getConnection(dbName).
00490             prepareStatement(cmd2.get(ii));
00491             if(ii==0){
00492             for(int jj=0; jj<numBlobs; ++jj){
00493                 pstmt.setBinaryStream
00494                 (jj+1,blobsToWrite.get(jj), 
00495                  blobsToWrite.get(jj).available());
00496             }
00497             }
00498             pstmt.executeUpdate();
00499             pstmt.close();
00500         }
00501         }catch(SQLException e){
00502         System.out.println("SQLException: "+e.getMessage());
00503         }
00504     }
00505     
00506     System.out.println("finished writing object");
00507     try{
00508     stmt.close();
00509     }catch(Throwable err){
00510         System.out.println(err.getMessage());
00511     }
00512     return;
00513     };
00515     
00522     public Object writeToDB(String tableName, String dbName) 
00523     throws JetWebException {
00524     writeObject(this, tableName, dbName);
00525     return(this);
00526     };
00528     
00535     public Object writeToDB(String dbName) throws JetWebException {
00536 
00537     String fullName = this.getClass().getName();
00538 
00539     return(writeToDB
00540            (fullName.substring(fullName.lastIndexOf(".")+1), dbName));
00541     };
00543 
00544     //returns a vector of the methods that start with prefix in object.
00545     //keeps a record of earlier objects to avoid looking things up twice.
00546 
00547     private Vector<Method> 
00548     availableMethods(Object obj, String prefix){
00549     
00550     if(obj==null) return new Vector<Method>(0);
00551 
00552     Vector<Method> methods;
00553     HashMap<String, Vector<Method> > foundMethods = 
00554         availableMethodsMap_.get(obj.getClass().toString());
00555     
00556     boolean findMethods = false;
00557     boolean foundObject = false;
00558     
00559     if(foundMethods==null){
00560         findMethods = true;
00561     }else if(!foundMethods.containsKey(prefix)){
00562         findMethods = true;
00563         foundObject = true;
00564     }else{
00565 
00566         methods = foundMethods.get(prefix);
00567         return(methods);
00568     }
00569 
00570     methods = new Vector<Method>();
00571 
00572     if(findMethods){
00573         Class objClass = obj.getClass();
00574         Method[] objMethods = objClass.getMethods();
00575         for(int ii=0; ii!= objMethods.length; ++ii){
00576         if(objMethods[ii].
00577            getName().
00578            substring(0,prefix.length()).
00579            equals(prefix)){
00580             methods.add(objMethods[ii]);
00581         }
00582         }
00583         
00584         if(!foundObject){
00585         foundMethods = new HashMap<String, Vector<Method> >();
00586         }
00587 
00588         foundMethods.put(prefix, methods);
00589     }
00590 
00591     availableMethodsMap_.put(obj.getClass().toString(), foundMethods);
00592     
00593     return(methods);
00594     };
00596     //creates a table in the database named dbName.
00597     
00598     private boolean createTable(Object obj, String tableName, String dbName) 
00599     throws JetWebException {
00600     
00601     String cmd1 = "DROP TABLE If EXISTS `" + tableName + "`";
00602 
00603     String columns = "(";
00604     Vector<Method> methods = availableMethods(obj, "get");
00605 
00606     int numberOfCommas = methods.size() - 1;
00607 
00608     boolean addComma = false;
00609 
00610     int numColumns = 0;
00611 
00612     for(int ii=0; ii!= methods.size(); ++ii){
00613 
00614         String sqlCommand = null;
00615 
00616         try{
00617 
00618         sqlCommand = sqlType(obj, methods.get(ii));
00619 
00620         //System.out.println("sqlCommand = "+sqlCommand);
00621 
00622         }catch(Exception e){
00623         System.out.println
00624             ("Unable to determine return type of method "+
00625              methods.get(ii).getName()+
00626              " in object "+obj.getClass().getName());
00627         System.out.println("IllegalAccessException: "+e.getMessage());
00628         throw new JetWebException(e);
00629         }
00630         
00631         if(sqlCommand!="null"){
00632         if(addComma){
00633             columns = columns + ", ";
00634         }
00635         
00636         ++numColumns;
00637         columns = columns + 
00638             unCamelMe(methods.get(ii).getName().substring(3)) +
00639             " " + 
00640             sqlCommand;
00641 
00642         if(ii!=numberOfCommas){
00643             addComma = true;
00644         }
00645         }
00646     }
00647 
00648     columns = columns + ")";
00649     
00650 
00651     if(numColumns >0){
00652         String cmd2= 
00653         "CREATE TABLE `" + 
00654         tableName +
00655         "` " +
00656         columns + 
00657         " ENGINE=MyISAM DEFAULT CHARSET=latin1";
00658         
00659         try{
00660         Statement stmt = 
00661             db_.getConnectionAsAdmin(dbName).createStatement();
00662         stmt.execute(cmd1);
00663         stmt.execute(cmd2);
00664         stmt.close();
00665         }catch(SQLException e){
00666         System.out.println("Unable to create table " + 
00667                    tableName + 
00668                    " in database "+dbName);
00669         System.out.println("SQL command was: "+cmd2);
00670         System.out.println("SQLException: "+e.getMessage());
00671         throw new JetWebException(e);
00672         }
00673     }
00674     return(numColumns>0);
00675     };
00677 
00678     //gives the sql type we should use.  Descends into an array/vector etc
00679     //to find the primitive type it contains.
00680 
00681     private String sqlType(Object obj, Method method)
00682     throws IllegalAccessException, 
00683        InvocationTargetException,
00684        NoSuchMethodException {
00685 
00686     if(allowedTypesInit_) initAllowedTypes();
00687 
00688     //System.out.println("method name is "+method.getName());
00689 
00690     Object returnedObject = method.invoke(obj);
00691     //System.out.println("returnedObject = "+returnedObject);
00692     Class returnedClass = returnedObject.getClass();
00693 
00694     //Special case for arrays because they are neither proper
00695     //classes nor primitive types, so we turn it into a list...
00696 
00697     if(returnedClass.getName().substring(0,2).equals("[B")){
00698         return(allowedTypes_.get(Byte.class));
00699     }
00700 
00701     if(returnedClass.getName().substring(0,1).equals("[")){
00702         
00703         returnedObject = Arrays.asList(returnedObject);
00704         returnedClass = returnedObject.getClass();
00705     }
00706 
00707     if(allowedTypesInit_) initAllowedTypes();
00708        
00709     //System.out.println("returnedClass = "+returnedClass);
00710 
00711 
00712     String typeName = allowedTypes_.get(returnedClass);
00713     Method get = listTypes_.get(returnedClass);
00714 
00715 
00716 
00717     boolean carryOn = true;
00718     int iii = 0;
00719     int counterMax = 10000;
00720 
00721     while(carryOn){
00722 
00723         //System.out.println("typeName = "+typeName);
00724         //System.out.println("get = "+get);
00725 
00726         iii++;
00727         if(typeName!=null){
00728         carryOn = false;
00729 
00730         }else if(get!=null&&typeName==null) {
00731         Method size = returnedClass.getMethod("size");
00732 
00733         //System.out.println("size = "+size);
00734 
00735         int ii = 0;
00736         boolean notFound = true;
00737         
00738         //System.out.println(returnedObject);
00739 
00740         Integer listSize = (Integer)size.invoke(returnedObject);
00741 
00742         //System.out.println("the listSize is "+listSize);
00743         while(notFound && ii != listSize){
00744             Object tmpObject =  get.invoke(returnedObject,ii);
00745             if(tmpObject!=null){
00746             notFound = false;
00747             returnedObject = tmpObject;
00748 
00749             returnedClass = returnedObject.getClass();
00750 
00751             typeName = allowedTypes_.get(returnedClass);
00752             get = listTypes_.get(returnedClass);
00753             }else{
00754             ++ii;
00755             }
00756         }
00757 
00758         if(ii==listSize){
00759             System.out.println("List is full of nulls");
00760             System.out.println
00761             ("- could not determine columns type. Using int");
00762 
00763             System.out.println("method name is "+method.getName());
00764 
00765             typeName = "integer default NULL";
00766             carryOn = false;
00767         }
00768 
00769         }else{
00770 
00771         typeName = "null";
00772         carryOn = false;
00773         }
00774 
00775         // protect against infinite loops.
00776         if (iii > counterMax) {
00777         System.out.println("Could not determine column type. Using int.");
00778         System.out.println("method name is "+method.getName());
00779 
00780         typeName = "integer default NULL";
00781         carryOn = false;
00782         }
00783 
00784     }
00785     
00786     return(typeName);
00787     };
00789     private static void initAllowedTypes(){
00790 
00791     if(!allowedTypesInit_){
00792         return;
00793     }
00794 
00795     allowedTypesInit_ = false;
00796 
00797     Class[] c = {Integer.class, Double.class, Float.class, int.class};
00798 
00799     for(int ii=0; ii!= c.length; ++ii){
00800         String typeName = c[ii].getName();
00801         typeName = typeName.substring
00802         (typeName.lastIndexOf(".")+1).toLowerCase();
00803         allowedTypes_.put(c[ii], typeName+" default NULL");
00804     }
00805     
00806     allowedTypes_.put(String.class, "varchar(16) default ''");
00807     allowedTypes_.put(Short.class, "smallint default NULL");
00808     allowedTypes_.put(Byte.class, "blob default null");
00809     allowedTypes_.put(Boolean.class, "tinyint default 0");
00810 
00811     Class[] arg = {int.class};
00812 
00813     try{
00814 
00815     listTypes_.put(Vector.class, Vector.class.getMethod("get", arg));
00816     listTypes_.put(List.class, List.class.getMethod("get",arg));
00817     listTypes_.put
00818         (Arrays.asList(new int[0]).getClass(), 
00819          Arrays.asList(new int[0]).getClass().getMethod("get", arg));
00820 
00821     listTypes_.put
00822         (Collections.synchronizedList
00823          (Arrays.asList(new int[0])).getClass(),
00824          Collections.synchronizedList
00825          (Arrays.asList(new int[0])).getClass().getMethod("get", arg));
00826     
00827     }catch(NoSuchMethodException e){
00828         
00829         System.out.println("NoSuchMethodException: " + 
00830                    e.getMessage());
00831         
00832     }
00833 
00834     return;
00835     };
00837     private static void initPrimitiveTypes(){
00838     if (!primitiveTypesInit_) return;
00839     
00840     primitiveTypes_.put(int.class.getName(), Integer.class.getName());
00841     primitiveTypes_.put(double.class.getName(), Double.class.getName());
00842     primitiveTypes_.put(float.class.getName(), Float.class.getName());
00843     primitiveTypes_.put(char.class.getName(), String.class.getName());
00844     primitiveTypes_.put(boolean.class.getName(), Boolean.class.getName());
00845 
00846     return;
00847     };
00849     //Strip the "_" from a string and capitalises.
00850     private static String strip_(String word){
00851     int ii=word.indexOf("_");
00852     while(ii>-1){
00853         char toCapitalise = 0;
00854         if(ii!= word.length()-2){
00855         toCapitalise = word.charAt(ii+1);
00856         }
00857         word = word.substring(0,ii) + 
00858         Character.toUpperCase(toCapitalise) + 
00859         word.substring(ii+2);
00860         ii = word.indexOf("_");
00861     }
00862     return(word);
00863     }
00865     // Make the first character of the string lower case
00866     private static String deCapitalise(String word){
00867     return(word.substring(0,1).toLowerCase()+word.substring(1));
00868     }
00869 
00870     private static String unCamelMe(String word){
00871     
00872     for(int ii=0; ii< word.length()-1; ++ii){
00873         char letter = word.charAt(ii);
00874         if(Character.isUpperCase(letter)){
00875         String decapitalised = new String();
00876         decapitalised += Character.toLowerCase(letter);
00877         if(ii!=0) decapitalised = "_"+decapitalised;
00878         word = word.substring(0,ii) + 
00879             decapitalised+ 
00880             word.substring(ii+1);
00881 
00882         }
00883     }
00884     return(word);
00885     }
00886 }
00888 
00889 
00890 

Generated Wed Jan 17 09:14:27 GMT 2007