/* * Copyright 2008 biaoping.yin * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.frameworkset.orm.platform; /* * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import java.util.HashMap; import org.apache.log4j.Logger; /** * Factory class responsible to create Platform objects that * define RDBMS platform specific behaviour. * * @author Thomas Mahler * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a> * @version $Id: PlatformFactory.java,v 1.2 2004/02/22 06:27:19 jmcnally Exp $ */ public class PlatformFactory { private static HashMap platforms = new HashMap(); private static Logger log = Logger.getLogger(PlatformFactory.class); /** * Returns the Platform for a platform name. * * @param dbms name of the platform */ public static Platform getPlatformFor(String dbms) { Platform result = null; String platformName = null; result = (Platform) getPlatforms().get(dbms); if (result == null) { try { platformName = getClassnameFor(dbms); Class platformClass = Class.forName(platformName); result = (Platform) platformClass.newInstance(); } catch (Throwable t) { log.warn("problems with platform " + platformName + ": " + t.getMessage()); log.warn("Torque will use PlatformDefaultImpl instead"); result = new PlatformDefaultImpl(); } getPlatforms().put(dbms, result); // cache the Platform } return result; } /** * compute the name of the concrete Class representing the Platform * specified by <code>platform</code> * * @param platform the name of the platform as specified in the repository */ private static String getClassnameFor(String platform) { String pf = "Default"; if (platform != null) { pf = platform; } return "com.frameworkset.orm.platform.Platform" + pf.substring(0, 1).toUpperCase() + pf.substring(1) + "Impl"; } /** * Gets the platforms. * * @return Returns a HashMap */ private static HashMap getPlatforms() { return platforms; } }