You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by ha...@apache.org on 2001/11/07 21:38:07 UTC

cvs commit: jakarta-avalon-cornerstone/apps/jesktop/src/java/org/apache/avalon/jesktop/services LaunchableTargetFactory.java KernelConfigManager.java

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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  -     * @version $Revision: 1.3 $
  +     * @version $Revision: 1.4 $
        */
       private class TryBtn extends JButton {
   
  @@ -297,7 +298,7 @@
        *
        *
        * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  -     * @version $Revision: 1.14 $
  +     * @version $Revision: 1.15 $
        */
       private class KernelLaunchedTarget extends LaunchedTargetImpl {
   
  @@ -855,7 +856,7 @@
        *
        *
        * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</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 <ne...@yahoo.com>
    * @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 <ne...@yahoo.com>
  - * @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 <ne...@yahoo.com>
   * @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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>