Package org.jdbf.engine.sql

Source Code of org.jdbf.engine.sql.SqlInterfaceFactory$SqlInterfaceMaker

/*
* 23/01/2003 - 11:56:11
*
* $RCSfile: SqlInterfaceFactory.java,v $ - JDBF Object Relational mapping system
* Copyright (C) 2002 JDBF Development Team
*
* http://jdbf.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/*

$Id: SqlInterfaceFactory.java,v 1.4 2004/05/20 22:41:55 gmartone Exp $

*/
package org.jdbf.engine.sql;

import java.util.ArrayList;
import java.util.logging.Logger;
import java.util.logging.Level;

import org.jdbf.engine.mapping.MappingException;
import org.jdbf.castor.Messages;


/**
* <code>SqlIntrerfaceFactory</code> associates a name with an instance of SqlInterface.
*
* @author  Giovanni Martone<br<
* @version $Revision: 1.4 $<br<
* last changed by $Author: gmartone $
*
*/
public class SqlInterfaceFactory{

  /**
   * Class name
   */
  private static final String CLASS_NAME = "org.jdbf.engine.sql.SqlInterfaceFactory";

  /**
   *
   * Logger object
   */
  private static Logger logger = Logger.getLogger(CLASS_NAME);


  /**
   *
   * Creates an empty object
   *
   */
  private SqlInterfaceFactory() {
    logger = Logger.getLogger(CLASS_NAME);
  }


  /**
   * List of <code>SqlInterfaceEntry</code>
   * holding the instantiated interfaces
   */
  static ArrayList sqlIfaces = new ArrayList();

  /**
   * Single entry of SQLInterface
   */
  static class SqlInterfaceEntry {

    /**
     * Logic name of SQLInterface
     */
    String name;

    /**
     * SQLInterface object
     */
    SqlInterface sqlInterface;

    /**
     * Creates a SQLInterfaceEntry
     */
    SqlInterfaceEntry(String name, SqlInterface sqlInterface) {
          this.name = name;
          this.sqlInterface = sqlInterface;
    }
  }


  /**
   * Interface that creates the SQLInterface object
   */
  static interface SqlInterfaceMaker {
    SqlInterface create();
  }

  /** the list of sql interfaces */
  private static SqlInterfaceMaker[] sqlInterfaces =
    new SqlInterfaceMaker[] {
          new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new SqlInterface();
            }

        public String toString() {
          return "generic";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new HsqlInterface();
            }

        public String toString() {
          return "hsql";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new PostgreSQLInterface();
            }

        public String toString() {
          return "postgres";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new SqlServerInterface();
            }

        public String toString() {
          return "sqlserver";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new OracleInterface();
            }

        public String toString() {
          return "oracle";
            }
    },
        new SqlInterfaceMaker() {
            public SqlInterface create() {
          return new MySQLInterface();
            }

        public String toString() {
          return "mysql";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new SybaseInterface();
            }

        public String toString() {
          return "sybase";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new InterbaseInterface();
            }

        public String toString() {
          return "interbase";
            }
    },
        new SqlInterfaceMaker() {

        public SqlInterface create() {
          return new InformixInterface();
            }

        public String toString() {
          return "informix";
            }
    }
  };


  /**
   * Adds a <code>SqlInterface</code> to the list of
   * instantiated interfaces.
   *
   * @param the short name of the <code>SqlInterface</code>
   * @return SqlInterface added to the list
   * @throws MappingException
   */
  private static SqlInterface addSqlInterface(String name)throws MappingException{
    logger.log(Level.FINEST,Messages.format(
        "SQLInterfaceFactory.addInterface",name));
    SqlInterface sqlIface = null;
    for (int i=0; i<sqlInterfaces.length; i++) {
          if (name.equals(sqlInterfaces[i].toString())) {
        sqlIface = sqlInterfaces[i].create();
        sqlIfaces.add(new SqlInterfaceEntry(
            sqlInterfaces[i].toString(),
            sqlIface));
        logger.log(Level.FINEST,Messages.format(
          "SQLInterfaceFactory.interfaceAdded",
          name));
        return sqlIface;
          }
    }
    return null;
  }


  /**
   * Return  an <code>SqlInterface</code> for the given
   * class name.
   *
   * @param the short name of the <code>SqlInterface</code>
   * @return SqlInterface for the given
   * class name.
   * @throws MappingException
   */
  private static SqlInterface getSqlInterfaceIntern(String name)throws MappingException{
    logger.log(Level.FINEST,Messages.format(
        "SQLInterfaceFactory.getInterface",name));
    SqlInterfaceEntry entry = null;
    int size = sqlIfaces.size();
    for (int i=0; i<size; i++) {
          entry = (SqlInterfaceEntry)sqlIfaces.get(i);
          if (entry.name.equals(name))
        return entry.sqlInterface;
    }
    logger.log(Level.FINEST,Messages.format(
        "SQLInterfaceFactory.notExistInterface",name));
    return null;
  }


  /**
   * Return the SqlInterface specified in name
   *
   * @param name of the sql interface
   * @return SqlInterface for the given name
   * @throws MappingException
   */
  public synchronized static SqlInterface getSqlInterface(String name)
    throws MappingException{
   
    String low = name.toLowerCase();
    SqlInterface sqlIface = getSqlInterfaceIntern(low);
    if (sqlIface != null)
          return sqlIface;

    sqlIface = addSqlInterface(low);
    if (sqlIface != null)
          return sqlIface;

    logger.throwing(CLASS_NAME,"getSqlInterface",
      new MappingException("mapping.sqlIfaceNotFound", name));
    //return null;
    throw new MappingException("mapping.sqlIfaceNotFound", name);

    }
}

//-------------------------------------------------------------------

/*
  $Log: SqlInterfaceFactory.java,v $
  Revision 1.4  2004/05/20 22:41:55  gmartone
  Changed for task 99073 (Coverage Javadocs)

*/
 
TOP

Related Classes of org.jdbf.engine.sql.SqlInterfaceFactory$SqlInterfaceMaker

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.