1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 /******************************************************************************
25 * TaskTablePanel.java
26 *
27 * The Container panel for the Task Table
28 *****************************************************************************/
29
30 package zeus.generator.agent;
31
32 import java.util.*;
33 import java.awt.*;
34 import javax.swing.*;
35 import javax.swing.event.*;
36 import javax.swing.border.*;
37 import javax.swing.table.*;
38 import java.awt.event.*;
39
40 import zeus.util.*;
41 import zeus.concepts.*;
42 import zeus.gui.help.*;
43 import zeus.gui.fields.*;
44 import zeus.generator.*;
45
46 public class TaskPanel extends JPanel {
47
48 static final String[] ERROR_MESSAGE = {
49
50 };
51
52 protected JTable table;
53 protected TaskModel model;
54 protected HelpWindow helpWin;
55 protected AgentEditor editor;
56 protected TaskToolBar toolbar;
57 protected GeneratorModel genmodel;
58 protected AgentGenerator generator;
59
60 public TaskPanel(AgentGenerator generator,
61 GeneratorModel genmodel,
62 AgentEditor editor,
63 String[] tasks,
64 String label) {
65
66 this.editor = editor;
67 this.genmodel = genmodel;
68 this.generator = generator;
69
70 model = new TaskModel(tasks,genmodel);
71 model.addChangeListener(editor);
72
73 TableColumnModel tm = new DefaultTableColumnModel();
74 TableColumn column;
75 column = new TableColumn(TaskModel.TASK,12,
76 new DefaultTableCellRenderer(),
77 new DefaultCellEditor(new NameField()));
78 column.setHeaderValue(model.getColumnName(TaskModel.TASK));
79 tm.addColumn(column);
80 column = new TableColumn(TaskModel.TYPE,24);
81 column.setHeaderValue(model.getColumnName(TaskModel.TYPE));
82 tm.addColumn(column);
83
84 table = new JTable(model,tm);
85 table.getTableHeader().setReorderingAllowed(false);
86 table.setColumnSelectionAllowed(false);
87
88 toolbar = new TaskToolBar();
89
90 GridBagLayout gridBagLayout = new GridBagLayout();
91 setLayout(gridBagLayout);
92 setBackground(java.awt.Color.lightGray);
93
94 TitledBorder border = (BorderFactory.createTitledBorder(label));
95 border.setTitlePosition(TitledBorder.TOP);
96 border.setTitleJustification(TitledBorder.RIGHT);
97 border.setTitleFont(new Font("Helvetica", Font.BOLD, 14));
98 border.setTitleColor(java.awt.Color.blue);
99 setBorder(border);
100
101 JScrollPane scrollPane = new JScrollPane(table);
102 scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
103 scrollPane.setMinimumSize(new Dimension(160, 80));
104 scrollPane.setPreferredSize(new Dimension(200, 80));
105 table.setBackground(Color.white);
106
107 GridBagConstraints gbc = new GridBagConstraints();
108 gbc.gridwidth = GridBagConstraints.REMAINDER;
109 gbc.anchor = GridBagConstraints.WEST;
110 gbc.fill = GridBagConstraints.NONE;
111 gbc.insets = new Insets(0,8,0,0);
112 gridBagLayout.setConstraints(toolbar, gbc);
113 add(toolbar);
114
115 gbc.gridwidth = GridBagConstraints.REMAINDER;
116 gbc.fill = GridBagConstraints.BOTH;
117 gbc.weightx = gbc.weighty = 1;
118 gbc.insets = new Insets(8,8,8,8);
119 gridBagLayout.setConstraints(scrollPane, gbc);
120 add(scrollPane);
121 }
122
123 protected void errorMsg(int tag) {
124 JOptionPane.showMessageDialog(this,ERROR_MESSAGE[tag],
125 "Error", JOptionPane.ERROR_MESSAGE);
126 }
127
128 public String[] getData() {
129 return model.getData();
130 }
131
132 protected String getSelectedTaskId() {
133 int row = table.getSelectedRow();
134 if ( row == -1 ) {
135 errorMsg(0);
136 return null;
137 }
138 return (String)model.getValueAt(row,TaskModel.ID);
139 }
140
141 class TaskToolBar extends JToolBar implements ActionListener {
142 protected JButton newBtn;
143 protected JButton editBtn;
144 protected JButton deleteBtn;
145 protected JToggleButton helpBtn;
146 protected HelpWindow helpWin;
147 protected JPopupMenu popup;
148 protected JMenu primitiveMenu;
149 protected JMenu summaryMenu;
150 protected JMenu behaviourMenu;
151 protected JMenu scriptMenu;
152 protected JMenuItem primitiveMenuItem;
153 protected JMenuItem summaryMenuItem;
154 protected JMenuItem behaviourMenuItem;
155 protected JMenuItem scriptMenuItem;
156
157 public TaskToolBar() {
158 setBackground(java.awt.Color.lightGray);
159 setBorder( new BevelBorder(BevelBorder.LOWERED ) );
160 setFloatable(false);
161
162 String sep = System.getProperty("file.separator");
163 String path = SystemProps.getProperty("gif.dir") + "generator" + sep;
164
165 newBtn = new JButton(new ImageIcon(path + "new1.gif"));
166 newBtn.setMargin(new Insets(0,0,0,0));
167 add(newBtn);
168 newBtn.setToolTipText("Create New Task");
169 newBtn.addActionListener(this);
170
171 editBtn = new JButton(new ImageIcon(path + "edit1.gif"));
172 editBtn.setMargin(new Insets(0,0,0,0));
173 add(editBtn);
174 editBtn.setToolTipText("Edit this Task");
175 editBtn.addActionListener(this);
176
177 deleteBtn = new JButton(new ImageIcon(path + "delete1.gif"));
178 deleteBtn.setMargin(new Insets(0,0,0,0));
179 add(deleteBtn);
180 deleteBtn.setToolTipText("Delete this Task");
181 deleteBtn.addActionListener(this);
182
183 addSeparator();
184
185 helpBtn = new JToggleButton(new ImageIcon(path + "help.gif"));
186 helpBtn.setMargin(new Insets(0,0,0,0));
187 add(helpBtn);
188 helpBtn.setToolTipText("Help");
189 helpBtn.addActionListener(this);
190
191
192 popup = new JPopupMenu();
193 popup.add(new JLabel ("Tasks"));
194 popup.addSeparator();
195
196 String name = AbstractTask.getTypeName(AbstractTask.PRIMITIVE);
197 primitiveMenu = new JMenu(name,false);
198 primitiveMenuItem = new JMenuItem("New " + name + " task");
199 primitiveMenuItem.addActionListener(this);
200
201 name = AbstractTask.getTypeName(AbstractTask.SUMMARY);
202 summaryMenu = new JMenu(name,false);
203 summaryMenuItem = new JMenuItem("New " + name + " task");
204 summaryMenuItem.addActionListener(this);
205
206 name = AbstractTask.getTypeName(AbstractTask.BEHAVIOUR);
207 behaviourMenu = new JMenu(name,false);
208 behaviourMenuItem = new JMenuItem("New " + name);
209 behaviourMenuItem.addActionListener(this);
210
211 name = AbstractTask.getTypeName(AbstractTask.SCRIPT);
212 scriptMenu = new JMenu(name,false);
213 scriptMenuItem = new JMenuItem("New " + name);
214 scriptMenuItem.addActionListener(this);
215
216 popup.add(primitiveMenu);
217 popup.add(summaryMenu);
218 popup.add(behaviourMenu);
219 popup.add(scriptMenu);
220
221 CompoundBorder cbr = new CompoundBorder(new EtchedBorder(),
222 new EmptyBorder(5,5,5,5));
223 popup.setBorder(cbr);
224 }
225
226 public void actionPerformed(ActionEvent e) {
227 Object src = e.getSource();
228 String primitive = AbstractTask.getTypeName(AbstractTask.PRIMITIVE);
229 String summary = AbstractTask.getTypeName(AbstractTask.SUMMARY);
230 String behaviour = AbstractTask.getTypeName(AbstractTask.BEHAVIOUR);
231 String script = AbstractTask.getTypeName(AbstractTask.SCRIPT);
232
233
234 if ( src == newBtn ) {
235 String[] taskId = model.getData();
236 Vector names = new Vector();
237 for(int i = 0; i < taskId.length; i++ )
238 names.addElement(genmodel.getTaskName(taskId[i]));
239
240 primitiveMenu.removeAll();
241 primitiveMenu.add(primitiveMenuItem);
242 primitiveMenu.addSeparator();
243
244 String[] items = genmodel.getTaskNames(AbstractTask.PRIMITIVE);
245 Vector allNames = Misc.stringVector(items);
246 Vector validNames = Misc.difference(allNames,names);
247
248 JMenuItem mi;
249 for(int i = 0; i < validNames.size(); i++ ) {
250 mi = new JMenuItem((String)validNames.elementAt(i));
251 mi.addActionListener(this);
252 mi.setActionCommand(primitive);
253 primitiveMenu.add(mi);
254 }
255
256 summaryMenu.removeAll();
257 summaryMenu.add(summaryMenuItem);
258 summaryMenu.addSeparator();
259
260 items = genmodel.getTaskNames(AbstractTask.SUMMARY);
261 allNames = Misc.stringVector(items);
262 validNames = Misc.difference(allNames,names);
263
264 for(int i = 0; i < validNames.size(); i++ ) {
265 mi = new JMenuItem((String)validNames.elementAt(i));
266 mi.addActionListener(this);
267 mi.setActionCommand(summary);
268 summaryMenu.add(mi);
269 }
270
271 behaviourMenu.removeAll();
272 behaviourMenu.add(behaviourMenuItem);
273 behaviourMenu.addSeparator();
274
275 items = genmodel.getTaskNames(AbstractTask.BEHAVIOUR);
276 allNames = Misc.stringVector(items);
277 validNames = Misc.difference(allNames,names);
278
279 for(int i = 0; i < validNames.size(); i++ ) {
280 mi = new JMenuItem((String)validNames.elementAt(i));
281 mi.addActionListener(this);
282 mi.setActionCommand(behaviour);
283 behaviourMenu.add(mi);
284 }
285
286 scriptMenu.removeAll();
287 scriptMenu.add(scriptMenuItem);
288 scriptMenu.addSeparator();
289
290 items = genmodel.getTaskNames(AbstractTask.SCRIPT);
291 allNames = Misc.stringVector(items);
292 validNames = Misc.difference(allNames,names);
293
294 for(int i = 0; i < validNames.size(); i++ ) {
295 mi = new JMenuItem((String)validNames.elementAt(i));
296 mi.addActionListener(this);
297 mi.setActionCommand(script);
298 scriptMenu.add(mi);
299 }
300
301 popup.pack();
302 popup.show(newBtn,0,0);
303 }
304 else if ( src == primitiveMenuItem )
305 model.addNewRow(primitive);
306 else if ( src == summaryMenuItem )
307 model.addNewRow(summary);
308 else if ( src == behaviourMenuItem )
309 model.addNewRow(behaviour);
310 else if ( src == scriptMenuItem )
311 model.addNewRow(script);
312
313 else if ( e.getActionCommand().equals(primitive) )
314 model.addNewRow(primitive,((JMenuItem)src).getText());
315 else if ( e.getActionCommand().equals(summary) )
316 model.addNewRow(summary,((JMenuItem)src).getText());
317 else if ( e.getActionCommand().equals(behaviour) )
318 model.addNewRow(behaviour,((JMenuItem)src).getText());
319 else if ( e.getActionCommand().equals(script) )
320 model.addNewRow(script,((JMenuItem)src).getText());
321
322 else if ( src == editBtn ) {
323 String id = getSelectedTaskId();
324 if ( id == null ) return;
325 generator.editTask(id);
326 }
327 else if ( src == deleteBtn ) {
328 int row = table.getSelectedRow();
329 if ( row == -1 ) {
330 errorMsg(0);
331 return;
332 }
333 model.removeRow(row);
334 }
335
336 else if ( src == helpBtn ) {
337 if ( helpBtn.isSelected() ) {
338 Point dispos = getLocation();
339 helpWin = new HelpWindow(SwingUtilities.getRoot(this),dispos,
340 "generator", "Task Declaration");
341 helpWin.setSource(helpBtn);
342 }
343 else
344 helpWin.dispose();
345 }
346 }
347 }
348 }