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.19
Committed: Fri Jan 31 17:05:50 2003 UTC (21 years, 3 months ago) by tdb
Branch: MAIN
Changes since 1.18: +3 -3 lines
Log Message:
The images (from the resources directory) are now inside the JAR file.
Thanks Pete for pointing out how to do this ;)

File Contents

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