1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 package org.exolab.castor.dsml;
38
39
40 import org.xml.sax.DocumentHandler;
41 import org.xml.sax.SAXException;
42 import org.xml.sax.helpers.AttributeListImpl;
43
44
45
46
47
48
49
50
51 public abstract class Producer {
52
53
54 protected DocumentHandler _docHandler;
55
56
57 private boolean _namespace;
58
59
60 private boolean _insideDirectory;
61
62
63 private boolean _insideSchema;
64
65
66
67 public Producer(DocumentHandler docHandler, boolean namespace) {
68 _docHandler = docHandler;
69 _namespace = namespace;
70 }
71
72
73 public void startDocument() throws SAXException {
74 AttributeListImpl attrList;
75
76 attrList = new AttributeListImpl();
77 if (_namespace)
78 attrList.addAttribute("xmlns:" + XML.Namespace.PREFIX, "CDATA", XML.Namespace.URI);
79 else
80 attrList.addAttribute("xmlns", "CDATA", XML.Namespace.URI);
81 _docHandler.startElement(prefix(XML.Namespace.ROOT), attrList);
82
83 }
84
85
86 public void endDocument() throws SAXException {
87 leaveDirectory();
88 leaveSchema();
89 _docHandler.endElement(prefix(XML.Namespace.ROOT));
90 }
91
92
93 public void produce(ImportDescriptor importDesc) throws SAXException {
94 leaveDirectory();
95 leaveSchema();
96 importDesc.produce(_docHandler);
97 }
98
99
100 public void produce(SearchDescriptor searchDesc) throws SAXException {
101 leaveDirectory();
102 leaveSchema();
103 searchDesc.produce(_docHandler);
104 }
105
106
107 protected void enterDirectory() throws SAXException {
108
109 if (!_insideDirectory) {
110 _insideDirectory = true;
111 _docHandler.startElement(prefix(XML.Entries.ELEMENT), new AttributeListImpl());
112 }
113 }
114
115
116 protected void leaveDirectory() throws SAXException {
117
118 if (_insideDirectory) {
119 _insideDirectory = false;
120 _docHandler.endElement(prefix(XML.Entries.ELEMENT));
121 }
122 }
123
124
125 protected void enterSchema() throws SAXException {
126
127 if (!_insideSchema) {
128 _insideSchema = true;
129 _docHandler.startElement(prefix(XML.Schema.ELEMENT), new AttributeListImpl());
130 }
131 }
132
133
134 protected void leaveSchema() throws SAXException {
135
136 if (_insideSchema) {
137 _insideSchema = false;
138 _docHandler.endElement(prefix(XML.Schema.ELEMENT));
139 }
140 }
141
142
143 protected String prefix(String tagName) {
144 if (_namespace)
145 return XML.Namespace.PREFIX + ":" + tagName;
146 return tagName;
147 }
148
149
150 }