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 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_xmlscript.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <xmlscript/xmllib_imexp.hxx> 32*cdf0e10cSrcweir #include <xmlscript/xml_helper.hxx> 33*cdf0e10cSrcweir 34*cdf0e10cSrcweir using namespace com::sun::star::uno; 35*cdf0e10cSrcweir using namespace com::sun::star; 36*cdf0e10cSrcweir using namespace rtl; 37*cdf0e10cSrcweir 38*cdf0e10cSrcweir namespace xmlscript 39*cdf0e10cSrcweir { 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir static OUString aTrueStr ( RTL_CONSTASCII_USTRINGPARAM("true") ); 42*cdf0e10cSrcweir static OUString aFalseStr( RTL_CONSTASCII_USTRINGPARAM("false") ); 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir //################################################################################################## 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir 47*cdf0e10cSrcweir //================================================================================================== 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir void 50*cdf0e10cSrcweir SAL_CALL exportLibraryContainer( 51*cdf0e10cSrcweir Reference< xml::sax::XExtendedDocumentHandler > const & xOut, 52*cdf0e10cSrcweir const LibDescriptorArray* pLibArray ) 53*cdf0e10cSrcweir SAL_THROW( (Exception) ) 54*cdf0e10cSrcweir { 55*cdf0e10cSrcweir xOut->startDocument(); 56*cdf0e10cSrcweir 57*cdf0e10cSrcweir OUString aDocTypeStr( RTL_CONSTASCII_USTRINGPARAM( 58*cdf0e10cSrcweir "<!DOCTYPE library:libraries PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\"" 59*cdf0e10cSrcweir " \"libraries.dtd\">" ) ); 60*cdf0e10cSrcweir xOut->unknown( aDocTypeStr ); 61*cdf0e10cSrcweir xOut->ignorableWhitespace( OUString() ); 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir OUString aLibrariesName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":libraries") ); 65*cdf0e10cSrcweir XMLElement* pLibsElement = new XMLElement( aLibrariesName ); 66*cdf0e10cSrcweir Reference< xml::sax::XAttributeList > xAttributes( pLibsElement ); 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir pLibsElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM("xmlns:" XMLNS_LIBRARY_PREFIX) ), 69*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_URI) ) ); 70*cdf0e10cSrcweir pLibsElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM("xmlns:" XMLNS_XLINK_PREFIX) ), 71*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_XLINK_URI) ) ); 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir xOut->ignorableWhitespace( OUString() ); 75*cdf0e10cSrcweir xOut->startElement( aLibrariesName, xAttributes ); 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir int nLibCount = pLibArray->mnLibCount; 78*cdf0e10cSrcweir for( sal_Int32 i = 0 ; i < nLibCount ; i++ ) 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir LibDescriptor& rLib = pLibArray->mpLibs[i]; 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir OUString aLibraryName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":library") ); 83*cdf0e10cSrcweir XMLElement* pLibElement = new XMLElement( aLibraryName ); 84*cdf0e10cSrcweir Reference< xml::sax::XAttributeList > xLibElementAttribs; 85*cdf0e10cSrcweir xLibElementAttribs = static_cast< xml::sax::XAttributeList* >( pLibElement ); 86*cdf0e10cSrcweir 87*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":name") ), 88*cdf0e10cSrcweir rLib.aName ); 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir if( rLib.aStorageURL.getLength() ) 92*cdf0e10cSrcweir { 93*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_XLINK_PREFIX ":href") ), 94*cdf0e10cSrcweir rLib.aStorageURL ); 95*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_XLINK_PREFIX ":type") ), 96*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM("simple") ) ); 97*cdf0e10cSrcweir } 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":link") ), 100*cdf0e10cSrcweir rLib.bLink ? aTrueStr : aFalseStr ); 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir if( rLib.bLink ) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":readonly") ), 105*cdf0e10cSrcweir rLib.bReadOnly ? aTrueStr : aFalseStr ); 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir pLibElement->dump( xOut.get() ); 109*cdf0e10cSrcweir } 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir xOut->ignorableWhitespace( OUString() ); 112*cdf0e10cSrcweir xOut->endElement( aLibrariesName ); 113*cdf0e10cSrcweir 114*cdf0e10cSrcweir xOut->endDocument(); 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir //================================================================================================== 118*cdf0e10cSrcweir 119*cdf0e10cSrcweir void 120*cdf0e10cSrcweir SAL_CALL exportLibrary( 121*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XExtendedDocumentHandler > const & xOut, 122*cdf0e10cSrcweir const LibDescriptor& rLib ) 123*cdf0e10cSrcweir SAL_THROW( (::com::sun::star::uno::Exception) ) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir xOut->startDocument(); 126*cdf0e10cSrcweir 127*cdf0e10cSrcweir OUString aDocTypeStr( RTL_CONSTASCII_USTRINGPARAM( 128*cdf0e10cSrcweir "<!DOCTYPE library:library PUBLIC \"-//OpenOffice.org//DTD OfficeDocument 1.0//EN\"" 129*cdf0e10cSrcweir " \"library.dtd\">" ) ); 130*cdf0e10cSrcweir xOut->unknown( aDocTypeStr ); 131*cdf0e10cSrcweir xOut->ignorableWhitespace( OUString() ); 132*cdf0e10cSrcweir 133*cdf0e10cSrcweir 134*cdf0e10cSrcweir OUString aLibraryName( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":library") ); 135*cdf0e10cSrcweir XMLElement* pLibElement = new XMLElement( aLibraryName ); 136*cdf0e10cSrcweir Reference< xml::sax::XAttributeList > xAttributes( pLibElement ); 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM("xmlns:" XMLNS_LIBRARY_PREFIX) ), 139*cdf0e10cSrcweir OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_URI) ) ); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":name") ), 142*cdf0e10cSrcweir rLib.aName ); 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":readonly") ), 145*cdf0e10cSrcweir rLib.bReadOnly ? aTrueStr : aFalseStr ); 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":passwordprotected") ), 148*cdf0e10cSrcweir rLib.bPasswordProtected ? aTrueStr : aFalseStr ); 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir if( rLib.bPreload ) 151*cdf0e10cSrcweir pLibElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":preload") ), aTrueStr ); 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir sal_Int32 nElementCount = rLib.aElementNames.getLength(); 154*cdf0e10cSrcweir if( nElementCount ) 155*cdf0e10cSrcweir { 156*cdf0e10cSrcweir const OUString* pElementNames = rLib.aElementNames.getConstArray(); 157*cdf0e10cSrcweir for( sal_Int32 i = 0 ; i < nElementCount ; i++ ) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir XMLElement* pElement = new XMLElement( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":element" ) ) ); 160*cdf0e10cSrcweir Reference< xml::sax::XAttributeList > xElementAttribs; 161*cdf0e10cSrcweir xElementAttribs = static_cast< xml::sax::XAttributeList* >( pElement ); 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir pElement->addAttribute( OUString( RTL_CONSTASCII_USTRINGPARAM(XMLNS_LIBRARY_PREFIX ":name") ), 164*cdf0e10cSrcweir pElementNames[i] ); 165*cdf0e10cSrcweir 166*cdf0e10cSrcweir pLibElement->addSubElement( pElement ); 167*cdf0e10cSrcweir } 168*cdf0e10cSrcweir } 169*cdf0e10cSrcweir 170*cdf0e10cSrcweir pLibElement->dump( xOut.get() ); 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir xOut->endDocument(); 173*cdf0e10cSrcweir } 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir } 176*cdf0e10cSrcweir 177