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

org.xillium.base.beans.BurnedInArgumentsObjectFactory Maven / Gradle / Ivy

package org.xillium.base.beans;

import java.lang.reflect.*;
import java.util.Map;
import java.util.HashMap;


/**
 * The default implementation of an object factory that creates objects from class names and arguments.
 */
public class BurnedInArgumentsObjectFactory extends DefaultObjectFactory {
    private Map, Object[]> _arguments = new HashMap, Object[]>();
    private Map, Object> _singleton = new HashMap, Object>();

    public BurnedInArgumentsObjectFactory() {
    }

    public BurnedInArgumentsObjectFactory(Class type, Object... burnedin) {
        _arguments.put(type, burnedin);
    }

    public BurnedInArgumentsObjectFactory setBurnedIn(Class type, Object... burnedin) {
        _arguments.put(type, burnedin);
        return this;
    }

    public BurnedInArgumentsObjectFactory setSingleton(Class type, Object singleton) {
        _singleton.put(type, singleton);
        return this;
    }

    /**
     * Creates a new object of a given class with arguments.
     */
    public Object create(String name, Object... args)
    throws ClassNotFoundException,
           NoSuchMethodException,
           IllegalAccessException,
           InstantiationException,
           InvocationTargetException
    {
        try {
            return super.create(name, args);
        } catch (NoSuchMethodException x) {
            Class type = Class.forName(name);
            Object singleton = _singleton.get(name);

            if (singleton != null) {
                return singleton;
            } else {
                Object[] burnedin = _arguments.get(type);
                if (burnedin != null) {
                    Object[] nargs = new Object[burnedin.length + args.length];
                    System.arraycopy(burnedin, 0, nargs, 0, burnedin.length);
                    System.arraycopy(args, 0, nargs, burnedin.length, args.length);
                    return Beans.create(type, nargs);
                } else {
                    throw x;
                }
            }
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy