    001    /*****************************************************************************
    002     * Copyright (C) NanoContainer Organization. All rights reserved.            *
    003     * ------------------------------------------------------------------------- *
    004     * The software in this package is published under the terms of the BSD      *
    005     * style license a copy of which has been included with this distribution in *
    006     * the LICENSE.txt file.                                                     *
    007     *                                                                           *
    008     *****************************************************************************/
    009
    010    package org.nanocontainer.script;
    011
    012    import org.picocontainer.Parameter;
    013    import org.nanocontainer.ClassNameKey;
    014    import org.nanocontainer.NanoContainer;
    015
    016
    017    public class ComponentElementHelper {
    018
    019        public static void makeComponent(Object cnkey, Object key, Parameter[] parameters, Object klass, NanoContainer current, Object instance) {
    020            if (cnkey != null)  {
    021                key = new ClassNameKey((String)cnkey);
    022            }
    023
    024            if (klass instanceof Class) {
    025                Class clazz = (Class) klass;
    026                key = key == null ? clazz : key;
    027                current.getPico().registerComponentImplementation(key, clazz, parameters);
    028            } else if (klass instanceof String) {
    029                String className = (String) klass;
    030                key = key == null ? className : key;
    031                try {
    032                    current.registerComponentImplementation(key, className, parameters);
    033                } catch (ClassNotFoundException e) {
    034                    throw new NanoContainerMarkupException("ClassNotFoundException: " + e.getMessage(), e);
    035                }
    036            } else if (instance != null) {
    037                key = key == null ? instance.getClass() : key;
    038                current.getPico().registerComponentInstance(key, instance);
    039            } else {
    040                throw new NanoContainerMarkupException("Must specify a 'class' attribute for a component as a class name (string) or Class.");
    041            }
    042        }
    043
    044
    045    }