KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ecs > filter > CharacterFilter


1 /*
2  * ====================================================================
3  *
4  * The Apache Software License, Version 1.1
5  *
6  * Copyright (c) 1999-2003 The Apache Software Foundation. All rights
7  * reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by the
24  * Apache Software Foundation (http://www.apache.org/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The names "The Jakarta Project", "Jakarta Element Construction Set",
29  * "Jakarta ECS" , and "Apache Software Foundation" must not be used
30  * to endorse or promote products derived
31  * from this software without prior written permission. For written
32  * permission, please contact apache@apache.org.
33  *
34  * 5. Products derived from this software may not be called "Apache",
35  * "Jakarta Element Construction Set" nor "Jakarta ECS" nor may "Apache"
36  * appear in their names without prior written permission of the Apache Group.
37  *
38  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
39  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
40  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
41  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
42  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
43  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
45  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
46  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
48  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
49  * SUCH DAMAGE.
50  * ====================================================================
51  *
52  * This software consists of voluntary contributions made by many
53  * individuals on behalf of the Apache Software Foundation. For more
54  * information on the Apache Software Foundation, please see
55  * <http://www.apache.org/>.
56  *
57  */

58 package org.apache.ecs.filter;
59
60 import org.apache.ecs.Filter;
61 import org.apache.ecs.Entities;
62 import java.text.StringCharacterIterator JavaDoc;
63 import java.text.CharacterIterator JavaDoc;
64 /**
65     This class creates a Filter object. The default characters filtered are:<br>
66     " ' & < >
67     <p>
68     For example:
69
70     <pre><code>
71     Filter filter = new CharacterFilter();
72     filter.addAttribute("$","dollar");
73     filter.addAttribute("#",Entities.POUND);
74
75     P p = new P();
76     p.setFilter(filter);
77
78     Document doc = new Document();
79     doc.getBody().addElement(p);
80     </pre></code>
81
82     The filter is applied when the addElement() method is called.
83
84     @version $Id: CharacterFilter.java,v 1.7 2003/04/27 09:28:56 rdonkin Exp $
85     @author <a HREF="mailto:snagy@servletapi.com">Stephan Nagy</a>
86     @author <a HREF="mailto:jon@clearink.com">Jon S. Stevens</a>
87 */

88 public class CharacterFilter extends java.util.Hashtable JavaDoc implements Filter
89 {
90     /**
91         Private initializer.
92         " ' & < > are the default filters.
93     */

94     {
95         addAttribute("\"",Entities.QUOT);
96         addAttribute("'",Entities.LSQUO);
97         addAttribute("&",Entities.AMP);
98         addAttribute("<",Entities.LT);
99         addAttribute(">",Entities.GT);
100     }
101
102     public CharacterFilter()
103     {
104         super(4);
105     }
106
107     /** Returns the name of the filter */
108     public String JavaDoc getInfo()
109     {
110         return "CharacterFilter";
111     }
112
113     /**
114         Register things to be filtered.
115     */

116     public Filter addAttribute(String JavaDoc name,Object JavaDoc attribute)
117     {
118         this.put(name,attribute);
119         return this;
120     }
121
122     /**
123         Remove things to be filtered.
124     */

125     public Filter removeAttribute(String JavaDoc name)
126     {
127         try
128         {
129             this.remove(name);
130         }
131         catch ( Exception JavaDoc e )
132         {
133         }
134         return this;
135     }
136
137     /**
138         Check to see if something is going to be filtered.
139     */

140     public boolean hasAttribute(String JavaDoc key)
141     {
142         return(this.containsKey(key));
143     }
144
145     /**
146         Perform the filtering operation.
147     */

148     public String JavaDoc process(String JavaDoc to_process)
149     {
150         if ( to_process == null || to_process.length() == 0 )
151             return "";
152
153         StringBuffer JavaDoc bs = new StringBuffer JavaDoc(to_process.length() + 50);
154         StringCharacterIterator JavaDoc sci = new StringCharacterIterator JavaDoc(to_process);
155         String JavaDoc tmp = null;
156
157         for (char c = sci.first(); c != CharacterIterator.DONE; c = sci.next())
158         {
159             tmp = String.valueOf(c);
160
161             if (hasAttribute(tmp))
162                 tmp = (String JavaDoc) this.get(tmp);
163
164             bs.append(tmp);
165         }
166         return(bs.toString());
167     }
168 }
169
Popular Tags