diff --git a/src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java b/src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
index c34c581f8..07ad1673e 100644
--- a/src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
+++ b/src/antidote/org/apache/tools/ant/gui/acs/ACSFactory.java
@@ -54,8 +54,9 @@
package org.apache.tools.ant.gui.acs;
import javax.xml.parsers.*;
-import java.io.File;
import java.io.IOException;
+import java.io.File;
+import java.net.URL;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import com.sun.xml.parser.Parser;
@@ -113,14 +114,26 @@ public class ACSFactory {
}
+
/**
* Load a project from the given XML file.
* XXX fix me.
*
- * @param f File to load.
- * @return
+ * @param location Location of the file.
+ * @return Loaded project.
*/
- public ACSProjectElement load(File f) throws IOException, SAXException {
+ public ACSProjectElement load(File location) throws IOException {
+ return load(new URL("file", null, location.getPath()));
+ }
+
+ /**
+ * Load a project from the given XML file.
+ * XXX fix me.
+ *
+ * @param location Location of the file.
+ * @return Loaded project.
+ */
+ public ACSProjectElement load(URL location) throws IOException {
XmlDocument doc = null;
try {
@@ -137,7 +150,7 @@ public class ACSFactory {
parser.setEntityResolver(new Resolver());
//parser.setErrorHandler();
- sax.parse(f, null);
+ sax.parse(location.openStream(), null);
doc = builder.getDocument();
@@ -146,6 +159,10 @@ public class ACSFactory {
ex.printStackTrace();
throw new IOException(ex.getMessage());
}
+ catch(SAXException ex) {
+ ex.printStackTrace();
+ throw new IOException(ex.getMessage());
+ }
return (ACSProjectElement) doc.getDocumentElement();
}
diff --git a/src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java b/src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java
index 2551e314a..ee8380ec8 100644
--- a/src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java
+++ b/src/antidote/org/apache/tools/ant/gui/acs/ACSProjectElement.java
@@ -54,6 +54,7 @@
package org.apache.tools.ant.gui.acs;
import com.sun.xml.tree.ElementNode;
+import java.net.URL;
/**
* Class representing a project element in the build file.
@@ -66,7 +67,10 @@ public class ACSProjectElement extends ACSNamedElement {
public static final String DEFAULT = "default";
/** The 'basdir' property name. */
public static final String BASEDIR = "basedir";
-
+ /** Property name of the persistence location. */
+ public static final String LOCATION = "location";
+ /** The location where this project is persisted. */
+ private URL _location = null;
/**
* Default ctor.
@@ -124,4 +128,25 @@ public class ACSProjectElement extends ACSNamedElement {
firePropertyChange(BASEDIR, old, baseDir);
}
+ /**
+ * Get the location where this project is persisted.
+ *
+ * @return Saved location, or null if not persisted.
+ */
+ public URL getLocation() {
+ return _location;
+ }
+
+ /**
+ * Set the loction where the project is persisted.
+ *
+ * @param location Location of project.
+ */
+ public void setLocation(URL location) {
+ URL old = _location;
+ _location = location;
+ firePropertyChange(LOCATION, old, _location);
+ }
+
+
}
diff --git a/src/antidote/org/apache/tools/ant/gui/core/ActionManager.java b/src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
index b50904794..03268efbb 100644
--- a/src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
+++ b/src/antidote/org/apache/tools/ant/gui/core/ActionManager.java
@@ -70,9 +70,8 @@ public class ActionManager {
/** Parameters for the Command constructor. */
private static final Class[] COMMAND_CTOR_PARAMS = { AppContext.class };
- private ResourceBundle _resources =
- ResourceBundle.getBundle(
- "org.apache.tools.ant.gui.resources.action");
+ /** Externalized resources. */
+ private ResourceManager _resources = null;
/** Array of action identifiers. */
private String[] _actionIDs = null;
@@ -91,22 +90,22 @@ public class ActionManager {
* Standard ctor.
*
* @param bus Event bus to post events to.
+ * @param resources Location of resources.
*/
- public ActionManager(EventBus bus) {
+ public ActionManager(EventBus bus, ResourceManager resources) {
_bus = bus;
+ _resources = resources;
bus.addMember(EventBus.RESPONDING, new Enabler());
_mapper = new EventToActionMapper();
// Configure the set of actions.
- String toTok = _resources.getString("actions");
- StringTokenizer tok = new StringTokenizer(toTok, ", ");
- _actionIDs = new String[tok.countTokens()];
+ String[] names = _resources.getStringArray("actions");
+ _actionIDs = new String[names.length];
for(int i = 0; i < _actionIDs.length; i++) {
- _actionIDs[i] = tok.nextToken();
+ _actionIDs[i] = names[i];
AntAction action = new AntAction(_resources, _bus, _actionIDs[i]);
_actions.put(_actionIDs[i], action);
-
// For each action we need to add the reverse event trigger
// lookup.
diff --git a/src/antidote/org/apache/tools/ant/gui/core/AntAction.java b/src/antidote/org/apache/tools/ant/gui/core/AntAction.java
index b8edf7b36..8f994d64b 100644
--- a/src/antidote/org/apache/tools/ant/gui/core/AntAction.java
+++ b/src/antidote/org/apache/tools/ant/gui/core/AntAction.java
@@ -79,7 +79,7 @@ public class AntAction extends AbstractAction {
public static final String COMMAND = "command";
/** Property resources. */
- private ResourceBundle _resources = null;
+ private ResourceManager _resources = null;
/** Event bus. */
private EventBus _bus = null;
/** Unique id. */
@@ -100,7 +100,7 @@ public class AntAction extends AbstractAction {
*
* @param id Unique id for the action
*/
- public AntAction(ResourceBundle resources, EventBus bus, String id) {
+ public AntAction(ResourceManager resources, EventBus bus, String id) {
_resources = resources;
_bus = bus;
_id = id;
@@ -144,17 +144,7 @@ public class AntAction extends AbstractAction {
// Add an icon if any (which means it'll show up on the tool bar).
String iconName = getString("icon");
if(iconName != null) {
- try {
- URL imageLoc =
- AntAction.class.getResource("resources/" + iconName);
- if(imageLoc != null) {
- putValue(SMALL_ICON, new ImageIcon(imageLoc));
- }
- }
- catch(Exception ex) {
- // XXX log me.
- ex.printStackTrace();
- }
+ putValue(SMALL_ICON, _resources.loadImageIcon(iconName));
}
_enableOn = resolveClasses(getString(ENABLE_ON));
diff --git a/src/antidote/org/apache/tools/ant/gui/core/AppContext.java b/src/antidote/org/apache/tools/ant/gui/core/AppContext.java
index 6d50c516c..6f70985d1 100644
--- a/src/antidote/org/apache/tools/ant/gui/core/AppContext.java
+++ b/src/antidote/org/apache/tools/ant/gui/core/AppContext.java
@@ -69,8 +69,12 @@ public class AppContext {
private EventBus _eventBus = new EventBus();
/** Application resources. */
private ResourceManager _resources = new ResourceManager();
+ /** The project manager. */
+ private ProjectManager _projectManager = new ProjectManager();
/** Application actions. */
- private ActionManager _actions = new ActionManager(_eventBus);
+ private ActionManager _actions =
+ new ActionManager(_eventBus, new ResourceManager(
+ "org.apache.tools.ant.gui.resources.action"));
/** List of build listeners to register when build starts. */
private List _buildListeners = new LinkedList();
@@ -125,6 +129,15 @@ public class AppContext {
return _parentFrame;
}
+ /**
+ * Get the project manager.
+ *
+ * @return Project manager.
+ */
+ public ProjectManager getProjectManager() {
+ return _projectManager;
+ }
+
/**
* Get the current project.
*
diff --git a/src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java b/src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java
index 7e5deb5b1..d24c388d7 100644
--- a/src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java
+++ b/src/antidote/org/apache/tools/ant/gui/core/ResourceManager.java
@@ -77,7 +77,7 @@ public class ResourceManager {
/** Image path. */
private static final String IMG_PATH =
- "/" + RESOURCE_PKG.replace('.', '/');
+ File.separator + RESOURCE_PKG.replace('.', File.separatorChar);
/** Resources to reference. */
private ResourceBundle _resources = null;
@@ -99,6 +99,16 @@ public class ResourceManager {
_resources = ResourceBundle.getBundle(propName);
}
+ /**
+ * Get non-qualified String resource.
+ *
+ * @param name Name of the resource.
+ * @return Value of the resource.
+ */
+ public String getString(String name) {
+ return getString(null, name);
+ }
+
/**
* Get a string resource for the given class.
*
@@ -107,13 +117,22 @@ public class ResourceManager {
* @return String resource for the given class.
*/
public String getString(Class clazz, String name) {
- if(clazz == null || name == null) {
+ if(name == null) {
return null;
}
return _resources.getString(getKey(clazz, name));
}
+ /**
+ * Get a non-qualified array of string resources for the given class.
+ *
+ * @param name Name of the string resource.
+ * @return Array of string resources for the given class.
+ */
+ public String[] getStringArray(String name) {
+ return getStringArray(null, name);
+ }
/**
* Get an array of string resources for the given class.
*
@@ -122,7 +141,7 @@ public class ResourceManager {
* @return Array of string resources for the given class.
*/
public String[] getStringArray(Class clazz, String name) {
- if(clazz == null || name == null) {
+ if(name == null) {
return null;
}
@@ -157,7 +176,21 @@ public class ResourceManager {
* @return Composite key.
*/
private String getKey(Class clazz, String name) {
- return clazz.getName() + "." + name;
+ name = name == null ? "" : name;
+
+ return clazz == null ? name : clazz.getName() + "." + name;
+ }
+
+ /**
+ * Generate a localized message using the given set of arguments to
+ * format the message with.
+ *
+ * @param name Name of the message.
+ * @param arguments Arguments to the message.
+ * @return The formatted message.
+ */
+ public String getMessage(String name, Object[] arguments) {
+ return getMessage(null, name, arguments);
}
/**
@@ -165,9 +198,9 @@ public class ResourceManager {
* format the message with.
*
* @param clazz Class to get message resource for.
- * @param name
- * @param arguments
- * @return
+ * @param name Name of the message.
+ * @param arguments Arguments to the message.
+ * @return The formatted message.
*/
public String getMessage(Class clazz, String name, Object[] arguments) {
String format = getString(clazz, name);
@@ -183,7 +216,7 @@ public class ResourceManager {
* @return Image as an ImageIcon, or null if not found.
*/
public ImageIcon getImageIcon(Class clazz, String key) {
- return getImageIcon(getString(clazz, key));
+ return loadImageIcon(getString(clazz, key));
}
/**
@@ -193,7 +226,7 @@ public class ResourceManager {
* @param fileName Image file to load.
* @return Image as an ImageIcon, or null if not found.
*/
- public ImageIcon getImageIcon(String fileName) {
+ public ImageIcon loadImageIcon(String fileName) {
if(fileName == null) return null;
ImageIcon icon = null;
diff --git a/src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java b/src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java
index 991f60643..a66eb3983 100644
--- a/src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java
+++ b/src/antidote/org/apache/tools/ant/gui/modules/console/BuildConsole.java
@@ -51,7 +51,7 @@
* information on the Apache Software Foundation, please see
* .
*/
-package org.apache.tools.ant.gui.modules;
+package org.apache.tools.ant.gui.modules.console;
import org.apache.tools.ant.gui.core.AntModule;
import org.apache.tools.ant.gui.core.AppContext;
diff --git a/src/antidote/org/apache/tools/ant/gui/modules/console/LogLevelEnum.java b/src/antidote/org/apache/tools/ant/gui/modules/console/LogLevelEnum.java
index 6880c97ba..fbf9c674b 100644
--- a/src/antidote/org/apache/tools/ant/gui/modules/console/LogLevelEnum.java
+++ b/src/antidote/org/apache/tools/ant/gui/modules/console/LogLevelEnum.java
@@ -51,7 +51,7 @@
* information on the Apache Software Foundation, please see
* .
*/
-package org.apache.tools.ant.gui.modules;
+package org.apache.tools.ant.gui.modules.console;
/**
* Enumeration class of the different log levels.
diff --git a/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties b/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
index b1ef8d67a..d87461d12 100644
--- a/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
+++ b/src/antidote/org/apache/tools/ant/gui/resources/antidote.properties
@@ -22,17 +22,17 @@ org.apache.tools.ant.gui.Antidote.bottom.modules=\
org.apache.tools.ant.gui.Antidote.top.modules=\
org.apache.tools.ant.gui.modules.TargetMonitor
-org.apache.tools.ant.gui.modules.PropertyEditor.name=Properties
+org.apache.tools.ant.gui.modules.edit.PropertyEditor.name=Properties
-org.apache.tools.ant.gui.modules.ElementNavigator.name=Project
-org.apache.tools.ant.gui.modules.ElementNavigator.popupActions=\
+org.apache.tools.ant.gui.modules.edit.ElementNavigator.name=Project
+org.apache.tools.ant.gui.modules.edit.ElementNavigator.popupActions=\
newTarget, newTask, newProperty
org.apache.tools.ant.gui.modules.TargetMonitor.name=Selected Target(s)
org.apache.tools.ant.gui.modules.TargetMonitor.defText=[none]
-org.apache.tools.ant.gui.modules.Console.name=Console
-org.apache.tools.ant.gui.modules.Console.logLevel=Log message level:
+org.apache.tools.ant.gui.modules.console.BuildConsole.name=Console
+org.apache.tools.ant.gui.modules.console.BuildConsole.logLevel=Log message level:
org.apache.tools.ant.gui.core.XMLFileFilter.description=XML Files