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.22
Committed: Mon Feb 12 00:44:44 2001 UTC (23 years, 3 months ago) by ajm
Branch: MAIN
Changes since 1.21: +12 -6 lines
Log Message:
made it FAR more understandable for a developer to code something which sends packets through the system!
(though I couldn't compile here, so there maybe syntax errors) ;p

File Contents

# Content
1 //---PACKAGE DECLARATION---
2 package uk.ac.ukc.iscream.filter;
3
4 //---IMPORTS---
5 import java.io.*;
6 import java.net.*;
7 import java.util.*;
8 import uk.ac.ukc.iscream.core.*;
9 import uk.ac.ukc.iscream.componentmanager.*;
10 import uk.ac.ukc.iscream.filter.*;
11 import uk.ac.ukc.iscream.util.*;
12
13 /**
14 * Handle an incoming packet as a separate thread.
15 * Passes the data through various plugins, then
16 * passes it on to the parent filter.
17 *
18 * Now grabs data from a single queue, rather than
19 * waiting to be contacted.
20 *
21 * @author $Author: tdb1 $
22 * @version $Id: FilterThread.java,v 1.21 2001/02/12 00:36:20 tdb1 Exp $
23 */
24 public class FilterThread extends Thread{
25
26 //---FINAL ATTRIBUTES---
27
28 /**
29 * The current CVS revision of this class
30 */
31 public final String REVISION = "$Revision: 1.21 $";
32
33 //---STATIC METHODS---
34
35 //---CONSTRUCTORS---
36
37 /**
38 * Constructs an instance of a FilterThread
39 *
40 * @param queue the Queue this filter is using
41 * @param parent a CORBA reference to our parent filter
42 */
43 public FilterThread(Queue queue, Filter parent){
44 _parent = parent;
45 _queue = queue;
46 _logger.write(toString(), Logger.SYSINIT, "created");
47 }
48
49 //---PUBLIC METHODS---
50
51 /**
52 * Runs the thread, getting data from the Queue and
53 * sending it on to the parent filter.
54 */
55 public void run(){
56 // get a queue for ourselves
57 int n = _queue.getQueue();
58 // keep these out here, saves recreating the object
59 String xml = null;
60 while(true) {
61 // get a String of xml
62 try {
63 xml = (String) _queue.get(n);
64 }
65 catch (InvalidQueueException e) {
66 _logger.write(toString(), Logger.ERROR, "Queue error: "+e);
67 }
68
69 // Get a string without any null characters in it.
70 // -- maybe String.trim() would be better here ?
71 if (xml.indexOf(0) != -1) {
72 xml = xml.substring(0, xml.indexOf(0));
73 }
74 else {
75 xml = xml.substring(0, xml.length());
76 }
77
78 // Bundle the XML all on one line (saves space and simplifies
79 // the protocol between clientinterface and client).
80 StringTokenizer tokenizer = new StringTokenizer(new String(xml), "\n");
81 xml = "";
82 while (tokenizer.hasMoreTokens()) {
83 xml += tokenizer.nextToken();
84 }
85
86 // Use XMLPacketMaker to make an XMLPacket object.
87 XMLPacketMaker xmlPacketMaker = new XMLPacketMaker(xml);
88 XMLPacket packet = xmlPacketMaker.createXMLPacket();
89
90 if(packet != null) {
91 // packet is not null
92 // packet was not dropped by a plugin
93 // ... best pass it on !
94 if(PluginFilterManager.getInstance().runFilters(packet)) {
95 _parent.receiveXML(xml);
96 }
97 else {
98 // we filtered it
99 _logger.write(toString(), Logger.DEBUG, "An XML packet was sucessfully filtered from the system.");
100 }
101 }
102 else {
103 // we had a null
104 _logger.write(toString(), Logger.DEBUG, "An XML packet containing ill-parsing XML was rejected.");
105 }
106 }
107 }
108
109 /**
110 * Overrides the {@link java.lang.Object#toString() Object.toString()}
111 * method to provide clean logging (every class should have this).
112 *
113 * This uses the uk.ac.ukc.iscream.util.NameFormat class
114 * to format the toString()
115 *
116 * @return the name of this class and its CVS revision
117 */
118 public String toString() {
119 return FormatName.getName(
120 _name,
121 getClass().getName(),
122 REVISION);
123 }
124
125 //---PRIVATE METHODS---
126
127 //---ACCESSOR/MUTATOR METHODS---
128
129 //---ATTRIBUTES---
130
131 /**
132 * Our parent filter
133 */
134 Filter _parent;
135
136 /**
137 * The Queue object
138 */
139 Queue _queue;
140
141 /**
142 * This is the friendly identifier of the
143 * component this class is running in.
144 * eg, a Filter may be called "filter1",
145 * If this class does not have an owning
146 * component, a name from the configuration
147 * can be placed here. This name could also
148 * be changed to null for utility classes.
149 */
150 private String _name = FilterMain.NAME;
151
152 /**
153 * This holds a reference to the
154 * system logger that is being used.
155 */
156 private Logger _logger = ReferenceManager.getInstance().getLogger();
157
158 //---STATIC ATTRIBUTES---
159
160 }