diff options
Diffstat (limited to 'comphelper/inc/comphelper/mediadescriptor.hxx')
-rw-r--r-- | comphelper/inc/comphelper/mediadescriptor.hxx | 340 |
1 files changed, 340 insertions, 0 deletions
diff --git a/comphelper/inc/comphelper/mediadescriptor.hxx b/comphelper/inc/comphelper/mediadescriptor.hxx new file mode 100644 index 000000000000..7d2333045390 --- /dev/null +++ b/comphelper/inc/comphelper/mediadescriptor.hxx @@ -0,0 +1,340 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#ifndef _COMPHELPER_MEDIADESCRIPTOR_HXX_ +#define _COMPHELPER_MEDIADESCRIPTOR_HXX_ + +//_______________________________________________ +// includes + +#include <comphelper/sequenceashashmap.hxx> +#include <rtl/ustring.hxx> +#include "comphelper/comphelperdllapi.h" + +namespace com { namespace sun { namespace star { namespace io { + class XInputStream; +} } } } + +//_______________________________________________ +// namespace + +namespace comphelper{ + +//_______________________________________________ +// definitions + +/** @short can be used to work with a <type scope="::com::sun::star::document">MediaDescriptor</type> + struct. + + @descr It wraps a ::std::hash_map around the Sequence< css::beans::PropertyValue >, which + represent the MediaDescriptor item. + Further this helper defines often used functions (as e.g. open of the required streams, + consistent checks etcpp.) and it defines all useable property names. + + @attention This class isnt threadsafe and must be guarded from outside! + */ +class COMPHELPER_DLLPUBLIC MediaDescriptor : public SequenceAsHashMap +{ + //------------------------------------------- + // const + public: + + //--------------------------------------- + /** @short these methods can be used to get the different property names + as static const OUString values. + + @descr Because definition and declaration of static const class members + does not work as expected under windows (under unix it works as well) + these way must be used :-( + */ + static const ::rtl::OUString& PROP_ABORTED(); + static const ::rtl::OUString& PROP_ASTEMPLATE(); + static const ::rtl::OUString& PROP_CHARACTERSET(); + static const ::rtl::OUString& PROP_COMPONENTDATA(); + static const ::rtl::OUString& PROP_DEEPDETECTION(); + static const ::rtl::OUString& PROP_DETECTSERVICE(); + static const ::rtl::OUString& PROP_DOCUMENTSERVICE(); + static const ::rtl::OUString& PROP_EXTENSION(); + static const ::rtl::OUString& PROP_FILENAME(); + static const ::rtl::OUString& PROP_FILTERNAME(); + static const ::rtl::OUString& PROP_FILTEROPTIONS(); + static const ::rtl::OUString& PROP_FORMAT(); + static const ::rtl::OUString& PROP_FRAME(); + static const ::rtl::OUString& PROP_FRAMENAME(); + static const ::rtl::OUString& PROP_HIDDEN(); + static const ::rtl::OUString& PROP_INPUTSTREAM(); + static const ::rtl::OUString& PROP_INTERACTIONHANDLER(); + static const ::rtl::OUString& PROP_JUMPMARK(); + static const ::rtl::OUString& PROP_MACROEXECUTIONMODE(); + static const ::rtl::OUString& PROP_MEDIATYPE(); + static const ::rtl::OUString& PROP_MINIMIZED(); + static const ::rtl::OUString& PROP_NOAUTOSAVE(); + static const ::rtl::OUString& PROP_OPENNEWVIEW(); + static const ::rtl::OUString& PROP_OUTPUTSTREAM(); + static const ::rtl::OUString& PROP_PASSWORD(); + static const ::rtl::OUString& PROP_PATTERN(); + static const ::rtl::OUString& PROP_POSSIZE(); + static const ::rtl::OUString& PROP_POSTDATA(); + static const ::rtl::OUString& PROP_POSTSTRING(); + static const ::rtl::OUString& PROP_PREVIEW(); + static const ::rtl::OUString& PROP_READONLY(); + static const ::rtl::OUString& PROP_REFERRER(); + static const ::rtl::OUString& PROP_SALVAGEDFILE(); + static const ::rtl::OUString& PROP_SILENT(); + static const ::rtl::OUString& PROP_STATUSINDICATOR(); + static const ::rtl::OUString& PROP_STREAM(); + static const ::rtl::OUString& PROP_STREAMFOROUTPUT(); + static const ::rtl::OUString& PROP_TEMPLATENAME(); + static const ::rtl::OUString& PROP_TEMPLATEREGIONNAME(); + static const ::rtl::OUString& PROP_TITLE(); + static const ::rtl::OUString& PROP_TYPENAME(); + static const ::rtl::OUString& PROP_UCBCONTENT(); + static const ::rtl::OUString& PROP_UPDATEDOCMODE(); + static const ::rtl::OUString& PROP_URL(); + static const ::rtl::OUString& PROP_VERSION(); + static const ::rtl::OUString& PROP_VIEWID(); + static const ::rtl::OUString& PROP_REPAIRPACKAGE(); + static const ::rtl::OUString& PROP_DOCUMENTTITLE(); + static const ::rtl::OUString& PROP_MODEL(); + static const ::rtl::OUString& PROP_VIEWONLY(); + static const ::rtl::OUString& PROP_DOCUMENTBASEURL(); + static const ::rtl::OUString& PROP_VIEWCONTROLLERNAME(); + + //------------------------------------------- + // interface + public: + /** Value type of the 'ComponentData' property. + */ + typedef ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue > ComponentDataSequence; + + //--------------------------------------- + /** @short these ctors do nothing - excepting that they forward + the given parameters to the base class ctors. + + @descr The ctros must be overwritten to resolve conflicts with + the default ctors of the compiler :-(. + */ + MediaDescriptor(); + MediaDescriptor(const ::com::sun::star::uno::Any& aSource); + MediaDescriptor(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& lSource); + MediaDescriptor(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& lSource); + + //--------------------------------------- + /** @short it checks if the descriptor already has a valid + InputStream item and creates a new one, if not. + + @descr This method uses the current items of this MediaDescriptor, + to open the stream (as e.g. URL, ReadOnly, PostData etcpp.). + It creates a seekable stream and put it into the descriptor. + + A might existing InteractionHandler will be used automaticly, + to solve problems! + + In case of local file the system file locking is used. + + @return TRUE, if the stream was already part of the descriptor or could + be created as new item. FALSE otherwhise. + */ + sal_Bool addInputStream(); + + //--------------------------------------- + /** @short it checks if the descriptor already has a valid + InputStream item and creates a new one, if not. + + @descr This method uses the current items of this MediaDescriptor, + to open the stream (as e.g. URL, ReadOnly, PostData etcpp.). + It creates a seekable stream and put it into the descriptor. + + A might existing InteractionHandler will be used automaticly, + to solve problems! + + In case of local file the system file locking is used based on + configuration settings. + + @return TRUE, if the stream was already part of the descriptor or could + be created as new item. FALSE otherwhise. + */ + sal_Bool addInputStreamOwnLock(); + + //--------------------------------------- + /** @short it checks if the descriptor describes a readonly stream. + + @descr The descriptor itself isnt changed doing so. + It's only checked if the stream seems to be based + of a real readonly file. + + @Attention + We dont check the property "ReadOnly" here. Because + this property can be set from outside and overwrites + the readonly state of the stream. + If e.g. the stream could be opened read/write ... + but "ReadOnly" property is set to TRUE, this means: + show a readonly UI on top of this read/write stream. + + @return TRUE, if the stream must be interpreted as readonly ... + FALSE otherwhise. + */ + sal_Bool isStreamReadOnly() const; + + //--------------------------------------- + /** Returns a value from the sequence contained in the property + 'ComponentData' of this media descriptor. + + @descr The property 'ComponentData' should be empty or should + contain a value of type ComponentDataSequence (see above). + + @return The value with the specified name, if existing in the + sequence of the 'ComponentData' property, otherwise an empty + Any. + */ + ::com::sun::star::uno::Any getComponentDataEntry( + const ::rtl::OUString& rName ) const; + + //--------------------------------------- + /** Inserts a value into the sequence contained in the property + 'ComponentData' of the media descriptor. + + @descr The property 'ComponentData' should be empty or should + contain a value of type ComponentDataSequence (see above). The + passed value will be inserted into the sequence, or, if already + existing, will be overwritten. + + @param rName The name of the value to be inserted into the + sequence of the 'ComponentData' property. + + @param rValue The value to be inserted into the sequence of the + 'ComponentData' property. + */ + void setComponentDataEntry( + const ::rtl::OUString& rName, + const ::com::sun::star::uno::Any& rValue ); + + //--------------------------------------- + /** Removes a value from the sequence contained in the property + 'ComponentData' of the media descriptor. + + @descr The property 'ComponentData' should be empty or should + contain a value of type ComponentDataSequence (see above). The + value with the passed name will be removed from the sequence, + if existing. + + @param rName The name of the value to be removed from the sequence + of the 'ComponentData' property. + */ + void clearComponentDataEntry( + const ::rtl::OUString& rName ); + + //------------------------------------------- + // helper + private: + + //--------------------------------------- + /** @short tries to open a stream by using the given PostData stream. + + @descr The stream is used directly ... + + The MediaDescriptor itself is changed inside this method. + Means: the stream is added internal and not returned by a value. + + @param _rxPostData + the PostData stream. + + @return TRUE if the stream could be added successfully. + Note: If FALSE is returned, the error was already handled inside! + + @throw [css::uno::RuntimeException] + if the MediaDescriptor seems to be invalid! + + @throw [css::lang::IllegalArgumentException] + if the given PostData stream is <NULL/>. + */ + COMPHELPER_DLLPRIVATE sal_Bool impl_openStreamWithPostData( + const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& _rxPostData + ) throw(::com::sun::star::uno::RuntimeException); + + //--------------------------------------- + /** @short tries to open a stream by using the given URL. + + @descr First it tries to open the content in r/w mode (if its + allowed to do so). Only in case its not allowed or it failed + the stream will be tried to open in readonly mode. + + The MediaDescriptor itself is changed inside this method. + Means: the stream is added internal and not returned by a value. + + @param sURL + the URL for open. + + @param bLockFile + specifies whether the file should be locked + + @return TRUE if the stream could be added successfully. + Note: If FALSE is returned, the error was already handled inside! + + @throw [css::uno::RuntimeException] + if the MediaDescriptor seems to be invalid! + */ + COMPHELPER_DLLPRIVATE sal_Bool impl_openStreamWithURL( + const ::rtl::OUString& sURL, + sal_Bool bLockFile + ) throw(::com::sun::star::uno::RuntimeException); + + //--------------------------------------- + /** @short some URL parts can make trouble for opening streams (e.g. jumpmarks.) + An URL should be "normalized" before its used. + + @param sURL + the original URL (e.g. including a jumpmark) + + @return [string] + the "normalized" URL (e.g. without jumpmark) + */ + COMPHELPER_DLLPRIVATE ::rtl::OUString impl_normalizeURL(const ::rtl::OUString& sURL); + + //--------------------------------------- + /** @short it checks if the descriptor already has a valid + InputStream item and creates a new one, if not. + + @descr This method uses the current items of this MediaDescriptor, + to open the stream (as e.g. URL, ReadOnly, PostData etcpp.). + It creates a seekable stream and put it into the descriptor. + + A might existing InteractionHandler will be used automaticly, + to solve problems! + + @param bLockFile + specifies whether the file should be locked + + @return TRUE, if the stream was already part of the descriptor or could + be created as new item. FALSE otherwhise. + */ + COMPHELPER_DLLPRIVATE sal_Bool impl_addInputStream( sal_Bool bLockFile ); +}; + +} // namespace comphelper + +#endif // _COMPHELPER_MEDIADESCRIPTOR_HXX_ |