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