Coverage Report - org.melati.poem.dbms.DbmsFactory
 
Classes in this File Line Coverage Branch Coverage Complexity
DbmsFactory
88%
16/18
100%
4/4
4
 
 1  
 /*
 2  
  * $Source$
 3  
  * $Revision$
 4  
  *
 5  
  * Copyright (C) 2000 David Warnock
 6  
  * 
 7  
  * Part of Melati (http://melati.org), a framework for the rapid
 8  
  * development of clean, maintainable web applications.
 9  
  *
 10  
  * Melati is free software; Permission is granted to copy, distribute
 11  
  * and/or modify this software under the terms either:
 12  
  *
 13  
  * a) the GNU General Public License as published by the Free Software
 14  
  *    Foundation; either version 2 of the License, or (at your option)
 15  
  *    any later version,
 16  
  *
 17  
  *    or
 18  
  *
 19  
  * b) any version of the Melati Software License, as published
 20  
  *    at http://melati.org
 21  
  *
 22  
  * You should have received a copy of the GNU General Public License and
 23  
  * the Melati Software License along with this program;
 24  
  * if not, write to the Free Software Foundation, Inc.,
 25  
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
 26  
  * GNU General Public License and visit http://melati.org to obtain the
 27  
  * Melati Software License.
 28  
  *
 29  
  * Feel free to contact the Developers of Melati (http://melati.org),
 30  
  * if you would like to work out a different arrangement than the options
 31  
  * outlined here.  It is our intention to allow Melati to be used by as
 32  
  * wide an audience as possible.
 33  
  *
 34  
  * This program is distributed in the hope that it will be useful,
 35  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 36  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 37  
  * GNU General Public License for more details.
 38  
  *
 39  
  * Contact details for copyright holder:
 40  
  *
 41  
  *     David Warnock (david At sundayta.co.uk)
 42  
  *     Sundayta Ltd
 43  
  *     International House, 
 44  
  *     174 Three Bridges Road, 
 45  
  *     Crawley, 
 46  
  *     West Sussex 
 47  
  *     RH10 1LE, UK
 48  
  *
 49  
  */
 50  
 
 51  
 package org.melati.poem.dbms;
 52  
 
 53  
 import java.util.Hashtable;
 54  
 
 55  
 import org.melati.poem.AppBugPoemException;
 56  
 
 57  
 /**
 58  
  * A factory class to create Dbms objects.
 59  
  */
 60  
 public final class DbmsFactory {
 61  
 
 62  1
   private static final Hashtable<String, Dbms> dbmsObjects = new Hashtable<String, Dbms>();
 63  
 
 64  0
   private DbmsFactory() {
 65  0
   }
 66  
 
 67  
   /**
 68  
    * Return a Dbms object given its class name as a String.
 69  
    * 
 70  
    * @param dbmsClass
 71  
    *          the name of the dbms class
 72  
    * @return a cached or newly created Dmbs object
 73  
    */
 74  
   public static Dbms getDbms(String dbmsClass) {
 75  466
     synchronized (dbmsObjects) {
 76  466
       Dbms dbms = (Dbms)dbmsObjects.get(dbmsClass);
 77  466
       if (dbms != null) {
 78  452
         return dbms;
 79  
       }
 80  
 
 81  
       try {
 82  14
         Object dbmsObject = Class.forName(dbmsClass).newInstance();
 83  
 
 84  13
         if (!(dbmsObject instanceof Dbms)) {
 85  1
           throw new ClassCastException("The .class=" + dbmsClass
 86  1
                   + " entry named a class of type " + dbmsObject.getClass()
 87  
                   + ", " + "which is not an org.melati.poem.dbms.Dbms");
 88  
         }
 89  12
         dbms = (Dbms)dbmsObject;
 90  2
       } catch (Exception e) {
 91  2
         throw new AppBugPoemException("Problem instantiating class "
 92  
                 + dbmsClass, e);
 93  12
       }
 94  12
       dbmsObjects.put(dbmsClass, dbms);
 95  12
       return dbms;
 96  2
     }
 97  
   }
 98  
 }