KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > tools > xjc > runtime > ContentHandlerAdaptor


1 package com.sun.tools.xjc.runtime;
2
3 import java.util.ArrayList JavaDoc;
4
5 import org.xml.sax.Attributes JavaDoc;
6 import org.xml.sax.ContentHandler JavaDoc;
7 import org.xml.sax.Locator JavaDoc;
8 import org.xml.sax.SAXException JavaDoc;
9
10 /**
11  * Receives SAX2 events and send the equivalent events to
12  * {@link com.sun.xml.bind.serializer.XMLSerializer}
13  *
14  * @author
15  * Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
16  */

17 public class ContentHandlerAdaptor implements ContentHandler JavaDoc {
18
19     /** Stores newly declared prefix-URI mapping. */
20     private final ArrayList JavaDoc prefixMap = new ArrayList JavaDoc();
21     
22     /** Events will be sent to this object. */
23     private final XMLSerializer serializer;
24     
25     private final StringBuffer JavaDoc text = new StringBuffer JavaDoc();
26     
27     
28     public ContentHandlerAdaptor( XMLSerializer _serializer ) {
29         this.serializer = _serializer;
30     }
31     
32     
33
34     public void startDocument() throws SAXException JavaDoc {
35         prefixMap.clear();
36     }
37
38     public void endDocument() throws SAXException JavaDoc {
39     }
40
41     public void startPrefixMapping(String JavaDoc prefix, String JavaDoc uri) throws SAXException JavaDoc {
42         prefixMap.add(prefix);
43         prefixMap.add(uri);
44     }
45
46     public void endPrefixMapping(String JavaDoc prefix) throws SAXException JavaDoc {
47     }
48
49     public void startElement(String JavaDoc namespaceURI, String JavaDoc localName, String JavaDoc qName, Attributes JavaDoc atts)
50         throws SAXException JavaDoc {
51         
52         flushText();
53
54         int len = atts.getLength();
55         
56         serializer.startElement(namespaceURI,localName);
57         // declare namespace events
58
for( int i=0; i<len; i++ ) {
59             String JavaDoc qname = atts.getQName(i);
60             int idx = qname.indexOf(':');
61             String JavaDoc prefix = (idx==-1)?qname:qname.substring(0,idx);
62             
63             serializer.getNamespaceContext().declareNamespace(
64                 atts.getURI(i), prefix, true );
65         }
66         for( int i=0; i<prefixMap.size(); i+=2 ) {
67             String JavaDoc prefix = (String JavaDoc)prefixMap.get(i);
68             serializer.getNamespaceContext().declareNamespace(
69                 (String JavaDoc)prefixMap.get(i+1),
70                 prefix,
71                 prefix.length()!=0 );
72         }
73         
74         serializer.endNamespaceDecls();
75         // fire attribute events
76
for( int i=0; i<len; i++ ) {
77             serializer.startAttribute( atts.getURI(i), atts.getLocalName(i) );
78             serializer.text(atts.getValue(i),null);
79             serializer.endAttribute();
80         }
81         prefixMap.clear();
82         serializer.endAttributes();
83     }
84
85     public void endElement(String JavaDoc namespaceURI, String JavaDoc localName, String JavaDoc qName) throws SAXException JavaDoc {
86         flushText();
87         serializer.endElement();
88     }
89     
90     private void flushText() throws SAXException JavaDoc {
91         if( text.length()!=0 ) {
92             serializer.text(text.toString(),null);
93             text.setLength(0);
94         }
95     }
96
97     public void characters(char[] ch, int start, int length) throws SAXException JavaDoc {
98         text.append(ch,start,length);
99     }
100
101     public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException JavaDoc {
102         text.append(ch,start,length);
103     }
104
105
106
107     public void setDocumentLocator(Locator JavaDoc locator) {
108     }
109     
110     public void processingInstruction(String JavaDoc target, String JavaDoc data) throws SAXException JavaDoc {
111     }
112
113     public void skippedEntity(String JavaDoc name) throws SAXException JavaDoc {
114     }
115
116 }
117
Popular Tags