1*e3508121SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*e3508121SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*e3508121SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*e3508121SAndrew Rist * distributed with this work for additional information 6*e3508121SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*e3508121SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*e3508121SAndrew Rist * "License"); you may not use this file except in compliance 9*e3508121SAndrew Rist * with the License. You may obtain a copy of the License at 10*e3508121SAndrew Rist * 11*e3508121SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*e3508121SAndrew Rist * 13*e3508121SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*e3508121SAndrew Rist * software distributed under the License is distributed on an 15*e3508121SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*e3508121SAndrew Rist * KIND, either express or implied. See the License for the 17*e3508121SAndrew Rist * specific language governing permissions and limitations 18*e3508121SAndrew Rist * under the License. 19*e3508121SAndrew Rist * 20*e3508121SAndrew Rist *************************************************************/ 21*e3508121SAndrew Rist 22*e3508121SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir #ifndef OOX_OLE_OLESTORAGE_HXX 25cdf0e10cSrcweir #define OOX_OLE_OLESTORAGE_HXX 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "oox/helper/storagebase.hxx" 28cdf0e10cSrcweir 29cdf0e10cSrcweir namespace com { namespace sun { namespace star { 30cdf0e10cSrcweir namespace container { class XNameContainer; } 31cdf0e10cSrcweir namespace uno { class XComponentContext; } 32cdf0e10cSrcweir } } } 33cdf0e10cSrcweir 34cdf0e10cSrcweir namespace oox { 35cdf0e10cSrcweir namespace ole { 36cdf0e10cSrcweir 37cdf0e10cSrcweir // ============================================================================ 38cdf0e10cSrcweir 39cdf0e10cSrcweir /** Implements stream access for binary OLE storages. */ 40cdf0e10cSrcweir class OleStorage : public StorageBase 41cdf0e10cSrcweir { 42cdf0e10cSrcweir public: 43cdf0e10cSrcweir explicit OleStorage( 44cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, 45cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStream, 46cdf0e10cSrcweir bool bBaseStreamAccess ); 47cdf0e10cSrcweir 48cdf0e10cSrcweir explicit OleStorage( 49cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext, 50cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream, 51cdf0e10cSrcweir bool bBaseStreamAccess ); 52cdf0e10cSrcweir 53cdf0e10cSrcweir virtual ~OleStorage(); 54cdf0e10cSrcweir 55cdf0e10cSrcweir private: 56cdf0e10cSrcweir explicit OleStorage( 57cdf0e10cSrcweir const OleStorage& rParentStorage, 58cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxStorage, 59cdf0e10cSrcweir const ::rtl::OUString& rElementName, 60cdf0e10cSrcweir bool bReadOnly ); 61cdf0e10cSrcweir explicit OleStorage( 62cdf0e10cSrcweir const OleStorage& rParentStorage, 63cdf0e10cSrcweir const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream, 64cdf0e10cSrcweir const ::rtl::OUString& rElementName ); 65cdf0e10cSrcweir 66cdf0e10cSrcweir /** Initializes the API storage object for input. */ 67cdf0e10cSrcweir void initStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStream ); 68cdf0e10cSrcweir /** Initializes the API storage object for input/output. */ 69cdf0e10cSrcweir void initStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream ); 70cdf0e10cSrcweir 71cdf0e10cSrcweir /** Returns true, if the object represents a valid storage. */ 72cdf0e10cSrcweir virtual bool implIsStorage() const; 73cdf0e10cSrcweir 74cdf0e10cSrcweir /** Returns the com.sun.star.embed.XStorage interface of the current storage. 75cdf0e10cSrcweir 76cdf0e10cSrcweir @attention 77cdf0e10cSrcweir This function is not implemented for binary OLE storages. 78cdf0e10cSrcweir */ 79cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > 80cdf0e10cSrcweir implGetXStorage() const; 81cdf0e10cSrcweir 82cdf0e10cSrcweir /** Returns the names of all elements of this storage. */ 83cdf0e10cSrcweir virtual void implGetElementNames( ::std::vector< ::rtl::OUString >& orElementNames ) const; 84cdf0e10cSrcweir 85cdf0e10cSrcweir /** Opens and returns the specified sub storage from the storage. */ 86cdf0e10cSrcweir virtual StorageRef implOpenSubStorage( const ::rtl::OUString& rElementName, bool bCreateMissing ); 87cdf0e10cSrcweir 88cdf0e10cSrcweir /** Opens and returns the specified input stream from the storage. */ 89cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > 90cdf0e10cSrcweir implOpenInputStream( const ::rtl::OUString& rElementName ); 91cdf0e10cSrcweir 92cdf0e10cSrcweir /** Opens and returns the specified output stream from the storage. */ 93cdf0e10cSrcweir virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream > 94cdf0e10cSrcweir implOpenOutputStream( const ::rtl::OUString& rElementName ); 95cdf0e10cSrcweir 96cdf0e10cSrcweir /** Commits the current storage. */ 97cdf0e10cSrcweir virtual void implCommit() const; 98cdf0e10cSrcweir 99cdf0e10cSrcweir private: 100cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > 101cdf0e10cSrcweir mxContext; /// Component context with service manager. 102cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > 103cdf0e10cSrcweir mxStorage; /// Access to elements of this sub storage. 104cdf0e10cSrcweir const OleStorage* mpParentStorage; /// Parent OLE storage that contains this storage. 105cdf0e10cSrcweir }; 106cdf0e10cSrcweir 107cdf0e10cSrcweir // ============================================================================ 108cdf0e10cSrcweir 109cdf0e10cSrcweir } // namespace ole 110cdf0e10cSrcweir } // namespace oox 111cdf0e10cSrcweir 112cdf0e10cSrcweir #endif 113