001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.gui.common;
031:
032: import java.net.URL;
033: import java.net.URLClassLoader;
034: import java.util.ArrayList;
035: import java.util.Collection;
036: import java.util.Iterator;
037:
038: /**
039: * Responsible for instantiating imported beans.
040: *
041: * @author Jeff Tassin
042: */
043: public class URLClassLoaderHelper {
044: /**
045: * A list of URLs
046: */
047: private ArrayList m_url_list = new ArrayList();
048:
049: /**
050: * An array of URLs that matches the url_list
051: */
052: private URL[] m_urls;
053:
054: private URLClassLoader m_url_loader;
055:
056: /**
057: * ctor
058: */
059: public URLClassLoaderHelper() {
060:
061: }
062:
063: /**
064: * ctor
065: */
066: public URLClassLoaderHelper(Collection urls) {
067: Iterator iter = urls.iterator();
068: while (iter.hasNext()) {
069: addUrl((URL) iter.next());
070: }
071: }
072:
073: /**
074: * Adds a url to this list
075: */
076: public void addUrl(URL url) {
077: m_url_list.add(url);
078: m_urls = null;
079: m_url_loader = null;
080: }
081:
082: /**
083: * @return the underlying class loader
084: */
085: public ClassLoader getClassLoader() throws FormException {
086: if (m_urls == null)
087: m_urls = (URL[]) m_url_list.toArray(new URL[0]);
088:
089: if (m_urls.length > 0 && m_url_loader == null)
090: m_url_loader = new URLClassLoader(m_urls);
091:
092: return m_url_loader;
093: }
094:
095: /**
096: * @return the class for the given bean
097: */
098: public Class getClass(String className) throws FormException {
099: try {
100: getClassLoader();
101:
102: if (m_urls.length == 0) {
103: Class c = Class.forName(className);
104: return c;
105: } else {
106: ClassLoader loader = getClassLoader();
107: Class c = loader.loadClass(className);
108: return c;
109: }
110: } catch (Exception e) {
111: if (e instanceof FormException)
112: throw (FormException) e;
113: else
114: throw new FormException(e);
115: }
116: }
117:
118: public Object createObject(String beanName) throws FormException {
119: try {
120: Class c = getClass(beanName);
121: return c.newInstance();
122: } catch (Exception e) {
123: if (e instanceof FormException)
124: throw (FormException) e;
125: else
126: throw new FormException(e);
127: }
128: }
129:
130: /**
131: * Prints this object state to the console
132: */
133: public void print() {
134: try {
135: getClassLoader();
136: System.out.println("URLClassLoaderHelper m_urls.length = "
137: + m_urls.length);
138: for (int index = 0; index < m_urls.length; index++) {
139: System.out.println(" url: " + m_urls[index]);
140: }
141: } catch (Exception e) {
142: e.printStackTrace();
143: }
144: }
145: }
|