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.18
Committed: Tue May 21 16:47:10 2002 UTC (22 years ago) by tdb
Branch: MAIN
Changes since 1.17: +4 -3 lines
Log Message:
Added URL to GPL headers.

File Contents

# User Rev Content
1 tdb 1.17 /*
2 tdb 1.18 * i-scream central monitoring system
3     * http://www.i-scream.org.uk
4 tdb 1.17 * 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 ajm 1.1 //---PACKAGE DECLARATION---
22 tdb 1.16 package uk.org.iscream.cms.conient;
23 ajm 1.1
24     //---IMPORTS---
25 tdb 1.16 import uk.org.iscream.cms.server.util.*;
26     import uk.org.iscream.cms.conient.datacomponents.*;
27 ajm 1.1 import javax.swing.*;
28     import javax.swing.border.*;
29     import java.util.*;
30     import java.awt.*;
31     import java.awt.event.*;
32    
33     /**
34 ajm 1.13 * 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 ajm 1.1 *
41 tdb 1.17 * @author $Author: tdb $
42 tdb 1.18 * @version $Id: QueueFrame.java,v 1.17 2002/05/18 18:15:56 tdb Exp $
43 ajm 1.1 */
44     public class QueueFrame extends JFrame {
45    
46     //---FINAL ATTRIBUTES---
47    
48     /**
49     * The current CVS revision of this class
50     */
51 tdb 1.18 public final String REVISION = "$Revision: 1.17 $";
52 ajm 1.1
53     //---STATIC METHODS---
54    
55     //---CONSTRUCTORS---
56    
57     /**
58 ajm 1.13 * Constructs a new frame
59 ajm 1.1 */
60     public QueueFrame() {
61     super("Server Queue Status");
62 ajm 1.12 JScrollPane scrollPane = new JScrollPane(_content,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED , JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
63 ajm 1.11 getContentPane().add(scrollPane, "Center");
64 ajm 1.1 JButton close = new JButton("Close Window");
65     close.addActionListener(new ActionListener() {
66     public void actionPerformed(ActionEvent e) {
67 ajm 1.5 setVisible(false);
68 ajm 1.1 }
69     });
70     getContentPane().add(close, "South");
71 ajm 1.4 setIconImage((new ImageIcon("./resources/server.gif")).getImage());
72 ajm 1.1 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 ajm 1.6 String queueHashCode = packet.getParam("packet.attributes.hashCode");
89 ajm 1.1
90     // if there are no components looking after this data
91     // create a new StringDataComponent for it
92 ajm 1.6 if(!_queues.containsKey(queueHashCode)) {
93 ajm 1.1 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 ajm 1.13 /**
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 ajm 1.1 private void addQueue(XMLPacket packet) {
117     HashMap newQueue = new HashMap();
118     String queueName = packet.getParam("packet.attributes.name");
119 ajm 1.6 String queueHashCode = packet.getParam("packet.attributes.hashCode");
120 ajm 1.1 VisibleDataComponent date = new DateDataComponent("Last timestamp", "packet.attributes.date");
121     VisibleDataComponent total = new StringDataComponent("Total queued to date", "packet.queue.attributes.total");
122 ajm 1.14 VisibleDataComponent max = new StringDataComponent("Maximum queue size", "packet.queue.attributes.maxSize");
123 ajm 1.1 newQueue.put("packet.attributes.name", new StringDataComponent("Name", "packet.attributes.name"));
124     newQueue.put("packet.queue.attributes.total", total);
125 ajm 1.14 newQueue.put("packet.queue.attributes.maxSize", max);
126 ajm 1.1 newQueue.put("packet.attributes.date", date);
127 ajm 1.14
128 ajm 1.1 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 ajm 1.15 newQueueDisplay.add(total);
133 ajm 1.14 newQueueDisplay.add(max);
134 ajm 1.8 _queuesDisplays.put(queueHashCode, newQueueDisplay);
135 ajm 1.1 try {
136     SwingSafeAdd task = new SwingSafeAdd(_content, newQueueDisplay);
137     SwingUtilities.invokeAndWait(task);
138     } catch (Exception e) {
139     // don't care
140     }
141     pack();
142 ajm 1.6 _queues.put(queueHashCode, newQueue);
143 ajm 1.1 }
144 ajm 1.13
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 ajm 1.1 private void updateQueueInformation(XMLPacket packet) throws DataFormatException {
152 ajm 1.6 String queueHashCode = packet.getParam("packet.attributes.hashCode");
153 ajm 1.3
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 ajm 1.6 JPanel temp = (JPanel)_queuesDisplays.get(queueHashCode);
158 ajm 1.3 temp.setVisible(false);
159     _content.remove(temp);
160     _queuesDisplays.remove(temp);
161     pack();
162    
163     // else update the display
164     } else {
165 ajm 1.6 HashMap components = (HashMap) _queues.get(queueHashCode);
166 ajm 1.3 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 ajm 1.8 // check if its a queue, if it is then we need to deal with it
174 ajm 1.3 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 ajm 1.6 SwingSafeAdd task = new SwingSafeAdd((JPanel)_queuesDisplays.get(queueHashCode), queue);
179 ajm 1.3 SwingUtilities.invokeAndWait(task);
180     } catch (Exception e) {
181 ajm 1.8 // if there was a problem
182     System.err.println("ERROR Failed To Add Component - " + e);
183 ajm 1.3 }
184     pack();
185 ajm 1.1 }
186 ajm 1.3 // note we ignore all other attributes
187     }
188     if(components.containsKey(dataKey)) {
189 ajm 1.10 ((DataComponent) components.get(dataKey)).setValue(packet);
190 ajm 1.1 }
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 ajm 1.13
206     /**
207     * The Panels on the display hooked to the queue hashid
208     */
209 ajm 1.1 private HashMap _queuesDisplays = new HashMap();
210    
211 ajm 1.13 /**
212     * The box to lay queue panels into.
213     */
214 ajm 1.1 private Box _content = Box.createVerticalBox();
215    
216     //---STATIC ATTRIBUTES---
217    
218     }