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    }