View Javadoc

1   /*
2   * The contents of this file are subject to the BT "ZEUS" Open Source 
3   * Licence (L77741), Version 1.0 (the "Licence"); you may not use this file 
4   * except in compliance with the Licence. You may obtain a copy of the Licence
5   * from $ZEUS_INSTALL/licence.html or alternatively from
6   * http://www.labs.bt.com/projects/agents/zeus/licence.htm
7   * 
8   * Except as stated in Clause 7 of the Licence, software distributed under the
9   * Licence is distributed WITHOUT WARRANTY OF ANY KIND, either express or 
10  * implied. See the Licence for the specific language governing rights and 
11  * limitations under the Licence.
12  * 
13  * The Original Code is within the package zeus.*.
14  * The Initial Developer of the Original Code is British Telecommunications
15  * public limited company, whose registered office is at 81 Newgate Street, 
16  * London, EC1A 7AJ, England. Portions created by British Telecommunications 
17  * public limited company are Copyright 1996-9. All Rights Reserved.
18  * 
19  * THIS NOTICE MUST BE INCLUDED ON ANY COPY OF THIS FILE
20  */
21  
22  
23  
24  /*****************************************************************************
25  * AgentPanel.java
26  *
27  *
28  ***************************************************************************/
29  
30  package zeus.generator.code;
31  
32  import java.io.*;
33  import java.util.*;
34  import java.awt.*;
35  import java.awt.event.*;
36  import javax.swing.*;
37  import javax.swing.border.*;
38  import javax.swing.table.*;
39  import javax.swing.event.*;
40  
41  import zeus.util.*;
42  import zeus.gui.help.*;
43  import zeus.gui.editors.*;
44  import zeus.gui.fields.*;
45  
46  public class AgentPanel extends JPanel {
47    protected GenerationPlan   genplan;
48    protected AgentModel       agentModel;
49    protected JTable           agentTable;
50  
51    public AgentPanel(GenerationPlan genplan) {
52       this.genplan = genplan;
53  
54       agentModel = new AgentModel(genplan);
55  
56       TableColumnModel tm = new DefaultTableColumnModel();
57       TableColumn column;
58       JCheckBox checkbox = new JCheckBox();
59       checkbox.setHorizontalAlignment(JCheckBox.CENTER);
60       DefaultCellEditor cellEditor = new DefaultCellEditor(checkbox);
61  
62       column = new TableColumn(AgentModel.GENERATE,8,
63          new CheckBoxCellRenderer(), cellEditor);
64       column.setHeaderValue(agentModel.getColumnName(AgentModel.GENERATE));
65       tm.addColumn(column);
66  
67       column = new TableColumn(AgentModel.STATUS,24);
68       column.setHeaderValue(agentModel.getColumnName(AgentModel.STATUS));
69       tm.addColumn(column);
70  
71       column = new TableColumn(AgentModel.NAME,24);
72       column.setHeaderValue(agentModel.getColumnName(AgentModel.NAME));
73       tm.addColumn(column);
74  
75       column = new TableColumn(AgentModel.HOST,24);
76       column.setHeaderValue(agentModel.getColumnName(AgentModel.HOST));
77       tm.addColumn(column);
78  
79       column = new TableColumn(AgentModel.SERVER_FILE,24);
80       column.setHeaderValue(agentModel.getColumnName(AgentModel.SERVER_FILE));
81       tm.addColumn(column);
82  
83       column = new TableColumn(AgentModel.DATABASE,24);
84       column.setHeaderValue(agentModel.getColumnName(AgentModel.DATABASE));
85       tm.addColumn(column);
86  
87       column = new TableColumn(AgentModel.HAS_GUI,24,
88          new CheckBoxCellRenderer(), cellEditor);
89       column.setHeaderValue(agentModel.getColumnName(AgentModel.HAS_GUI));
90       tm.addColumn(column);
91  
92       column = new TableColumn(AgentModel.EXTERNAL,24);
93       column.setHeaderValue(agentModel.getColumnName(AgentModel.EXTERNAL));
94       tm.addColumn(column);
95  
96       column = new TableColumn(AgentModel.ICON,24,
97          new IconRenderer(), new IconEditor());
98       column.setHeaderValue(agentModel.getColumnName(AgentModel.ICON));
99       tm.addColumn(column);
100 
101      agentTable = new JTable(agentModel,tm);
102      agentTable.getTableHeader().setReorderingAllowed(false);
103      agentTable.setColumnSelectionAllowed(false);
104 
105      TitledBorder border = BorderFactory.createTitledBorder("Task Agents");
106      border.setTitlePosition(TitledBorder.TOP);
107      border.setTitleJustification(TitledBorder.RIGHT);
108      border.setTitleFont(new Font("Helvetica", Font.BOLD, 14));
109      border.setTitleColor(Color.blue);
110      setBorder(border);
111 
112      JScrollPane scrollPane = new JScrollPane(agentTable);
113      scrollPane.setBorder(new BevelBorder(BevelBorder.LOWERED));
114      scrollPane.setMinimumSize(new Dimension(160,80));
115      scrollPane.setPreferredSize(new Dimension(200,80));
116      agentTable.setBackground(Color.white);
117 
118      GridBagLayout gridBagLayout = new GridBagLayout();
119      setLayout(gridBagLayout);
120      GridBagConstraints gbc;
121      setBackground(Color.lightGray);
122 
123      JToolBar toolbar = new AgentToolBar();
124      gbc = new GridBagConstraints();
125      gbc.anchor = GridBagConstraints.NORTHWEST;
126      gbc.fill = GridBagConstraints.NONE;
127      gbc.gridwidth = GridBagConstraints.REMAINDER;
128      gbc.insets = new Insets(0,8,0,0);
129      gridBagLayout.setConstraints(toolbar,gbc);
130      add(toolbar);
131 
132      gbc = new GridBagConstraints();
133      gbc.gridwidth = GridBagConstraints.REMAINDER;
134      gbc.anchor = GridBagConstraints.NORTHWEST;
135      gbc.fill = GridBagConstraints.BOTH;
136      gbc.weightx = gbc.weighty = 1;
137      gbc.insets = new Insets(8,8,8,8);
138      gridBagLayout.setConstraints(scrollPane,gbc);
139      add(scrollPane);
140   }
141 
142   protected class CheckBoxCellRenderer extends JCheckBox
143                                        implements TableCellRenderer,
144                                        java.io.Serializable {
145 
146      public CheckBoxCellRenderer() {
147         setHorizontalAlignment(JCheckBox.CENTER);
148      }
149 
150      public Component getTableCellRendererComponent(JTable table,
151         Object value, boolean isSelected, boolean hasFocus,
152         int row, int column) {
153 
154         if ( value != null )
155            this.setSelected(((Boolean)value).booleanValue());
156         return this;
157      }
158   }
159 
160   protected class IconRenderer extends DefaultTableCellRenderer {
161      public IconRenderer() {
162         setHorizontalAlignment(JLabel.CENTER);
163      }
164      public void setValue(Object value) {
165         if ( value == null ) return;
166 
167         String path = ((String)value).trim();
168         if ( path.equals("") ) return;
169 
170         super.setIcon(new ImageIcon(path));
171      }
172   }
173 
174   class IconEditor extends DefaultCellEditor
175                            implements ActionListener {
176 
177     protected JButton button = new JButton("");
178     protected int row, column;
179     protected Object value;
180     protected FileDialog dialog = null;
181 
182     public IconEditor() {
183       super(new JTextField());
184       setClickCountToStart(1);
185 
186       button.setBackground(Color.white);
187       button.setHorizontalAlignment(JButton.LEFT);
188       button.setBorderPainted(false);
189       button.addActionListener(this);
190     }
191 
192     public void actionPerformed(ActionEvent e) {
193       Object src = e.getSource();
194       if ( src == button ) {
195          // Note: create dialog (using button) before stopping editing
196          // which will remove the button from the visible component hierachy
197          if ( dialog == null )
198             dialog = new FileDialog((Frame)SwingUtilities.getRoot(button),
199 	       "Select (a file within) Target Directory",FileDialog.LOAD);
200 
201 	 fireEditingCanceled();
202 
203          if ( value != null && !value.equals("") ) {
204 	    File f1 = new File((String)value);
205             dialog.setFile(f1.getName());
206             dialog.setDirectory(f1.getParent());
207          }
208          else
209             dialog.setFile("*.gif");
210 
211          dialog.pack();
212          dialog.setVisible(true);
213 
214          String path = (dialog.getFile() == null) ? null : dialog.getDirectory() +
215 	    System.getProperty("file.separator") + dialog.getFile();
216          agentModel.setValueAt(path,row,column);
217       }
218     }
219 
220     public Component getTableCellEditorComponent(JTable table, Object value,
221                                                  boolean isSelected,
222                                                  int row, int column) {
223       this.row = row;
224       this.column = column;
225       this.value = value;
226       return button;
227     }
228   }
229 
230   protected class AgentToolBar extends JToolBar
231                                implements ActionListener {
232 
233      protected JToggleButton helpBtn;
234      protected HelpWindow    helpWin;
235 
236      public AgentToolBar() {
237         setBackground(Color.lightGray);
238         setBorder( new BevelBorder(BevelBorder.LOWERED ) );
239         setFloatable(false);
240         String path = SystemProps.getProperty("gif.dir") + "generator" +
241            System.getProperty("file.separator");
242 
243         // Help Button
244         helpBtn = new JToggleButton(new ImageIcon(path + "help.gif"));
245 	helpBtn.setMargin(new Insets(0,0,0,0));
246         add(helpBtn);
247         helpBtn.setToolTipText("Help");
248         helpBtn.addActionListener(this);
249      }
250 
251      public void actionPerformed(ActionEvent e) {
252         Object src = e.getSource();
253         if ( src == helpBtn ) {
254            if ( helpBtn.isSelected() ) {
255               helpWin = new HelpWindow(SwingUtilities.getRoot(this),
256                  getLocation(), "generator", "Generation Plan: Agents");
257               helpWin.setSource(helpBtn);
258            }
259            else {
260               helpWin.dispose();
261            }
262         }
263      }
264   }
265 }