package extensions.awt; import java.awt.*; import java.io.*; import java.util.*; import extensions.lang.*; /** Manage internally the CLASSPATH parameter. * @version 1.0.2 * @author John Webster Small */ public class ClassPathDialog extends ButtonDialog implements ActionProtocol, PropertyProtocol { private List pathList; private ButtonActionPanel bap; /** Original, startup value of "java.class.path" * System property. */ public static String defaultClassPath; /** Currently set CLASSPATH value. */ public static String classPath; static { defaultClassPath = System.getProperty ("java.class.path",System.getProperty("java.home")+"src"); classPath = defaultClassPath; } private void parsePaths(String paths) { StringTokenizer p = new StringTokenizer(paths,File.pathSeparator); pathList.clear(); while (p.hasMoreTokens()) pathList.addItem(p.nextToken()); } private String concatPaths() { StringBuffer s = new StringBuffer(); int i = pathList.countItems(); if (i > 0) s.append(pathList.getItem(0)); for (int j = 1; j < i; j++) s.append(File.pathSeparator+pathList.getItem(j)); return s.toString(); } /** Construct a ClassPathDialog. * @param parent parent frame of this dialog */ public ClassPathDialog(Frame parent) { super(parent,"Paths comprising CLASSPATH",OkCancel); add("Center",pathList = new List()); parsePaths(classPath); add("East",bap = new ButtonActionPanel ("Add|Default|Delete", ButtonActionPanel.VERT_LEFT,this)); resize(500,200); } /** Allow user to specify the various paths to * incorporate into the CLASSPATH. * @see #classPath */ public void show() { super.show(); if (getButtonClickedIdx() == 0) // Ok classPath = concatPaths(); } /** not used. */ public Object get() { return null; } /** Do not call. * @see extensions.awt.PropertyProtocol */ public void set(Object value) { String s = (String) value; if (s != null) { StringTokenizer st = new StringTokenizer(s," \t"); if (st.hasMoreTokens()) pathList.addItem(st.nextToken()); } } /** @see extensions.awt.ActionProtocol */ public void action(Component forward, Event evt, Object what) { ButtonAction ba; if (evt.target instanceof ButtonAction && bap.isMemberButton(ba = (ButtonAction) evt.target)) { switch (ba.id) { case 0: // Add PromptDialog pd = new PromptDialog ((Frame)getParent(),"Add path to CLASSPATH",50); PromptDialog.setProperty(pd,this,this); break; case 1: // Default parsePaths(defaultClassPath); break; case 2: // Delete int[] idxs = pathList.getSelectedIndexes(); for (int i = 0; i < idxs.length; i++) pathList.delItem(idxs[i]); break; } } else super.action(forward,evt,what); } }