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 java.io.IOException;
41 import java.io.InputStream;
42 import java.io.Reader;
43 import java.util.Enumeration;
44 import java.util.TooManyListenersException;
45
46 import javax.naming.directory.SearchResult;
47
48 import org.castor.core.util.Messages;
49 import org.castor.xml.BackwardCompatibilityContext;
50 import org.castor.xml.InternalContext;
51 import org.xml.sax.InputSource;
52 import org.xml.sax.Parser;
53 import org.xml.sax.SAXException;
54
55
56
57
58
59
60
61
62 public abstract class Importer {
63 private InternalContext _xmlContext = new BackwardCompatibilityContext();
64
65 private ImportDescriptor _importDesc;
66
67
68 private ImportEventListener _listener;
69
70
71 public void setImportDescriptor(ImportDescriptor importDesc) {
72 _importDesc = importDesc;
73 }
74
75
76 public ImportDescriptor getImportDescriptor() {
77 if (_importDesc == null)
78 _importDesc = new ImportDescriptor();
79 return _importDesc;
80 }
81
82
83 public void setImportEventListener(ImportEventListener listener)
84 throws TooManyListenersException {
85 if (_listener != null)
86 throw new TooManyListenersException(Messages.message("dsml.onlyOneListener"));
87 _listener = listener;
88 }
89
90
91 public ImportEventListener getImportEventListener() {
92 return _listener;
93 }
94
95
96 public void importDocument(InputStream stream) throws ImportExportException {
97 importDocument(_xmlContext.getParser(), new InputSource(stream));
98 }
99
100
101 public void importDocument(Reader reader) throws ImportExportException {
102 importDocument(_xmlContext.getParser(), new InputSource(reader));
103 }
104
105
106 public void importDocument(Parser parser, InputSource input) throws ImportExportException {
107 Consumer consumer;
108
109 consumer = createConsumer();
110 parser.setDocumentHandler(consumer);
111 try {
112 parser.parse(input);
113 } catch (SAXException except) {
114 throw new ImportExportException(except);
115 } catch (IOException except) {
116 throw new ImportExportException(except);
117 }
118 if (consumer.getResults() != null) {
119 importEntries(consumer.getResults());
120 }
121 }
122
123 public void readImportDescriptor(InputStream input) throws IOException, SAXException {
124 readImportDescriptor(_xmlContext.getParser(), new InputSource(input));
125 }
126
127
128 public void readImportDescriptor(Reader input) throws IOException, SAXException {
129 readImportDescriptor(_xmlContext.getParser(), new InputSource(input));
130 }
131
132
133 protected void readImportDescriptor(Parser parser, InputSource input)
134 throws IOException, SAXException {
135 ImportDescriptor desc;
136
137 desc = new ImportDescriptor();
138 parser.setDocumentHandler(desc);
139 parser.parse(input);
140 setImportDescriptor(desc);
141 }
142
143
144 protected void notify(String name, int flag) {
145 if (_listener != null) {
146 _listener.processedEntry(name, flag);
147 }
148 }
149
150
151 protected abstract Consumer createConsumer();
152
153
154 public abstract void importEntries(Enumeration<SearchResult> enumeration)
155 throws ImportExportException;
156 }
157