@@ -52,7 +52,13 @@
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.gui;
import org.apache.tools.ant.Target;
import org.apache.tools.ant.gui.event.*;
import javax.swing.*;
import java.util.*;
import java.io.StringReader;
import java.io.IOException;
import java.awt.BorderLayout;
/**
* Stub for a property editor.
@@ -62,8 +68,162 @@ import javax.swing.*;
*/
class PropertyEditor extends AntEditor {
/** Text pane. */
private JEditorPane _text = null;
/**
* Standard ctor.
*
* @param context Application context.
*/
public PropertyEditor(AppContext context) {
super(context);
add(new JLabel(getName()));
context.getEventBus().addMember(EventBus.MONITORING, new Handler());
setLayout(new BorderLayout());
_text = new JEditorPane("text/html", getAppContext().getResources().
getString(getClass(), "noTargets"));
_text.setEditable(false);
_text.setOpaque(false);
add(BorderLayout.CENTER, _text);
}
/**
* Populate the display with the given target info.
*
* @param targets Targets to display info for.
*/
private void displayTargetInfo(Target[] targets) {
// The text to display.
String text = null;
int num = targets == null ? 0 : targets.length;
Object[] args = null;
switch(num) {
case 0:
text = getAppContext().getResources().
getString(getClass(), "noTargets");
break;
case 1:
args = getTargetParams(targets[0]);
text = getAppContext().getResources().
getMessage(getClass(), "oneTarget", args);
break;
default:
args = getTargetParams(targets);
text = getAppContext().getResources().
getMessage(getClass(), "manyTargets", args);
break;
}
if(text != null) {
_text.setText(text);
}
}
/**
* Get the parameters for the formatted message presented for a single
* target.
*
* @param target Target to generate params for.
* @return Argument list for the formatted message.
*/
private Object[] getTargetParams(Target target) {
List args = new LinkedList();
args.add(target.getName());
args.add(target.getDescription() == null ?
"" : target.getDescription());
StringBuffer buf = new StringBuffer();
Enumeration enum = target.getDependencies();
while(enum.hasMoreElements()) {
buf.append(enum.nextElement());
if(enum.hasMoreElements()) {
buf.append(", ");
}
}
args.add(buf.toString());
return args.toArray();
}
/**
* Get the parameters for the formatted message presented for multiple
* targets.
*
* @param target Targets to generate params for.
* @return Argument list for the formatted message.
*/
private Object[] getTargetParams(Target[] targets) {
List args = new LinkedList();
StringBuffer buf = new StringBuffer();
Set depends = new HashSet();
for(int i = 0; i < targets.length; i++) {
buf.append(targets[i].getName());
if(i < targets.length - 1) {
buf.append(", ");
}
Enumeration enum = targets[i].getDependencies();
while(enum.hasMoreElements()) {
depends.add(enum.nextElement());
}
}
args.add(buf.toString());
Iterator it = depends.iterator();
buf = new StringBuffer();
while(it.hasNext()) {
buf.append(it.next());
if(it.hasNext()) {
buf.append(", ");
}
}
args.add(buf.toString());
return args.toArray();
}
/** 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 posted to the member.
*
* @param event Event to post.
*/
public void eventPosted(EventObject event) {
TargetSelectionEvent e = (TargetSelectionEvent) event;
Target[] targets = e.getSelectedTargets();
displayTargetInfo(targets);
}
}
/** 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.
*/
public boolean accept(EventObject event) {
return event instanceof TargetSelectionEvent;
}
}
}