001: /*****************************************************************************
002: * Java Plug-in Framework (JPF)
003: * Copyright (C) 2004-2007 Dmitry Olshansky
004: *
005: * This library is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU Lesser General Public
007: * License as published by the Free Software Foundation; either
008: * version 2.1 of the License, or (at your option) any later version.
009: *
010: * This library is distributed in the hope that it will be useful,
011: * but WITHOUT ANY WARRANTY; without even the implied warranty of
012: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
013: * Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General Public
016: * License along with this library; if not, write to the Free Software
017: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
018: *****************************************************************************/package org.java.plugin;
019:
020: import java.net.URL;
021: import java.net.URLClassLoader;
022: import java.net.URLStreamHandlerFactory;
023:
024: import org.java.plugin.registry.PluginDescriptor;
025:
026: /**
027: * Extension to Java class loader API. One instance of this class should be
028: * created by {@link org.java.plugin.PluginManager plug-in manager} for every
029: * available plug-in.
030: *
031: * @version $Id$
032: */
033: public abstract class PluginClassLoader extends URLClassLoader {
034: private final PluginManager manager;
035: private final PluginDescriptor descriptor;
036:
037: /**
038: * @param aManager plug-in manager
039: * @param descr plug-in descriptor
040: * @param urls resources "managed" by this class loader
041: * @param parent parent class loader
042: * @param factory URL stream handler factory
043: * @see URLClassLoader#URLClassLoader(java.net.URL[], java.lang.ClassLoader,
044: * java.net.URLStreamHandlerFactory)
045: */
046: protected PluginClassLoader(final PluginManager aManager,
047: final PluginDescriptor descr, final URL[] urls,
048: final ClassLoader parent,
049: final URLStreamHandlerFactory factory) {
050: super (urls, parent, factory);
051: manager = aManager;
052: descriptor = descr;
053: }
054:
055: /**
056: * @param aManager plug-in manager
057: * @param descr plug-in descriptor
058: * @param urls resources "managed" by this class loader
059: * @param parent parent class loader
060: * @see URLClassLoader#URLClassLoader(java.net.URL[], java.lang.ClassLoader)
061: */
062: protected PluginClassLoader(final PluginManager aManager,
063: final PluginDescriptor descr, final URL[] urls,
064: final ClassLoader parent) {
065: super (urls, parent);
066: manager = aManager;
067: descriptor = descr;
068: }
069:
070: /**
071: * @param aManager plug-in manager
072: * @param descr plug-in descriptor
073: * @param urls resources "managed" by this class loader
074: * @see URLClassLoader#URLClassLoader(java.net.URL[])
075: */
076: protected PluginClassLoader(final PluginManager aManager,
077: final PluginDescriptor descr, final URL[] urls) {
078: super (urls);
079: manager = aManager;
080: descriptor = descr;
081: }
082:
083: /**
084: * @return returns the plug-in manager
085: */
086: public PluginManager getPluginManager() {
087: return manager;
088: }
089:
090: /**
091: * @return returns the plug-in descriptor
092: */
093: public PluginDescriptor getPluginDescriptor() {
094: return descriptor;
095: }
096:
097: /**
098: * Should release all resources acquired by this class loader instance.
099: */
100: protected abstract void dispose();
101:
102: /**
103: * Registry data change notification.
104: */
105: protected abstract void pluginsSetChanged();
106:
107: /**
108: * @see java.lang.Object#toString()
109: */
110: @Override
111: public String toString() {
112: return "{PluginClassLoader: uid=" //$NON-NLS-1$
113: + System.identityHashCode(this ) + "; " //$NON-NLS-1$
114: + descriptor + "}"; //$NON-NLS-1$
115: }
116: }
|