1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_xmloff.hxx" 26 #include "xmlbasici.hxx" 27 #include <xmloff/attrlist.hxx> 28 #include <xmloff/nmspmap.hxx> 29 #include <xmloff/xmlimp.hxx> 30 31 using namespace ::com::sun::star; 32 using namespace ::com::sun::star::uno; 33 34 35 // ============================================================================= 36 // XMLBasicImportContext 37 // ============================================================================= 38 39 XMLBasicImportContext::XMLBasicImportContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const ::rtl::OUString& rLName, 40 const Reference< frame::XModel >& rxModel ) 41 :SvXMLImportContext( rImport, nPrfx, rLName ) 42 ,m_xModel( rxModel ) 43 { 44 Reference< lang::XMultiServiceFactory > xMSF = GetImport().getServiceFactory(); 45 if ( xMSF.is() ) 46 { 47 m_xHandler.set( xMSF->createInstance( 48 ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.XMLOasisBasicImporter" ) ) ), 49 UNO_QUERY ); 50 } 51 52 if ( m_xHandler.is() ) 53 { 54 Reference< document::XImporter > xImporter( m_xHandler, UNO_QUERY ); 55 if ( xImporter.is() ) 56 { 57 Reference< lang::XComponent > xComp( m_xModel, UNO_QUERY ); 58 xImporter->setTargetDocument( xComp ); 59 } 60 } 61 } 62 63 // ----------------------------------------------------------------------------- 64 65 XMLBasicImportContext::~XMLBasicImportContext() 66 { 67 } 68 69 // ----------------------------------------------------------------------------- 70 71 SvXMLImportContext* XMLBasicImportContext::CreateChildContext( 72 sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, 73 const Reference< xml::sax::XAttributeList >& ) 74 { 75 SvXMLImportContext* pContext = 0; 76 77 if ( m_xHandler.is() ) 78 pContext = new XMLBasicImportChildContext( GetImport(), nPrefix, rLocalName, m_xHandler ); 79 80 if ( !pContext ) 81 pContext = new SvXMLImportContext( GetImport(), nPrefix, rLocalName ); 82 83 return pContext; 84 } 85 86 // ----------------------------------------------------------------------------- 87 88 void XMLBasicImportContext::StartElement( 89 const Reference< xml::sax::XAttributeList >& rxAttrList ) 90 { 91 if ( m_xHandler.is() ) 92 { 93 m_xHandler->startDocument(); 94 95 // copy namespace declarations 96 SvXMLAttributeList* pAttrList = new SvXMLAttributeList( rxAttrList ); 97 Reference< xml::sax::XAttributeList > xAttrList( pAttrList ); 98 const SvXMLNamespaceMap& rNamespaceMap = GetImport().GetNamespaceMap(); 99 sal_uInt16 nPos = rNamespaceMap.GetFirstKey(); 100 while ( nPos != USHRT_MAX ) 101 { 102 ::rtl::OUString aAttrName( rNamespaceMap.GetAttrNameByKey( nPos ) ); 103 if ( xAttrList->getValueByName( aAttrName ).getLength() == 0 ) 104 pAttrList->AddAttribute( aAttrName, rNamespaceMap.GetNameByKey( nPos ) ); 105 nPos = rNamespaceMap.GetNextKey( nPos ); 106 } 107 108 m_xHandler->startElement( 109 GetImport().GetNamespaceMap().GetQNameByKey( GetPrefix(), GetLocalName() ), 110 xAttrList ); 111 } 112 } 113 114 // ----------------------------------------------------------------------------- 115 116 void XMLBasicImportContext::EndElement() 117 { 118 if ( m_xHandler.is() ) 119 { 120 m_xHandler->endElement( 121 GetImport().GetNamespaceMap().GetQNameByKey( GetPrefix(), GetLocalName() ) ); 122 m_xHandler->endDocument(); 123 } 124 } 125 126 // ----------------------------------------------------------------------------- 127 128 void XMLBasicImportContext::Characters( const ::rtl::OUString& rChars ) 129 { 130 if ( m_xHandler.is() ) 131 m_xHandler->characters( rChars ); 132 } 133 134 135 // ============================================================================= 136 // XMLBasicImportChildContext 137 // ============================================================================= 138 139 XMLBasicImportChildContext::XMLBasicImportChildContext( SvXMLImport& rImport, sal_uInt16 nPrfx, const ::rtl::OUString& rLName, 140 const Reference< xml::sax::XDocumentHandler >& rxHandler ) 141 :SvXMLImportContext( rImport, nPrfx, rLName ) 142 ,m_xHandler( rxHandler ) 143 { 144 } 145 146 // ----------------------------------------------------------------------------- 147 148 XMLBasicImportChildContext::~XMLBasicImportChildContext() 149 { 150 } 151 152 // ----------------------------------------------------------------------------- 153 154 SvXMLImportContext* XMLBasicImportChildContext::CreateChildContext( 155 sal_uInt16 nPrefix, const ::rtl::OUString& rLocalName, 156 const Reference< xml::sax::XAttributeList >& ) 157 { 158 return new XMLBasicImportChildContext( GetImport(), nPrefix, rLocalName, m_xHandler ); 159 } 160 161 // ----------------------------------------------------------------------------- 162 163 void XMLBasicImportChildContext::StartElement( 164 const Reference< xml::sax::XAttributeList >& xAttrList ) 165 { 166 if ( m_xHandler.is() ) 167 { 168 m_xHandler->startElement( 169 GetImport().GetNamespaceMap().GetQNameByKey( GetPrefix(), GetLocalName() ), 170 xAttrList ); 171 } 172 } 173 174 // ----------------------------------------------------------------------------- 175 176 void XMLBasicImportChildContext::EndElement() 177 { 178 if ( m_xHandler.is() ) 179 { 180 m_xHandler->endElement( 181 GetImport().GetNamespaceMap().GetQNameByKey( GetPrefix(), GetLocalName() ) ); 182 } 183 } 184 185 // ----------------------------------------------------------------------------- 186 187 void XMLBasicImportChildContext::Characters( const ::rtl::OUString& rChars ) 188 { 189 if ( m_xHandler.is() ) 190 m_xHandler->characters( rChars ); 191 } 192 193 // ----------------------------------------------------------------------------- 194