1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #ifndef _SCRIPTING_STORAGE_SCRIPTMETADATAIMPORTER_HXX_
28*cdf0e10cSrcweir #define _SCRIPTING_STORAGE_SCRIPTMETADATAIMPORTER_HXX_
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir #include <vector>
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir #include <rtl/ustring.h>
33*cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
34*cdf0e10cSrcweir #include <osl/mutex.hxx>
35*cdf0e10cSrcweir #include <cppuhelper/implbase1.hxx> // helper for component factory
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp>
38*cdf0e10cSrcweir #include <com/sun/star/lang/XServiceInfo.hpp>
39*cdf0e10cSrcweir #include <com/sun/star/lang/XInitialization.hpp>
40*cdf0e10cSrcweir #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
41*cdf0e10cSrcweir #include <com/sun/star/io/XInputStream.hpp>
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir #include "ScriptData.hxx"
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir namespace scripting_impl
46*cdf0e10cSrcweir {
47*cdf0e10cSrcweir // for simplification
48*cdf0e10cSrcweir #define css ::com::sun::star
49*cdf0e10cSrcweir #define dcsssf ::drafts::com::sun::star::script::framework
50*cdf0e10cSrcweir 
51*cdf0e10cSrcweir typedef ::std::vector< ScriptData > InfoImpls_vec;
52*cdf0e10cSrcweir typedef ::std::pair< ::rtl::OUString, ::std::pair< ::rtl::OUString,
53*cdf0e10cSrcweir     ::rtl::OUString > > strpair_pair;
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir /**
56*cdf0e10cSrcweir  * Script Meta Data Importer
57*cdf0e10cSrcweir  */
58*cdf0e10cSrcweir class ScriptMetadataImporter : public
59*cdf0e10cSrcweir     ::cppu::WeakImplHelper1< css::xml::sax::XExtendedDocumentHandler >
60*cdf0e10cSrcweir {
61*cdf0e10cSrcweir public:
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir     /**
64*cdf0e10cSrcweir      * This function will begin the parser and parse the meta data
65*cdf0e10cSrcweir      *
66*cdf0e10cSrcweir      * @param xInput The XInputStream for the parser which contains the XML
67*cdf0e10cSrcweir      * @param parcelURI The parcel's URI in the document or the application
68*cdf0e10cSrcweir      *
69*cdf0e10cSrcweir      * @see css::io::XInputStream
70*cdf0e10cSrcweir      */
71*cdf0e10cSrcweir     void parseMetaData( css::uno::Reference< css::io::XInputStream >
72*cdf0e10cSrcweir         const & xInput, const ::rtl::OUString & parcelURI,
73*cdf0e10cSrcweir         InfoImpls_vec & io_ScriptDatas )
74*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::io::IOException,
75*cdf0e10cSrcweir             css::uno::RuntimeException );
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir     /**
78*cdf0e10cSrcweir      * Constructor for the meta-data parser
79*cdf0e10cSrcweir      *
80*cdf0e10cSrcweir      * @param XComponentContext
81*cdf0e10cSrcweir      */
82*cdf0e10cSrcweir     explicit ScriptMetadataImporter(
83*cdf0e10cSrcweir         const css::uno::Reference< css::uno::XComponentContext >&  );
84*cdf0e10cSrcweir 
85*cdf0e10cSrcweir     /**
86*cdf0e10cSrcweir      * Destructor for the parser
87*cdf0e10cSrcweir      */
88*cdf0e10cSrcweir     virtual ~ScriptMetadataImporter() SAL_THROW( () );
89*cdf0e10cSrcweir 
90*cdf0e10cSrcweir     // XExtendedDocumentHandler impl
91*cdf0e10cSrcweir     /**
92*cdf0e10cSrcweir      * Function to handle the start of CDATA in XML
93*cdf0e10cSrcweir      *
94*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
95*cdf0e10cSrcweir      */
96*cdf0e10cSrcweir     virtual void SAL_CALL startCDATA()
97*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir     /**
100*cdf0e10cSrcweir      * Function to handle the end of CDATA in XML
101*cdf0e10cSrcweir      *
102*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
103*cdf0e10cSrcweir      */
104*cdf0e10cSrcweir     virtual void SAL_CALL endCDATA() throw ( css::uno::RuntimeException );
105*cdf0e10cSrcweir 
106*cdf0e10cSrcweir     /**
107*cdf0e10cSrcweir      * Function to handle comments in XML
108*cdf0e10cSrcweir      *
109*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
110*cdf0e10cSrcweir      */
111*cdf0e10cSrcweir     virtual void SAL_CALL comment( const ::rtl::OUString & sComment )
112*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
113*cdf0e10cSrcweir 
114*cdf0e10cSrcweir     /**
115*cdf0e10cSrcweir      * Function to handle line breaks in XML
116*cdf0e10cSrcweir      *
117*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
118*cdf0e10cSrcweir      */
119*cdf0e10cSrcweir     virtual void SAL_CALL allowLineBreak()
120*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
121*cdf0e10cSrcweir 
122*cdf0e10cSrcweir     /**
123*cdf0e10cSrcweir      * Function to handle unknowns in XML
124*cdf0e10cSrcweir      *
125*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
126*cdf0e10cSrcweir      */
127*cdf0e10cSrcweir     virtual void SAL_CALL unknown( const ::rtl::OUString & sString )
128*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
129*cdf0e10cSrcweir 
130*cdf0e10cSrcweir     /**
131*cdf0e10cSrcweir      * Function to handle the start of XML document
132*cdf0e10cSrcweir      *
133*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XExtendedDocumentHandler
134*cdf0e10cSrcweir      */
135*cdf0e10cSrcweir     // XDocumentHandler impl
136*cdf0e10cSrcweir     virtual void SAL_CALL startDocument()
137*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
138*cdf0e10cSrcweir 
139*cdf0e10cSrcweir     /**
140*cdf0e10cSrcweir      * Function to handle the end of the XML document
141*cdf0e10cSrcweir      *
142*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
143*cdf0e10cSrcweir      */
144*cdf0e10cSrcweir     virtual void SAL_CALL endDocument()
145*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir     /**
148*cdf0e10cSrcweir      * Function to handle the start of an element
149*cdf0e10cSrcweir      *
150*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
151*cdf0e10cSrcweir      */
152*cdf0e10cSrcweir     virtual void SAL_CALL startElement( const ::rtl::OUString& aName,
153*cdf0e10cSrcweir         const css::uno::Reference< css::xml::sax::XAttributeList > & xAttribs )
154*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException,
155*cdf0e10cSrcweir             css::uno::RuntimeException );
156*cdf0e10cSrcweir 
157*cdf0e10cSrcweir     /**
158*cdf0e10cSrcweir      * Function to handle the end of an element
159*cdf0e10cSrcweir      *
160*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
161*cdf0e10cSrcweir      */
162*cdf0e10cSrcweir     virtual void SAL_CALL endElement( const ::rtl::OUString & aName )
163*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
164*cdf0e10cSrcweir 
165*cdf0e10cSrcweir     /**
166*cdf0e10cSrcweir      * Function to handle characters in elements
167*cdf0e10cSrcweir      *
168*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
169*cdf0e10cSrcweir      */
170*cdf0e10cSrcweir     virtual void SAL_CALL characters( const ::rtl::OUString & aChars )
171*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
172*cdf0e10cSrcweir 
173*cdf0e10cSrcweir     /**
174*cdf0e10cSrcweir      * Function to handle whitespace
175*cdf0e10cSrcweir      *
176*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
177*cdf0e10cSrcweir      */
178*cdf0e10cSrcweir     virtual void SAL_CALL ignorableWhitespace( const ::rtl::OUString & aWhitespaces )
179*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
180*cdf0e10cSrcweir 
181*cdf0e10cSrcweir     /**
182*cdf0e10cSrcweir      * Function to handle XML processing instructions
183*cdf0e10cSrcweir      *
184*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
185*cdf0e10cSrcweir      */
186*cdf0e10cSrcweir     virtual void SAL_CALL processingInstruction(
187*cdf0e10cSrcweir         const ::rtl::OUString & aTarget, const ::rtl::OUString & aData )
188*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
189*cdf0e10cSrcweir 
190*cdf0e10cSrcweir     /**
191*cdf0e10cSrcweir      * Function to set the document locator
192*cdf0e10cSrcweir      *
193*cdf0e10cSrcweir      * @see com::sun::star::xml::sax::XDocumentHandler
194*cdf0e10cSrcweir      */
195*cdf0e10cSrcweir     virtual void SAL_CALL setDocumentLocator(
196*cdf0e10cSrcweir         const css::uno::Reference< css::xml::sax::XLocator >& xLocator )
197*cdf0e10cSrcweir         throw ( css::xml::sax::SAXException, css::uno::RuntimeException );
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir 
200*cdf0e10cSrcweir 
201*cdf0e10cSrcweir private:
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir     /** Vector contains the ScriptData structs */
204*cdf0e10cSrcweir     InfoImpls_vec* mpv_ScriptDatas;
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir     /** @internal */
207*cdf0e10cSrcweir     osl::Mutex     m_mutex;
208*cdf0e10cSrcweir 
209*cdf0e10cSrcweir     /** @internal */
210*cdf0e10cSrcweir     css::uno::Reference< css::uno::XComponentContext >  m_xContext;
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir     /** Placeholder for the parcel URI */
213*cdf0e10cSrcweir     ::rtl::OUString ms_parcelURI;
214*cdf0e10cSrcweir 
215*cdf0e10cSrcweir     /** States for state machine during parsing */
216*cdf0e10cSrcweir     enum { PARCEL, SCRIPT, LOCALE, DISPLAYNAME, DESCRIPTION, FUNCTIONNAME,
217*cdf0e10cSrcweir         LOGICALNAME, LANGUAGEDEPPROPS, LANGDEPPROPS, FILESET, FILESETPROPS,
218*cdf0e10cSrcweir         FILES, FILEPROPS } m_state;
219*cdf0e10cSrcweir 
220*cdf0e10cSrcweir     /** Build up the struct during parsing the meta data */
221*cdf0e10cSrcweir     ScriptData m_ScriptData;
222*cdf0e10cSrcweir 
223*cdf0e10cSrcweir     /** @internal */
224*cdf0e10cSrcweir     ::rtl::OUString ms_localeLang;
225*cdf0e10cSrcweir     ::rtl::OUString ms_localeDisName;
226*cdf0e10cSrcweir     ::rtl::OUStringBuffer *ms_localeDesc;
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir     props_vec mv_filesetprops;
229*cdf0e10cSrcweir 
230*cdf0e10cSrcweir     ::rtl::OUString ms_filename;
231*cdf0e10cSrcweir     ::rtl::OUString ms_filesetname;
232*cdf0e10cSrcweir 
233*cdf0e10cSrcweir     props_vec mv_fileprops;
234*cdf0e10cSrcweir 
235*cdf0e10cSrcweir     strpairvec_map mm_files;
236*cdf0e10cSrcweir 
237*cdf0e10cSrcweir     InfoImpls_vec mv_ScriptDatas;
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir     /**
240*cdf0e10cSrcweir      *   Helper function to set the state
241*cdf0e10cSrcweir      *
242*cdf0e10cSrcweir      *   @param tagName
243*cdf0e10cSrcweir      *           The current tag being processed
244*cdf0e10cSrcweir      */
245*cdf0e10cSrcweir     void setState(const ::rtl::OUString & tagName);
246*cdf0e10cSrcweir }
247*cdf0e10cSrcweir ; // class ScriptMetadataImporter
248*cdf0e10cSrcweir 
249*cdf0e10cSrcweir }
250*cdf0e10cSrcweir 
251*cdf0e10cSrcweir #endif
252