001: /*
002: * PathController.java
003: *
004: * Created on January 26, 2007, 4:11 PM
005: *
006: * To change this template, choose Tools | Template Manager
007: * and open the template in the editor.
008: */
009:
010: package org.netbeans.modules.jmx.j2seproject.customizer;
011:
012: import java.awt.event.ActionEvent;
013: import java.awt.event.ActionListener;
014: import java.io.File;
015: import java.util.Enumeration;
016: import java.util.StringTokenizer;
017: import javax.swing.DefaultListModel;
018: import javax.swing.JButton;
019: import javax.swing.JFileChooser;
020: import javax.swing.JLabel;
021: import javax.swing.JList;
022: import javax.swing.ListModel;
023: import javax.swing.event.ListDataEvent;
024: import javax.swing.event.ListDataListener;
025: import javax.swing.event.ListSelectionEvent;
026: import javax.swing.event.ListSelectionListener;
027:
028: /**
029: *
030: * @author jfdenise
031: */
032: public class PathController implements ActionListener,
033: ListSelectionListener, ListDataListener {
034: private JList l;
035: private JButton add;
036: private JButton remove;
037: private JButton up;
038: private JButton down;
039: private JFileChooser chooser;
040: private DefaultListModel model;
041: private JLabel label;
042: private ListDataListener lstnr;
043:
044: public PathController(JList l, JLabel label, JButton add,
045: JFileChooser chooser, JButton remove, JButton up,
046: JButton down, ListDataListener lstnr) {
047: this (l, label, createModel(""), add, chooser, remove, up, down,
048: lstnr);
049: }
050:
051: public PathController(JList l, JLabel label, String items,
052: JButton add, JFileChooser chooser, JButton remove,
053: JButton up, JButton down, ListDataListener lstnr) {
054: this (l, label, createModel(items), add, chooser, remove, up,
055: down, lstnr);
056: }
057:
058: /** Creates a new instance of PathController */
059: public PathController(JList l, JLabel label,
060: DefaultListModel model, JButton add, JFileChooser chooser,
061: JButton remove, JButton up, JButton down,
062: ListDataListener lstnr) {
063: this .l = l;
064: this .label = label;
065: this .model = model;
066: this .add = add;
067: this .remove = remove;
068: this .up = up;
069: this .down = down;
070: this .chooser = chooser;
071:
072: this .lstnr = lstnr;
073:
074: l.setModel(model);
075: if (model != null) {
076: model.addListDataListener(this );
077: }
078: add.setActionCommand("add");// NOI18N
079: remove.setActionCommand("remove");// NOI18N
080: up.setActionCommand("up");// NOI18N
081: down.setActionCommand("down");// NOI18N
082: add.addActionListener(this );
083: remove.addActionListener(this );
084: up.addActionListener(this );
085: down.addActionListener(this );
086: l.addListSelectionListener(this );
087:
088: remove.setEnabled(false);
089: up.setEnabled(false);
090: down.setEnabled(false);
091: }
092:
093: public void setEnabled(boolean b) {
094: l.setEnabled(b);
095: label.setEnabled(b);
096: add.setEnabled(b);
097: remove.setEnabled(remove.isEnabled() && b);
098: up.setEnabled(up.isEnabled() && b);
099: down.setEnabled(down.isEnabled() && b);
100: }
101:
102: public void setVisible(boolean b) {
103: l.setVisible(b);
104: label.setVisible(b);
105: add.setVisible(b);
106: remove.setVisible(b);
107: up.setVisible(b);
108: down.setVisible(b);
109: }
110:
111: public void actionPerformed(ActionEvent e) {
112: if (e.getActionCommand().equals("add")) {// NOI18N
113: int returnVal = chooser.showOpenDialog(null);
114: if (returnVal == JFileChooser.APPROVE_OPTION) {
115: File[] selection = chooser.getSelectedFiles();
116: int size = selection.length;
117: StringBuffer buff = new StringBuffer();
118: int end = l.getModel().getSize();
119: for (int i = 0; i < size; i++) {
120: String path = selection[i].getAbsolutePath();
121: if (!model.contains(path))
122: model.add(end + i, path);
123: }
124: }
125: return;
126: }
127: if (e.getActionCommand().equals("remove")) {// NOI18N
128: Object[] values = l.getSelectedValues();
129:
130: for (int i = 0; i < values.length; i++) {
131: model.removeElement(values[i]);
132: }
133: if (model.getSize() == 0) {
134: up.setEnabled(false);
135: down.setEnabled(false);
136: remove.setEnabled(false);
137: }
138: l.setSelectedIndex(0);
139: }
140:
141: if (e.getActionCommand().equals("up")) {// NOI18N
142: int selectedI = l.getSelectedIndex();
143: Object selected = l.getSelectedValue();
144: int newIndex = selectedI - 1;
145: Object previous = model.getElementAt(newIndex);
146: model.setElementAt(selected, newIndex);
147: model.setElementAt(previous, selectedI);
148: l.setSelectedIndex(newIndex);
149: return;
150: }
151:
152: if (e.getActionCommand().equals("down")) {// NOI18N
153: int selectedI = l.getSelectedIndex();
154: Object selected = l.getSelectedValue();
155: int newIndex = selectedI + 1;
156: Object next = model.getElementAt(newIndex);
157: model.setElementAt(selected, newIndex);
158: model.setElementAt(next, selectedI);
159: l.setSelectedIndex(newIndex);
160: return;
161: }
162: }
163:
164: // return the list of selected items
165: public String toString() {
166: Enumeration pluginsPath = model.elements();
167: StringBuffer buffer = new StringBuffer();
168: while (pluginsPath.hasMoreElements()) {
169: Object path = pluginsPath.nextElement();
170: buffer.append(path.toString());
171: if (pluginsPath.hasMoreElements())
172: buffer.append(System.getProperty("path.separator"));// NOI18N
173: }
174: return buffer.toString();
175: }
176:
177: public synchronized void updateModel(String items) {
178: if (items == null)
179: return;
180: ListModel m = l.getModel();
181: if (m != null) {
182: m.removeListDataListener(this );
183: }
184:
185: model = createModel(items);
186: model.addListDataListener(this );
187: l.setModel(model);
188: }
189:
190: public static DefaultListModel createModel(String items) {
191: StringTokenizer tk = new StringTokenizer(items, ",");// NOI18N
192: DefaultListModel model = new DefaultListModel();
193: while (tk.hasMoreTokens()) {
194: String path = tk.nextToken();
195: model.addElement(path);
196: }
197: return model;
198: }
199:
200: public void valueChanged(ListSelectionEvent e) {
201: int[] indices = l.getSelectedIndices();
202: if (indices.length != 1) {
203: up.setEnabled(false);
204: down.setEnabled(false);
205: return;
206: }
207: int single = l.getSelectedIndex();
208: up.setEnabled(true);
209: down.setEnabled(true);
210:
211: if (model.getSize() > 0)
212: remove.setEnabled(true);
213:
214: if (single == 0) {
215: up.setEnabled(false);
216: if (model.getSize() == 1)
217: down.setEnabled(false);
218: }
219:
220: if (single == model.getSize() - 1)
221: down.setEnabled(false);
222: }
223:
224: public void intervalAdded(ListDataEvent arg0) {
225: if (lstnr == null)
226: return;
227: lstnr.intervalAdded(arg0);
228: }
229:
230: public void intervalRemoved(ListDataEvent arg0) {
231: if (lstnr == null)
232: return;
233: lstnr.intervalRemoved(arg0);
234: }
235:
236: public void contentsChanged(ListDataEvent arg0) {
237: if (lstnr == null)
238: return;
239: lstnr.contentsChanged(arg0);
240: }
241:
242: }
|