View Javadoc

1   /*
2    * File: DelegateContentHandler.java
3    * Created: 16-dub-06 10:41:18 
4    *
5    * Copyright 2006 Michal Burda.
6    *
7    * This program is free software; you can redistribute it and/or modify
8    * it under the terms of the GNU General Public License as published by
9    * the Free Software Foundation; either version 2 of the License, or
10   * (at your option) any later version.
11   *
12   * This program is distributed in the hope that it will be useful,
13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   * GNU General Public License for more details.
16   *
17   * You should have received a copy of the GNU General Public License
18   * along with this program; if not, write to the Free Software
19   * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20   */
21  package net.sf.webmancer.util.xml.sax;
22  
23  import org.xml.sax.Attributes;
24  import org.xml.sax.ContentHandler;
25  import org.xml.sax.Locator;
26  import org.xml.sax.SAXException;
27  
28  /**
29   * This is the {@link org.xml.sax.ContentHandler} implementation that simply delegates all SAX parsing events to the
30   * target {@link org.xml.sax.ContentHandler} that may be set at any time by the
31   * {@link #setTargetContentHandler(ContentHandler)} method. If the target {@link org.xml.sax.ContentHandler} is set to
32   * <code>null</code>, the content handler simply does nothing.
33   * 
34   * @author Michal Burda
35   */
36  public class DelegateContentHandler implements ContentHandler {
37      /**
38       * The target content handler
39       */
40      private ContentHandler handler;
41  
42      /**
43       * Create new delegate content handler.
44       * 
45       * @param handler
46       *            The possibly <code>null</code> target content handler
47       */
48      public DelegateContentHandler(final ContentHandler handler) {
49          super();
50          this.handler = handler;
51      }
52  
53      /**
54       * Convenient constructor that creates new delegate content handler with target content handler set to
55       * <code>null</code>.
56       */
57      public DelegateContentHandler() {
58          this(null);
59      }
60  
61      /**
62       * Set the target content handler. The method could be called at any time to enable complex behaviour. If the target
63       * {@link org.xml.sax.ContentHandler} is set to <code>null</code>, the content handler would simply do nothing.
64       * 
65       * @param handler
66       *            The target content handler
67       */
68      public void setTargetContentHandler(final ContentHandler handler) {
69          this.handler = handler;
70      }
71  
72      /**
73       * Get the actually used target content handler.
74       * 
75       * @return The actually used target content handler
76       */
77      public ContentHandler getTargetContentHandler() {
78          return this.handler;
79      }
80  
81      /**
82       * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
83       * <code>null</code>.
84       * 
85       * @see #setTargetContentHandler(ContentHandler)
86       * @see org.xml.sax.ContentHandler#startDocument()
87       */
88      public void startDocument() throws SAXException {
89          if (this.handler != null) {
90              this.handler.startDocument();
91          }
92      }
93  
94      /**
95       * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
96       * <code>null</code>.
97       * 
98       * @see #setTargetContentHandler(ContentHandler)
99       * @see org.xml.sax.ContentHandler#endDocument()
100      */
101     public void endDocument() throws SAXException {
102         if (this.handler != null) {
103             this.handler.endDocument();
104         }
105     }
106 
107     /**
108      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
109      * <code>null</code>.
110      * 
111      * @see #setTargetContentHandler(ContentHandler)
112      * @see org.xml.sax.ContentHandler#setDocumentLocator(org.xml.sax.Locator)
113      */
114     public void setDocumentLocator(final Locator locator) {
115         if (this.handler != null) {
116             this.handler.setDocumentLocator(locator);
117         }
118     }
119 
120     /**
121      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
122      * <code>null</code>.
123      * 
124      * @see #setTargetContentHandler(ContentHandler)
125      * @see org.xml.sax.ContentHandler#startPrefixMapping(java.lang.String, java.lang.String)
126      */
127     public void startPrefixMapping(final String prefix, final String uri) throws SAXException {
128         if (this.handler != null) {
129             this.handler.startPrefixMapping(prefix, uri);
130         }
131     }
132 
133     /**
134      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
135      * <code>null</code>.
136      * 
137      * @see #setTargetContentHandler(ContentHandler)
138      * @see org.xml.sax.ContentHandler#endPrefixMapping(java.lang.String)
139      */
140     public void endPrefixMapping(final String prefix) throws SAXException {
141         if (this.handler != null) {
142             this.handler.endPrefixMapping(prefix);
143         }
144     }
145 
146     /**
147      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
148      * <code>null</code>.
149      * 
150      * @see #setTargetContentHandler(ContentHandler)
151      * @see org.xml.sax.ContentHandler#characters(char[], int, int)
152      */
153     public void characters(final char[] ch, final int start, final int length) throws SAXException {
154         if (this.handler != null) {
155             this.handler.characters(ch, start, length);
156         }
157     }
158 
159     /**
160      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
161      * <code>null</code>.
162      * 
163      * @see #setTargetContentHandler(ContentHandler)
164      * @see org.xml.sax.ContentHandler#ignorableWhitespace(char[], int, int)
165      */
166     public void ignorableWhitespace(final char[] ch, final int start, final int length) throws SAXException {
167         if (this.handler != null) {
168             this.handler.ignorableWhitespace(ch, start, length);
169         }
170     }
171 
172     /**
173      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
174      * <code>null</code>.
175      * 
176      * @see #setTargetContentHandler(ContentHandler)
177      * @see org.xml.sax.ContentHandler#processingInstruction(java.lang.String, java.lang.String)
178      */
179     public void processingInstruction(final String target, final String data) throws SAXException {
180         if (this.handler != null) {
181             this.handler.processingInstruction(target, data);
182         }
183     }
184 
185     /**
186      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
187      * <code>null</code>.
188      * 
189      * @see #setTargetContentHandler(ContentHandler)
190      * @see org.xml.sax.ContentHandler#skippedEntity(java.lang.String)
191      */
192     public void skippedEntity(final String name) throws SAXException {
193         if (this.handler != null) {
194             this.handler.skippedEntity(name);
195         }
196     }
197 
198     /**
199      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
200      * <code>null</code>.
201      * 
202      * @see #setTargetContentHandler(ContentHandler)
203      * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String,
204      *      org.xml.sax.Attributes)
205      */
206     public void startElement(final String uri, final String localName, final String qName, final Attributes atts) throws SAXException {
207         if (this.handler != null) {
208             this.handler.startElement(uri, localName, qName, atts);
209         }
210     }
211 
212     /**
213      * Delegates the SAX event to the target content handler or simply does nothing, if the target content handler is
214      * <code>null</code>.
215      * 
216      * @see #setTargetContentHandler(ContentHandler)
217      * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
218      */
219     public void endElement(final String uri, final String localName, final String qName) throws SAXException {
220         if (this.handler != null) {
221             this.handler.endElement(uri, localName, qName);
222         }
223     }
224 }