ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/conient/uk/org/iscream/cms/conient/QueueFrame.java
Revision: 1.16
Committed: Tue May 29 17:41:32 2001 UTC (22 years, 11 months ago) by tdb
Branch: MAIN
Changes since 1.15: +5 -5 lines
Log Message:
The last of the central monitoring system packages to be changed to the newer
structure. It has changed from;

uk.org.iscream.conient.*

to;

uk.org.iscream.cms.conient.*

This is in keeping with the new style of packaging.

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.org.iscream.cms.conient;
3
4 //---IMPORTS---
5 import uk.org.iscream.cms.server.util.*;
6 import uk.org.iscream.cms.conient.datacomponents.*;
7 import javax.swing.*;
8 import javax.swing.border.*;
9 import java.util.*;
10 import java.awt.*;
11 import java.awt.event.*;
12
13 /**
14 * This class allows a window to be shown which displays
15 * internel server queue information as sent by the i-scream
16 * server.
17 *
18 * This allows a check to be made on the current performance of
19 * the internal queues.
20 *
21 * @author $Author: ajm4 $
22 * @version $Id: QueueFrame.java,v 1.15 2001/03/22 00:50:22 ajm4 Exp $
23 */
24 public class QueueFrame extends JFrame {
25
26 //---FINAL ATTRIBUTES---
27
28 /**
29 * The current CVS revision of this class
30 */
31 public final String REVISION = "$Revision: 1.15 $";
32
33 //---STATIC METHODS---
34
35 //---CONSTRUCTORS---
36
37 /**
38 * Constructs a new frame
39 */
40 public QueueFrame() {
41 super("Server Queue Status");
42 JScrollPane scrollPane = new JScrollPane(_content,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
43 getContentPane().add(scrollPane, "Center");
44 JButton close = new JButton("Close Window");
45 close.addActionListener(new ActionListener() {
46 public void actionPerformed(ActionEvent e) {
47 setVisible(false);
48 }
49 });
50 getContentPane().add(close, "South");
51 setIconImage((new ImageIcon("./resources/server.gif")).getImage());
52 pack();
53 setVisible(true);
54 }
55
56 //---PUBLIC METHODS---
57
58 /**
59 * Process an incoming packet, updates the components.
60 *
61 * @param packet the packet to process
62 *
63 * @return if the proceesing was successful
64 */
65 public boolean update(XMLPacket packet) {
66 // iterate over the packets data
67 boolean displaySucessful = true;
68 String queueHashCode = packet.getParam("packet.attributes.hashCode");
69
70 // if there are no components looking after this data
71 // create a new StringDataComponent for it
72 if(!_queues.containsKey(queueHashCode)) {
73 addQueue(packet);
74 }
75
76 // try and update the component, if it doesn't like what it gets
77 // warn the user and set that this was an unsucessful display
78 try {
79 updateQueueInformation(packet);
80 } catch (DataFormatException e) {
81 Conient.addMessage("WARNING{queue frame}: " + e.getMessage());
82 displaySucessful = false;
83 }
84 return displaySucessful;
85 }
86
87 //---PRIVATE METHODS---
88
89 /**
90 * Constructs and adds a new Queue panel to the
91 * current window. This happens when a new queue packet
92 * is detected
93 *
94 * @param packet the packet to obtain the queue data from
95 */
96 private void addQueue(XMLPacket packet) {
97 HashMap newQueue = new HashMap();
98 String queueName = packet.getParam("packet.attributes.name");
99 String queueHashCode = packet.getParam("packet.attributes.hashCode");
100 VisibleDataComponent date = new DateDataComponent("Last timestamp", "packet.attributes.date");
101 VisibleDataComponent total = new StringDataComponent("Total queued to date", "packet.queue.attributes.total");
102 VisibleDataComponent max = new StringDataComponent("Maximum queue size", "packet.queue.attributes.maxSize");
103 newQueue.put("packet.attributes.name", new StringDataComponent("Name", "packet.attributes.name"));
104 newQueue.put("packet.queue.attributes.total", total);
105 newQueue.put("packet.queue.attributes.maxSize", max);
106 newQueue.put("packet.attributes.date", date);
107
108 JPanel newQueueDisplay = new JPanel();
109 newQueueDisplay.setLayout(new BoxLayout(newQueueDisplay, BoxLayout.Y_AXIS));
110 newQueueDisplay.setBorder(new TitledBorder(new LineBorder(new Color(0, 0, 102)), queueName));
111 newQueueDisplay.add(date);
112 newQueueDisplay.add(total);
113 newQueueDisplay.add(max);
114 _queuesDisplays.put(queueHashCode, newQueueDisplay);
115 try {
116 SwingSafeAdd task = new SwingSafeAdd(_content, newQueueDisplay);
117 SwingUtilities.invokeAndWait(task);
118 } catch (Exception e) {
119 // don't care
120 }
121 pack();
122 _queues.put(queueHashCode, newQueue);
123 }
124
125 /**
126 * Updates a queue panel with new data
127 *
128 * @param packet the packet to obtain the new data from
129 * @throws DataFormatException if the packet contains invalid data
130 */
131 private void updateQueueInformation(XMLPacket packet) throws DataFormatException {
132 String queueHashCode = packet.getParam("packet.attributes.hashCode");
133
134 // if it was a shutdown packet, remove the display
135 if (packet.getParam("packet.attributes.shutdown") != null) {
136 // *** !!! MAY NOT BE SWING SAFE !!! ***
137 JPanel temp = (JPanel)_queuesDisplays.get(queueHashCode);
138 temp.setVisible(false);
139 _content.remove(temp);
140 _queuesDisplays.remove(temp);
141 pack();
142
143 // else update the display
144 } else {
145 HashMap components = (HashMap) _queues.get(queueHashCode);
146 Set packetSet = packet.getSet();
147 Iterator i = packetSet.iterator();
148 while (i.hasNext()) {
149 String dataKey = (String) i.next();
150 // if there are no components looking after this data
151 // create a new StringDataComponent for it
152 if(!components.containsKey(dataKey)) {
153 // check if its a queue, if it is then we need to deal with it
154 if(dataKey.startsWith("packet.queue.attributes.queue")) {
155 VisibleDataComponent queue = new StringDataComponent("Current length of " + dataKey.substring(dataKey.lastIndexOf('.') + 1), dataKey);
156 components.put(dataKey, queue);
157 try {
158 SwingSafeAdd task = new SwingSafeAdd((JPanel)_queuesDisplays.get(queueHashCode), queue);
159 SwingUtilities.invokeAndWait(task);
160 } catch (Exception e) {
161 // if there was a problem
162 System.err.println("ERROR Failed To Add Component - " + e);
163 }
164 pack();
165 }
166 // note we ignore all other attributes
167 }
168 if(components.containsKey(dataKey)) {
169 ((DataComponent) components.get(dataKey)).setValue(packet);
170 }
171 }
172 }
173 }
174
175 //---ACCESSOR/MUTATOR METHODS---
176
177 //---ATTRIBUTES---
178
179 /**
180 * The components that we already know about
181 * connected with the attributes they care about
182 * are stored here.
183 */
184 private HashMap _queues = new HashMap();
185
186 /**
187 * The Panels on the display hooked to the queue hashid
188 */
189 private HashMap _queuesDisplays = new HashMap();
190
191 /**
192 * The box to lay queue panels into.
193 */
194 private Box _content = Box.createVerticalBox();
195
196 //---STATIC ATTRIBUTES---
197
198 }