All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.intarsys.tools.factory.FactoryTools Maven / Gradle / Ivy

There is a newer version: 4.11
Show newest version
package de.intarsys.tools.factory;

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

import de.intarsys.tools.reflect.ObjectTools;

public class FactoryTools {

	private static final Logger Log = PACKAGE.Log;

	/**
	 * Lookup the {@link IFactory} instance for a factory class. This tool
	 * method assumes the {@link IFactory} instance is registered with its class
	 * name.
	 * 

* If no such {@link IFactory} is registered, this method tries to create * and register a new one. *

* If no {@link IFactory} is registered and can't be created, null is * returned. * * @param clazz * @return the {@link IFactory} instance for a factory class */ static public IFactory lookupFactory(Class clazz) { String id = clazz.getName(); IFactory factory = Outlet.get().lookupFactory(id); if (factory == null) { try { factory = ObjectTools.createObject(clazz, IFactory.class); Outlet.get().registerFactory(factory); Log.log(Level.INFO, "created default factory '" + id + "'"); } catch (Exception e) { // ... } } return factory; } /** * Lookup the {@link IFactory} instance for an id. *

* If no such {@link IFactory} is registered, this method tries to create * and register a new one by interpreting the id as a class name. *

* If no {@link IFactory} is registered and can't be created, null is * returned. * * * @param id * @param classLoader * @return the {@link IFactory} instance for an id. */ static public IFactory lookupFactory(String id, ClassLoader classLoader) { IFactory factory = Outlet.get().lookupFactory(id); if (factory == null) { try { factory = ObjectTools.createObject(id, IFactory.class, classLoader); Outlet.get().registerFactory(factory); Log.log(Level.INFO, "created default factory '" + id + "'"); } catch (Exception e) { // ... } } return factory; } /** * Lookup the {@link IFactory} instance for target object class. This method * tries to derive the factory by searching the {@link IFactory} with * appropriate types. If not available it tries to lookup an * {@link IFactory} by appending "Factory" to the clazz name and using it as * an id. *

* If no such {@link IFactory} is registered, this method tries to create * and register a new one by interpreting the id as a class name. *

* If no {@link IFactory} is registered and can't be created, null is * returned. * * * @param clazz * @return the {@link IFactory} instance for target object class */ static public IFactory lookupFactoryFor(Class clazz) { IFactory[] factories = Outlet.get().lookupFactories(clazz); if (factories.length > 0) { return factories[0]; } String id = clazz.getName() + "Factory"; IFactory factory = Outlet.get().lookupFactory(id); if (factory == null) { try { factory = ObjectTools.createObject(id, IFactory.class, clazz .getClassLoader()); Outlet.get().registerFactory(factory); Log.log(Level.INFO, "created default factory '" + id + "'"); } catch (Exception e) { // ... } } return factory; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy