You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by ch...@apache.org on 2003/09/29 08:40:00 UTC

cvs commit: ant-antidote/src/java/org/apache/tools/ant/gui/modules Reopener.java

chrisw      2003/09/28 23:40:00

  Modified:    src/java/org/apache/tools/ant/gui/modules Reopener.java
  Log:
  Make reopen use PropertiesManager
  
  Submitted by:	Jack Woehr
  Reviewed by:	Christoph Wilhelms
  CVS: ----------------------------------------------------------------------
  CVS: PR:
  CVS:   If this change addresses a PR in the problem report tracking
  CVS:   database, then enter the PR number(s) here.
  CVS: Obtained from:
  CVS:   If this change has been taken from another system, such as NCSA,
  CVS:   then name the system in this line, otherwise delete it.
  CVS: Submitted by:
  CVS:   If this code has been contributed to Apache by someone else; i.e.,
  CVS:   they sent us a patch or a new module, then include their name/email
  CVS:   address here. If this is your work then delete this line.
  CVS: Reviewed by:
  CVS:   If we are doing pre-commit code reviews and someone else has
  CVS:   reviewed your changes, include their name(s) here.
  CVS:   If you have not had it reviewed then delete this line.
  
  Revision  Changes    Path
  1.5       +104 -61   ant-antidote/src/java/org/apache/tools/ant/gui/modules/Reopener.java
  
  Index: Reopener.java
  ===================================================================
  RCS file: /home/cvs/ant-antidote/src/java/org/apache/tools/ant/gui/modules/Reopener.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Reopener.java	28 Sep 2003 13:02:59 -0000	1.4
  +++ Reopener.java	29 Sep 2003 06:40:00 -0000	1.5
  @@ -54,9 +54,6 @@
   package org.apache.tools.ant.gui.modules;
   
   import java.io.File;
  -import java.io.FileInputStream;
  -import java.io.FileOutputStream;
  -import java.io.IOException;
   import java.net.URL;
   import java.text.SimpleDateFormat;
   import java.util.Date;
  @@ -75,6 +72,7 @@
   import org.apache.tools.ant.gui.core.AntMenu;
   import org.apache.tools.ant.gui.core.AntModule;
   import org.apache.tools.ant.gui.core.AppContext;
  +import org.apache.tools.ant.gui.core.PropertiesManager;
   import org.apache.tools.ant.gui.event.BusFilter;
   import org.apache.tools.ant.gui.event.BusMember;
   import org.apache.tools.ant.gui.event.EventBus;
  @@ -84,8 +82,8 @@
   /**
    * Adds a "Reopen" menu which contains a list of files which
    * have been opened and closed.
  - * 
  - * @version $Revision$ 
  + *
  + * @version $Revision$
    * @author Nick Davis
    */
   public class Reopener extends AntModule {
  @@ -96,30 +94,71 @@
       private JMenu _menu = null;
       /** Used to format the time the file was closed */
       private SimpleDateFormat _formatter
  -          = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz");
  +    = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss a zzz");
       /** The title of our menu */
       private String _menuName = null;
       /** The menu we put our menu after */
       private String _insertAfterMenuName = null;
       /** The number of files to display */
       private static final int NUMBER_MENU_ITEMS = 10;
  -        
  -    /** 
  +    
  +    /** The string prefixed to every reopener filelist entry in our Properties */
  +    public static final String REOPENER_FILELIST_PROPERTY_PREFIX="Reopener.filelist.";
  +    
  +    /** Test if a key (i.e., a Properties file key in our persistent properties)
  +     * is a key written/read by the Reopener as a filelist member.
  +     * @param key A string used as a properties file key.
  +     * @return true if indeed the string represents a Reopener filelist key.
  +     */
  +    public static boolean isReopenerFilelistKey(String key) {
  +        boolean result = false;
  +        if (null != key) {
  +            result = key.startsWith(REOPENER_FILELIST_PROPERTY_PREFIX);
  +        }
  +        return result;
  +    }
  +    
  +    /** Make a file key intended to be stored in our persistent properties
  +     * into a key written/read by the Reopener as a filelist member by prefixing
  +     * it correctly.
  +     * @param key A string used by the Reopener intended to be used as a properties file key.
  +     * @return The same string prefixed with the Reopener filelist key.
  +     */
  +    public static String makeReopenerFilelistKey(String protoKey) {
  +        String result= REOPENER_FILELIST_PROPERTY_PREFIX + protoKey;
  +        return result;
  +    }
  +    
  +    /** Make a file key intended to be stored in our persistent properties
  +     * into a the kind of key understood by the Reopener as a filelist member by
  +     * stripping the prefix that identifies it as a Reopener key in the properties file.
  +     * @param key A string used as a properties file key.
  +     * @return The same string with the prefix for a Reopener filelist key stripped from it.
  +     */
  +    public static String stripReopenerFilelistKey(String protoKey) {
  +        String result = protoKey;
  +        if (isReopenerFilelistKey(protoKey)) {
  +            result = protoKey.substring(REOPENER_FILELIST_PROPERTY_PREFIX.length());
  +        }
  +        return result;
  +    }
  +    
  +    /**
        * Register our event listener
  -     * 
  +     *
        * @param context Application context.
        */
       public void contextualize(AppContext context) {
           setContext(context);
           
           _menuName =
  -            context.getResources().getString(getClass(), "menuName");
  +        context.getResources().getString(getClass(), "menuName");
           _insertAfterMenuName =
  -            context.getResources().getString(getClass(), "insertAfterMenuName");
  +        context.getResources().getString(getClass(), "insertAfterMenuName");
           
           context.getEventBus().addMember(EventBus.RESPONDING, new Handler());
       }
  -
  +    
       /**
        *  Insert our menu into the main menu bar
        *
  @@ -132,7 +171,7 @@
           
           // Load the list of files
           loadList();
  -
  +        
           // Loop throught the menus and look for the menu
           // we put our menu after.
           boolean breakOut = false;
  @@ -158,9 +197,9 @@
           }
           updateMenu();
       }
  -
  +    
       /**
  -     * 
  +     *
        */
       protected void updateMenu() {
           
  @@ -182,7 +221,7 @@
                   map.put(new Long(date.getTime() * -1), key);
               } catch (Exception e) {}
           }
  -
  +        
           // Remove all of our menu items.
           _menu.removeAll();
           
  @@ -197,17 +236,17 @@
               // Setup an event which will be sent when
               // the menu item is pressed.
               OpenRequestEvent event = new OpenRequestEvent(
  -                getContext(), new File(name));
  +            getContext(), new File(name));
               AntMenu subMenu = new AntMenu(getContext(),
  -                event, name);
  +            event, name);
               
               JMenuItem item = _menu.add(subMenu);
               item.setAccelerator(
  -                KeyStroke.getKeyStroke("control " + count));
  +            KeyStroke.getKeyStroke("control " + count));
               count++;
           }
       }
  -
  +    
       /**
        * Remove the oldest entries from the list,
        * if the list is too large.
  @@ -226,7 +265,11 @@
           
           // Remove any extra entries
           while (map.size() > NUMBER_MENU_ITEMS) {
  -            map.remove(map.firstKey());
  +            Object key = map.firstKey();
  +            map.remove(key); // Remove it from our temp list used to reinstance _fileList
  +            // .AND. remove it from our global properties (first converting key into form
  +            // our persistent properties knows about!).
  +            getContext().getPropertiesManager().remove(makeReopenerFilelistKey(key.toString()));
           }
           
           // Transfer the temp map to the real map.
  @@ -238,75 +281,75 @@
               _fileList.put(value, key);
           }
       }
  -
  -    /**
  -     * @return the file used to save the list
  -     */
  -    protected File getSaveFile() {
  -        String home = System.getProperty("user.home");
  -        return new File(home + "/antidote.reopen.properties");
  -    }
  -
  +    
       /**
  -     * Saves the list
  +     * Saves the list to the global PropertiesManager and causes a props file save.
        */
       protected void saveList() {
  +        Iterator i = _fileList.keySet().iterator();
  +        PropertiesManager pm = getContext().getPropertiesManager();
  +        while(i.hasNext()) {
  +            String key = (String) i.next();
  +            String value = (String) _fileList.get(key);
  +            pm.setProperty(makeReopenerFilelistKey(key), value);
  +        }
           try {
  -            File file = getSaveFile();
  -            if (!file.exists()) {
  -                file.createNewFile();
  -            }
  -            FileOutputStream out = new FileOutputStream(file);
  -            _fileList.store(out, null);
  -        } catch (IOException e) {
  -            e.printStackTrace();
  +            getContext().saveProperties();
  +        }
  +        catch (java.io.FileNotFoundException e) {
  +            // Log error? Show dialog? Couldn't save.
  +        }
  +        catch (java.io.IOException e) {
  +            // Log error? Show dialog? Couldn't save.
           }
       }
  -
  +    
       /**
  -     * Loads the list
  +     * Refreshes the Properties used by the Reopened from the global PropertiesManager.
        */
       protected void loadList() {
  -        try {
  -            File file = getSaveFile();
  -            if (file.exists())
  -            {
  -                FileInputStream in = new FileInputStream(file);
  -                _fileList.load(in);
  +        _fileList.clear();
  +        PropertiesManager pm = getContext().getPropertiesManager();
  +        Iterator i = pm.keySet().iterator();
  +        String key = null;
  +        String value = null;
  +        while(i.hasNext()) {
  +            key = (String) i.next();
  +            if (isReopenerFilelistKey(key)) {
  +                value = (String) pm.getProperty(key);
  +                _fileList.setProperty(stripReopenerFilelistKey(key), value);
               }
  -        } catch (IOException e) {
  -            e.printStackTrace();
           }
       }
       
       /** Class for handling project events. */
       private class Handler implements BusMember {
           private final Filter _filter = new Filter();
  -
  -        /** 
  +        
  +        /**
            * Get the filter to that is used to determine if an event should
            * to to the member.
  -         * 
  +         *
            * @return Filter to use.
            */
           public BusFilter getBusFilter() {
               return _filter;
           }
           
  -        /** 
  +        /**
            * Called when an event is to be posed to the member.
  -         * 
  +         *
            * @param event Event to post.
            * @return true if event should be propogated, false if
            * it should be cancelled.
            */
           public boolean eventPosted(EventObject event) {
  -
  +            
               // We should only get project closed events
  -
  +            
               // Find the name of the file which was just closed.
               ACSProjectElement project =
  -                getContext().getSelectionManager().getSelectedProject();
  +            getContext().getSelectionManager().getSelectedProject();
               URL url = project.getLocation();
               if (url == null) {
                   return true;
  @@ -319,20 +362,20 @@
               
               // Add the file to the list
               _fileList.put(file, dateString);
  -
  +            
               // Update the menu and save.
               updateMenu();
               saveList();
               return true;
           }
       }
  -
  +    
       /** Class providing filtering for project events. */
       private static class Filter implements BusFilter {
           
  -        /** 
  +        /**
            * Determines if the given event should be accepted.
  -         * 
  +         *
            * @param event Event to test.
            * @return True if event should be given to BusMember, false otherwise.
            */
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org