Christoph Wilhelms wrote:
> > Antidote Reopener changed to use global PropertiesManager
> > (instead of writing its own Properties file).
>
> Hi Jack!
>
> I just wanted to apply your patch, but other then the first one I had
> problems with this one! CVS simply said, that the file contains no valid
> patch!
Oops, I forgot the -c , as in
cvs diff -c
Resending.
> The code looks good, thoug, and I think it'll do, waht it is meant to be
Oh, it does, at least, as far as I have tested it.
1. Delete antidote.reopen.properties
2. Start antidote.
3. Open a few files.
4. Exit.
5. Examine ~/apache.ant.antidote.persistent.properties (unless you used the
-p switch to specify a props file, then examine that one.)
6. Start antidote again.
7. See what's on the reopen menu (and what order they are in).
--
Jack J. Woehr # You measure democracy by the freedom it
Senior Consultant # gives its dissidents, not the freedom
Purematrix, Inc. # it gives its assimilated conformists.
www.purematrix.com # - Abbie Hoffman
Index: org/apache/tools/ant/gui/modules/Reopener.java
===================================================================
RCS file:
/home/cvspublic/ant-antidote/src/java/org/apache/tools/ant/gui/modules/Reopener.java,v
retrieving revision 1.4
diff -c -r1.4 Reopener.java
*** org/apache/tools/ant/gui/modules/Reopener.java 28 Sep 2003 13:02:59
-0000 1.4
--- org/apache/tools/ant/gui/modules/Reopener.java 29 Sep 2003 06:07:22
-0000
***************
*** 75,80 ****
--- 75,81 ----
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,91 ****
/**
* Adds a "Reopen" menu which contains a list of files which
* have been opened and closed.
! *
! * @version $Revision: 1.4 $
* @author Nick Davis
*/
public class Reopener extends AntModule {
--- 85,92 ----
/**
* Adds a "Reopen" menu which contains a list of files which
* have been opened and closed.
! *
! * @version $Revision: 1.4 $
* @author Nick Davis
*/
public class Reopener extends AntModule {
***************
*** 96,125 ****
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");
/** 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;
!
! /**
* Register our event listener
! *
* @param context Application context.
*/
public void contextualize(AppContext context) {
setContext(context);
_menuName =
! context.getResources().getString(getClass(), "menuName");
_insertAfterMenuName =
! context.getResources().getString(getClass(),
"insertAfterMenuName");
context.getEventBus().addMember(EventBus.RESPONDING, new Handler());
}
!
/**
* Insert our menu into the main menu bar
*
--- 97,167 ----
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");
/** 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");
_insertAfterMenuName =
! context.getResources().getString(getClass(), "insertAfterMenuName");
context.getEventBus().addMember(EventBus.RESPONDING, new Handler());
}
!
/**
* Insert our menu into the main menu bar
*
***************
*** 132,138 ****
// Load the list of files
loadList();
!
// Loop throught the menus and look for the menu
// we put our menu after.
boolean breakOut = false;
--- 174,180 ----
// Load the list of files
loadList();
!
// Loop throught the menus and look for the menu
// we put our menu after.
boolean breakOut = false;
***************
*** 158,166 ****
}
updateMenu();
}
!
/**
! *
*/
protected void updateMenu() {
--- 200,208 ----
}
updateMenu();
}
!
/**
! *
*/
protected void updateMenu() {
***************
*** 182,188 ****
map.put(new Long(date.getTime() * -1), key);
} catch (Exception e) {}
}
!
// Remove all of our menu items.
_menu.removeAll();
--- 224,230 ----
map.put(new Long(date.getTime() * -1), key);
} catch (Exception e) {}
}
!
// Remove all of our menu items.
_menu.removeAll();
***************
*** 197,213 ****
// Setup an event which will be sent when
// the menu item is pressed.
OpenRequestEvent event = new OpenRequestEvent(
! getContext(), new File(name));
AntMenu subMenu = new AntMenu(getContext(),
! event, name);
JMenuItem item = _menu.add(subMenu);
item.setAccelerator(
! KeyStroke.getKeyStroke("control " + count));
count++;
}
}
!
/**
* Remove the oldest entries from the list,
* if the list is too large.
--- 239,255 ----
// Setup an event which will be sent when
// the menu item is pressed.
OpenRequestEvent event = new OpenRequestEvent(
! getContext(), new File(name));
AntMenu subMenu = new AntMenu(getContext(),
! event, name);
JMenuItem item = _menu.add(subMenu);
item.setAccelerator(
! KeyStroke.getKeyStroke("control " + count));
count++;
}
}
!
/**
* Remove the oldest entries from the list,
* if the list is too large.
***************
*** 226,232 ****
// Remove any extra entries
while (map.size() > NUMBER_MENU_ITEMS) {
! map.remove(map.firstKey());
}
// Transfer the temp map to the real map.
--- 268,278 ----
// Remove any extra entries
while (map.size() > NUMBER_MENU_ITEMS) {
! 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,312 ****
_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
*/
protected void saveList() {
try {
! File file = getSaveFile();
! if (!file.exists()) {
! file.createNewFile();
! }
! FileOutputStream out = new FileOutputStream(file);
! _fileList.store(out, null);
! } catch (IOException e) {
! e.printStackTrace();
}
}
!
/**
! * Loads the list
*/
protected void loadList() {
! try {
! File file = getSaveFile();
! if (file.exists())
! {
! FileInputStream in = new FileInputStream(file);
! _fileList.load(in);
}
- } 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();
URL url = project.getLocation();
if (url == null) {
return true;
--- 284,358 ----
_fileList.put(value, key);
}
}
!
/**
! * 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 {
! 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.
}
}
!
/**
! * Refreshes the Properties used by the Reopened from the global
PropertiesManager.
*/
protected void loadList() {
! _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);
}
}
}
/** 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();
URL url = project.getLocation();
if (url == null) {
return true;
***************
*** 319,338 ****
// 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.
*/
--- 365,384 ----
// 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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]