ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/filter/FilterThread.java
Revision: 1.37
Committed: Fri Sep 6 15:10:48 2002 UTC (21 years, 8 months ago) by tdb
Branch: MAIN
Changes since 1.36: +3 -3 lines
Log Message:
Fix for upgrade to Jacorb 1.4.1. It's our fault actually, we've not been
correctly using the names when binding to the Naming Service. This needs to
be fixed properly at some point, but for now I've changed changed the code
so it "means" the same as it did before the upgrade.

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.server.filter;
23
24 //---IMPORTS---
25 import java.io.*;
26 import java.net.*;
27 import java.util.*;
28 import uk.org.iscream.cms.server.core.*;
29 import uk.org.iscream.cms.server.componentmanager.*;
30 import uk.org.iscream.cms.server.filter.*;
31 import uk.org.iscream.cms.server.util.*;
32
33 /**
34 * Handle an incoming packet as a separate thread.
35 * Passes the data through various plugins, then
36 * passes it on to the parent filter.
37 *
38 * Now grabs data from a single queue, rather than
39 * waiting to be contacted.
40 *
41 * @author $Author: tdb $
42 * @version $Id: FilterThread.java,v 1.36 2002/05/21 16:47:17 tdb Exp $
43 */
44 public class FilterThread extends Thread{
45
46 //---FINAL ATTRIBUTES---
47
48 /**
49 * The current CVS revision of this class
50 */
51 public final String REVISION = "$Revision: 1.36 $";
52
53 //---STATIC METHODS---
54
55 //---CONSTRUCTORS---
56
57 /**
58 * Constructs an instance of a FilterThread
59 *
60 * @param queue the Queue this filter is using
61 */
62 public FilterThread(Queue queue){
63 // set the Thread name
64 setName("filter.FilterThread");
65
66 _queue = queue;
67 _logger.write(toString(), Logger.SYSINIT, "created");
68 }
69
70 //---PUBLIC METHODS---
71
72 /**
73 * Runs the thread, getting data from the Queue and
74 * sending it on to the parent filter.
75 */
76 public void run(){
77 // setup the XMLPacketMaker
78 XMLPacketMaker xmlPacketMaker = new XMLPacketMaker();
79 // get a queue for ourselves
80 int n = _queue.getQueue();
81 // keep these out here, saves recreating the object
82 String xml = null;
83 String parentFilterName = "";
84 Filter parent = null;
85 while(true) {
86 // get a String of xml
87 try {
88 xml = (String) _queue.get(n);
89 }
90 catch (InvalidQueueException e) {
91 _logger.write(toString(), Logger.ERROR, "Queue error: "+e);
92 }
93
94 // Get a string without any null characters in it.
95 // -- maybe String.trim() would be better here ?
96 if (xml.indexOf(0) != -1) {
97 xml = xml.substring(0, xml.indexOf(0));
98 }
99
100 // Bundle the XML all on one line (saves space and simplifies
101 // the protocol between clientinterface and client).
102 StringTokenizer tokenizer = new StringTokenizer(new String(xml), "\n");
103 xml = "";
104 while (tokenizer.hasMoreTokens()) {
105 xml += tokenizer.nextToken();
106 }
107
108 // Use XMLPacketMaker to make an XMLPacket object.
109 XMLPacket packet = null;
110 try {
111 packet = xmlPacketMaker.createXMLPacket(xml);
112 } catch(InvalidXMLException e) {
113 _logger.write(toString(), Logger.ERROR, "Invalid XML: "+e);
114 // skip the rest of this loop iteration
115 continue;
116 }
117
118 // get parent
119 try {
120 String newParent = ConfigurationProxy.getInstance().getProperty("Filter." + FilterMain.NAME, "Filter.parentFilter");
121 if(!parentFilterName.equals(newParent)) {
122 parentFilterName = newParent;
123 parent = FilterHelper.narrow(_refman.getCORBARef("iscream.Filter\\." + parentFilterName));
124 _logger.write(toString(), Logger.DEBUG, "Parent filter changed to: "+parentFilterName);
125 }
126 } catch (PropertyNotFoundException e) {
127 continue;
128 }
129
130 // XMLPacket is ok, run filters...
131 if(PluginFilterManager.getInstance().runFilters(packet)) {
132 // and pass it on...
133 parent.receiveXML(xml);
134 }
135 else {
136 // ... or filtered it
137 _logger.write(toString(), Logger.DEBUG, "An XML packet was sucessfully filtered from the system.");
138 }
139 }
140 }
141
142 /**
143 * Overrides the {@link java.lang.Object#toString() Object.toString()}
144 * method to provide clean logging (every class should have this).
145 *
146 * This uses the uk.org.iscream.cms.server.util.NameFormat class
147 * to format the toString()
148 *
149 * @return the name of this class and its CVS revision
150 */
151 public String toString() {
152 return FormatName.getName(
153 _name,
154 getClass().getName(),
155 REVISION);
156 }
157
158 //---PRIVATE METHODS---
159
160 //---ACCESSOR/MUTATOR METHODS---
161
162 //---ATTRIBUTES---
163
164 /**
165 * The Queue object
166 */
167 Queue _queue;
168
169 /**
170 * This is the friendly identifier of the
171 * component this class is running in.
172 * eg, a Filter may be called "filter1",
173 * If this class does not have an owning
174 * component, a name from the configuration
175 * can be placed here. This name could also
176 * be changed to null for utility classes.
177 */
178 private String _name = FilterMain.NAME;
179
180 /**
181 * This holds a reference to the
182 * system logger that is being used.
183 */
184 private Logger _logger = ReferenceManager.getInstance().getLogger();
185
186 /**
187 * A reference to the reference manager in use
188 */
189 private ReferenceManager _refman = ReferenceManager.getInstance();
190
191 //---STATIC ATTRIBUTES---
192
193 }