1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef DOM_DOCUMENTBUILDER_HXX
25*b1cdbd2cSJim Jagielski #define DOM_DOCUMENTBUILDER_HXX
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include <sal/types.h>
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.h>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Sequence.h>
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/XInterface.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/dom/XDocument.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/dom/XDOMImplementation.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XEntityResolver.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/XErrorHandler.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/xml/sax/SAXParseException.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XInputStream.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/io/IOException.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XServiceInfo.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski using ::rtl::OUString;
48*b1cdbd2cSJim Jagielski using namespace com::sun::star::uno;
49*b1cdbd2cSJim Jagielski using namespace com::sun::star::lang;
50*b1cdbd2cSJim Jagielski using namespace com::sun::star::xml::dom;
51*b1cdbd2cSJim Jagielski using namespace com::sun::star::xml::sax;
52*b1cdbd2cSJim Jagielski using namespace com::sun::star::io;
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski namespace DOM
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski     typedef ::cppu::WeakImplHelper2
57*b1cdbd2cSJim Jagielski         < XDocumentBuilder
58*b1cdbd2cSJim Jagielski         , ::com::sun::star::lang::XServiceInfo
59*b1cdbd2cSJim Jagielski         > CDocumentBuilder_Base;
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski     class CDocumentBuilder
62*b1cdbd2cSJim Jagielski         : public CDocumentBuilder_Base
63*b1cdbd2cSJim Jagielski     {
64*b1cdbd2cSJim Jagielski     private:
65*b1cdbd2cSJim Jagielski         ::osl::Mutex m_Mutex;
66*b1cdbd2cSJim Jagielski         Reference< ::com::sun::star::lang::XMultiServiceFactory > const
67*b1cdbd2cSJim Jagielski             m_xFactory;
68*b1cdbd2cSJim Jagielski         Reference< XEntityResolver > m_xEntityResolver;
69*b1cdbd2cSJim Jagielski         Reference< XErrorHandler > m_xErrorHandler;
70*b1cdbd2cSJim Jagielski 
71*b1cdbd2cSJim Jagielski     public:
72*b1cdbd2cSJim Jagielski 
73*b1cdbd2cSJim Jagielski         // ctor
74*b1cdbd2cSJim Jagielski         CDocumentBuilder(
75*b1cdbd2cSJim Jagielski             Reference< ::com::sun::star::lang::XMultiServiceFactory > const&
76*b1cdbd2cSJim Jagielski                 xFactory);
77*b1cdbd2cSJim Jagielski 
78*b1cdbd2cSJim Jagielski         // call for factory
79*b1cdbd2cSJim Jagielski         static Reference< XInterface > getInstance(
80*b1cdbd2cSJim Jagielski             Reference< ::com::sun::star::lang::XMultiServiceFactory > const&
81*b1cdbd2cSJim Jagielski                 xFactory);
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski         // static helpers for service info and component management
84*b1cdbd2cSJim Jagielski         static const char* aImplementationName;
85*b1cdbd2cSJim Jagielski 	    static const char* aSupportedServiceNames[];
86*b1cdbd2cSJim Jagielski         static OUString _getImplementationName();
87*b1cdbd2cSJim Jagielski         static Sequence< OUString > _getSupportedServiceNames();
88*b1cdbd2cSJim Jagielski         static Reference< XInterface > _getInstance(
89*b1cdbd2cSJim Jagielski             Reference< ::com::sun::star::lang::XMultiServiceFactory > const&
90*b1cdbd2cSJim Jagielski                 rSMgr);
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski         // XServiceInfo
93*b1cdbd2cSJim Jagielski         virtual OUString SAL_CALL getImplementationName()
94*b1cdbd2cSJim Jagielski             throw (RuntimeException);
95*b1cdbd2cSJim Jagielski         virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName)
96*b1cdbd2cSJim Jagielski             throw (RuntimeException);
97*b1cdbd2cSJim Jagielski         virtual Sequence< OUString > SAL_CALL getSupportedServiceNames ()
98*b1cdbd2cSJim Jagielski             throw (RuntimeException);
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski         /**
101*b1cdbd2cSJim Jagielski         Obtain an instance of a DOMImplementation object.
102*b1cdbd2cSJim Jagielski         */
103*b1cdbd2cSJim Jagielski         virtual Reference< XDOMImplementation > SAL_CALL getDOMImplementation()
104*b1cdbd2cSJim Jagielski             throw (RuntimeException);
105*b1cdbd2cSJim Jagielski 
106*b1cdbd2cSJim Jagielski         /**
107*b1cdbd2cSJim Jagielski         Indicates whether or not this parser is configured to understand
108*b1cdbd2cSJim Jagielski         namespaces.
109*b1cdbd2cSJim Jagielski         */
110*b1cdbd2cSJim Jagielski         virtual sal_Bool SAL_CALL isNamespaceAware()
111*b1cdbd2cSJim Jagielski             throw (RuntimeException);
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski         /**
114*b1cdbd2cSJim Jagielski         Indicates whether or not this parser is configured to validate XML
115*b1cdbd2cSJim Jagielski         documents.
116*b1cdbd2cSJim Jagielski         */
117*b1cdbd2cSJim Jagielski         virtual sal_Bool SAL_CALL isValidating()
118*b1cdbd2cSJim Jagielski             throw (RuntimeException);
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski         /**
121*b1cdbd2cSJim Jagielski         Obtain a new instance of a DOM Document object to build a DOM tree
122*b1cdbd2cSJim Jagielski         with.
123*b1cdbd2cSJim Jagielski         */
124*b1cdbd2cSJim Jagielski         virtual Reference< XDocument > SAL_CALL newDocument()
125*b1cdbd2cSJim Jagielski             throw (RuntimeException);
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski         /**
128*b1cdbd2cSJim Jagielski         Parse the content of the given InputStream as an XML document and
129*b1cdbd2cSJim Jagielski         return a new DOM Document object.
130*b1cdbd2cSJim Jagielski         */
131*b1cdbd2cSJim Jagielski         virtual Reference< XDocument > SAL_CALL parse(const Reference< XInputStream >& is)
132*b1cdbd2cSJim Jagielski             throw (RuntimeException, SAXParseException, IOException);
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski         /**
135*b1cdbd2cSJim Jagielski         Parse the content of the given URI as an XML document and return
136*b1cdbd2cSJim Jagielski         a new DOM Document object.
137*b1cdbd2cSJim Jagielski         */
138*b1cdbd2cSJim Jagielski         virtual Reference< XDocument > SAL_CALL parseURI(const OUString& uri)
139*b1cdbd2cSJim Jagielski 			throw (RuntimeException, SAXParseException, IOException);
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski         /**
142*b1cdbd2cSJim Jagielski         Specify the EntityResolver to be used to resolve entities present
143*b1cdbd2cSJim Jagielski         in the XML document to be parsed.
144*b1cdbd2cSJim Jagielski         */
145*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setEntityResolver(const Reference< XEntityResolver >& er)
146*b1cdbd2cSJim Jagielski 			throw (RuntimeException);
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski         virtual Reference< XEntityResolver > SAL_CALL getEntityResolver()
149*b1cdbd2cSJim Jagielski 			throw (RuntimeException);
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski         /**
153*b1cdbd2cSJim Jagielski         Specify the ErrorHandler to be used to report errors present in
154*b1cdbd2cSJim Jagielski         the XML document to be parsed.
155*b1cdbd2cSJim Jagielski         */
156*b1cdbd2cSJim Jagielski         virtual void SAL_CALL setErrorHandler(const Reference< XErrorHandler >& eh)
157*b1cdbd2cSJim Jagielski 			throw (RuntimeException);
158*b1cdbd2cSJim Jagielski     };
159*b1cdbd2cSJim Jagielski }
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski #endif
162