hammant 01/11/07 12:38:07 Modified: apps/jesktop/src/conf jesktop-assembly.xml jesktop-config.xml apps/jesktop/src/java/org/apache/avalon/jesktop/builtinapps/config ControlPanel.java apps/jesktop/src/java/org/apache/avalon/jesktop/core AppInstallerImpl.java AppLauncherImpl.java ConfigManagerImpl.java ConfigManagerImpl.xinfo DesktopKernelImpl.java DesktopKernelImpl.xinfo LaunchableTargetHolder.java MimeManagerImpl.java apps/jesktop/src/java/org/apache/avalon/jesktop/services KernelConfigManager.java Added: apps/jesktop/src/java/org/apache/avalon/jesktop/core LaunchableTargetFactoryImpl.java LaunchableTargetFactoryImpl.xinfo MimeInfoImpl.java apps/jesktop/src/java/org/apache/avalon/jesktop/services LaunchableTargetFactory.java Log: Launchable Target becomes a block Revision Changes Path 1.8 +9 -2 jakarta-avalon-cornerstone/apps/jesktop/src/conf/jesktop-assembly.xml Index: jesktop-assembly.xml =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/conf/jesktop-assembly.xml,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- jesktop-assembly.xml 2001/11/07 16:26:43 1.7 +++ jesktop-assembly.xml 2001/11/07 20:38:06 1.8 @@ -39,24 +39,31 @@ <!-- --> <!-- Jesktops blocks --> <!-- --> + + + <block class="org.apache.avalon.jesktop.core.LaunchableTargetFactoryImpl" name="launchable-target-factory"> + <provide name="objectstorage" role="org.apache.avalon.cornerstone.services.store.Store"/> + </block> <block class="org.apache.avalon.jesktop.core.ConfigManagerImpl" name="cfg-mgr"> <provide name="dom-builder-factory" role="org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory" /> <provide name="objectstorage" role="org.apache.avalon.cornerstone.services.store.Store"/> + <provide name="launchable-target-factory" role="org.apache.avalon.jesktop.services.LaunchableTargetFactory"/> </block> <block class="org.apache.avalon.jesktop.core.ImageRepositoryImpl" name="image-repository"> <provide name="objectstorage" role="org.apache.avalon.cornerstone.services.store.Store"/> - </block> + </block> <block class="org.apache.avalon.jesktop.windowmanagers.windoze.WindozeWindowManager1" - name="jesktop-windowmanager"/> + name="jesktop-windowmanager"/> <block class="org.apache.avalon.jesktop.core.DesktopKernelImpl" name="jesktop-kernel" > <provide name="cfg-mgr" role="org.apache.avalon.jesktop.services.KernelConfigManager"/> <provide name="image-repository" role="org.jesktop.api.ImageRepository"/> <provide name="jesktop-windowmanager" role="org.apache.avalon.jesktop.services.WindowManager"/> <provide name="objectstorage" role="org.apache.avalon.cornerstone.services.store.Store"/> + <provide name="launchable-target-factory" role="org.apache.avalon.jesktop.services.LaunchableTargetFactory"/> <provide name="thread-manager" role="org.apache.avalon.cornerstone.services.threads.ThreadManager"/> </block> 1.7 +7 -0 jakarta-avalon-cornerstone/apps/jesktop/src/conf/jesktop-config.xml Index: jesktop-config.xml =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/conf/jesktop-config.xml,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- jesktop-config.xml 2001/11/07 16:26:43 1.6 +++ jesktop-config.xml 2001/11/07 20:38:06 1.7 @@ -102,6 +102,13 @@ </repository> </image-repository> + <launchable-target-factory> + <repository destinationURL="file://./LaunchableTargetStore/" + type="OBJECT" + model="SYNCHRONOUS"> + </repository> + </launchable-target-factory> + <dom-builder-factory> <domClass>org.apache.xerces.jaxp.DocumentBuilderFactoryImpl</domClass> </dom-builder-factory> 1.4 +11 -10 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/builtinapps/config/ControlPanel.java Index: ControlPanel.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/builtinapps/config/ControlPanel.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- ControlPanel.java 2001/11/05 13:55:53 1.3 +++ ControlPanel.java 2001/11/07 20:38:06 1.4 @@ -19,6 +19,7 @@ import org.apache.avalon.jesktop.core.LaunchableTargetHolder; import org.apache.avalon.jesktop.core.ConfigManagerImpl; import org.apache.avalon.jesktop.services.KernelConfigManager; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import javax.swing.JTabbedPane; import javax.swing.JPanel; @@ -42,7 +43,7 @@ * * * @author <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> Dec 2000. - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class ControlPanel extends JFrimble implements DesktopKernelAware, PropertyChangeListener { @@ -56,7 +57,7 @@ private Vector changedConfigs = new Vector(); private Vector tryableConfigs = new Vector(); private Vector triedConfigs = new Vector(); - private LaunchableTargetHolder mLaunchableTargetHolder; + private LaunchableTargetFactory mLaunchableTargetFactory; private KernelConfigManager mConfigManager; private ControlPanelConfigManager cpConfigManger; private Configlet selectedConfiglet; @@ -88,8 +89,8 @@ * @param mLaunchableTargetHolder * */ - public void setLaunchableTargetHolder(LaunchableTargetHolder lth) { - this.mLaunchableTargetHolder = lth; + public void setLaunchableTargetFactory(LaunchableTargetFactory ltf) { + this.mLaunchableTargetFactory = ltf; } /** @@ -172,7 +173,7 @@ Configlet clet = null; try { - ClassLoader cLetClassLoader = mLaunchableTargetHolder.getClassLoader(mConfiglets[f]); + ClassLoader cLetClassLoader = mLaunchableTargetFactory.getClassLoader(mConfiglets[f]); if (cLetClassLoader == null) { cLetClassLoader = this.getClass().getClassLoader(); @@ -227,7 +228,7 @@ * * * @author <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> Dec 2000. - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ private class OKBtn extends JButton { @@ -262,7 +263,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ private class TryBtn extends JButton { @@ -297,7 +298,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ private class RevertBtn extends JButton { @@ -310,7 +311,7 @@ public void actionPerformed(ActionEvent ae) { ConfigletLaunchableTarget clt = - (ConfigletLaunchableTarget) mLaunchableTargetHolder + (ConfigletLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget((JComponent) selectedConfiglet); if (selectedConfiglet instanceof ObjConfiglet) { @@ -341,7 +342,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ private class ControlPanelConfigManager implements ConfigManager { 1.4 +11 -10 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/AppInstallerImpl.java Index: AppInstallerImpl.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/AppInstallerImpl.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AppInstallerImpl.java 2001/10/07 09:56:18 1.3 +++ AppInstallerImpl.java 2001/11/07 20:38:06 1.4 @@ -15,6 +15,7 @@ import org.jesktop.api.JesktopLaunchException; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import org.xml.sax.SAXException; import javax.swing.ImageIcon; @@ -33,11 +34,11 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.3 $ + * @version $Revision: 1.4 $ */ public class AppInstallerImpl extends AppBase implements AppInstaller { - private LaunchableTargetHolder mLaunchableTargetHolder; + private LaunchableTargetFactory mLaunchableTargetFactory; private PropertyChangeSupport mPropertyChangeSupport; private ImageRepository mImageRepository; private DesktopKernelImpl mDesktopKernelImpl; @@ -45,11 +46,11 @@ protected AppInstallerImpl(final PropertyChangeSupport propertyChangeSupport, final DesktopKernelImpl desktopKernelImpl, - final LaunchableTargetHolder launchableTargetHolder, + final LaunchableTargetFactory launchableTargetHolder, final ImageRepository imageRepository, final File baseDir) { super(baseDir); - mLaunchableTargetHolder = launchableTargetHolder; + mLaunchableTargetFactory = launchableTargetHolder; mPropertyChangeSupport = propertyChangeSupport; mImageRepository = imageRepository; mDesktopKernelImpl = desktopKernelImpl; @@ -58,7 +59,7 @@ private void notifyLaunchableTargetListeners() { mPropertyChangeSupport.firePropertyChange(DesktopKernel.LAUNCHABLE_TARGET_CHANGE, null, - mLaunchableTargetHolder + mLaunchableTargetFactory .getAllLaunchableTargets()); } @@ -169,7 +170,7 @@ private void applicationInstall(final InputStream[] inputStreams, boolean confirm) throws JesktopPackagingException { //System.err.println("install apps from " +inputStreams.length + " jars" ); - String appFilePrefix = "JesktopApp" + mLaunchableTargetHolder.getNewAppSuffix(); + String appFilePrefix = "JesktopApp" + mLaunchableTargetFactory.getNewAppSuffix(); JarSuffixHolder jarSuffix = new JarSuffixHolder(); Vector jarNames = new Vector(); for (int f = 0; f < inputStreams.length; f++) { @@ -183,7 +184,7 @@ mDesktopKernelImpl.confirmAppInstallation(pendInsts); } else { for (int i = 0; i < pendInsts.length; i++) { - mLaunchableTargetHolder.confirmLaunchableTarget(pendInsts[i]); + mLaunchableTargetFactory.confirmLaunchableTarget(pendInsts[i]); } } } catch (JesktopPackagingException jpe) { @@ -270,14 +271,14 @@ LaunchableTarget lt = null; if (appType.equals("normal")) { - lt = mLaunchableTargetHolder.makeNormalLaunchableTarget(targetName, className, + lt = mLaunchableTargetFactory.makeNormalLaunchableTarget(targetName, className, appFilePrefix, jarFileNames, displayName, singleInstance .equals("true")); } else if (appType.equals("decorator")) { - lt = mLaunchableTargetHolder.makeDecoratorLaunchableTarget(targetName, + lt = mLaunchableTargetFactory.makeDecoratorLaunchableTarget(targetName, className, appFilePrefix, jarFileNames, @@ -286,7 +287,7 @@ "configpath", false)); } else if (appType.equals("configlet")) { - lt = mLaunchableTargetHolder.makeConfigletLaunchableTarget(targetName, + lt = mLaunchableTargetFactory.makeConfigletLaunchableTarget(targetName, className, appFilePrefix, jarFileNames, 1.8 +12 -11 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/AppLauncherImpl.java Index: AppLauncherImpl.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/AppLauncherImpl.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- AppLauncherImpl.java 2001/11/06 14:42:58 1.7 +++ AppLauncherImpl.java 2001/11/07 20:38:07 1.8 @@ -27,6 +27,7 @@ import org.apache.avalon.jesktop.services.DesktopKernelService; import org.apache.avalon.jesktop.services.KernelConfigManager; import org.apache.avalon.jesktop.services.WindowManager; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import javax.swing.JComponent; import javax.swing.JLabel; @@ -46,13 +47,13 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.7 $ + * @version $Revision: 1.8 $ */ public class AppLauncherImpl extends AppBase implements AppLauncher, FrimbleCallback { private static int TEMPAPPSUFFIX = 1; private org.apache.avalon.jesktop.services.WindowManager mWindowManager; - private LaunchableTargetHolder mLaunchableTargetHolder; + private LaunchableTargetFactory mLaunchableTargetFactory; private DesktopKernelService mDesktopKernelService; private Vector mLaunchedTargets; private ImageRepository mImageRepository; @@ -60,13 +61,13 @@ private KernelConfigManager mConfigManager; protected AppLauncherImpl(final WindowManager windowManager, - final LaunchableTargetHolder launchableTargetHolder, + final LaunchableTargetFactory launchableTargetFactory, final DesktopKernelService desktopKernelService, final KernelConfigManager configManager, final Vector launchedTargets, final ImageRepository imageRepository, final Decorator decorator, final File baseDir) { super(baseDir); - mLaunchableTargetHolder = launchableTargetHolder; + mLaunchableTargetFactory = launchableTargetFactory; mWindowManager = windowManager; mDesktopKernelService = desktopKernelService; mConfigManager = configManager; @@ -192,7 +193,7 @@ final boolean fullClosable) throws JesktopLaunchException { String className = launchableTarget.getClassName(); - ClassLoader classLoader = mLaunchableTargetHolder.getClassLoader(launchableTarget); + ClassLoader classLoader = mLaunchableTargetFactory.getClassLoader(launchableTarget); return launchApp(classLoader, className, launchableTarget, inHere, fullClosable); } @@ -216,7 +217,7 @@ if (instantiatedApp instanceof ControlPanel) { ((ControlPanel) instantiatedApp) - .setLaunchableTargetHolder(mLaunchableTargetHolder); + .setLaunchableTargetFactory(mLaunchableTargetFactory); ((ControlPanel) instantiatedApp).setConfigManager(mConfigManager); } @@ -299,7 +300,7 @@ if (fullClosable && (frimble != null)) { mDecorator.initDecoratation(frimble, launchableTarget); - if (launchableTarget.getTargetName().equals(LaunchableTargetHolder.SHUTDOWN_APP)) { + if (launchableTarget.getTargetName().equals(LaunchableTargetFactory.SHUTDOWN_APP)) { ShutdownConfirmer sc = new ShutdownConfirmer() { public void shutdownJesktopOnly(boolean force) throws PropertyVetoException { @@ -331,12 +332,12 @@ public Frimble makeFrimble(final FrimbleAware frimbleAware) { LaunchableTarget lt = - mLaunchableTargetHolder.getLaunchableTarget((JComponent) frimbleAware); + mLaunchableTargetFactory.getLaunchableTarget((JComponent) frimbleAware); if (lt != null) { Frimble frimble = mWindowManager.createFrimble(lt.getDisplayName()); - launchApp2(mLaunchableTargetHolder.getClassLoader(lt), (JComponent) frimbleAware, lt, + launchApp2(mLaunchableTargetFactory.getClassLoader(lt), (JComponent) frimbleAware, lt, null, true); return frimble; @@ -358,7 +359,7 @@ */ public Object launchAppByName(final String appTargetName) throws JesktopLaunchException { - LaunchableTarget[] lts = mLaunchableTargetHolder.getAllLaunchableTargets(); + LaunchableTarget[] lts = mLaunchableTargetFactory.getAllLaunchableTargets(); for (int f = 0; f < lts.length; f++) { if (lts[f].getTargetName().equals(appTargetName)) { @@ -380,7 +381,7 @@ */ public String[] getAllAppList() { - LaunchableTarget[] lts = mLaunchableTargetHolder.getAllLaunchableTargets(); + LaunchableTarget[] lts = mLaunchableTargetFactory.getAllLaunchableTargets(); String[] retval = new String[lts.length]; for (int f = 0; f < lts.length; f++) { 1.10 +8 -10 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/ConfigManagerImpl.java Index: ConfigManagerImpl.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/ConfigManagerImpl.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- ConfigManagerImpl.java 2001/11/06 14:42:58 1.9 +++ ConfigManagerImpl.java 2001/11/07 20:38:07 1.10 @@ -36,6 +36,7 @@ import org.apache.avalon.jesktop.services.KernelConfigManager; import org.apache.avalon.jesktop.services.DesktopKernelService; import org.apache.avalon.jesktop.services.WindowManager; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -57,7 +58,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.9 $ + * @version $Revision: 1.10 $ */ public class ConfigManagerImpl extends AbstractLoggable implements Block, KernelConfigManager, ConfigManager, Contextualizable, Composable, Configurable, Initializable { @@ -65,7 +66,7 @@ private final static String CFG = "cfg-"; private ObjectRepository mObjectRepository; private Store mStore; - private LaunchableTargetHolder mLaunchableTargetHolder; + private LaunchableTargetFactory mLaunchableTargetFactory; private PropertyChangeSupport propChgSupport = new PropertyChangeSupport("DummyBean"); //private HashMap configListeners = new HashMap(); private DocumentBuilderFactory mDocumentBuilderFactory; @@ -75,10 +76,6 @@ public ConfigManagerImpl() { } - public void setLaunchableTargetHolder(final LaunchableTargetHolder lth) { - this.mLaunchableTargetHolder = lth; - } - public void contextualize(Context context) throws ContextException { } @@ -101,6 +98,7 @@ mStore = (Store) componentManager.lookup(Store.class.getName()); mDocumentBuilderFactory = (DocumentBuilderFactory) componentManager.lookup(DocumentBuilderFactory.class.getName()); + mLaunchableTargetFactory = (LaunchableTargetFactory) componentManager.lookup(LaunchableTargetFactory.class.getName()); try { mDocumentBuilder = mDocumentBuilderFactory.newDocumentBuilder(); @@ -237,7 +235,7 @@ public void notifyUpdated(final ObjConfiglet clet) { ConfigletLaunchableTarget clt = - (ConfigletLaunchableTarget) mLaunchableTargetHolder + (ConfigletLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget((JComponent) clet); Object oldCfg = getObjConfig(clt.getConfigPath(), clet.getClass().getClassLoader()); Object newCfg = clet.getConfig(); @@ -258,7 +256,7 @@ public void notifyUpdated(final XMLConfiglet clet) { ConfigletLaunchableTarget clt = - (ConfigletLaunchableTarget) mLaunchableTargetHolder + (ConfigletLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget((JComponent) clet); Object oldCfg = getObjConfig(clt.getConfigPath(), clet.getClass().getClassLoader()); Object newCfg = clet.getConfig(); @@ -280,7 +278,7 @@ public void notifyUpdatedNoSave(final ObjConfiglet clet) { ConfigletLaunchableTarget clt = - (ConfigletLaunchableTarget) mLaunchableTargetHolder + (ConfigletLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget((JComponent) clet); Object oldCfg = getObjConfig(clt.getConfigPath(), clet.getClass().getClassLoader()); Object newCfg = clet.getConfig(); @@ -300,7 +298,7 @@ public void notifyUpdatedNoSave(final XMLConfiglet clet) { ConfigletLaunchableTarget clt = - (ConfigletLaunchableTarget) mLaunchableTargetHolder + (ConfigletLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget((JComponent) clet); Object oldCfg = getObjConfig(clt.getConfigPath(), clet.getClass().getClassLoader()); Object newCfg = clet.getConfig(); 1.3 +3 -0 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/ConfigManagerImpl.xinfo Index: ConfigManagerImpl.xinfo =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/ConfigManagerImpl.xinfo,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ConfigManagerImpl.xinfo 2001/11/06 11:08:36 1.2 +++ ConfigManagerImpl.xinfo 2001/11/07 20:38:07 1.3 @@ -15,5 +15,8 @@ <dependency> <service name="org.apache.avalon.cornerstone.services.dom.DocumentBuilderFactory" version="1.0"/> </dependency> + <dependency> + <service name="org.apache.avalon.jesktop.services.LaunchableTargetFactory" version="1.0"/> + </dependency> </dependencies> </blockinfo> 1.15 +45 -44 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/DesktopKernelImpl.java Index: DesktopKernelImpl.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/DesktopKernelImpl.java,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- DesktopKernelImpl.java 2001/11/07 16:26:43 1.14 +++ DesktopKernelImpl.java 2001/11/07 20:38:07 1.15 @@ -27,6 +27,7 @@ import org.apache.avalon.jesktop.services.DesktopKernelService; import org.apache.avalon.jesktop.services.KernelConfigManager; import org.apache.avalon.jesktop.services.WindowManager; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import org.apache.avalon.excalibur.thread.ThreadPool; import org.apache.avalon.excalibur.proxy.DynamicProxy; import org.jesktop.appsupport.DropAware; @@ -72,14 +73,14 @@ public class DesktopKernelImpl extends AbstractLoggable implements Block, DesktopKernelService, DesktopKernel, ShutdownConfirmer, Contextualizable, Composable, Initializable, Configurable, PropertyChangeListener { - + private ComponentManager mCompManager; private Configuration phoenixConfiguration; // protected final static Logger LOGGER = LogKit.getLoggerFor("jesktop-kernel"); private static boolean LOG = true; private final Vector launchedTargets = new Vector(); - private LaunchableTargetHolder launchableTargetHolder; + private LaunchableTargetFactory mLaunchableTargetFactory; private AppInstaller mAppInstallerProxy; private AppInstallerImpl mAppInstaller; private AppLauncher mAppLauncherProxy, mAppLauncher; @@ -122,15 +123,15 @@ public DesktopKernelImpl() { propertyChangeSupport = new PropertyChangeSupport(DesktopKernel.class.getName()); } + - /** * Method propertyChange * * * @param evt * - */ + */ public void propertyChange( PropertyChangeEvent event ) { if (ConfigHelper.isConfigPropChange(event)) { this.setConfig(ConfigHelper.getConfigPath(event), event.getNewValue()); @@ -149,7 +150,7 @@ } public void addPropertyChangeListener( String propertyName, PropertyChangeListener listener ) { propertyChangeSupport.addPropertyChangeListener(propertyName, listener); - } + } /** * Method removePropertyChangeListener @@ -224,7 +225,7 @@ public void notifyLaunchableTargetListeners() { propertyChangeSupport.firePropertyChange(DesktopKernel.LAUNCHABLE_TARGET_CHANGE, null, - launchableTargetHolder + mLaunchableTargetFactory .getAllLaunchableTargets()); } @@ -244,6 +245,7 @@ mThreadManager = (ThreadManager) mCompManager.lookup(ThreadManager.ROLE); mConfigManager = (KernelConfigManager) mCompManager.lookup(KernelConfigManager.class.getName()); mImageRepository = (ImageRepository) mCompManager.lookup(ImageRepository.class.getName()); + mLaunchableTargetFactory = (LaunchableTargetFactory) mCompManager.lookup(LaunchableTargetFactory.class.getName()); Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader()); @@ -261,19 +263,18 @@ } } - launchableTargetHolder = LaunchableTargetHolder.getLaunchableTargetHolder(repository); defaultDecorator = - (DecoratorLaunchableTarget) launchableTargetHolder.makeDecoratorLaunchableTarget( + (DecoratorLaunchableTarget) mLaunchableTargetFactory.makeDecoratorLaunchableTarget( DFT_DECORATOR, "org.apache.avalon.jesktop.builtinapps.decorators.DefaultDecorator", "Default Decorator", "decorators/default"); - mMimeManager = new MimeManagerImpl(launchableTargetHolder, repository); + + mMimeManager = new MimeManagerImpl(repository); mDesktopKernelProxy = (DesktopKernel) DynamicProxy.newInstance(this, new Class[] {DesktopKernel.class}); mMimeManagerProxy = (MimeManager) DynamicProxy.newInstance(mMimeManager, new Class[] {MimeManager.class}); mImageRepositoryProxy = (ImageRepository) DynamicProxy.newInstance(mImageRepository, new Class[] {ImageRepository.class}); mAppInstaller = new AppInstallerImpl(propertyChangeSupport, this, - launchableTargetHolder, mImageRepository, mBaseDirectory); + mLaunchableTargetFactory, mImageRepository, mBaseDirectory); mAppInstallerProxy = (AppInstaller) DynamicProxy.newInstance(mAppInstaller, new Class[] {AppInstaller.class}); - mConfigManager.setLaunchableTargetHolder(launchableTargetHolder); mConfigManager.registerConfigInterest(this, "decorator/currentDecorator"); mConfigManager.registerConfigInterest(mWindowManager, "desktop/settings"); @@ -294,14 +295,14 @@ new File("Jesktop/Temp").mkdir(); installStartupApplications(); - + notifyLaunchableTargetListeners(); - + } catch (ComponentException ce) { getLogger().error("init(): ComponentException", ce); } } - + /** * Method installStartupApplications * @@ -309,7 +310,7 @@ * */ private void installStartupApplications() { - + File dir = new File(mBaseDirectory, "InstallAtStartup"); String[] jars = dir.list(); // no pre-install directory. @@ -331,7 +332,7 @@ } } } - + /** * Method launchedTargetSelected * @@ -467,7 +468,7 @@ Object obj; System.out.println( "URL x " + url); - + obj = getAppLauncher().launchApp(getAssociatedViewer(url), inHere); if (obj instanceof ContentViewer) { @@ -533,10 +534,10 @@ LaunchableTarget retval = null; // hack hack hack, till Laurent delivers the Mime Registry :-)) if (url.toExternalForm().toLowerCase().endsWith(".txt")) { - retval = (LaunchableTarget) launchableTargetHolder.getLaunchableTarget("Tools/TextViewer"); + retval = (LaunchableTarget) mLaunchableTargetFactory.getLaunchableTarget("Tools/TextViewer"); } else if (url.toExternalForm().toLowerCase().endsWith(".jpg") | url.toExternalForm().toLowerCase().endsWith(".gif")) { - retval = (LaunchableTarget) launchableTargetHolder.getLaunchableTarget("Tools/ImageViewer"); - } + retval = (LaunchableTarget) mLaunchableTargetFactory.getLaunchableTarget("Tools/ImageViewer"); + } if (retval == null) { retval = noRegViewer; } @@ -550,11 +551,11 @@ InstallationConfirmer ic = new InstallationConfirmer() { public boolean isRegistered(String targetName) { - return launchableTargetHolder.isRegistered(targetName); + return mLaunchableTargetFactory.isRegistered(targetName); } public void confirmLaunchableTarget(LaunchableTarget launchableTarget) { - launchableTargetHolder.confirmLaunchableTarget(launchableTarget); + mLaunchableTargetFactory.confirmLaunchableTarget(launchableTarget); } }; @@ -581,8 +582,8 @@ Object ojb = mAppLauncherProxy - .launchApp(launchableTargetHolder - .getLaunchableTarget(LaunchableTargetHolder.SHUTDOWN_APP)); + .launchApp(mLaunchableTargetFactory + .getLaunchableTarget(mLaunchableTargetFactory.SHUTDOWN_APP)); } /** @@ -607,7 +608,7 @@ * */ public void uninstall(final LaunchableTarget launchableTarget) { - launchableTargetHolder.removeLaunchableTarget(launchableTarget.getTargetName()); + mLaunchableTargetFactory.removeLaunchableTarget(launchableTarget.getTargetName()); notifyLaunchableTargetListeners(); } @@ -619,7 +620,7 @@ * */ public LaunchableTarget[] getNormalLaunchableTargets() { - return launchableTargetHolder.getNormalLaunchableTargets(); + return mLaunchableTargetFactory.getNormalLaunchableTargets(); } /** @@ -630,7 +631,7 @@ * */ public LaunchableTarget[] getAllLaunchableTargets() { - return launchableTargetHolder.getAllLaunchableTargets(); + return mLaunchableTargetFactory.getAllLaunchableTargets(); } private void closeApps() throws PropertyVetoException { @@ -641,7 +642,7 @@ while (it.hasNext()) { KernelLaunchedTarget klt = (KernelLaunchedTarget) it.next(); - if (klt.getTargetName().equals(LaunchableTargetHolder.SHUTDOWN_APP)) { + if (klt.getTargetName().equals(mLaunchableTargetFactory.SHUTDOWN_APP)) { klt.getFrimble().setClosed(true); } } @@ -694,12 +695,12 @@ cLoader = this.getClass().getClassLoader(); cl = cLoader.loadClass(dlt.getClassName()); } else { - cLoader = launchableTargetHolder.getClassLoader(dlt); + cLoader = mLaunchableTargetFactory.getClassLoader(dlt); cl = cLoader.loadClass(dlt.getClassName()); } Decorator oldDecorator = mCurrentDecorator; - + // all fine, put in place decorator mCurrentDecorator = (Decorator) cl.newInstance(); @@ -711,19 +712,19 @@ } currentDecoratorLaunchableTarget = dlt; - + if (oldDecorator instanceof PropertyChangeListener) { mConfigManager.unRegisterConfigInterest(oldDecorator); } if (mCurrentDecorator instanceof PropertyChangeListener) { mConfigManager.registerConfigInterest(mCurrentDecorator,currentDecoratorLaunchableTarget.getConfigPath()); - } - - mAppLauncher = new AppLauncherImpl(mWindowManager, launchableTargetHolder, this, + } + + mAppLauncher = new AppLauncherImpl(mWindowManager, mLaunchableTargetFactory, this, mConfigManager, launchedTargets, mImageRepository, mCurrentDecorator, mBaseDirectory); - + mAppLauncherProxy = (AppLauncher) DynamicProxy.newInstance(mAppLauncher, new Class[] {AppLauncher.class}); mWindowManager.updateComponentTreeUI(); @@ -737,17 +738,17 @@ } public DesktopKernel getProxy() { - return mDesktopKernelProxy; + return mDesktopKernelProxy; } - + private void initializeDecorator() { String targetName = mConfigManager.getStringConfig("decorator/currentDecorator", DFT_DECORATOR); - + //if (targetName.equals(DFT_DECORATOR)) { // setDecoratorLaunchableTarget(defaultDecorator); //} else { - // setDecoratorLaunchableTarget((DecoratorLaunchableTarget) launchableTargetHolder + // setDecoratorLaunchableTarget((DecoratorLaunchableTarget) mLaunchableTargetFactory // .getLaunchableTarget(targetName)); //} } @@ -760,7 +761,7 @@ * */ public DecoratorLaunchableTarget[] getDecoratorLaunchableTargets() { - return launchableTargetHolder.getDecoratorLaunchableTargets(); + return mLaunchableTargetFactory.getDecoratorLaunchableTargets(); } /** @@ -771,7 +772,7 @@ * */ public ConfigletLaunchableTarget[] getConfigletLaunchableTargets() { - return launchableTargetHolder.getConfigletLaunchableTargets(); + return mLaunchableTargetFactory.getConfigletLaunchableTargets(); } protected void setConfig(final String configPath, final Object config) { @@ -780,7 +781,7 @@ String cfg = (String) config; if (configPath.equals("decorator/currentDecorator")) { - setDecoratorLaunchableTarget((DecoratorLaunchableTarget) launchableTargetHolder + setDecoratorLaunchableTarget((DecoratorLaunchableTarget) mLaunchableTargetFactory .getLaunchableTarget(cfg)); } } @@ -794,7 +795,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.14 $ + * @version $Revision: 1.15 $ */ private class KernelLaunchedTarget extends LaunchedTargetImpl { @@ -855,7 +856,7 @@ * * * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.14 $ + * @version $Revision: 1.15 $ */ private class KernelFrimbleListener extends FrimbleAdapter { 1.10 +4 -1 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/DesktopKernelImpl.xinfo Index: DesktopKernelImpl.xinfo =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/DesktopKernelImpl.xinfo,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- DesktopKernelImpl.xinfo 2001/11/07 16:26:43 1.9 +++ DesktopKernelImpl.xinfo 2001/11/07 20:38:07 1.10 @@ -23,6 +23,9 @@ </dependency> <dependency> <service name="org.jesktop.api.ImageRepository" version="1.0"/> - </dependency> + </dependency> + <dependency> + <service name="org.apache.avalon.jesktop.services.LaunchableTargetFactory" version="1.0"/> + </dependency> </dependencies> </blockinfo> 1.5 +5 -415 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/LaunchableTargetHolder.java Index: LaunchableTargetHolder.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/LaunchableTargetHolder.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- LaunchableTargetHolder.java 2001/10/28 12:50:33 1.4 +++ LaunchableTargetHolder.java 2001/11/07 20:38:07 1.5 @@ -5,423 +5,13 @@ * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ -package org.apache.avalon.jesktop.core; -import org.apache.avalon.cornerstone.services.store.ObjectRepository; -import org.jesktop.launchable.LaunchableTarget; -import org.jesktop.launchable.NormalLaunchableTarget; -import org.jesktop.launchable.DecoratorLaunchableTarget; -import org.jesktop.launchable.ConfigletLaunchableTarget; +package org.apache.avalon.jesktop.core; -import javax.swing.JComponent; -import java.io.Serializable; -import java.io.File; import java.util.HashMap; -import java.util.Vector; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.SortedSet; -import java.util.Collections; -import java.util.TreeSet; -import java.net.URL; -import java.net.MalformedURLException; -import java.net.URLStreamHandlerFactory; - -/** - * Class LaunchableTargetHolder - * - * - * @author Paul Hammant <a href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a> - * @version $Revision: 1.4 $ - */ -public class LaunchableTargetHolder implements InstallationConfirmer, Serializable { - - private static final String KEY = "jesktop-instapps"; - public static final String SHUTDOWN_APP = "~Shutdown"; - private int appSuffix = 1; - private HashMap targets = new HashMap(); - private transient HashMap classloaders; // do not instantiate here - read up on transient. - private transient ObjectRepository repository; - - public LaunchableTargetHolder() { - } - - private void makeNormalLaunchableTarget(final String targetName, final String className, - final String displayName, final boolean singleInstance) { - - LaunchableTarget lt = new NormalLaunchableTargetImpl(targetName, className, displayName, - singleInstance); - targets.put(lt.getTargetName(), lt); - save(); - } - - protected LaunchableTarget makeNormalLaunchableTarget(final String targetName, final String className, - final String appFilePrefix, - final Vector jarFileNames, - final String displayName, - final boolean singleInstance) { - - LaunchableTarget lt = new NormalLaunchableTargetImpl(targetName, className, - appFilePrefix, jarFileNames, - displayName, singleInstance); - targets.put(targetName, lt); - save(); - return lt; - } - - protected LaunchableTarget makeDecoratorLaunchableTarget(final String targetName, final String className, - final String appFilePrefix, - final Vector jarFileNames, - final String displayName, - final String configPath) { - - LaunchableTarget lt = new DecoratorLaunchableTargetImpl(targetName, className, - appFilePrefix, jarFileNames, - displayName, configPath); - - targets.put(targetName, lt); - save(); - return lt; - } - - protected LaunchableTarget makeDecoratorLaunchableTarget(final String targetName, final String className, - final String displayName, - final String configPath) { - - LaunchableTarget lt = new DecoratorLaunchableTargetImpl(targetName, className, - displayName, configPath); - - targets.put(targetName, lt); - save(); - return lt; - } - - protected LaunchableTarget makeConfigletLaunchableTarget(final String targetName, final String className, - final String appFilePrefix, - final Vector jarFileNames, - final String displayName, - final String configPath) { - - LaunchableTarget lt = new ConfigletLaunchableTargetImpl(targetName, className, - appFilePrefix, jarFileNames, - displayName, configPath); - - targets.put(targetName, lt); - save(); - return lt; - } - - protected LaunchableTarget makeConfigletLaunchableTarget(final String targetName, final String className, - final String displayName, - final String configPath) { - - LaunchableTarget lt = new ConfigletLaunchableTargetImpl(targetName, className, - displayName, configPath); - - targets.put(targetName, lt); - save(); - return lt; - } - - /** - * Method isRegistered - * - * - * @param targetName - * - * @return - * - */ - public boolean isRegistered(final String targetName) { - return (targets.get(targetName) != null); - } - - /** - * Method confirmLaunchableTarget - * - * - * @param launchableTarget - * - */ - public void confirmLaunchableTarget(final LaunchableTarget launchableTarget) { - targets.put(launchableTarget.getTargetName(), launchableTarget); - save(); - } - - private void save() { - repository.put(KEY, this); - } - - protected String getNewAppSuffix() { - - String tmp = "0000" + appSuffix++; - - return tmp.substring(tmp.length() - 5, tmp.length()); - } - - protected void setRepository(final ObjectRepository repository) { - this.repository = repository; - } - - protected LaunchableTarget getLaunchableTarget(final String targetName) { - return (LaunchableTarget) targets.get(targetName); - } - - public ClassLoader getClassLoader(final LaunchableTarget launchableTarget) { - - LaunchableTargetImpl lti = (LaunchableTargetImpl) launchableTarget; - - return getClassLoader(lti.getAppFilePrefix(), lti.getAppJarNames()); - } - - // get or make it. - protected synchronized ClassLoader getClassLoader(final String appFilePrefix, final Vector jarNames) { - - if (appFilePrefix == null) { - return null; - } - - if (classloaders == null) { - classloaders = new HashMap(); - } - - ClassLoader cl = (ClassLoader) classloaders.get(appFilePrefix); - - if (cl == null) { - try { - URL[] urls = new URL[jarNames.size()]; - int x = 0; - - for (Enumeration e = jarNames.elements(); e.hasMoreElements(); ) { - String jarName = (String) e.nextElement(); - - urls[x++] = new File(jarName).toURL(); - } - - cl = new JesktopURLClassLoader(urls); - } catch (MalformedURLException mfue) { - mfue.printStackTrace(); - } - - classloaders.put(appFilePrefix, cl); - } - - return cl; - } - - /** - * Method removeLaunchableTarget - * - * - * @param targetName - * - */ - void removeLaunchableTarget(final String targetName) { - targets.remove(targetName); - save(); - } - - private LaunchableTarget[] subset(Class cls) { - - Vector vec = new Vector(); - Iterator it = targets.keySet().iterator(); - - while (it.hasNext()) { - String key = (String) it.next(); - LaunchableTarget lt = (LaunchableTarget) targets.get(key); - - if (cls.isInstance(lt)) { - vec.add(lt); - } - } - - SortedSet sortSet = Collections.unmodifiableSortedSet(new TreeSet(vec)); - - it = sortSet.iterator(); - - LaunchableTarget[] lts = new LaunchableTarget[sortSet.size()]; - int x = 0; - - while (it.hasNext()) { - LaunchableTarget lt = (LaunchableTarget) it.next(); - - lts[x++] = lt; - } - - return lts; - } - - /** - * Method getNormalLaunchableTargets - * - * - * @return - * - */ - public NormalLaunchableTarget[] getNormalLaunchableTargets() { - - LaunchableTarget[] objs = subset(NormalLaunchableTargetImpl.class); - NormalLaunchableTarget[] nlts = new NormalLaunchableTarget[objs.length]; - - System.arraycopy(objs, 0, nlts, 0, objs.length); - - //for (int f = 0 ; f < objs.length ; f++ ) { - // nlts[f] = (NormalLaunchableTarget) objs[f]; - //} - return nlts; - } - - /** - * Method getDecoratorLaunchableTargets - * - * - * @return - * - */ - public DecoratorLaunchableTarget[] getDecoratorLaunchableTargets() { - - Object[] objs = subset(DecoratorLaunchableTargetImpl.class); - DecoratorLaunchableTarget[] dlts = new DecoratorLaunchableTarget[objs.length]; - - System.arraycopy(objs, 0, dlts, 0, objs.length); - - return dlts; - } - - /** - * Method getConfigletLaunchableTargets - * - * - * @return - * - */ - public ConfigletLaunchableTarget[] getConfigletLaunchableTargets() { - - Object[] objs = subset(ConfigletLaunchableTargetImpl.class); - ConfigletLaunchableTarget[] clts = new ConfigletLaunchableTarget[objs.length]; - - System.arraycopy(objs, 0, clts, 0, objs.length); - - return clts; - } - - /** - * Method getAllLaunchableTargets - * - * - * @return - * - */ - public LaunchableTarget[] getAllLaunchableTargets() { - return subset(LaunchableTargetImpl.class); - } - - /** - * Method getLaunchableTarget - * - * - * @param launched - * - * @return - * - */ - public LaunchableTarget getLaunchableTarget(final JComponent launched) { - - ClassLoader cl = launched.getClass().getClassLoader(); - String className = launched.getClass().getName(); - LaunchableTarget[] lts = getAllLaunchableTargets(); - - for (int f = 0; f < lts.length; f++) { - ClassLoader ltsCl = getClassLoader(lts[f]); - - if (ltsCl == null) { - ltsCl = this.getClass().getClassLoader(); - } - - if ((ltsCl == cl) && lts[f].getClassName().equals(className)) { - return lts[f]; - } - } - - return null; // not a launchable target - } - - protected static LaunchableTargetHolder getLaunchableTargetHolder( - final ObjectRepository repository) { - - LaunchableTargetHolder launchableTargetHolder = null; - boolean alreadySetup = repository.containsKey(KEY); - boolean appsDone = false; - - if (alreadySetup) { - try { - launchableTargetHolder = (LaunchableTargetHolder) repository.get(KEY, LaunchableTargetHolder.class.getClassLoader()); - - launchableTargetHolder.setRepository(repository); - - appsDone = true; - } catch (Exception e) { - - //if (e instanceof InvalidClassException) { - if (e instanceof RuntimeException) { - - // different serializtion ID - e.printStackTrace(); - System.err.println("********************************"); - System.err.println("** Problem, the last time **"); - System.err.println("** you ran Avalon/Jesktop **"); - System.err.println("** the installed apps used **"); - System.err.println("** a now incompatible class **"); - System.err.println("** Default apps installed **"); - System.err.println("** only, sorry! **"); - System.err.println("********************************"); - } else { - e.printStackTrace(); - System.err.println("********************************"); - e.printStackTrace(); - System.err.println("*** Default Apps installed ***"); - System.err.println("********************************"); - } - } - } - - if (!appsDone) { - launchableTargetHolder = new LaunchableTargetHolder(); - - launchableTargetHolder.setRepository(repository); - setBuiltInApps(launchableTargetHolder); - repository.put(KEY, launchableTargetHolder); - } - - return launchableTargetHolder; - } - - /** - * Method setBuiltInApps - * - * - * @param launchableTargetHolder - * - */ - public static void setBuiltInApps(final LaunchableTargetHolder launchableTargetHolder) { - - launchableTargetHolder.makeNormalLaunchableTarget( - "System/SimpleInstaller", "org.apache.avalon.jesktop.builtinapps.installer.SimpleInstaller", - "Simple Installer Tool", true); - launchableTargetHolder.makeNormalLaunchableTarget( - "System/ManageInstalled", "org.apache.avalon.jesktop.builtinapps.installer.ManageInstalled", - "Installed App Management Tool", true); - launchableTargetHolder.makeNormalLaunchableTarget("System/ControlPanel", - "org.apache.avalon.jesktop.builtinapps.config.ControlPanel", - "Control Panel", true); - launchableTargetHolder.makeConfigletLaunchableTarget( - "System/DecoratorChooser", "org.apache.avalon.jesktop.builtinapps.installer.DecoratorChooser", - "Chooser for Decorators", "decorator/currentDecorator"); - launchableTargetHolder.makeNormalLaunchableTarget( - MimeManagerImpl.ALLOWED_TARGET_NAME, "org.apache.avalon.jesktop.builtinapps.mime.MimeConfigurator", - "Mimes And Extensions Management", true); - launchableTargetHolder.makeNormalLaunchableTarget( - SHUTDOWN_APP, "org.apache.avalon.jesktop.builtinapps.sys.ShutdownConfirmer", "Shutdown", true); - } +import java.io.Serializable; +public class LaunchableTargetHolder implements Serializable { + public int appSuffix = 1; + public HashMap targets = new HashMap(); } 1.2 +6 -211 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/MimeManagerImpl.java Index: MimeManagerImpl.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/MimeManagerImpl.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MimeManagerImpl.java 2001/09/08 17:42:53 1.1 +++ MimeManagerImpl.java 2001/11/07 20:38:07 1.2 @@ -15,6 +15,7 @@ import org.jesktop.api.DesktopKernel; import org.jesktop.launchable.LaunchableTarget; import org.apache.avalon.cornerstone.services.store.ObjectRepository; +import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import javax.swing.ImageIcon; import java.util.HashMap; @@ -22,6 +23,7 @@ import java.util.StringTokenizer; import java.util.HashSet; import java.util.ArrayList; +import java.io.Serializable; /** @@ -32,21 +34,19 @@ * @author Laurent Cornelis <[EMAIL PROTECTED]> * @version 1.0 */ -public class MimeManagerImpl implements MimeManager, java.io.Serializable { +public class MimeManagerImpl implements MimeManager, Serializable { private static final String KEY = "jesktop-registered-mimes"; protected static final String ALLOWED_TARGET_NAME = "System/MimeConfiguration"; private static MimeManagerImpl instance = null; private static transient ObjectRepository repository; - private static transient LaunchableTargetHolder launchableTargetHolder; + private static transient LaunchableTargetFactory mLaunchableTargetFactory; private HashMap registeredMimes; - protected MimeManagerImpl(LaunchableTargetHolder launchableTargetHolder, - ObjectRepository repository) { + protected MimeManagerImpl(ObjectRepository repository) { registeredMimes = new HashMap(); this.repository = repository; - this.launchableTargetHolder = launchableTargetHolder; } /** @@ -66,7 +66,7 @@ throw new MimeAlreadyRegisteredException(mime); } - return new MimeInfoImpl(this, mime, description, launchableTargetHolder); + return new MimeInfoImpl(this, mime, description, mLaunchableTargetFactory); } /** @@ -255,210 +255,5 @@ } catch (Exception e) {} save(); - } -} - -/** - * - * This class is the default implementation of MimeInfo - * - * @author Laurent Cornelis <[EMAIL PROTECTED]> - * @version 1.0 - */ -class MimeInfoImpl implements MimeInfo, DesktopKernelAware, java.io.Serializable { - - private DesktopKernel kernel; - private LaunchableTargetHolder launchableTargetHolder; - private MimeManagerImpl manager; - private String mime; - private String description; - private HashSet registeredExtensions; - private ArrayList actions; - - /** - * Create a MimeInfoImpl with the mime String, the description and a reference on the launchableTargetHolder (Only used by MimeManagerImpl) - * @see MimeManagerImpl - */ - public MimeInfoImpl(final MimeManagerImpl manager, final String mime, final String description, - final LaunchableTargetHolder launchableTargetHolder) { - - this.launchableTargetHolder = launchableTargetHolder; - this.manager = manager; - registeredExtensions = new HashSet(2); - actions = new ArrayList(); - - setMime(mime); - setDescription(description); - } - - // Javadocs will automatically import from interface. - - /** - * Method setDesktopKernel - * - * - * @param mDesktopKernel - * - */ - public void setDesktopKernel(final DesktopKernel desktopKernel) { - this.kernel = desktopKernel; - } - - /** - * Set the mime String - */ - public synchronized void setMime(final String mime) { - this.mime = mime; - } - - /** - * Method getMime - * - * - * @return - * - */ - public synchronized String getMime() { - return mime; - } - - /** - * Set the description - */ - public synchronized void setDescription(final String description) { - this.description = description; - } - - /** - * Method getDescription - * - * - * @return - * - */ - public synchronized String getDescription() { - return description; - } - - /** - * Set the Icon (Not yet implemented) - */ - public synchronized void setIcon(final String icon) {} - - /** - * Not yet implemented - */ - public synchronized ImageIcon getIcon() { - return null; - } - - /** - * Set an Action (LaunchableTarget name) at a specified index (0 is primary action) - */ - synchronized void setAction(final int index, final String action) { - - if (actions.contains(action)) { - actions.remove(action); - } - - actions.add(index, action); - } - - /** - * Remove an action (LaunchableTarget name) - */ - synchronized void removeAction(final String action) { - - if (!actions.contains(action)) { - return; - } - - actions.remove(action); - } - - /** - * Method getActions - * - * - * @return - * - */ - public synchronized LaunchableTarget[] getActions() { - - LaunchableTarget[] targets = new LaunchableTarget[actions.size()]; - Iterator it = actions.iterator(); - - for (int i = 0; it.hasNext(); i++) { - targets[i] = launchableTargetHolder.getLaunchableTarget((String) it.next()); - } - - return targets; - } - - /** - * Register a new extension for this Mime - */ - public synchronized void registerExtension(final String extension) - throws MimeAlreadyRegisteredException { - - if (manager.isExtensionRegistered(extension)) { - throw new MimeAlreadyRegisteredException(extension); - } - - registeredExtensions.add(extension); - } - - /** - * Unregister an extention for this Mime - */ - public synchronized void unregisterExtension(final String extension) - throws MimeNotRegisteredException { - - if (!manager.isExtensionRegistered(extension)) { - throw new MimeNotRegisteredException(extension); - } - - registeredExtensions.remove(extension); - } - - /** - * Check if an extension is registered for this Mime - */ - public synchronized boolean isRegistered(final String extension) { - return registeredExtensions.contains(extension); - } - - /** - * Method getExtensions - * - * - * @return - * - */ - public synchronized String[] getExtensions() { - return (String[]) registeredExtensions.toArray(new String[registeredExtensions.size()]); - } - - /** - * Method getExtensionsAsString - * - * - * @return - * - */ - public synchronized String getExtensionsAsString() { - - Iterator it = registeredExtensions.iterator(); - StringBuffer buf = new StringBuffer(); - - while (it.hasNext()) { - buf.append(it.next()); - - if (it.hasNext()) { - buf.append(", "); - } - } - - return buf.toString(); } } 1.1 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/LaunchableTargetFactoryImpl.java Index: LaunchableTargetFactoryImpl.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.avalon.jesktop.core; import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.avalon.framework.context.Contextualizable; import org.apache.avalon.framework.context.Context; import org.apache.avalon.framework.context.ContextException; import org.apache.avalon.framework.component.Composable; import org.apache.avalon.framework.component.ComponentManager; import org.apache.avalon.framework.component.ComponentException; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.activity.Initializable; import org.apache.avalon.phoenix.Block; import org.apache.avalon.cornerstone.services.store.Store; import org.apache.avalon.cornerstone.services.store.ObjectRepository; import org.jesktop.launchable.LaunchableTarget; import org.jesktop.launchable.DecoratorLaunchableTarget; import org.jesktop.launchable.ConfigletLaunchableTarget; import org.jesktop.launchable.NormalLaunchableTarget; import javax.swing.JComponent; import java.util.Vector; import java.util.HashMap; import java.util.Enumeration; import java.util.TreeSet; import java.util.Collections; import java.util.SortedSet; import java.util.Iterator; import java.net.MalformedURLException; import java.net.URL; import java.io.File; public class LaunchableTargetFactoryImpl extends AbstractLoggable implements Block, LaunchableTargetFactory, Contextualizable, Composable, Configurable, Initializable { private ObjectRepository mObjectRepository; private Store mStore; private Configuration mRepository; private HashMap classloaders; private LaunchableTargetHolder mLaunchableTargetHolder; public LaunchableTarget[] getAllLaunchableTargets() { return new LaunchableTarget[0]; } public void contextualize(Context context) throws ContextException { } public void compose(ComponentManager componentManager) throws ComponentException { mStore = (Store) componentManager.lookup(Store.class.getName()); } public void configure(Configuration configuration) throws ConfigurationException { mRepository = configuration.getChild("repository"); } public void initialize() throws Exception { mObjectRepository = (ObjectRepository) mStore.select(mRepository); boolean alreadySetup = mObjectRepository.containsKey(KEY); boolean appsDone = false; if (alreadySetup) { try { mLaunchableTargetHolder = (LaunchableTargetHolder) mObjectRepository.get(KEY, LaunchableTargetHolder.class.getClassLoader()); appsDone = true; } catch (Exception e) { //if (e instanceof InvalidClassException) { if (e instanceof RuntimeException) { // different serializtion ID e.printStackTrace(); System.err.println("********************************"); System.err.println("** Problem, the last time **"); System.err.println("** you ran Avalon/Jesktop **"); System.err.println("** the installed apps used **"); System.err.println("** a now incompatible class **"); System.err.println("** Default apps installed **"); System.err.println("** only, sorry! **"); System.err.println("********************************"); } else { e.printStackTrace(); System.err.println("********************************"); e.printStackTrace(); System.err.println("*** Default Apps installed ***"); System.err.println("********************************"); } } } if (!appsDone) { mLaunchableTargetHolder = new LaunchableTargetHolder(); setBuiltInApps(); save(); } } public DecoratorLaunchableTarget makeDecoratorLaunchableTarget(final String targetName, final String className, final String displayName, final String configPath) { LaunchableTarget lt = new DecoratorLaunchableTargetImpl(targetName, className, displayName, configPath); mLaunchableTargetHolder.targets.put(targetName, lt); save(); return (DecoratorLaunchableTarget) lt; } public DecoratorLaunchableTarget makeDecoratorLaunchableTarget( String targetName, String className, String appFilePrefix, Vector jarFileNames, String displayName, String configPath) { LaunchableTarget lt = new DecoratorLaunchableTargetImpl(targetName, className, appFilePrefix, jarFileNames, displayName, configPath); mLaunchableTargetHolder.targets.put(targetName, lt); save(); return (DecoratorLaunchableTarget) lt; } public LaunchableTarget getLaunchableTarget(String targetName) { return (LaunchableTarget) mLaunchableTargetHolder.targets.get(targetName); } public boolean isRegistered(String targetName) { return (mLaunchableTargetHolder.targets.get(targetName) != null); } public ConfigletLaunchableTarget[] getConfigletLaunchableTargets() { Object[] objs = subset(ConfigletLaunchableTargetImpl.class); ConfigletLaunchableTarget[] clts = new ConfigletLaunchableTarget[objs.length]; System.arraycopy(objs, 0, clts, 0, objs.length); return clts; } public DecoratorLaunchableTarget[] getDecoratorLaunchableTargets() { Object[] objs = subset(DecoratorLaunchableTargetImpl.class); DecoratorLaunchableTarget[] dlts = new DecoratorLaunchableTarget[objs.length]; System.arraycopy(objs, 0, dlts, 0, objs.length); return dlts; } public NormalLaunchableTarget[] getNormalLaunchableTargets() { LaunchableTarget[] objs = subset(NormalLaunchableTargetImpl.class); NormalLaunchableTarget[] nlts = new NormalLaunchableTarget[objs.length]; System.arraycopy(objs, 0, nlts, 0, objs.length); //for (int f = 0 ; f < objs.length ; f++ ) { // nlts[f] = (NormalLaunchableTarget) objs[f]; //} return nlts; } public void removeLaunchableTarget(String targetName) { } public void confirmLaunchableTarget(LaunchableTarget launchableTarget) { mLaunchableTargetHolder.targets.put(launchableTarget.getTargetName(), launchableTarget); save(); } public ClassLoader getClassLoader(LaunchableTarget launchableTarget) { LaunchableTargetImpl lti = (LaunchableTargetImpl) launchableTarget; return getClassLoader(lti.getAppFilePrefix(), lti.getAppJarNames()); } // get or make it. protected synchronized ClassLoader getClassLoader(final String appFilePrefix, final Vector jarNames) { if (appFilePrefix == null) { return null; } if (classloaders == null) { classloaders = new HashMap(); } ClassLoader cl = (ClassLoader) classloaders.get(appFilePrefix); if (cl == null) { try { URL[] urls = new URL[jarNames.size()]; int x = 0; for (Enumeration e = jarNames.elements(); e.hasMoreElements(); ) { String jarName = (String) e.nextElement(); urls[x++] = new File(jarName).toURL(); } cl = new JesktopURLClassLoader(urls); } catch (MalformedURLException mfue) { mfue.printStackTrace(); } classloaders.put(appFilePrefix, cl); } return cl; } public String getNewAppSuffix() { String tmp = "0000" + mLaunchableTargetHolder.appSuffix++; return tmp.substring(tmp.length() - 5, tmp.length()); } public LaunchableTarget getLaunchableTarget(JComponent launched) { ClassLoader cl = launched.getClass().getClassLoader(); String className = launched.getClass().getName(); LaunchableTarget[] lts = getAllLaunchableTargets(); for (int f = 0; f < lts.length; f++) { ClassLoader ltsCl = getClassLoader(lts[f]); if (ltsCl == null) { ltsCl = this.getClass().getClassLoader(); } if ((ltsCl == cl) && lts[f].getClassName().equals(className)) { return lts[f]; } } return null; // not a launchable target } public void makeNormalLaunchableTarget(String targetName, String className, String displayName, boolean singleInstance) { LaunchableTarget lt = new NormalLaunchableTargetImpl(targetName, className, displayName, singleInstance); mLaunchableTargetHolder.targets.put(lt.getTargetName(), lt); save(); } public LaunchableTarget makeNormalLaunchableTarget(String targetName, String className, String appFilePrefix, Vector jarFileNames, String displayName, boolean singleInstance) { LaunchableTarget lt = new NormalLaunchableTargetImpl(targetName, className, appFilePrefix, jarFileNames, displayName, singleInstance); mLaunchableTargetHolder.targets.put(targetName, lt); save(); return lt; } public LaunchableTarget makeConfigletLaunchableTarget(final String targetName, final String className, final String displayName, final String configPath) { LaunchableTarget lt = new ConfigletLaunchableTargetImpl(targetName, className, displayName, configPath); mLaunchableTargetHolder.targets.put(targetName, lt); save(); return lt; } public LaunchableTarget makeConfigletLaunchableTarget(String targetName, String className, String appFilePrefix, Vector jarFileNames, String displayName, String configPath) { LaunchableTarget lt = new ConfigletLaunchableTargetImpl(targetName, className, appFilePrefix, jarFileNames, displayName, configPath); mLaunchableTargetHolder.targets.put(targetName, lt); save(); return lt; } private void save() { mObjectRepository.put(KEY, mLaunchableTargetHolder); } private LaunchableTarget[] subset(Class cls) { Vector vec = new Vector(); Iterator it = mLaunchableTargetHolder.targets.keySet().iterator(); while (it.hasNext()) { String key = (String) it.next(); LaunchableTarget lt = (LaunchableTarget) mLaunchableTargetHolder.targets.get(key); if (cls.isInstance(lt)) { vec.add(lt); } } SortedSet sortSet = Collections.unmodifiableSortedSet(new TreeSet(vec)); it = sortSet.iterator(); LaunchableTarget[] lts = new LaunchableTarget[sortSet.size()]; int x = 0; while (it.hasNext()) { LaunchableTarget lt = (LaunchableTarget) it.next(); lts[x++] = lt; } return lts; } /** * Method setBuiltInApps * * * @param launchableTargetHolder * */ public void setBuiltInApps() { makeNormalLaunchableTarget( "System/SimpleInstaller", "org.apache.avalon.jesktop.builtinapps.installer.SimpleInstaller", "Simple Installer Tool", true); makeNormalLaunchableTarget( "System/ManageInstalled", "org.apache.avalon.jesktop.builtinapps.installer.ManageInstalled", "Installed App Management Tool", true); makeNormalLaunchableTarget("System/ControlPanel", "org.apache.avalon.jesktop.builtinapps.config.ControlPanel", "Control Panel", true); makeConfigletLaunchableTarget( "System/DecoratorChooser", "org.apache.avalon.jesktop.builtinapps.installer.DecoratorChooser", "Chooser for Decorators", "decorator/currentDecorator"); makeNormalLaunchableTarget( MimeManagerImpl.ALLOWED_TARGET_NAME, "org.apache.avalon.jesktop.builtinapps.mime.MimeConfigurator", "Mimes And Extensions Management", true); makeNormalLaunchableTarget( SHUTDOWN_APP, "org.apache.avalon.jesktop.builtinapps.sys.ShutdownConfirmer", "Shutdown", true); } } 1.1 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/LaunchableTargetFactoryImpl.xinfo Index: LaunchableTargetFactoryImpl.xinfo =================================================================== <?xml version="1.0" encoding="UTF-8"?> <blockinfo> <!-- section to describe block --> <block> <version>1.0</version> </block> <!-- services that are offered by this block --> <services> <service name="org.apache.avalon.jesktop.services.LaunchableTargetFactory" version="1.0"/> </services> <dependencies> <dependency> <service name="org.apache.avalon.cornerstone.services.store.Store" version="1.0"/> </dependency> </dependencies> </blockinfo> 1.1 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/core/MimeInfoImpl.java Index: MimeInfoImpl.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.avalon.jesktop.core; import org.jesktop.mime.MimeInfo; import org.jesktop.mime.MimeAlreadyRegisteredException; import org.jesktop.mime.MimeNotRegisteredException; import org.jesktop.launchable.LaunchableTarget; import org.apache.avalon.jesktop.services.LaunchableTargetFactory; import javax.swing.ImageIcon; import java.util.HashSet; import java.util.ArrayList; import java.util.Iterator; /** * * This class is the default implementation of MimeInfo * * @author Laurent Cornelis <[EMAIL PROTECTED]> * @version 1.0 */ public class MimeInfoImpl implements MimeInfo, java.io.Serializable { private LaunchableTargetFactory mLaunchableTargetFactory; private MimeManagerImpl manager; private String mime; private String description; private HashSet registeredExtensions; private ArrayList actions; /** * Create a MimeInfoImpl with the mime String, the description and a reference on the launchableTargetHolder (Only used by MimeManagerImpl) * @see MimeManagerImpl */ public MimeInfoImpl(final MimeManagerImpl manager, final String mime, final String description, final LaunchableTargetFactory launchableTargetFactory) { this.mLaunchableTargetFactory = launchableTargetFactory; this.manager = manager; registeredExtensions = new HashSet(2); actions = new ArrayList(); setMime(mime); setDescription(description); } // Javadocs will automatically import from interface. /** * Set the mime String */ public synchronized void setMime(final String mime) { this.mime = mime; } /** * Method getMime * * * @return * */ public synchronized String getMime() { return mime; } /** * Set the description */ public synchronized void setDescription(final String description) { this.description = description; } /** * Method getDescription * * * @return * */ public synchronized String getDescription() { return description; } /** * Set the Icon (Not yet implemented) */ public synchronized void setIcon(final String icon) {} /** * Not yet implemented */ public synchronized ImageIcon getIcon() { return null; } /** * Set an Action (LaunchableTarget name) at a specified index (0 is primary action) */ synchronized void setAction(final int index, final String action) { if (actions.contains(action)) { actions.remove(action); } actions.add(index, action); } /** * Remove an action (LaunchableTarget name) */ synchronized void removeAction(final String action) { if (!actions.contains(action)) { return; } actions.remove(action); } /** * Method getActions * * * @return * */ public synchronized LaunchableTarget[] getActions() { LaunchableTarget[] targets = new LaunchableTarget[actions.size()]; Iterator it = actions.iterator(); for (int i = 0; it.hasNext(); i++) { targets[i] = mLaunchableTargetFactory.getLaunchableTarget((String) it.next()); } return targets; } /** * Register a new extension for this Mime */ public synchronized void registerExtension(final String extension) throws MimeAlreadyRegisteredException { if (manager.isExtensionRegistered(extension)) { throw new MimeAlreadyRegisteredException(extension); } registeredExtensions.add(extension); } /** * Unregister an extention for this Mime */ public synchronized void unregisterExtension(final String extension) throws MimeNotRegisteredException { if (!manager.isExtensionRegistered(extension)) { throw new MimeNotRegisteredException(extension); } registeredExtensions.remove(extension); } /** * Check if an extension is registered for this Mime */ public synchronized boolean isRegistered(final String extension) { return registeredExtensions.contains(extension); } /** * Method getExtensions * * * @return * */ public synchronized String[] getExtensions() { return (String[]) registeredExtensions.toArray(new String[registeredExtensions.size()]); } /** * Method getExtensionsAsString * * * @return * */ public synchronized String getExtensionsAsString() { Iterator it = registeredExtensions.iterator(); StringBuffer buf = new StringBuffer(); while (it.hasNext()) { buf.append(it.next()); if (it.hasNext()) { buf.append(", "); } } return buf.toString(); } } 1.4 +0 -2 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/services/KernelConfigManager.java Index: KernelConfigManager.java =================================================================== RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/services/KernelConfigManager.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- KernelConfigManager.java 2001/11/06 14:42:58 1.3 +++ KernelConfigManager.java 2001/11/07 20:38:07 1.4 @@ -59,6 +59,4 @@ void notifyUpdatedNoSave(final ObjConfiglet clet); void notifyUpdatedNoSave(final XMLConfiglet clet); - - void setLaunchableTargetHolder(LaunchableTargetHolder lth); } 1.1 jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/services/LaunchableTargetFactory.java Index: LaunchableTargetFactory.java =================================================================== /* * Copyright (C) The Apache Software Foundation. All rights reserved. * * This software is published under the terms of the Apache Software License * version 1.1, a copy of which has been included with this distribution in * the LICENSE file. */ package org.apache.avalon.jesktop.services; import org.jesktop.launchable.LaunchableTarget; import org.jesktop.launchable.DecoratorLaunchableTarget; import org.jesktop.launchable.ConfigletLaunchableTarget; import org.jesktop.launchable.NormalLaunchableTarget; import javax.swing.JComponent; import java.util.Vector; public interface LaunchableTargetFactory { String KEY = "jesktop-instapps"; String SHUTDOWN_APP = "~Shutdown"; LaunchableTarget[] getAllLaunchableTargets(); DecoratorLaunchableTarget makeDecoratorLaunchableTarget( final String targetName, final String className, final String displayName, final String configPath); DecoratorLaunchableTarget makeDecoratorLaunchableTarget( final String targetName, final String className, final String appFilePrefix, final Vector jarFileNames, final String displayName, final String configPath); boolean isRegistered(final String targetName); ConfigletLaunchableTarget[] getConfigletLaunchableTargets(); DecoratorLaunchableTarget[] getDecoratorLaunchableTargets(); NormalLaunchableTarget[] getNormalLaunchableTargets(); void removeLaunchableTarget(final String targetName); void confirmLaunchableTarget(final LaunchableTarget launchableTarget); ClassLoader getClassLoader(final LaunchableTarget launchableTarget); String getNewAppSuffix(); LaunchableTarget getLaunchableTarget(final String targetName); LaunchableTarget getLaunchableTarget(final JComponent launched); void makeNormalLaunchableTarget(final String targetName, final String className, final String displayName, final boolean singleInstance); LaunchableTarget makeNormalLaunchableTarget(final String targetName, final String className, final String appFilePrefix, final Vector jarFileNames, final String displayName, final boolean singleInstance); LaunchableTarget makeConfigletLaunchableTarget(final String targetName, final String className, final String appFilePrefix, final Vector jarFileNames, final String displayName, final String configPath); }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>