blob: f2956093137bf1feb045dc0359e615722d50f9da [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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
<<<<<<< Updated upstream
*
* https://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
=======
*
* https://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
>>>>>>> Stashed changes
* limitations under the License.
*/
package org.apache.jdo.tck.pc.companyListWithoutJoin;
import java.lang.reflect.Constructor;
import javax.jdo.PersistenceManager;
/*
* This is the registry for company factories. It is used for the
* CompletenessTest to create instances from input xml test data files.
* Factory instances that implement CompanyFactory interface are
* registered (using the singleton pattern).
* <P>Several registration methods are available. The default factory,
* which creates instances by construction, is automatically
* registered during class initialization. The default factory can
* also be registered by using the no-args method registerFactory().
* <P>Non-default factories can be registered using the registerFactory
* method taking the factory as an argument. Non-default factories that
* have a single constructor argument PersistenceManager can be
* registered using either the method that explicitly names the class,
* or with the method that takes the class name from a system property.
*/
public class CompanyFactoryRegistry {
/** The system property for factory name */
static final String FACTORY_PROPERTY_NAME = "jdo.tck.mapping.companyfactory";
/** The factory name if the system property is not set. */
static final String DEFAULT_FACTORY_CLASS_NAME =
"org.apache.jdo.tck.pc.company.CompanyFactoryConcreteClass";
/** The default factory class name */
static final String FACTORY_CLASS_NAME;
static {
String prop = System.getProperty(FACTORY_PROPERTY_NAME);
if ((prop == null) || (prop.length() == 0)) prop = DEFAULT_FACTORY_CLASS_NAME;
FACTORY_CLASS_NAME = prop;
}
/**
* This is the default company factory singleton. This is statically loaded regardless of the
* setting of the system property.
*/
static final CompanyFactory SINGLETON = new CompanyFactoryConcreteClass();
/** This is the currently registered factory. */
static CompanyFactory instance = SINGLETON;
/** Creates a new instance of CompanyFactoryRegistry */
private CompanyFactoryRegistry() {}
/**
* Get the currently registered factory.
*
* @return the factory
*/
public static CompanyFactory getInstance() {
return instance;
}
/** Register the default factory. */
public static void registerFactory() {
instance = SINGLETON;
}
/**
* Register a factory using the default factory name from the system property. The factory must be
* available in the current class path and have a public constructor taking a PersistenceManager
* as a parameter.
*
* @param pm the PersistenceManager
*/
public static void registerFactory(PersistenceManager pm) {
registerFactory(FACTORY_CLASS_NAME, pm);
}
/**
* Register a factory using the specified factoryName parameter. The factory class must be
* loadable by the current context classloader and have a public constructor taking a
* PersistenceManager as a parameter.
*
* @param factoryClassName the fully-qualified class name of the factory
* @param pm the PersistenceManager
*/
public static void registerFactory(String factoryClassName, PersistenceManager pm) {
CompanyFactory factory = null;
try {
if (factoryClassName != null) {
Class<?> factoryClass = Class.forName(factoryClassName);
Constructor<?> ctor = factoryClass.getConstructor(PersistenceManager.class);
factory = (CompanyFactory) ctor.newInstance(new Object[] {pm});
}
registerFactory(factory);
} catch (Exception ex) {
throw new RuntimeException("Unable to construct CompanyFactory " + factoryClassName, ex);
}
}
/**
* Register the factory.
*
* @param factory the factory
*/
public static void registerFactory(CompanyFactory factory) {
instance = factory != null ? factory : SINGLETON;
}
}