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  package zeus.agentviewer.protocol;
25  
26  import javax.swing.*;
27  import javax.swing.table.*;
28  import javax.swing.event.*;
29  import javax.swing.border.*;
30  import java.awt.*;
31  import java.awt.event.*;
32  import java.util.*;
33  
34  import zeus.agentviewer.*;
35  import zeus.util.*;
36  
37  
38  public class ProtocolUI extends ZeusInternalFrame
39     implements ListSelectionListener {
40  
41     final int TOP_PANE_MIN_HEIGHT = 43;
42     final int TOP_PANE_MIN_WIDTH = 500;
43     final int BOTTOM_PANE_MIN_WIDTH = 100;
44     final int BOTTOM_PANE_MIN_HEIGHT = 100;
45  
46     private JPanel  contentPane;
47     private JTable  protocolTable, strategyTable, attributesTable;
48  
49  
50  
51     private static int NUMBER_DISPLAYED = 0;
52     private InternalFramesPanel deskTop;
53  
54     ProtocolModel protocolBuffer;
55     StrategyModel strategyBuffer;
56     AttributesModel attributesBuffer;
57  
58  
59  //------------------------------------------------------------------------------
60      public ProtocolUI(InternalFramesPanel deskTop, ProtocolModel protocolBuffer,
61                        StrategyModel strategyBuffer, AttributesModel attributesBuffer) 
62      {
63          super(" ",true,true,true,true);
64          setTitle("Protocols & Strategies:" + (++NUMBER_DISPLAYED));
65          String sep = System.getProperty("file.separator");
66          String gifpath = SystemProps.getProperty("gif.dir") + "agentviewer" + sep;
67          ImageIcon icon = new ImageIcon(gifpath + ViewerNames.PROTOCOL_IMG);
68          setFrameIcon(icon);
69          this.deskTop = deskTop;
70          this.protocolBuffer =protocolBuffer;
71          this.strategyBuffer = strategyBuffer;
72          this.attributesBuffer = attributesBuffer;
73          buildUI();
74          deskTop.addInternalFrame(this);
75          setVisible(true);
76        }
77  //------------------------------------------------------------------------------
78        private void buildUI(){
79            contentPane = (JPanel) getContentPane();
80            contentPane.setLayout(new BorderLayout());
81            contentPane.setBorder(BorderFactory.createEtchedBorder(Color.gray,Color.black));
82            contentPane.add(BorderLayout.NORTH,getProtocolPanel());
83            contentPane.add(BorderLayout.CENTER,getStrategyPanel());
84  
85            pack();
86  
87        }
88  //------------------------------------------------------------------------------
89        JPanel getProtocolPanel(){
90           JPanel north =  new JPanel(new BorderLayout());
91           north.setBorder(makeBorder("Known Protocols"));
92  
93           TableColumnModel tm = new DefaultTableColumnModel();
94           TableColumn column;
95           column = new TableColumn(ProtocolModel.TYPE,24);
96           column.setHeaderValue(protocolBuffer.getColumnName(ProtocolModel.TYPE));
97           tm.addColumn(column);
98           column = new TableColumn(ProtocolModel.PROTOCOL,24);
99           column.setCellRenderer(new FriendlyRenderer());
100          column.setHeaderValue(protocolBuffer.getColumnName(ProtocolModel.PROTOCOL));
101          tm.addColumn(column);
102          column = new TableColumn(ProtocolModel.STATE,8);
103          column.setCellRenderer(new CheckBoxCellRenderer());
104          column.setHeaderValue(protocolBuffer.getColumnName(ProtocolModel.STATE));
105          tm.addColumn(column);
106 
107 	 protocolTable = new JTable(protocolBuffer,tm);
108          protocolTable.setPreferredScrollableViewportSize(
109             new Dimension(TOP_PANE_MIN_WIDTH, TOP_PANE_MIN_HEIGHT));
110          protocolTable.getTableHeader().setReorderingAllowed(false);
111          //protocolTable.setColumnSelectionAllowed(false);
112          JScrollPane protocolTableSP = new JScrollPane(protocolTable);
113          protocolTable.getSelectionModel().addListSelectionListener(this );
114          protocolTable.getSelectionModel().setSelectionMode(
115             ListSelectionModel.SINGLE_SELECTION);
116          north.add(BorderLayout.CENTER,protocolTableSP);
117 
118          TableColumn stateColumn = protocolTable.getColumnModel().getColumn(1);
119          TableColumn protocolColumn = protocolTable.getColumnModel().getColumn(0);
120          protocolColumn.setPreferredWidth(stateColumn.getPreferredWidth()*3);
121 
122 
123          return north;
124       }
125 //------------------------------------------------------------------------------
126       JPanel getStrategyPanel(){
127           JPanel center =  new JPanel(new GridLayout(2,1,2,6));
128           center.setBorder(makeBorder("Coordination Strategies"));
129 
130           TableColumnModel tm = new DefaultTableColumnModel();
131           TableColumn column = new TableColumn(StrategyModel.MODE,4);
132           column.setCellRenderer(new CheckBoxCellRenderer());
133           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.MODE));
134           tm.addColumn(column);
135 
136           column = new TableColumn(StrategyModel.AGENTS,24);
137           column.setCellRenderer(new StringArrayCellRenderer());
138           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.AGENTS));
139           tm.addColumn(column);
140 
141           column = new TableColumn(StrategyModel.RELATIONS,24);
142           column.setCellRenderer(new StringArrayCellRenderer());
143           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.RELATIONS));
144           tm.addColumn(column);
145 
146           column = new TableColumn(StrategyModel.STRATEGY,24);
147           column.setCellRenderer(new FriendlyRenderer());
148           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.STRATEGY));
149           tm.addColumn(column);
150 
151           column = new TableColumn(StrategyModel.FACT,12);
152           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.FACT));
153           tm.addColumn(column);
154 
155           column = new TableColumn(StrategyModel.PARAMETERS,24);
156           column.setCellRenderer(new HashtableCellRenderer());
157           column.setHeaderValue(strategyBuffer.getColumnName(StrategyModel.PARAMETERS));
158           tm.addColumn(column);
159 
160 
161           strategyTable = new JTable(strategyBuffer,tm);
162           strategyTable.setPreferredScrollableViewportSize(
163              new Dimension(TOP_PANE_MIN_WIDTH/2, TOP_PANE_MIN_HEIGHT));
164 
165 	  strategyTable.getTableHeader().setReorderingAllowed(false);
166           //strategyTable.setColumnSelectionAllowed(false);
167 	  JScrollPane strategyTableSP = new JScrollPane(strategyTable);
168           strategyTable.getSelectionModel().addListSelectionListener(this );
169           strategyTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
170           strategyTable.setBorder(BorderFactory.createLineBorder(Color.black));
171           center.add(strategyTableSP);
172 
173 
174           attributesTable = new JTable(attributesBuffer);
175           attributesTable.setPreferredScrollableViewportSize(
176              new Dimension(TOP_PANE_MIN_WIDTH/2, TOP_PANE_MIN_HEIGHT));
177           JScrollPane attributesTableSP = new JScrollPane(attributesTable);
178           attributesTable.setBorder(BorderFactory.createLineBorder(Color.black));
179           center.add(attributesTableSP);
180 
181           return center;
182       }
183 //------------------------------------------------------------------------------
184       private TitledBorder makeBorder(String title){
185           TitledBorder border = (BorderFactory.createTitledBorder(title));
186           border.setTitlePosition(TitledBorder.TOP);
187 	  border.setTitleJustification(TitledBorder.RIGHT);
188 	  border.setTitleFont(new Font("Helvetica", Font.BOLD, 12));
189 	  border.setTitleColor(Color.black);
190 
191           return border;
192 
193      }
194 //------------------------------------------------------------------------------
195       public void valueChanged(ListSelectionEvent e) {
196           int selectedRow;
197           if (e.getSource() == protocolTable.getSelectionModel() ) {
198 
199                selectedRow = protocolTable.getSelectedRow();
200                if (selectedRow >= 0  && selectedRow < protocolBuffer.getRowCount()) {
201                     //System.out.println("p:row: " + selectedRow);
202 		    strategyBuffer.setStrategies(protocolBuffer.getStrategyInfos(selectedRow));
203                     attributesBuffer.setFact(strategyBuffer.getFact(0));
204                }
205           }
206           else if (e.getSource() == strategyTable.getSelectionModel() ) {
207               selectedRow = strategyTable.getSelectedRow();
208               //System.out.println("s:row: " + selectedRow);
209               if (selectedRow >= 0  && selectedRow < strategyBuffer.getRowCount()) {
210 		   attributesBuffer.setFact(strategyBuffer.getFact(selectedRow));
211                }
212           }
213       }
214 
215 //--------------------------------------------------------------------------
216      void reSize(){
217         setSize(getWidth()+1,getHeight());
218         setSize(getWidth()-1,getHeight());
219      }
220 }
221 //--------------------------------------------------------------------------
222 class StringArrayCellRenderer extends DefaultTableCellRenderer {
223      public void setValue(Object value) {
224         String text = Misc.concat((String[])value);
225         super.setValue(text);
226      }
227   }
228 
229 //-------------------------------------------------------------------------
230 class HashtableCellRenderer extends DefaultTableCellRenderer {
231      public void setValue(Object input) {
232         if ( input == null )
233            super.setValue(input);
234         else {
235            Hashtable table = (Hashtable)input;
236            Enumeration enum = table.keys();
237            String key, value;
238            String result = "";
239            while( enum.hasMoreElements() ) {
240               key = (String)enum.nextElement();
241               value = (String)table.get(key);
242               result += key + "=" + value + " ";
243            }
244            super.setValue(result.trim());
245         }
246      }
247 }
248 //--------------------------------------------------------------------------
249 class FriendlyRenderer extends DefaultTableCellRenderer {
250      public void setValue(Object value) {
251         if ( value == null )
252            super.setValue(value);
253         else {
254            String name = SystemProps.getProperty("friendly.name." + value, 
255               (String)value);
256            super.setValue(name);
257         }
258      }
259 }
260 //--------------------------------------------------------------------------
261 class CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer {
262 
263      public CheckBoxCellRenderer() {
264         setHorizontalAlignment(JCheckBox.CENTER);
265      }
266 
267      public Component getTableCellRendererComponent(JTable table,
268         Object value, boolean isSelected, boolean hasFocus,
269         int row, int column) {
270 
271         if ( value != null )
272            this.setSelected(((Boolean)value).booleanValue());
273         return this;
274      }
275 }