1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 /* $Id: ContentHandlerFactory.java 679326 2008-07-24 09:35:34Z vhennebert $ */
19 
20 package org.apache.fop.util;
21 
22 import java.util.EventListener;
23 
24 import org.xml.sax.ContentHandler;
25 import org.xml.sax.SAXException;
26 
27 /**
28  * Factory interface implemented by classes that can instantiate ContentHandler subclasses which
29  * parse a SAX stream into Java objects.
30  */
31 public interface ContentHandlerFactory {
32 
33     /**
34      * @return an array of supported namespaces.
35      */
getSupportedNamespaces()36     String[] getSupportedNamespaces();
37 
38     /**
39      * @return a new ContentHandler to handle a SAX stream
40      * @throws SAXException if there's an error while preparing the ContentHandler
41      */
createContentHandler()42     ContentHandler createContentHandler() throws SAXException;
43 
44     /**
45      * Interface that ContentHandler implementations that parse Java objects from XML can implement
46      * to return these objects.
47      */
48     public interface ObjectSource {
49 
50         /**
51          * @return the object parsed from the SAX stream (call valid after parsing)
52          */
getObject()53         Object getObject();
54 
55         /**
56          * Set a listener which gets notified when the object is fully built.
57          * @param listener the listener which gets notified
58          */
setObjectBuiltListener(ObjectBuiltListener listener)59         void setObjectBuiltListener(ObjectBuiltListener listener);
60     }
61 
62     /**
63      * EventListener interface for objects which want to get notified when ContentHandler
64      * implementing the ObjectSource interface has finished parsing.
65      */
66     public interface ObjectBuiltListener extends EventListener {
67 
68         /**
69          * Notifies the listener when the object is fully built.
70          * @param obj the newly built object
71          */
notifyObjectBuilt(Object obj)72         void notifyObjectBuilt(Object obj);
73 
74     }
75 
76 }
77