View Javadoc
1   /**
2    * Redistribution and use of this software and associated documentation ("Software"), with or
3    * without modification, are permitted provided that the following conditions are met:
4    *
5    * 1. Redistributions of source code must retain copyright statements and notices. Redistributions
6    * must also contain a copy of this document.
7    *
8    * 2. Redistributions in binary form must reproduce the above copyright notice, this list of
9    * conditions and the following disclaimer in the documentation and/or other materials provided with
10   * the distribution.
11   *
12   * 3. The name "Exolab" must not be used to endorse or promote products derived from this Software
13   * without prior written permission of Intalio, Inc. For written permission, please contact
14   * info@exolab.org.
15   *
16   * 4. Products derived from this Software may not be called "Exolab" nor may "Exolab" appear in
17   * their names without prior written permission of Intalio, Inc. Exolab is a registered trademark of
18   * Intalio, Inc.
19   *
20   * 5. Due credit should be given to the Exolab Project (http://www.exolab.org/).
21   *
22   * THIS SOFTWARE IS PROVIDED BY INTALIO, INC. AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR
23   * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
24   * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTALIO, INC. OR ITS
25   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26   * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27   * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
28   * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
29   * WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30   *
31   * Copyright 1999 (C) Intalio, Inc. All Rights Reserved.
32   *
33   * $Id$
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   * @author <a href="mailto:arkin@intalio.com">Assaf Arkin</a>
60   * @version $Revision$ $Date: 2006-04-10 16:39:24 -0600 (Mon, 10 Apr 2006) $
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