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

# User Rev Content
1 tdb 1.35 /*
2     * i-scream central monitoring system
3 tdb 1.36 * http://www.i-scream.org.uk
4 tdb 1.35 * 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 tdb 1.8 //---PACKAGE DECLARATION---
22 tdb 1.32 package uk.org.iscream.cms.server.filter;
23 tdb 1.8
24     //---IMPORTS---
25 pjm2 1.1 import java.io.*;
26     import java.net.*;
27     import java.util.*;
28 tdb 1.32 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 pjm2 1.1
33 tdb 1.8 /**
34 ajm 1.14 * 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 tdb 1.8 *
38 tdb 1.15 * Now grabs data from a single queue, rather than
39     * waiting to be contacted.
40     *
41 tdb 1.33 * @author $Author: tdb $
42 tdb 1.37 * @version $Id: FilterThread.java,v 1.36 2002/05/21 16:47:17 tdb Exp $
43 tdb 1.8 */
44 tdb 1.2 public class FilterThread extends Thread{
45 pjm2 1.1
46 tdb 1.8 //---FINAL ATTRIBUTES---
47    
48     /**
49     * The current CVS revision of this class
50     */
51 tdb 1.37 public final String REVISION = "$Revision: 1.36 $";
52 tdb 1.8
53     //---STATIC METHODS---
54    
55     //---CONSTRUCTORS---
56 tdb 1.15
57 ajm 1.14 /**
58 tdb 1.18 * Constructs an instance of a FilterThread
59     *
60     * @param queue the Queue this filter is using
61 ajm 1.14 */
62 tdb 1.28 public FilterThread(Queue queue){
63 tdb 1.27 // set the Thread name
64     setName("filter.FilterThread");
65    
66 tdb 1.15 _queue = queue;
67 tdb 1.19 _logger.write(toString(), Logger.SYSINIT, "created");
68 pjm2 1.1 }
69 tdb 1.8
70     //---PUBLIC METHODS---
71    
72 ajm 1.14 /**
73 tdb 1.18 * Runs the thread, getting data from the Queue and
74     * sending it on to the parent filter.
75 ajm 1.14 */
76 pjm2 1.1 public void run(){
77 tdb 1.26 // setup the XMLPacketMaker
78     XMLPacketMaker xmlPacketMaker = new XMLPacketMaker();
79 tdb 1.15 // get a queue for ourselves
80     int n = _queue.getQueue();
81 pjm2 1.16 // keep these out here, saves recreating the object
82 tdb 1.15 String xml = null;
83 tdb 1.30 String parentFilterName = "";
84     Filter parent = null;
85 tdb 1.15 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 pjm2 1.16
100     // Bundle the XML all on one line (saves space and simplifies
101 tdb 1.18 // the protocol between clientinterface and client).
102 pjm2 1.16 StringTokenizer tokenizer = new StringTokenizer(new String(xml), "\n");
103     xml = "";
104     while (tokenizer.hasMoreTokens()) {
105     xml += tokenizer.nextToken();
106     }
107 tdb 1.15
108     // Use XMLPacketMaker to make an XMLPacket object.
109 tdb 1.25 XMLPacket packet = null;
110     try {
111 tdb 1.26 packet = xmlPacketMaker.createXMLPacket(xml);
112 tdb 1.25 } catch(InvalidXMLException e) {
113     _logger.write(toString(), Logger.ERROR, "Invalid XML: "+e);
114     // skip the rest of this loop iteration
115     continue;
116     }
117 tdb 1.28
118     // get parent
119     try {
120 tdb 1.33 String newParent = ConfigurationProxy.getInstance().getProperty("Filter." + FilterMain.NAME, "Filter.parentFilter");
121 tdb 1.30 if(!parentFilterName.equals(newParent)) {
122 tdb 1.31 parentFilterName = newParent;
123 tdb 1.37 parent = FilterHelper.narrow(_refman.getCORBARef("iscream.Filter\\." + parentFilterName));
124 tdb 1.30 _logger.write(toString(), Logger.DEBUG, "Parent filter changed to: "+parentFilterName);
125     }
126 tdb 1.28 } catch (PropertyNotFoundException e) {
127     continue;
128     }
129    
130     // XMLPacket is ok, run filters...
131 tdb 1.25 if(PluginFilterManager.getInstance().runFilters(packet)) {
132     // and pass it on...
133 tdb 1.28 parent.receiveXML(xml);
134 tdb 1.15 }
135     else {
136 tdb 1.25 // ... or filtered it
137     _logger.write(toString(), Logger.DEBUG, "An XML packet was sucessfully filtered from the system.");
138 tdb 1.15 }
139 pjm2 1.1 }
140     }
141 tdb 1.8
142     /**
143     * Overrides the {@link java.lang.Object#toString() Object.toString()}
144     * method to provide clean logging (every class should have this).
145     *
146 tdb 1.32 * This uses the uk.org.iscream.cms.server.util.NameFormat class
147 ajm 1.14 * to format the toString()
148     *
149 tdb 1.8 * @return the name of this class and its CVS revision
150     */
151     public String toString() {
152 ajm 1.14 return FormatName.getName(
153     _name,
154     getClass().getName(),
155     REVISION);
156 tdb 1.8 }
157    
158     //---PRIVATE METHODS---
159    
160     //---ACCESSOR/MUTATOR METHODS---
161    
162     //---ATTRIBUTES---
163 ajm 1.14
164     /**
165 tdb 1.15 * The Queue object
166 ajm 1.14 */
167 tdb 1.15 Queue _queue;
168 ajm 1.14
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 tdb 1.28
186     /**
187     * A reference to the reference manager in use
188     */
189     private ReferenceManager _refman = ReferenceManager.getInstance();
190 tdb 1.8
191     //---STATIC ATTRIBUTES---
192    
193 pjm2 1.1 }