org.openmdx.kernel.loading.PlugInFactory Maven / Gradle / Ivy
/*
* ====================================================================
* Project: openMDX/Core, http://www.openmdx.org/
* Description: Bean Factory
* Owner: OMEX AG, Switzerland, http://www.omex.ch
* ====================================================================
*
* This software is published under the BSD license as listed below.
*
* Copyright (c) 2009-2014, OMEX AG, Switzerland
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.// if(section == null) {
// return new Configuration();
// } else {
// String name = source.getProperty(Constants.PROPERTY_NAME);
// Configuration target = name == null ? new Configuration(
// ) : new PropertiesConfigurationProvider(
// Resources.toMetaInfXRI(name + ".properties"),
// true // strict
// ).getConfiguration(
// section
// );
// amendConfiguration(
// source,
// target,
// "\\.",
// section
// );
// return target;
// }
*
* * Neither the name of the openMDX team nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* ------------------
*
* This product includes software developed by other organizations as
* listed in the NOTICE file.
*/
package org.openmdx.kernel.loading;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.Map;
import org.openmdx.kernel.configuration.Configuration;
import org.openmdx.kernel.configuration.MapConfiguration;
import org.w3c.spi.PrimitiveTypeParsers;
/**
* Bean Factory
*
* The following configuration entry names are reserved
* class
, the class to be instantiated
* interface
, the class to be exposed by the factory
*
*
* If a class has a public Configuration
constructor then
* this constructor is used to inject the configuration, otherwise
* the instance is treated as java bean, i.e. it is instantiated via
* default constructor and the configuration is applied through its
* setters.
*/
public class PlugInFactory extends BeanFactory {
/**
* Constructor
*
* @param instanceClass the instance class, often an interface
* @param beanClass the Java bean class
* @param configuration the configuration to be kept by the bean factory
*/
private PlugInFactory(
Class instanceClass,
Class extends T> beanClass,
Configuration configuration
){
super(instanceClass, beanClass, configuration);
this.nonJavaBeanConstructor = getConstructorWithConfiguration(beanClass);
}
/**
* Constructor
*
* @param beanClass the Java Bean and instance class
* @param settings the settings to be kept by the bean factory
*/
private PlugInFactory(
Class beanClass,
Configuration configuration
){
this(beanClass, beanClass, configuration);
}
/**
* The alternative constructor
*/
private final Constructor extends T> nonJavaBeanConstructor;
/**
* Create a factory for the given class.
*
* The class names are retrieved from the following configuration keys
* "class"
(mandatory)
* "interface"
(optional)
*
*
* @param configuration the Java Bean Factory configuration includes the class name(s)
*
* @return a factory for the given class
*/
public static Factory> newInstance(
Configuration configuration
){
Class