summaryrefslogtreecommitdiff
path: root/comphelper/source
diff options
context:
space:
mode:
Diffstat (limited to 'comphelper/source')
-rw-r--r--comphelper/source/compare/AnyCompareFactory.cxx35
-rw-r--r--comphelper/source/container/IndexedPropertyValuesContainer.cxx37
-rw-r--r--comphelper/source/container/NamedPropertyValuesContainer.cxx33
-rw-r--r--comphelper/source/container/enumerablemap.cxx999
-rw-r--r--comphelper/source/container/makefile.mk3
-rw-r--r--comphelper/source/inc/comphelper_module.hxx42
-rw-r--r--comphelper/source/misc/comphelper_module.cxx40
-rw-r--r--comphelper/source/misc/comphelper_services.cxx74
-rw-r--r--comphelper/source/misc/componentbase.cxx73
-rw-r--r--comphelper/source/misc/docpasswordhelper.cxx152
-rw-r--r--comphelper/source/misc/docpasswordrequest.cxx153
-rw-r--r--comphelper/source/misc/documentiologring.cxx175
-rw-r--r--comphelper/source/misc/documentiologring.hxx92
-rw-r--r--comphelper/source/misc/facreg.cxx246
-rw-r--r--comphelper/source/misc/instancelocker.cxx19
-rw-r--r--comphelper/source/misc/instancelocker.hxx6
-rw-r--r--comphelper/source/misc/makefile.mk7
-rw-r--r--comphelper/source/misc/mediadescriptor.cxx21
-rw-r--r--comphelper/source/misc/string.cxx27
-rw-r--r--comphelper/source/misc/types.cxx11
-rw-r--r--comphelper/source/misc/uieventslogger.cxx17
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.cxx99
-rw-r--r--comphelper/source/officeinstdir/officeinstallationdirectories.hxx10
-rw-r--r--comphelper/source/processfactory/processfactory.cxx20
-rw-r--r--comphelper/source/property/genericpropertyset.cxx3
-rw-r--r--comphelper/source/property/opropertybag.cxx15
-rw-r--r--comphelper/source/property/property.cxx8
-rw-r--r--comphelper/source/property/propertybag.cxx5
-rw-r--r--comphelper/source/property/propertycontainerhelper.cxx4
-rw-r--r--comphelper/source/streaming/memorystream.cxx50
-rw-r--r--comphelper/source/streaming/seqinputstreamserv.cxx57
-rw-r--r--comphelper/source/streaming/seqoutputstreamserv.cxx56
32 files changed, 2119 insertions, 470 deletions
diff --git a/comphelper/source/compare/AnyCompareFactory.cxx b/comphelper/source/compare/AnyCompareFactory.cxx
index e5713c6ece46..c77aaf75f5a8 100644
--- a/comphelper/source/compare/AnyCompareFactory.cxx
+++ b/comphelper/source/compare/AnyCompareFactory.cxx
@@ -31,6 +31,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/ucb/XAnyCompareFactory.hpp>
#include <com/sun/star/i18n/XCollator.hpp>
@@ -44,9 +45,7 @@
#include <com/sun/star/lang/IllegalArgumentException.hpp>
#include <com/sun/star/lang/XMultiComponentFactory.hpp>
#include <comphelper/stl_types.hxx>
-#ifndef __SGI_STL_MAP
#include <map>
-#endif
using namespace com::sun::star::uno;
@@ -81,11 +80,6 @@ public:
//=============================================================================
-Sequence< rtl::OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL AnyCompareFactory_getImplementationName() throw();
-Reference< XInterface > SAL_CALL AnyCompareFactory_createInstance(
- const Reference< XComponentContext >& rxContext ) throw( Exception );
-
class AnyCompareFactory : public cppu::WeakImplHelper3< XAnyCompareFactory, XInitialization, XServiceInfo >
{
Reference< XAnyCompare > m_rAnyCompare;
@@ -107,6 +101,11 @@ public:
virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
+
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static Reference< XInterface > SAL_CALL Create( const Reference< XComponentContext >& );
};
//===========================================================================================
@@ -157,7 +156,12 @@ void SAL_CALL AnyCompareFactory::initialize( const Sequence< Any >& aArguments )
OUString SAL_CALL AnyCompareFactory::getImplementationName( ) throw( RuntimeException )
{
- return AnyCompareFactory_getImplementationName();
+ return getImplementationName_static();
+}
+
+OUString SAL_CALL AnyCompareFactory::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AnyCompareFactory" ) );
}
sal_Bool SAL_CALL AnyCompareFactory::supportsService( const OUString& ServiceName ) throw(RuntimeException)
@@ -168,24 +172,23 @@ sal_Bool SAL_CALL AnyCompareFactory::supportsService( const OUString& ServiceNam
Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames( ) throw(RuntimeException)
{
- return AnyCompareFactory_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-
-Sequence< rtl::OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw()
+Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.AnyCompareFactory" ) );
const Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL AnyCompareFactory_getImplementationName() throw()
+Reference< XInterface > SAL_CALL AnyCompareFactory::Create(
+ const Reference< XComponentContext >& rxContext )
{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AnyCompareFactory" ) );
+ return (cppu::OWeakObject*)new AnyCompareFactory( rxContext );
}
-Reference< XInterface > SAL_CALL AnyCompareFactory_createInstance(
- const Reference< XComponentContext >& rxContext ) throw( Exception )
+void createRegistryInfo_AnyCompareFactory()
{
- return (cppu::OWeakObject*)new AnyCompareFactory( rxContext );
+ static ::comphelper::module::OAutoRegistration< AnyCompareFactory > aAutoRegistration;
}
diff --git a/comphelper/source/container/IndexedPropertyValuesContainer.cxx b/comphelper/source/container/IndexedPropertyValuesContainer.cxx
index 10d6143f2eaa..a9f413bc46e1 100644
--- a/comphelper/source/container/IndexedPropertyValuesContainer.cxx
+++ b/comphelper/source/container/IndexedPropertyValuesContainer.cxx
@@ -31,9 +31,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
-#ifndef _COM_SUN_STAR_CONTAINER_XIndexCONTAINER_HPP_
+#include "comphelper_module.hxx"
+
#include <com/sun/star/container/XIndexContainer.hpp>
-#endif
#include <com/sun/star/uno/Sequence.h>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <cppuhelper/implbase2.hxx>
@@ -49,11 +49,6 @@ using namespace com::sun::star;
typedef std::vector < uno::Sequence< beans::PropertyValue > > IndexedPropertyValues;
-uno::Sequence< rtl::OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw();
-uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext ) throw( uno::Exception );
-
class IndexedPropertyValuesContainer : public cppu::WeakImplHelper2< container::XIndexContainer, lang::XServiceInfo >
{
public:
@@ -91,6 +86,11 @@ public:
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
private:
IndexedPropertyValues maProperties;
};
@@ -233,7 +233,12 @@ sal_Bool SAL_CALL IndexedPropertyValuesContainer::hasElements( )
//XServiceInfo
::rtl::OUString SAL_CALL IndexedPropertyValuesContainer::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException)
{
- return IndexedPropertyValuesContainer_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL IndexedPropertyValuesContainer::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IndexedPropertyValuesContainer" ) );
}
sal_Bool SAL_CALL IndexedPropertyValuesContainer::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
@@ -244,25 +249,25 @@ sal_Bool SAL_CALL IndexedPropertyValuesContainer::supportsService( const ::rtl::
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL IndexedPropertyValuesContainer::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
{
- return IndexedPropertyValuesContainer_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-uno::Sequence< rtl::OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw()
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL IndexedPropertyValuesContainer::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.IndexedPropertyValues" ) );
const uno::Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw()
-{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "IndexedPropertyValuesContainer" ) );
-}
-uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext >&) throw( uno::Exception )
+uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer::Create(
+ const uno::Reference< uno::XComponentContext >&)
{
return (cppu::OWeakObject*)new IndexedPropertyValuesContainer();
}
+void createRegistryInfo_IndexedPropertyValuesContainer()
+{
+ static ::comphelper::module::OAutoRegistration< IndexedPropertyValuesContainer > aAutoRegistration;
+}
diff --git a/comphelper/source/container/NamedPropertyValuesContainer.cxx b/comphelper/source/container/NamedPropertyValuesContainer.cxx
index 269fa05de56b..99a33bb8470e 100644
--- a/comphelper/source/container/NamedPropertyValuesContainer.cxx
+++ b/comphelper/source/container/NamedPropertyValuesContainer.cxx
@@ -31,6 +31,7 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/uno/Sequence.h>
@@ -48,11 +49,6 @@ using namespace com::sun::star;
DECLARE_STL_USTRINGACCESS_MAP( uno::Sequence<beans::PropertyValue>, NamedPropertyValues );
-uno::Sequence< rtl::OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw();
-rtl::OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw();
-uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext ) throw( uno::Exception );
-
class NamedPropertyValuesContainer : public cppu::WeakImplHelper2< container::XNameContainer, lang::XServiceInfo >
{
public:
@@ -92,6 +88,11 @@ public:
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
private:
NamedPropertyValues maProperties;
};
@@ -202,7 +203,12 @@ sal_Bool SAL_CALL NamedPropertyValuesContainer::hasElements( )
//XServiceInfo
::rtl::OUString SAL_CALL NamedPropertyValuesContainer::getImplementationName( ) throw(::com::sun::star::uno::RuntimeException)
{
- return NamedPropertyValuesContainer_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL NamedPropertyValuesContainer::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NamedPropertyValuesContainer" ) );
}
sal_Bool SAL_CALL NamedPropertyValuesContainer::supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException)
@@ -213,25 +219,24 @@ sal_Bool SAL_CALL NamedPropertyValuesContainer::supportsService( const ::rtl::OU
::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL NamedPropertyValuesContainer::getSupportedServiceNames( ) throw(::com::sun::star::uno::RuntimeException)
{
- return NamedPropertyValuesContainer_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
-uno::Sequence< rtl::OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw()
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL NamedPropertyValuesContainer::getSupportedServiceNames_static( )
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.document.NamedPropertyValues" ) );
const uno::Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
return aSeq;
}
-rtl::OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw()
+uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer::Create(
+ const uno::Reference< uno::XComponentContext >&)
{
- return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NamedPropertyValuesContainer" ) );
+ return (cppu::OWeakObject*)new NamedPropertyValuesContainer();
}
-uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(
- const uno::Reference< uno::XComponentContext >&) throw( uno::Exception )
+void createRegistryInfo_NamedPropertyValuesContainer()
{
- return (cppu::OWeakObject*)new NamedPropertyValuesContainer();
+ static ::comphelper::module::OAutoRegistration< NamedPropertyValuesContainer > aAutoRegistration;
}
-
diff --git a/comphelper/source/container/enumerablemap.cxx b/comphelper/source/container/enumerablemap.cxx
new file mode 100644
index 000000000000..c7179ff07b91
--- /dev/null
+++ b/comphelper/source/container/enumerablemap.cxx
@@ -0,0 +1,999 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* 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.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+#include "comphelper/anytostring.hxx"
+#include "comphelper/componentbase.hxx"
+#include "comphelper/componentcontext.hxx"
+#include "comphelper/extract.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/container/XEnumerableMap.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/ucb/AlreadyInitializedException.hpp>
+#include <com/sun/star/beans/Pair.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+/** === end UNO includes === **/
+
+#include <cppuhelper/compbase3.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <rtl/math.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <typelib/typedescription.hxx>
+
+#include <functional>
+#include <map>
+#include <memory>
+#include <boost/shared_ptr.hpp>
+
+//........................................................................
+namespace comphelper
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ using ::com::sun::star::uno::UNO_QUERY;
+ using ::com::sun::star::uno::UNO_QUERY_THROW;
+ using ::com::sun::star::uno::UNO_SET_THROW;
+ using ::com::sun::star::uno::Exception;
+ using ::com::sun::star::uno::RuntimeException;
+ using ::com::sun::star::uno::Any;
+ using ::com::sun::star::uno::makeAny;
+ using ::com::sun::star::uno::Sequence;
+ using ::com::sun::star::uno::Type;
+ using ::com::sun::star::container::XEnumerableMap;
+ using ::com::sun::star::lang::NoSupportException;
+ using ::com::sun::star::beans::IllegalTypeException;
+ using ::com::sun::star::container::NoSuchElementException;
+ using ::com::sun::star::lang::IllegalArgumentException;
+ using ::com::sun::star::lang::XInitialization;
+ using ::com::sun::star::ucb::AlreadyInitializedException;
+ using ::com::sun::star::beans::Pair;
+ using ::com::sun::star::uno::TypeClass;
+ using ::com::sun::star::uno::TypeClass_VOID;
+ using ::com::sun::star::uno::TypeClass_CHAR;
+ using ::com::sun::star::uno::TypeClass_BOOLEAN;
+ using ::com::sun::star::uno::TypeClass_BYTE;
+ using ::com::sun::star::uno::TypeClass_SHORT;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_SHORT;
+ using ::com::sun::star::uno::TypeClass_LONG;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_LONG;
+ using ::com::sun::star::uno::TypeClass_HYPER;
+ using ::com::sun::star::uno::TypeClass_UNSIGNED_HYPER;
+ using ::com::sun::star::uno::TypeClass_FLOAT;
+ using ::com::sun::star::uno::TypeClass_DOUBLE;
+ using ::com::sun::star::uno::TypeClass_STRING;
+ using ::com::sun::star::uno::TypeClass_TYPE;
+ using ::com::sun::star::uno::TypeClass_ENUM;
+ using ::com::sun::star::uno::TypeClass_INTERFACE;
+ using ::com::sun::star::uno::TypeClass_UNKNOWN;
+ using ::com::sun::star::uno::TypeClass_ANY;
+ using ::com::sun::star::uno::TypeClass_EXCEPTION;
+ using ::com::sun::star::uno::TypeClass_STRUCT;
+ using ::com::sun::star::uno::TypeClass_UNION;
+ using ::com::sun::star::lang::XServiceInfo;
+ using ::com::sun::star::uno::XComponentContext;
+ using ::com::sun::star::container::XEnumeration;
+ using ::com::sun::star::uno::TypeDescription;
+ using ::com::sun::star::lang::WrappedTargetException;
+ using ::com::sun::star::lang::DisposedException;
+ /** === end UNO using === **/
+
+ //====================================================================
+ //= IKeyPredicateLess
+ //====================================================================
+ class SAL_NO_VTABLE IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const = 0;
+ virtual ~IKeyPredicateLess() {}
+ };
+
+ //====================================================================
+ //= LessPredicateAdapter
+ //====================================================================
+ struct LessPredicateAdapter : public ::std::binary_function< Any, Any, bool >
+ {
+ LessPredicateAdapter( const IKeyPredicateLess& _predicate )
+ :m_predicate( _predicate )
+ {
+ }
+
+ bool operator()( const Any& _lhs, const Any& _rhs ) const
+ {
+ return m_predicate.isLess( _lhs, _rhs );
+ }
+
+ private:
+ const IKeyPredicateLess& m_predicate;
+
+ private:
+ LessPredicateAdapter(); // never implemented
+ };
+
+ //====================================================================
+ //= ScalarPredicateLess
+ //====================================================================
+ template< typename SCALAR >
+ class ScalarPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ SCALAR lhs(0), rhs(0);
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+ };
+
+ //====================================================================
+ //= StringPredicateLess
+ //====================================================================
+ class StringPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ ::rtl::OUString lhs, rhs;
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+ };
+
+ //====================================================================
+ //= TypePredicateLess
+ //====================================================================
+ class TypePredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ Type lhs, rhs;
+ if ( !( _lhs >>= lhs )
+ || !( _rhs >>= rhs )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs.getTypeName() < rhs.getTypeName();
+ }
+ };
+
+ //====================================================================
+ //= EnumPredicateLess
+ //====================================================================
+ class EnumPredicateLess : public IKeyPredicateLess
+ {
+ public:
+ EnumPredicateLess( const Type& _enumType )
+ :m_enumType( _enumType )
+ {
+ }
+
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ sal_Int32 lhs(0), rhs(0);
+ if ( !::cppu::enum2int( lhs, _lhs )
+ || !::cppu::enum2int( rhs, _rhs )
+ || !_lhs.getValueType().equals( m_enumType )
+ || !_rhs.getValueType().equals( m_enumType )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+ return lhs < rhs;
+ }
+
+ private:
+ const Type m_enumType;
+ };
+
+ //====================================================================
+ //= InterfacePredicateLess
+ //====================================================================
+ class InterfacePredicateLess : public IKeyPredicateLess
+ {
+ public:
+ virtual bool isLess( const Any& _lhs, const Any& _rhs ) const
+ {
+ if ( ( _lhs.getValueTypeClass() != TypeClass_INTERFACE )
+ || ( _rhs.getValueTypeClass() != TypeClass_INTERFACE )
+ )
+ throw IllegalArgumentException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), NULL, 1 );
+
+ Reference< XInterface > lhs( _lhs, UNO_QUERY );
+ Reference< XInterface > rhs( _rhs, UNO_QUERY );
+ return lhs.get() < rhs.get();
+ }
+ };
+
+ //====================================================================
+ //= MapData
+ //====================================================================
+ class IMapModificationListener;
+ typedef ::std::vector< IMapModificationListener* > MapListeners;
+
+ typedef ::std::map< Any, Any, LessPredicateAdapter > KeyedValues;
+ struct MapData
+ {
+ Type m_aKeyType;
+ Type m_aValueType;
+ ::std::auto_ptr< KeyedValues > m_pValues;
+ ::boost::shared_ptr< IKeyPredicateLess > m_pKeyCompare;
+ bool m_bMutable;
+ MapListeners m_aModListeners;
+
+ MapData()
+ :m_bMutable( true )
+ {
+ }
+
+ MapData( const MapData& _source )
+ :m_aKeyType( _source.m_aKeyType )
+ ,m_aValueType( _source.m_aValueType )
+ ,m_pValues( new KeyedValues( *_source.m_pValues ) )
+ ,m_pKeyCompare( _source.m_pKeyCompare )
+ ,m_bMutable( false )
+ ,m_aModListeners()
+ {
+ }
+ private:
+ MapData& operator=( const MapData& _source ); // not implemented
+ };
+
+ //====================================================================
+ //= IMapModificationListener
+ //====================================================================
+ /** implemented by components who want to be notified of modifications in the MapData they work with
+ */
+ class SAL_NO_VTABLE IMapModificationListener
+ {
+ public:
+ /// called when the map was modified
+ virtual void mapModified() = 0;
+ virtual ~IMapModificationListener()
+ {
+ }
+ };
+
+ //====================================================================
+ //= MapData helpers
+ //====================================================================
+ //--------------------------------------------------------------------
+ static void lcl_registerMapModificationListener( MapData& _mapData, IMapModificationListener& _listener )
+ {
+ #if OSL_DEBUG_LEVEL > 0
+ for ( MapListeners::const_iterator lookup = _mapData.m_aModListeners.begin();
+ lookup != _mapData.m_aModListeners.end();
+ ++lookup
+ )
+ {
+ OSL_ENSURE( *lookup != &_listener, "lcl_registerMapModificationListener: this listener is already registered!" );
+ }
+ #endif
+ _mapData.m_aModListeners.push_back( &_listener );
+ }
+
+ //--------------------------------------------------------------------
+ static void lcl_revokeMapModificationListener( MapData& _mapData, IMapModificationListener& _listener )
+ {
+ for ( MapListeners::iterator lookup = _mapData.m_aModListeners.begin();
+ lookup != _mapData.m_aModListeners.end();
+ ++lookup
+ )
+ {
+ if ( *lookup == &_listener )
+ {
+ _mapData.m_aModListeners.erase( lookup );
+ return;
+ }
+ }
+ OSL_ENSURE( false, "lcl_revokeMapModificationListener: the listener is not registered!" );
+ }
+
+ //--------------------------------------------------------------------
+ static void lcl_notifyMapDataListeners_nothrow( const MapData& _mapData )
+ {
+ for ( MapListeners::const_iterator loop = _mapData.m_aModListeners.begin();
+ loop != _mapData.m_aModListeners.end();
+ ++loop
+ )
+ {
+ (*loop)->mapModified();
+ }
+ }
+
+ //====================================================================
+ //= EnumerableMap
+ //====================================================================
+ typedef ::cppu::WeakAggComponentImplHelper3 < XInitialization
+ , XEnumerableMap
+ , XServiceInfo
+ > Map_IFace;
+
+ class COMPHELPER_DLLPRIVATE EnumerableMap :public Map_IFace
+ ,public ComponentBase
+ {
+ protected:
+ EnumerableMap( const ComponentContext& _rContext );
+ virtual ~EnumerableMap();
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& aArguments ) throw (Exception, RuntimeException);
+
+ // XEnumerableMap
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createKeyEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createValueEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration > SAL_CALL createElementEnumeration( ::sal_Bool _Isolated ) throw (::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException);
+
+ // XMap
+ virtual Type SAL_CALL getKeyType() throw (RuntimeException);
+ virtual Type SAL_CALL getValueType() throw (RuntimeException);
+ virtual void SAL_CALL clear( ) throw (NoSupportException, RuntimeException);
+ virtual ::sal_Bool SAL_CALL containsKey( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual ::sal_Bool SAL_CALL containsValue( const Any& _value ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual Any SAL_CALL get( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException);
+ virtual Any SAL_CALL put( const Any& _key, const Any& _value ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, RuntimeException);
+ virtual Any SAL_CALL remove( const Any& _key ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException);
+
+ // XElementAccess (base of XMap)
+ virtual Type SAL_CALL getElementType() throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL hasElements() throw (RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (RuntimeException);
+ virtual Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (RuntimeException);
+
+ public:
+ // XServiceInfo, static version (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static( );
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static( );
+ static Reference< XInterface > SAL_CALL Create( const Reference< XComponentContext >& );
+
+ private:
+ void impl_initValues_throw( const Sequence< Pair< Any, Any > >& _initialValues );
+
+ /// throws a IllegalTypeException if the given value is not compatible with our ValueType
+ void impl_checkValue_throw( const Any& _value ) const;
+ void impl_checkKey_throw( const Any& _key ) const;
+ void impl_checkNaN_throw( const Any& _keyOrValue, const Type& _keyOrValueType ) const;
+ void impl_checkMutable_throw() const;
+
+ private:
+ ::osl::Mutex m_aMutex;
+ ComponentContext m_aContext;
+ MapData m_aData;
+
+ ::std::vector< ::com::sun::star::uno::WeakReference< XInterface > >
+ m_aDependentComponents;
+ };
+
+ //====================================================================
+ //= EnumerationType
+ //====================================================================
+ enum EnumerationType
+ {
+ eKeys, eValues, eBoth
+ };
+
+ //====================================================================
+ //= MapEnumerator
+ //====================================================================
+ class MapEnumerator : public IMapModificationListener
+ {
+ public:
+ MapEnumerator( ::cppu::OWeakObject& _rParent, MapData& _mapData, const EnumerationType _type )
+ :m_rParent( _rParent )
+ ,m_rMapData( _mapData )
+ ,m_eType( _type )
+ ,m_mapPos( _mapData.m_pValues->begin() )
+ ,m_disposed( false )
+ {
+ lcl_registerMapModificationListener( m_rMapData, *this );
+ }
+
+ virtual ~MapEnumerator()
+ {
+ dispose();
+ }
+
+ void dispose()
+ {
+ if ( !m_disposed )
+ {
+ lcl_revokeMapModificationListener( m_rMapData, *this );
+ m_disposed = true;
+ }
+ }
+
+ // XEnumeration equivalents
+ ::sal_Bool hasMoreElements();
+ Any nextElement();
+
+ // IMapModificationListener
+ virtual void mapModified();
+
+ private:
+ ::cppu::OWeakObject& m_rParent;
+ MapData& m_rMapData;
+ const EnumerationType m_eType;
+ KeyedValues::const_iterator m_mapPos;
+ bool m_disposed;
+
+ private:
+ MapEnumerator(); // not implemented
+ MapEnumerator( const MapEnumerator& ); // not implemented
+ MapEnumerator& operator=( const MapEnumerator& ); // not implemented
+ };
+
+ //====================================================================
+ //= MapEnumeration
+ //====================================================================
+ typedef ::cppu::WeakImplHelper1 < XEnumeration
+ > MapEnumeration_Base;
+ class MapEnumeration :public ComponentBase
+ ,public MapEnumeration_Base
+ {
+ public:
+ MapEnumeration( ::cppu::OWeakObject& _parentMap, MapData& _mapData, ::cppu::OBroadcastHelper& _rBHelper,
+ const EnumerationType _type, const bool _isolated )
+ :ComponentBase( _rBHelper, ComponentBase::NoInitializationNeeded() )
+ ,m_xKeepMapAlive( _parentMap )
+ ,m_pMapDataCopy( _isolated ? new MapData( _mapData ) : NULL )
+ ,m_aEnumerator( *this, _isolated ? *m_pMapDataCopy : _mapData, _type )
+ {
+ }
+
+ // XEnumeration
+ virtual ::sal_Bool SAL_CALL hasMoreElements( ) throw (RuntimeException);
+ virtual Any SAL_CALL nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException);
+
+ protected:
+ virtual ~MapEnumeration()
+ {
+ acquire();
+ {
+ ::osl::MutexGuard aGuard( getMutex() );
+ m_aEnumerator.dispose();
+ m_pMapDataCopy.reset();
+ }
+ }
+
+ private:
+ // sicne we share our mutex with the main map, we need to keep it alive as long as we live
+ Reference< XInterface > m_xKeepMapAlive;
+ ::std::auto_ptr< MapData > m_pMapDataCopy;
+ MapEnumerator m_aEnumerator;
+ };
+
+ //====================================================================
+ //= EnumerableMap
+ //====================================================================
+ //--------------------------------------------------------------------
+ EnumerableMap::EnumerableMap( const ComponentContext& _rContext )
+ :Map_IFace( m_aMutex )
+ ,ComponentBase( Map_IFace::rBHelper )
+ ,m_aContext( _rContext )
+ {
+ }
+
+ //--------------------------------------------------------------------
+ EnumerableMap::~EnumerableMap()
+ {
+ if ( !impl_isDisposed() )
+ {
+ acquire();
+ dispose();
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL EnumerableMap::initialize( const Sequence< Any >& _arguments ) throw (Exception, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this, ComponentMethodGuard::WithoutInit );
+ if ( impl_isInitialized_nothrow() )
+ throw AlreadyInitializedException();
+
+ sal_Int32 nArgumentCount = _arguments.getLength();
+ if ( ( nArgumentCount != 2 ) && ( nArgumentCount != 3 ) )
+ throw IllegalArgumentException();
+
+ Type aKeyType, aValueType;
+ if ( !( _arguments[0] >>= aKeyType ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "com.sun.star.uno.Type expected." ), *this, 1 );
+ if ( !( _arguments[1] >>= aValueType ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "com.sun.star.uno.Type expected." ), *this, 2 );
+
+ Sequence< Pair< Any, Any > > aInitialValues;
+ bool bMutable = true;
+ if ( nArgumentCount == 3 )
+ {
+ if ( !( _arguments[2] >>= aInitialValues ) )
+ throw IllegalArgumentException( ::rtl::OUString::createFromAscii( "[]com.sun.star.beans.Pair<any,any> expected." ), *this, 2 );
+ bMutable = false;
+ }
+
+ // for the value, anything is allowed, except VOID
+ if ( ( aValueType.getTypeClass() == TypeClass_VOID ) || ( aValueType.getTypeClass() == TypeClass_UNKNOWN ) )
+ throw IllegalTypeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported value type." ) ), *this );
+
+ // create the comparator for the KeyType, and throw if the type is not supported
+ TypeClass eKeyTypeClass = aKeyType.getTypeClass();
+ ::std::auto_ptr< IKeyPredicateLess > pComparator;
+ switch ( eKeyTypeClass )
+ {
+ case TypeClass_CHAR:
+ pComparator.reset( new ScalarPredicateLess< sal_Unicode >() );
+ break;
+ case TypeClass_BOOLEAN:
+ pComparator.reset( new ScalarPredicateLess< sal_Bool >() );
+ break;
+ case TypeClass_BYTE:
+ pComparator.reset( new ScalarPredicateLess< sal_Int8 >() );
+ break;
+ case TypeClass_SHORT:
+ pComparator.reset( new ScalarPredicateLess< sal_Int16 >() );
+ break;
+ case TypeClass_UNSIGNED_SHORT:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt16 >() );
+ break;
+ case TypeClass_LONG:
+ pComparator.reset( new ScalarPredicateLess< sal_Int32 >() );
+ break;
+ case TypeClass_UNSIGNED_LONG:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt32 >() );
+ break;
+ case TypeClass_HYPER:
+ pComparator.reset( new ScalarPredicateLess< sal_Int64 >() );
+ break;
+ case TypeClass_UNSIGNED_HYPER:
+ pComparator.reset( new ScalarPredicateLess< sal_uInt64 >() );
+ break;
+ case TypeClass_FLOAT:
+ pComparator.reset( new ScalarPredicateLess< float >() );
+ break;
+ case TypeClass_DOUBLE:
+ pComparator.reset( new ScalarPredicateLess< double >() );
+ break;
+ case TypeClass_STRING:
+ pComparator.reset( new StringPredicateLess() );
+ break;
+ case TypeClass_TYPE:
+ pComparator.reset( new TypePredicateLess() );
+ break;
+ case TypeClass_ENUM:
+ pComparator.reset( new EnumPredicateLess( aKeyType ) );
+ break;
+ case TypeClass_INTERFACE:
+ pComparator.reset( new InterfacePredicateLess() );
+ break;
+ default:
+ throw IllegalTypeException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Unsupported key type." ) ), *this );
+ }
+
+ // init members
+ m_aData.m_aKeyType = aKeyType;
+ m_aData.m_aValueType = aValueType;
+ m_aData.m_pKeyCompare = pComparator;
+ m_aData.m_pValues.reset( new KeyedValues( *m_aData.m_pKeyCompare ) );
+ m_aData.m_bMutable = bMutable;
+
+ if ( aInitialValues.getLength() )
+ impl_initValues_throw( aInitialValues );
+
+ setInitialized();
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_initValues_throw( const Sequence< Pair< Any, Any > >& _initialValues )
+ {
+ OSL_PRECOND( m_aData.m_pValues.get() && m_aData.m_pValues->empty(), "EnumerableMap::impl_initValues_throw: illegal call!" );
+ if ( !m_aData.m_pValues.get() || !m_aData.m_pValues->empty() )
+ throw RuntimeException();
+
+ const Pair< Any, Any >* mapping = _initialValues.getConstArray();
+ const Pair< Any, Any >* mappingEnd = mapping + _initialValues.getLength();
+ Any normalizedValue;
+ for ( ; mapping != mappingEnd; ++mapping )
+ {
+ impl_checkValue_throw( mapping->Second );
+ (*m_aData.m_pValues)[ mapping->First ] = mapping->Second;
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkValue_throw( const Any& _value ) const
+ {
+ if ( !_value.hasValue() )
+ // nothing to do, NULL values are always allowed, regardless of the ValueType
+ return;
+
+ TypeClass eAllowedTypeClass = m_aData.m_aValueType.getTypeClass();
+ bool bValid = false;
+
+ switch ( eAllowedTypeClass )
+ {
+ default:
+ bValid = ( _value.getValueTypeClass() == eAllowedTypeClass );
+ break;
+ case TypeClass_ANY:
+ bValid = true;
+ break;
+ case TypeClass_INTERFACE:
+ {
+ // special treatment: _value might contain the proper type, but the interface
+ // might actually be NULL. Which is still valid ...
+ if ( m_aData.m_aValueType.isAssignableFrom( _value.getValueType() ) )
+ // this also catches the special case where XFoo is our value type,
+ // and _value contains a NULL-reference to XFoo, or a derived type
+ bValid = true;
+ else
+ {
+ Reference< XInterface > xValue( _value, UNO_QUERY );
+ Any aTypedValue;
+ if ( xValue.is() )
+ // XInterface is not-NULL, but is X(ValueType) not-NULL, too?
+ xValue.set( xValue->queryInterface( m_aData.m_aValueType ), UNO_QUERY );
+ bValid = xValue.is();
+ }
+ }
+ break;
+ case TypeClass_EXCEPTION:
+ case TypeClass_STRUCT:
+ case TypeClass_UNION:
+ {
+ // values are accepted if and only if their type equals, or is derived from, our value type
+
+ if ( _value.getValueTypeClass() != eAllowedTypeClass )
+ bValid = false;
+ else
+ {
+ const TypeDescription aValueTypeDesc( _value.getValueType() );
+ const TypeDescription aRequiredTypeDesc( m_aData.m_aValueType );
+
+ const _typelib_CompoundTypeDescription* pValueCompoundTypeDesc =
+ reinterpret_cast< const _typelib_CompoundTypeDescription* >( aValueTypeDesc.get() );
+
+ while ( pValueCompoundTypeDesc )
+ {
+ if ( typelib_typedescription_equals( &pValueCompoundTypeDesc->aBase, aRequiredTypeDesc.get() ) )
+ break;
+ pValueCompoundTypeDesc = pValueCompoundTypeDesc->pBaseTypeDescription;
+ }
+ bValid = ( pValueCompoundTypeDesc != NULL );
+ }
+ }
+ break;
+ }
+
+ if ( !bValid )
+ {
+ ::rtl::OUStringBuffer aMessage;
+ aMessage.appendAscii( "Incompatible value type. Found '" );
+ aMessage.append( _value.getValueTypeName() );
+ aMessage.appendAscii( "', where '" );
+ aMessage.append( m_aData.m_aValueType.getTypeName() );
+ aMessage.appendAscii( "' (or compatible type) is expected." );
+ throw IllegalTypeException( aMessage.makeStringAndClear(), *const_cast< EnumerableMap* >( this ) );
+ }
+
+ impl_checkNaN_throw( _value, m_aData.m_aValueType );
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkNaN_throw( const Any& _keyOrValue, const Type& _keyOrValueType ) const
+ {
+ if ( ( _keyOrValueType.getTypeClass() == TypeClass_DOUBLE )
+ || ( _keyOrValueType.getTypeClass() == TypeClass_FLOAT )
+ )
+ {
+ double nValue(0);
+ if ( _keyOrValue >>= nValue )
+ if ( ::rtl::math::isNan( nValue ) )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NaN (not-a-number) not supported by this implementation." ) ),
+ *const_cast< EnumerableMap* >( this ), 0 );
+ // (note that the case of _key not containing a float/double value is handled in the
+ // respective IKeyPredicateLess implementation, so there's no need to handle this here.)
+ }
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkKey_throw( const Any& _key ) const
+ {
+ if ( !_key.hasValue() )
+ throw IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NULL keys not supported by this implementation." ) ),
+ *const_cast< EnumerableMap* >( this ), 0 );
+
+ impl_checkNaN_throw( _key, m_aData.m_aKeyType );
+ }
+
+ //--------------------------------------------------------------------
+ void EnumerableMap::impl_checkMutable_throw() const
+ {
+ if ( !m_aData.m_bMutable )
+ throw NoSupportException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "The map is immutable." ) ),
+ *const_cast< EnumerableMap* >( this ) );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createKeyEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eKeys, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createValueEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eValues, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XEnumeration > SAL_CALL EnumerableMap::createElementEnumeration( ::sal_Bool _Isolated ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return new MapEnumeration( *this, m_aData, getBroadcastHelper(), eBoth, _Isolated );
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getKeyType() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_aKeyType;
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getValueType() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_aValueType;
+ }
+
+ //--------------------------------------------------------------------
+ void SAL_CALL EnumerableMap::clear( ) throw (NoSupportException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+
+ m_aData.m_pValues->clear();
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::containsKey( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkKey_throw( _key );
+
+ KeyedValues::const_iterator pos = m_aData.m_pValues->find( _key );
+ return ( pos != m_aData.m_pValues->end() );
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::containsValue( const Any& _value ) throw (IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkValue_throw( _value );
+
+ for ( KeyedValues::const_iterator mapping = m_aData.m_pValues->begin();
+ mapping != m_aData.m_pValues->end();
+ ++mapping
+ )
+ {
+ if ( mapping->second == _value )
+ return sal_True;
+ }
+ return sal_False;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::get( const Any& _key ) throw (IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkKey_throw( _key );
+
+ KeyedValues::const_iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos == m_aData.m_pValues->end() )
+ throw NoSuchElementException( anyToString( _key ), *this );
+
+ return pos->second;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::put( const Any& _key, const Any& _value ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+ impl_checkKey_throw( _key );
+ impl_checkValue_throw( _value );
+
+ Any previousValue;
+
+ KeyedValues::iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos != m_aData.m_pValues->end() )
+ {
+ previousValue = pos->second;
+ pos->second = _value;
+ }
+ else
+ {
+ (*m_aData.m_pValues)[ _key ] = _value;
+ }
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+
+ return previousValue;
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL EnumerableMap::remove( const Any& _key ) throw (NoSupportException, IllegalTypeException, IllegalArgumentException, NoSuchElementException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ impl_checkMutable_throw();
+ impl_checkKey_throw( _key );
+
+ Any previousValue;
+
+ KeyedValues::iterator pos = m_aData.m_pValues->find( _key );
+ if ( pos != m_aData.m_pValues->end() )
+ {
+ previousValue = pos->second;
+ m_aData.m_pValues->erase( pos );
+ }
+
+ lcl_notifyMapDataListeners_nothrow( m_aData );
+
+ return previousValue;
+ }
+
+ //--------------------------------------------------------------------
+ Type SAL_CALL EnumerableMap::getElementType() throw (RuntimeException)
+ {
+ return ::cppu::UnoType< Pair< Any, Any > >::get();
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::hasElements() throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aData.m_pValues->empty();
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL EnumerableMap::getImplementationName( ) throw (RuntimeException)
+ {
+ return getImplementationName_static();
+ }
+
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL EnumerableMap::supportsService( const ::rtl::OUString& _serviceName ) throw (RuntimeException)
+ {
+ Sequence< ::rtl::OUString > aServices( getSupportedServiceNames() );
+ for ( sal_Int32 i=0; i<aServices.getLength(); ++i )
+ if ( _serviceName == aServices[i] )
+ return sal_True;
+ return sal_False;
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL EnumerableMap::getSupportedServiceNames( ) throw (RuntimeException)
+ {
+ return getSupportedServiceNames_static();
+ }
+
+ //--------------------------------------------------------------------
+ ::rtl::OUString SAL_CALL EnumerableMap::getImplementationName_static( )
+ {
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "org.openoffice.comp.comphelper.EnumerableMap" ) );
+ }
+
+ //--------------------------------------------------------------------
+ Sequence< ::rtl::OUString > SAL_CALL EnumerableMap::getSupportedServiceNames_static( )
+ {
+ Sequence< ::rtl::OUString > aServiceNames(1);
+ aServiceNames[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.container.EnumerableMap" ) );
+ return aServiceNames;
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XInterface > SAL_CALL EnumerableMap::Create( const Reference< XComponentContext >& _context )
+ {
+ return *new EnumerableMap( ComponentContext( _context ) );
+ }
+
+ //====================================================================
+ //= MapEnumerator
+ //====================================================================
+ //--------------------------------------------------------------------
+ ::sal_Bool MapEnumerator::hasMoreElements()
+ {
+ if ( m_disposed )
+ throw DisposedException( ::rtl::OUString(), m_rParent );
+ return m_mapPos != m_rMapData.m_pValues->end();
+ }
+
+ //--------------------------------------------------------------------
+ Any MapEnumerator::nextElement()
+ {
+ if ( m_disposed )
+ throw DisposedException( ::rtl::OUString(), m_rParent );
+ if ( m_mapPos == m_rMapData.m_pValues->end() )
+ throw NoSuchElementException( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "No more elements." ) ), m_rParent );
+
+ Any aNextElement;
+ switch ( m_eType )
+ {
+ case eKeys: aNextElement = m_mapPos->first; break;
+ case eValues: aNextElement = m_mapPos->second; break;
+ case eBoth: aNextElement <<= Pair< Any, Any >( m_mapPos->first, m_mapPos->second ); break;
+ }
+ ++m_mapPos;
+ return aNextElement;
+ }
+
+ //--------------------------------------------------------------------
+ void MapEnumerator::mapModified()
+ {
+ m_disposed = true;
+ }
+
+ //====================================================================
+ //= MapEnumeration - implementation
+ //====================================================================
+ //--------------------------------------------------------------------
+ ::sal_Bool SAL_CALL MapEnumeration::hasMoreElements( ) throw (RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aEnumerator.hasMoreElements();
+ }
+
+ //--------------------------------------------------------------------
+ Any SAL_CALL MapEnumeration::nextElement( ) throw (NoSuchElementException, WrappedTargetException, RuntimeException)
+ {
+ ComponentMethodGuard aGuard( *this );
+ return m_aEnumerator.nextElement();
+ }
+
+//........................................................................
+} // namespace comphelper
+//........................................................................
+
+void createRegistryInfo_Map()
+{
+ ::comphelper::module::OAutoRegistration< ::comphelper::EnumerableMap > aAutoRegistration;
+}
diff --git a/comphelper/source/container/makefile.mk b/comphelper/source/container/makefile.mk
index 2c63d2234a03..2c43a774b030 100644
--- a/comphelper/source/container/makefile.mk
+++ b/comphelper/source/container/makefile.mk
@@ -50,7 +50,8 @@ SLOFILES=\
$(SLO)$/containermultiplexer.obj \
$(SLO)$/IndexedPropertyValuesContainer.obj \
$(SLO)$/embeddedobjectcontainer.obj \
- $(SLO)$/NamedPropertyValuesContainer.obj
+ $(SLO)$/NamedPropertyValuesContainer.obj \
+ $(SLO)$/enumerablemap.obj
# --- Targets ----------------------------------
diff --git a/comphelper/source/inc/comphelper_module.hxx b/comphelper/source/inc/comphelper_module.hxx
new file mode 100644
index 000000000000..5bbac6f9efc6
--- /dev/null
+++ b/comphelper/source/inc/comphelper_module.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* 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_COMPHELPER_MODULE_HXX
+#define COMPHELPER_COMPHELPER_MODULE_HXX
+
+#include "comphelper/componentmodule.hxx"
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ DECLARE_COMPONENT_MODULE( ComphelperModule, ComphelperModuleClient )
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
+
+#endif // COMPHELPER_COMPHELPER_MODULE_HXX
diff --git a/comphelper/source/misc/comphelper_module.cxx b/comphelper/source/misc/comphelper_module.cxx
new file mode 100644
index 000000000000..08cb48b3ef42
--- /dev/null
+++ b/comphelper/source/misc/comphelper_module.cxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* 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.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ IMPLEMENT_COMPONENT_MODULE( ComphelperModule );
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
diff --git a/comphelper/source/misc/comphelper_services.cxx b/comphelper/source/misc/comphelper_services.cxx
new file mode 100644
index 000000000000..77ab145e2581
--- /dev/null
+++ b/comphelper/source/misc/comphelper_services.cxx
@@ -0,0 +1,74 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* 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.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
+//--------------------------------------------------------------------
+extern void createRegistryInfo_OPropertyBag();
+extern void createRegistryInfo_SequenceOutputStream();
+extern void createRegistryInfo_SequenceInputStream();
+extern void createRegistryInfo_UNOMemoryStream();
+extern void createRegistryInfo_IndexedPropertyValuesContainer();
+extern void createRegistryInfo_NamedPropertyValuesContainer();
+extern void createRegistryInfo_AnyCompareFactory();
+extern void createRegistryInfo_OfficeInstallationDirectories();
+extern void createRegistryInfo_OInstanceLocker();
+extern void createRegistryInfo_Map();
+
+//........................................................................
+namespace comphelper { namespace module
+{
+//........................................................................
+
+ static void initializeModule()
+ {
+ static bool bInitialized( false );
+ if ( !bInitialized )
+ {
+ ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() );
+ if ( !bInitialized )
+ {
+ createRegistryInfo_OPropertyBag();
+ createRegistryInfo_SequenceOutputStream();
+ createRegistryInfo_SequenceInputStream();
+ createRegistryInfo_UNOMemoryStream();
+ createRegistryInfo_IndexedPropertyValuesContainer();
+ createRegistryInfo_NamedPropertyValuesContainer();
+ createRegistryInfo_AnyCompareFactory();
+ createRegistryInfo_OfficeInstallationDirectories();
+ createRegistryInfo_OInstanceLocker();
+ createRegistryInfo_Map();
+ }
+ }
+ }
+
+//........................................................................
+} } // namespace comphelper::module
+//........................................................................
+
+IMPLEMENT_COMPONENT_LIBRARY_API( ::comphelper::module::ComphelperModule, ::comphelper::module::initializeModule )
diff --git a/comphelper/source/misc/componentbase.cxx b/comphelper/source/misc/componentbase.cxx
new file mode 100644
index 000000000000..bf230f59b132
--- /dev/null
+++ b/comphelper/source/misc/componentbase.cxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2009 by Sun Microsystems, Inc.
+*
+* 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.
+************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/componentbase.hxx"
+
+/** === begin UNO includes === **/
+#include <com/sun/star/lang/NotInitializedException.hpp>
+#include <com/sun/star/lang/DisposedException.hpp>
+/** === end UNO includes === **/
+
+//........................................................................
+namespace comphelper
+{
+//........................................................................
+
+ /** === begin UNO using === **/
+ using ::com::sun::star::lang::NotInitializedException;
+ using ::com::sun::star::lang::DisposedException;
+ using ::com::sun::star::uno::Reference;
+ using ::com::sun::star::uno::XInterface;
+ /** === end UNO using === **/
+
+ //====================================================================
+ //= ComponentBase
+ //====================================================================
+ //--------------------------------------------------------------------
+ void ComponentBase::impl_checkDisposed_throw() const
+ {
+ if ( m_rBHelper.bDisposed )
+ throw DisposedException( ::rtl::OUString(), getComponent() );
+ }
+
+ //--------------------------------------------------------------------
+ void ComponentBase::impl_checkInitialized_throw() const
+ {
+ if ( !m_bInitialized )
+ throw NotInitializedException( ::rtl::OUString(), getComponent() );
+ }
+
+ //--------------------------------------------------------------------
+ Reference< XInterface > ComponentBase::getComponent() const
+ {
+ return NULL;
+ }
+
+//........................................................................
+} // namespace comphelper
+//........................................................................
diff --git a/comphelper/source/misc/docpasswordhelper.cxx b/comphelper/source/misc/docpasswordhelper.cxx
new file mode 100644
index 000000000000..1f362c02f881
--- /dev/null
+++ b/comphelper/source/misc/docpasswordhelper.cxx
@@ -0,0 +1,152 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordhelper.cxx,v $
+ * $Revision: 1.1 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/docpasswordhelper.hxx"
+#include <com/sun/star/task/XInteractionHandler.hpp>
+#include "comphelper/mediadescriptor.hxx"
+
+using ::rtl::OUString;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::UNO_SET_THROW;
+using ::com::sun::star::task::PasswordRequestMode;
+using ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER;
+using ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER;
+using ::com::sun::star::task::XInteractionHandler;
+using ::com::sun::star::task::XInteractionRequest;
+
+namespace comphelper {
+
+// ============================================================================
+
+IDocPasswordVerifier::~IDocPasswordVerifier()
+{
+}
+
+// ============================================================================
+
+/*static*/ OUString DocPasswordHelper::requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ const OUString& rMediaPassword,
+ const Reference< XInteractionHandler >& rxInteractHandler,
+ const OUString& rDocumentName,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< OUString >* pDefaultPasswords,
+ bool* pbIsDefaultPassword )
+{
+ OUString aPassword;
+ DocPasswordVerifierResult eResult = DocPasswordVerifierResult_WRONG_PASSWORD;
+
+ // first, try provided default passwords
+ if( pbIsDefaultPassword )
+ *pbIsDefaultPassword = false;
+ if( pDefaultPasswords )
+ {
+ for( ::std::vector< OUString >::const_iterator aIt = pDefaultPasswords->begin(), aEnd = pDefaultPasswords->end(); (eResult == DocPasswordVerifierResult_WRONG_PASSWORD) && (aIt != aEnd); ++aIt )
+ {
+ aPassword = *aIt;
+ OSL_ENSURE( aPassword.getLength() > 0, "DocPasswordHelper::requestAndVerifyDocPassword - unexpected empty default password" );
+ if( aPassword.getLength() > 0 )
+ {
+ eResult = rVerifier.verifyPassword( aPassword );
+ if( pbIsDefaultPassword )
+ *pbIsDefaultPassword = eResult == DocPasswordVerifierResult_OK;
+ }
+ }
+ }
+
+ // try media password (skip, if result is OK or ABORT)
+ if( eResult == DocPasswordVerifierResult_WRONG_PASSWORD )
+ {
+ aPassword = rMediaPassword;
+ if( aPassword.getLength() > 0 )
+ eResult = rVerifier.verifyPassword( aPassword );
+ }
+
+ // request a password (skip, if result is OK or ABORT)
+ if( (eResult == DocPasswordVerifierResult_WRONG_PASSWORD) && rxInteractHandler.is() ) try
+ {
+ PasswordRequestMode eRequestMode = PasswordRequestMode_PASSWORD_ENTER;
+ while( eResult == DocPasswordVerifierResult_WRONG_PASSWORD )
+ {
+ DocPasswordRequest* pRequest = new DocPasswordRequest( eRequestType, eRequestMode, rDocumentName );
+ Reference< XInteractionRequest > xRequest( pRequest );
+ rxInteractHandler->handle( xRequest );
+ if( pRequest->isPassword() )
+ {
+ aPassword = pRequest->getPassword();
+ if( aPassword.getLength() > 0 )
+ eResult = rVerifier.verifyPassword( aPassword );
+ }
+ else
+ {
+ eResult = DocPasswordVerifierResult_ABORT;
+ }
+ eRequestMode = PasswordRequestMode_PASSWORD_REENTER;
+ }
+ }
+ catch( Exception& )
+ {
+ }
+
+ return (eResult == DocPasswordVerifierResult_OK) ? aPassword : OUString();
+}
+
+/*static*/ OUString DocPasswordHelper::requestAndVerifyDocPassword(
+ IDocPasswordVerifier& rVerifier,
+ MediaDescriptor& rMediaDesc,
+ DocPasswordRequestType eRequestType,
+ const ::std::vector< OUString >* pDefaultPasswords )
+{
+ OUString aMediaPassword = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_PASSWORD(), OUString() );
+ Reference< XInteractionHandler > xInteractHandler = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_INTERACTIONHANDLER(), Reference< XInteractionHandler >() );
+ OUString aDocumentName = rMediaDesc.getUnpackedValueOrDefault(
+ MediaDescriptor::PROP_URL(), OUString() );
+
+ bool bIsDefaultPassword = false;
+ OUString aPassword = requestAndVerifyDocPassword(
+ rVerifier, aMediaPassword, xInteractHandler, aDocumentName, eRequestType, pDefaultPasswords, &bIsDefaultPassword );
+
+ // insert valid password into media descriptor (but not a default password)
+ if( (aPassword.getLength() > 0) && !bIsDefaultPassword )
+ rMediaDesc[ MediaDescriptor::PROP_PASSWORD() ] <<= aPassword;
+
+ return aPassword;
+}
+
+// ============================================================================
+
+} // namespace comphelper
+
diff --git a/comphelper/source/misc/docpasswordrequest.cxx b/comphelper/source/misc/docpasswordrequest.cxx
new file mode 100644
index 000000000000..187642e10fe9
--- /dev/null
+++ b/comphelper/source/misc/docpasswordrequest.cxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: docpasswordrequest.cxx,v $
+ * $Revision: 1.1 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper/docpasswordrequest.hxx"
+#include <com/sun/star/task/DocumentMSPasswordRequest.hpp>
+#include <com/sun/star/task/DocumentPasswordRequest.hpp>
+#include <com/sun/star/task/XInteractionAbort.hpp>
+#include <com/sun/star/task/XInteractionPassword.hpp>
+
+using ::rtl::OUString;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::RuntimeException;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::XInterface;
+using ::com::sun::star::task::InteractionClassification_QUERY;
+using ::com::sun::star::task::DocumentMSPasswordRequest;
+using ::com::sun::star::task::DocumentPasswordRequest;
+using ::com::sun::star::task::PasswordRequestMode;
+using ::com::sun::star::task::XInteractionAbort;
+using ::com::sun::star::task::XInteractionContinuation;
+using ::com::sun::star::task::XInteractionPassword;
+
+namespace comphelper {
+
+// ============================================================================
+
+class AbortContinuation : public ::cppu::WeakImplHelper1< XInteractionAbort >
+{
+public:
+ inline explicit AbortContinuation() : mbSelected( false ) {}
+
+ inline bool isSelected() const { return mbSelected; }
+ inline void reset() { mbSelected = false; }
+
+ virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
+
+private:
+ bool mbSelected;
+};
+
+// ============================================================================
+
+class PasswordContinuation : public ::cppu::WeakImplHelper1< XInteractionPassword >
+{
+public:
+ inline explicit PasswordContinuation() : mbSelected( false ) {}
+
+ inline bool isSelected() const { return mbSelected; }
+ inline void reset() { mbSelected = false; }
+
+ virtual void SAL_CALL select() throw( RuntimeException ) { mbSelected = true; }
+ virtual void SAL_CALL setPassword( const OUString& rPass ) throw( RuntimeException ) { maPassword = rPass; }
+ virtual OUString SAL_CALL getPassword() throw( RuntimeException ) { return maPassword; }
+
+private:
+ OUString maPassword;
+ bool mbSelected;
+};
+
+// ============================================================================
+
+DocPasswordRequest::DocPasswordRequest( DocPasswordRequestType eType,
+ PasswordRequestMode eMode, const OUString& rDocumentName )
+{
+ switch( eType )
+ {
+ case DocPasswordRequestType_STANDARD:
+ {
+ DocumentPasswordRequest aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName );
+ maRequest <<= aRequest;
+ }
+ break;
+ case DocPasswordRequestType_MS:
+ {
+ DocumentMSPasswordRequest aRequest( OUString(), Reference< XInterface >(),
+ InteractionClassification_QUERY, eMode, rDocumentName );
+ maRequest <<= aRequest;
+ }
+ break;
+ /* no 'default', so compilers will complain about missing
+ implementation of a new enum value. */
+ }
+
+ maContinuations.realloc( 2 );
+ maContinuations[ 0 ].set( mpAbort = new AbortContinuation );
+ maContinuations[ 1 ].set( mpPassword = new PasswordContinuation );
+}
+
+DocPasswordRequest::~DocPasswordRequest()
+{
+}
+
+bool DocPasswordRequest::isAbort() const
+{
+ return mpAbort->isSelected();
+}
+
+bool DocPasswordRequest::isPassword() const
+{
+ return mpPassword->isSelected();
+}
+
+OUString DocPasswordRequest::getPassword() const
+{
+ return mpPassword->getPassword();
+}
+
+Any SAL_CALL DocPasswordRequest::getRequest() throw( RuntimeException )
+{
+ return maRequest;
+}
+
+Sequence< Reference< XInteractionContinuation > > SAL_CALL DocPasswordRequest::getContinuations() throw( RuntimeException )
+{
+ return maContinuations;
+}
+
+// ============================================================================
+
+} // namespace comphelper
+
diff --git a/comphelper/source/misc/documentiologring.cxx b/comphelper/source/misc/documentiologring.cxx
new file mode 100644
index 000000000000..7969b938e108
--- /dev/null
+++ b/comphelper/source/misc/documentiologring.cxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: documentiologring.hxx,v $
+ * $Revision: 1.0 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include <com/sun/star/frame/DoubleInitializationException.hpp>
+#include <com/sun/star/lang/IllegalArgumentException.hpp>
+
+#include "documentiologring.hxx"
+
+using namespace ::com::sun::star;
+
+namespace comphelper
+{
+
+// ----------------------------------------------------------
+OSimpleLogRing::OSimpleLogRing( const uno::Reference< uno::XComponentContext >& /*xContext*/ )
+: m_aMessages( SIMPLELOGRING_SIZE )
+, m_bInitialized( sal_False )
+, m_bFull( sal_False )
+, m_nPos( 0 )
+{
+}
+
+// ----------------------------------------------------------
+OSimpleLogRing::~OSimpleLogRing()
+{
+}
+
+// ----------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL OSimpleLogRing::impl_staticGetSupportedServiceNames()
+{
+ uno::Sequence< rtl::OUString > aResult( 1 );
+ aResult[0] = impl_staticGetServiceName();
+ return aResult;
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OSimpleLogRing::impl_staticGetImplementationName()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.logging.SimpleLogRing" ) );
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OSimpleLogRing::impl_staticGetSingletonName()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.logging.DocumentIOLogRing" ) );
+}
+
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OSimpleLogRing::impl_staticGetServiceName()
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.logging.SimpleLogRing" ) );
+}
+
+// ----------------------------------------------------------
+uno::Reference< uno::XInterface > SAL_CALL OSimpleLogRing::impl_staticCreateSelfInstance( const uno::Reference< uno::XComponentContext >& rxContext )
+{
+ return static_cast< cppu::OWeakObject* >( new OSimpleLogRing( rxContext ) );
+}
+
+// XSimpleLogRing
+// ----------------------------------------------------------
+void SAL_CALL OSimpleLogRing::logString( const ::rtl::OUString& aMessage ) throw (uno::RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ m_aMessages[m_nPos] = aMessage;
+ if ( ++m_nPos >= m_aMessages.getLength() )
+ {
+ m_nPos = 0;
+ m_bFull = sal_True;
+ }
+
+ // if used once then default initialized
+ m_bInitialized = sal_True;
+}
+
+// ----------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL OSimpleLogRing::getCollectedLog() throw (uno::RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+
+ sal_Int32 nResLen = m_bFull ? m_aMessages.getLength() : m_nPos;
+ sal_Int32 nStart = m_bFull ? m_nPos : 0;
+ uno::Sequence< ::rtl::OUString > aResult( nResLen );
+
+ for ( sal_Int32 nInd = 0; nInd < nResLen; nInd++ )
+ aResult[nInd] = m_aMessages[ ( nStart + nInd ) % m_aMessages.getLength() ];
+
+ // if used once then default initialized
+ m_bInitialized = sal_True;
+
+ return aResult;
+}
+
+// XInitialization
+// ----------------------------------------------------------
+void SAL_CALL OSimpleLogRing::initialize( const uno::Sequence< uno::Any >& aArguments ) throw (uno::Exception, uno::RuntimeException)
+{
+ ::osl::MutexGuard aGuard( m_aMutex );
+ if ( m_bInitialized )
+ throw frame::DoubleInitializationException();
+
+ if ( !m_refCount )
+ throw uno::RuntimeException(); // the object must be refcounted already!
+
+ sal_Int32 nLen = 0;
+ if ( aArguments.getLength() == 1 && ( aArguments[0] >>= nLen ) && nLen )
+ m_aMessages.realloc( nLen );
+ else
+ throw lang::IllegalArgumentException(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Nonnull size is expected as the first argument!" ) ),
+ uno::Reference< uno::XInterface >(),
+ 0 );
+
+ m_bInitialized = sal_True;
+}
+
+// XServiceInfo
+// ----------------------------------------------------------
+::rtl::OUString SAL_CALL OSimpleLogRing::getImplementationName() throw (uno::RuntimeException)
+{
+ return impl_staticGetImplementationName();
+}
+
+// ----------------------------------------------------------
+::sal_Bool SAL_CALL OSimpleLogRing::supportsService( const ::rtl::OUString& aServiceName ) throw (uno::RuntimeException)
+{
+ const uno::Sequence< rtl::OUString > & aSupportedNames = impl_staticGetSupportedServiceNames();
+ for ( sal_Int32 nInd = 0; nInd < aSupportedNames.getLength(); nInd++ )
+ {
+ if ( aSupportedNames[ nInd ].equals( aServiceName ) )
+ return sal_True;
+ }
+
+ return sal_False;
+}
+
+// ----------------------------------------------------------
+uno::Sequence< ::rtl::OUString > SAL_CALL OSimpleLogRing::getSupportedServiceNames() throw (uno::RuntimeException)
+{
+ return impl_staticGetSupportedServiceNames();
+}
+
+} // namespace comphelper
+
diff --git a/comphelper/source/misc/documentiologring.hxx b/comphelper/source/misc/documentiologring.hxx
new file mode 100644
index 000000000000..ae7d2a6eaf19
--- /dev/null
+++ b/comphelper/source/misc/documentiologring.hxx
@@ -0,0 +1,92 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: documentiologring.hxx,v $
+ * $Revision: 1.0 $
+ *
+ * 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 __DOCUMENTIOLOGRING_HXX_
+#define __DOCUMENTIOLOGRING_HXX_
+
+#include <com/sun/star/logging/XSimpleLogRing.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+
+#include <osl/mutex.hxx>
+#include <cppuhelper/implbase3.hxx>
+
+#define SIMPLELOGRING_SIZE 256
+
+namespace comphelper
+{
+
+class OSimpleLogRing : public ::cppu::WeakImplHelper3< ::com::sun::star::logging::XSimpleLogRing,
+ ::com::sun::star::lang::XInitialization,
+ ::com::sun::star::lang::XServiceInfo >
+{
+ ::osl::Mutex m_aMutex;
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > m_aMessages;
+
+ sal_Bool m_bInitialized;
+ sal_Bool m_bFull;
+ sal_Int32 m_nPos;
+
+public:
+ OSimpleLogRing( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext );
+ virtual ~OSimpleLogRing();
+
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
+ impl_staticGetSupportedServiceNames();
+
+ static ::rtl::OUString SAL_CALL impl_staticGetImplementationName();
+
+ static ::rtl::OUString SAL_CALL impl_staticGetSingletonName();
+
+ static ::rtl::OUString SAL_CALL impl_staticGetServiceName();
+
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ impl_staticCreateSelfInstance(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
+
+// XSimpleLogRing
+ virtual void SAL_CALL logString( const ::rtl::OUString& aMessage ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getCollectedLog() throw (::com::sun::star::uno::RuntimeException);
+
+// XInitialization
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments ) throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+// XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+
+};
+
+} // namespace comphelper
+
+#endif
+
diff --git a/comphelper/source/misc/facreg.cxx b/comphelper/source/misc/facreg.cxx
deleted file mode 100644
index 9ad0e12597b0..000000000000
--- a/comphelper/source/misc/facreg.cxx
+++ /dev/null
@@ -1,246 +0,0 @@
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2008 by Sun Microsystems, Inc.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * $RCSfile: facreg.cxx,v $
- * $Revision: 1.15 $
- *
- * 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.
- *
- ************************************************************************/
-
-// MARKER(update_precomp.py): autogen include statement, do not remove
-#include "precompiled_comphelper.hxx"
-
-#include <string.h>
-#include "sal/types.h"
-#include <com/sun/star/registry/XRegistryKey.hpp>
-#include <osl/diagnose.h>
-
-#include "rtl/ustrbuf.hxx"
-
-#include <cppuhelper/factory.hxx>
-#include <uno/lbnames.h>
-
-#include "instancelocker.hxx"
-
-using namespace rtl;
-using namespace com::sun::star;
-
-// IndexedPropertyValuesContainer
-extern uno::Sequence< OUString > SAL_CALL IndexedPropertyValuesContainer_getSupportedServiceNames() throw();
-extern OUString SAL_CALL IndexedPropertyValuesContainer_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL IndexedPropertyValuesContainer_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// NamedPropertyValuesContainer
-extern uno::Sequence< OUString > SAL_CALL NamedPropertyValuesContainer_getSupportedServiceNames() throw();
-extern OUString SAL_CALL NamedPropertyValuesContainer_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL NamedPropertyValuesContainer_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// AnyCompareFactory
-extern uno::Sequence< OUString > SAL_CALL AnyCompareFactory_getSupportedServiceNames() throw();
-extern OUString SAL_CALL AnyCompareFactory_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL AnyCompareFactory_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// OfficeInstallationDirectories
-extern uno::Sequence< OUString > SAL_CALL OfficeInstallationDirectories_getSupportedServiceNames() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getImplementationName() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getSingletonName() throw();
-extern OUString SAL_CALL OfficeInstallationDirectories_getSingletonServiceName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL OfficeInstallationDirectories_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-// SequenceInputStreamService
-extern uno::Sequence< OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames() throw();
-extern OUString SAL_CALL SequenceInputStreamService_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-
-//SequenceOutputStreamService
-extern uno::Sequence< OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames() throw();
-extern OUString SAL_CALL SequenceOutputStreamService_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception );
-
-namespace comphelper
-{
-// UNOMemoryStream
-extern uno::Sequence< OUString > SAL_CALL UNOMemoryStream_getSupportedServiceNames() throw();
-extern OUString SAL_CALL UNOMemoryStream_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL UNOMemoryStream_createInstance(const uno::Reference< uno::XComponentContext > & rxContext) throw( uno::Exception );
-}
-
-// PropertyBag
-extern uno::Sequence< OUString > SAL_CALL PropertyBag_getSupportedServiceNames() throw();
-extern OUString SAL_CALL PropertyBag_getImplementationName() throw();
-extern uno::Reference< uno::XInterface > SAL_CALL PropertyBag_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception );
-
-//
-static void writeInfo( registry::XRegistryKey * pRegistryKey, const OUString& rImplementationName, const uno::Sequence< OUString >& rServices )
-{
- uno::Reference< registry::XRegistryKey > xNewKey(
- pRegistryKey->createKey(
- OUString( RTL_CONSTASCII_USTRINGPARAM("/") ) + rImplementationName + OUString(RTL_CONSTASCII_USTRINGPARAM( "/UNO/SERVICES") ) ) );
-
- for( sal_Int32 i = 0; i < rServices.getLength(); i++ )
- xNewKey->createKey( rServices.getConstArray()[i]);
-}
-
-static void registerSingleton( registry::XRegistryKey * pRegistryKey, const OUString& rImplementationName, const OUString& rSingletonName, const OUString& rServiceName )
-{
- OUStringBuffer aSingletonKeyName;
- aSingletonKeyName.appendAscii( "/" );
- aSingletonKeyName.append( rImplementationName );
- aSingletonKeyName.appendAscii( "/UNO/SINGLETONS/" );
- aSingletonKeyName.append( rSingletonName );
-
- uno::Reference< registry::XRegistryKey > xNewKey( pRegistryKey->createKey( aSingletonKeyName.makeStringAndClear() ) );
- OSL_ENSURE( xNewKey.is(), "could not create a registry key !");
-
- xNewKey->setStringValue( rServiceName );
-}
-
-//
-extern "C"
-{
-
-SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironment( const sal_Char ** ppEnvTypeName, uno_Environment ** )
-{
- *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
-}
-
-SAL_DLLPUBLIC_EXPORT sal_Bool SAL_CALL component_writeInfo( void *, void * pRegistryKey )
-{
- if( pRegistryKey )
- {
- try
- {
- registry::XRegistryKey *pKey = reinterpret_cast< registry::XRegistryKey * >( pRegistryKey );
-
- // IndexedPropertyValuesContainer
- writeInfo( pKey, IndexedPropertyValuesContainer_getImplementationName(), IndexedPropertyValuesContainer_getSupportedServiceNames() );
- // NamedPropertyValuesContainer
- writeInfo( pKey, NamedPropertyValuesContainer_getImplementationName(), NamedPropertyValuesContainer_getSupportedServiceNames() );
- // AnyCompareFactory
- writeInfo( pKey, AnyCompareFactory_getImplementationName(), AnyCompareFactory_getSupportedServiceNames() );
- // OfficeInstallationDirectories
- writeInfo( pKey, OfficeInstallationDirectories_getImplementationName(), OfficeInstallationDirectories_getSupportedServiceNames() );
- registerSingleton( pKey, OfficeInstallationDirectories_getImplementationName(), OfficeInstallationDirectories_getSingletonName(), OfficeInstallationDirectories_getSingletonServiceName() );
-
- // InstanceLocker
- writeInfo( pKey, OInstanceLocker::impl_staticGetImplementationName(), OInstanceLocker::impl_staticGetSupportedServiceNames() );
- // SequenceInputStreamService
- writeInfo( pKey, SequenceInputStreamService_getImplementationName(), SequenceInputStreamService_getSupportedServiceNames() );
- // SequenceOutputStreamService
- writeInfo( pKey, SequenceOutputStreamService_getImplementationName(), SequenceOutputStreamService_getSupportedServiceNames() );
- // UNOMemoryStream
- writeInfo( pKey, comphelper::UNOMemoryStream_getImplementationName(), comphelper::UNOMemoryStream_getSupportedServiceNames() );
- // PropertyBag
- writeInfo( pKey, PropertyBag_getImplementationName(), PropertyBag_getSupportedServiceNames() );
- }
- catch (registry::InvalidRegistryException &)
- {
- OSL_ENSURE( sal_False, "### InvalidRegistryException!" );
- }
- }
- return sal_True;
-}
-
-SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( const sal_Char * pImplName, void * pServiceManager, void * )
-{
- void * pRet = 0;
- if( pServiceManager )
- {
- uno::Reference<lang::XSingleComponentFactory> xComponentFactory;
-
- const sal_Int32 nImplNameLen = strlen( pImplName );
- if( IndexedPropertyValuesContainer_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- IndexedPropertyValuesContainer_createInstance,
- IndexedPropertyValuesContainer_getImplementationName(),
- IndexedPropertyValuesContainer_getSupportedServiceNames() );
- }
- else if( NamedPropertyValuesContainer_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- NamedPropertyValuesContainer_createInstance,
- NamedPropertyValuesContainer_getImplementationName(),
- NamedPropertyValuesContainer_getSupportedServiceNames() );
- }
- else if( AnyCompareFactory_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- AnyCompareFactory_createInstance,
- AnyCompareFactory_getImplementationName(),
- AnyCompareFactory_getSupportedServiceNames() );
- }
- else if( OfficeInstallationDirectories_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- OfficeInstallationDirectories_createInstance,
- OfficeInstallationDirectories_getImplementationName(),
- OfficeInstallationDirectories_getSupportedServiceNames() );
- }
- else if( OInstanceLocker::impl_staticGetImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- OInstanceLocker::impl_staticCreateSelfInstance,
- OInstanceLocker::impl_staticGetImplementationName(),
- OInstanceLocker::impl_staticGetSupportedServiceNames() );
- }
- else if( SequenceInputStreamService_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- SequenceInputStreamService_createInstance,
- SequenceInputStreamService_getImplementationName(),
- SequenceInputStreamService_getSupportedServiceNames() );
- }
- else if( comphelper::UNOMemoryStream_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- comphelper::UNOMemoryStream_createInstance,
- comphelper::UNOMemoryStream_getImplementationName(),
- comphelper::UNOMemoryStream_getSupportedServiceNames() );
- }
- else if ( SequenceOutputStreamService_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- SequenceOutputStreamService_createInstance,
- SequenceOutputStreamService_getImplementationName(),
- SequenceOutputStreamService_getSupportedServiceNames() );
- }
- else if ( PropertyBag_getImplementationName().equalsAsciiL( pImplName, nImplNameLen ) )
- {
- xComponentFactory = ::cppu::createSingleComponentFactory(
- PropertyBag_createInstance,
- PropertyBag_getImplementationName(),
- PropertyBag_getSupportedServiceNames() );
- }
-
- if( xComponentFactory.is())
- {
- xComponentFactory->acquire();
- pRet = xComponentFactory.get();
- }
- }
- return pRet;
-}
-
-}
diff --git a/comphelper/source/misc/instancelocker.cxx b/comphelper/source/misc/instancelocker.cxx
index 6046b7c5e6f5..11a590c618c3 100644
--- a/comphelper/source/misc/instancelocker.cxx
+++ b/comphelper/source/misc/instancelocker.cxx
@@ -30,6 +30,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
#include <com/sun/star/util/XCloseBroadcaster.hpp>
#include <com/sun/star/util/XCloseable.hpp>
#include <com/sun/star/lang/DisposedException.hpp>
@@ -205,14 +208,14 @@ void SAL_CALL OInstanceLocker::initialize( const uno::Sequence< uno::Any >& aArg
::rtl::OUString SAL_CALL OInstanceLocker::getImplementationName( )
throw (uno::RuntimeException)
{
- return impl_staticGetImplementationName();
+ return getImplementationName_static();
}
// --------------------------------------------------------
::sal_Bool SAL_CALL OInstanceLocker::supportsService( const ::rtl::OUString& ServiceName )
throw (uno::RuntimeException)
{
- uno::Sequence< ::rtl::OUString > aSeq = impl_staticGetSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > aSeq = getSupportedServiceNames();
for ( sal_Int32 nInd = 0; nInd < aSeq.getLength(); nInd++ )
if ( ServiceName.compareTo( aSeq[nInd] ) == 0 )
@@ -225,25 +228,25 @@ void SAL_CALL OInstanceLocker::initialize( const uno::Sequence< uno::Any >& aArg
uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::getSupportedServiceNames()
throw (uno::RuntimeException)
{
- return impl_staticGetSupportedServiceNames();
+ return getSupportedServiceNames_static();
}
// Static methods
// --------------------------------------------------------
-uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::impl_staticGetSupportedServiceNames()
+uno::Sequence< ::rtl::OUString > SAL_CALL OInstanceLocker::getSupportedServiceNames_static()
{
const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.embed.InstanceLocker" ) );
return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
}
// --------------------------------------------------------
-::rtl::OUString SAL_CALL OInstanceLocker::impl_staticGetImplementationName()
+::rtl::OUString SAL_CALL OInstanceLocker::getImplementationName_static()
{
return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.embed.InstanceLocker" ) );
}
// --------------------------------------------------------
-uno::Reference< uno::XInterface > SAL_CALL OInstanceLocker::impl_staticCreateSelfInstance(
+uno::Reference< uno::XInterface > SAL_CALL OInstanceLocker::Create(
const uno::Reference< uno::XComponentContext >& rxContext )
{
return static_cast< cppu::OWeakObject * >( new OInstanceLocker( rxContext ) );
@@ -506,3 +509,7 @@ sal_Bool OLockListener::Init()
return sal_True;
}
+void createRegistryInfo_OInstanceLocker()
+{
+ static ::comphelper::module::OAutoRegistration< OInstanceLocker > aAutoRegistration;
+}
diff --git a/comphelper/source/misc/instancelocker.hxx b/comphelper/source/misc/instancelocker.hxx
index 1f7d34a64652..637cc9fc4579 100644
--- a/comphelper/source/misc/instancelocker.hxx
+++ b/comphelper/source/misc/instancelocker.hxx
@@ -70,12 +70,12 @@ public:
~OInstanceLocker();
static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
- impl_staticGetSupportedServiceNames();
+ getSupportedServiceNames_static();
- static ::rtl::OUString SAL_CALL impl_staticGetImplementationName();
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
- impl_staticCreateSelfInstance(
+ Create(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext );
// XComponent
diff --git a/comphelper/source/misc/makefile.mk b/comphelper/source/misc/makefile.mk
index 78f79c806511..d0ffc368fd20 100644
--- a/comphelper/source/misc/makefile.mk
+++ b/comphelper/source/misc/makefile.mk
@@ -57,9 +57,11 @@ SLOFILES= \
$(SLO)$/componentcontext.obj \
$(SLO)$/componentmodule.obj \
$(SLO)$/configurationhelper.obj \
+ $(SLO)$/docpasswordhelper.obj \
+ $(SLO)$/docpasswordrequest.obj \
$(SLO)$/documentinfo.obj \
+ $(SLO)$/documentiologring.obj \
$(SLO)$/evtlistenerhlp.obj \
- $(SLO)$/facreg.obj \
$(SLO)$/ihwrapnofilter.obj \
$(SLO)$/instancelocker.obj \
$(SLO)$/interaction.obj \
@@ -89,6 +91,9 @@ SLOFILES= \
$(SLO)$/uieventslogger.obj \
$(SLO)$/weakeventlistener.obj \
$(SLO)$/weak.obj \
+ $(SLO)$/comphelper_module.obj \
+ $(SLO)$/comphelper_services.obj \
+ $(SLO)$/componentbase.obj \
# --- Targets ----------------------------------
diff --git a/comphelper/source/misc/mediadescriptor.cxx b/comphelper/source/misc/mediadescriptor.cxx
index da0dd71a5520..44578f840da9 100644
--- a/comphelper/source/misc/mediadescriptor.cxx
+++ b/comphelper/source/misc/mediadescriptor.cxx
@@ -114,6 +114,12 @@ namespace css = ::com::sun::star;
/*-----------------------------------------------
10.03.2004 07:35
-----------------------------------------------*/
+const ::rtl::OUString& MediaDescriptor::PROP_ABORTED()
+{
+ static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("Aborted"));
+ return sProp;
+}
+
const ::rtl::OUString& MediaDescriptor::PROP_ASTEMPLATE()
{
static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("AsTemplate"));
@@ -126,6 +132,12 @@ const ::rtl::OUString& MediaDescriptor::PROP_CHARACTERSET()
return sProp;
}
+const ::rtl::OUString& MediaDescriptor::PROP_COMPONENTDATA()
+{
+ static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("ComponentData"));
+ return sProp;
+}
+
const ::rtl::OUString& MediaDescriptor::PROP_DEEPDETECTION()
{
static const ::rtl::OUString sProp(RTL_CONSTASCII_USTRINGPARAM("DeepDetection"));
@@ -726,8 +738,13 @@ class StillReadWriteInteraction : public ::ucbhelper::InterceptedInteraction
css::ucb::InteractiveIOException exIO;
xRequest->getRequest() >>= exIO;
bAbort = (
- (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED ) ||
- (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+ (exIO.Code == css::ucb::IOErrorCode_ACCESS_DENIED )
+ || (exIO.Code == css::ucb::IOErrorCode_LOCKING_VIOLATION )
+#ifdef MACOSX
+ // this is a workaround for MAC, on this platform if the file is locked
+ // the returned error code looks to be wrong
+ || (exIO.Code == css::ucb::IOErrorCode_GENERAL )
+#endif
);
}
break;
diff --git a/comphelper/source/misc/string.cxx b/comphelper/source/misc/string.cxx
index 77a251372d85..e9437528b0de 100644
--- a/comphelper/source/misc/string.cxx
+++ b/comphelper/source/misc/string.cxx
@@ -36,10 +36,13 @@
#include <vector>
#include <algorithm>
-#include "comphelper/string.hxx"
-#include "rtl/ustring.hxx"
-#include "sal/types.h"
-#include "comphelper/stlunosequence.hxx"
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <sal/types.h>
+
+#include <comphelper/string.hxx>
+#include <comphelper/stlunosequence.hxx>
+#include <comphelper/stl_types.hxx>
namespace comphelper { namespace string {
@@ -96,12 +99,12 @@ rtl::OUString searchAndReplaceAsciiL(
::rtl::OUString convertCommaSeparated(
::com::sun::star::uno::Sequence< ::rtl::OUString > const& i_rSeq)
{
- ::rtl::OUString ret;
- for (sal_Int32 i = 0; i < i_rSeq.getLength(); ++i) {
- if (i != 0) ret += ::rtl::OUString::createFromAscii(", ");
- ret += i_rSeq[i];
- }
- return ret;
+ ::rtl::OUStringBuffer buf;
+ ::comphelper::intersperse(
+ ::comphelper::stl_begin(i_rSeq), ::comphelper::stl_end(i_rSeq),
+ ::comphelper::OUStringBufferAppender(buf),
+ ::rtl::OUString::createFromAscii(", "));
+ return buf.makeStringAndClear();
}
::com::sun::star::uno::Sequence< ::rtl::OUString >
@@ -119,10 +122,6 @@ rtl::OUString searchAndReplaceAsciiL(
} while (idx >= 0);
::com::sun::star::uno::Sequence< ::rtl::OUString > kws(vec.size());
std::copy(vec.begin(), vec.end(), stl_begin(kws));
- /*
- for (size_t i = 0; i < vec.size(); ++i) {
- kws[i] = vec.at(i);
- }*/
return kws;
}
diff --git a/comphelper/source/misc/types.cxx b/comphelper/source/misc/types.cxx
index 2b20fd9acca3..2a9180c038b0 100644
--- a/comphelper/source/misc/types.cxx
+++ b/comphelper/source/misc/types.cxx
@@ -87,8 +87,7 @@ sal_Bool operator ==(const Time& _rLeft, const Time& _rRight)
sal_Int32 getINT32(const Any& _rAny)
{
sal_Int32 nReturn = 0;
- _rAny >>= nReturn;
-
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -96,7 +95,7 @@ sal_Int32 getINT32(const Any& _rAny)
sal_Int16 getINT16(const Any& _rAny)
{
sal_Int16 nReturn = 0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -104,7 +103,7 @@ sal_Int16 getINT16(const Any& _rAny)
double getDouble(const Any& _rAny)
{
double nReturn = 0.0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -112,7 +111,7 @@ double getDouble(const Any& _rAny)
float getFloat(const Any& _rAny)
{
float nReturn = 0.0;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
@@ -120,7 +119,7 @@ float getFloat(const Any& _rAny)
::rtl::OUString getString(const Any& _rAny)
{
::rtl::OUString nReturn;
- _rAny >>= nReturn;
+ OSL_VERIFY( _rAny >>= nReturn );
return nReturn;
}
diff --git a/comphelper/source/misc/uieventslogger.cxx b/comphelper/source/misc/uieventslogger.cxx
index 3ff875a4e67d..ae351340bc7a 100644
--- a/comphelper/source/misc/uieventslogger.cxx
+++ b/comphelper/source/misc/uieventslogger.cxx
@@ -218,11 +218,15 @@ namespace comphelper
// public UiEventsLogger interface
sal_Bool UiEventsLogger::isEnabled()
{
- try {
- UiEventsLogger_Impl::prepareMutex();
- Guard<Mutex> singleton_guard(UiEventsLogger_Impl::singleton_mutex);
- return UiEventsLogger_Impl::getInstance()->m_Active;
- } catch(...) { return false; } // never throws
+ if ( UiEventsLogger_Impl::getEnabledFromCfg() )
+ {
+ try {
+ UiEventsLogger_Impl::prepareMutex();
+ Guard<Mutex> singleton_guard(UiEventsLogger_Impl::singleton_mutex);
+ return UiEventsLogger_Impl::getInstance()->m_Active;
+ } catch(...) { return false; } // never throws
+ } // if ( )
+ return sal_False;
}
sal_Int32 UiEventsLogger::getSessionLogEventCount()
@@ -375,9 +379,10 @@ namespace comphelper
}
else
logdata[2] = UNKNOWN_ORIGIN;
- logdata[3] = url.Complete;
if(url.Complete.match(URL_FILE))
logdata[3] = URL_FILE;
+ else
+ logdata[3] = url.Main;
m_Logger->log(LogLevel::INFO, m_Formatter->formatMultiColumn(logdata));
m_SessionLogEventCount++;
}
diff --git a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
index 3c56d5479573..219e56ce1a37 100644
--- a/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
+++ b/comphelper/source/officeinstdir/officeinstallationdirectories.cxx
@@ -31,6 +31,8 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
/**************************************************************************
TODO
**************************************************************************
@@ -51,53 +53,6 @@ using namespace comphelper;
// helpers
//=========================================================================
-uno::Sequence< rtl::OUString > SAL_CALL
-OfficeInstallationDirectories_getSupportedServiceNames()
- throw()
-{
- const rtl::OUString aServiceName(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.OfficeInstallationDirectories" ) );
- return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getImplementationName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.util.OfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getSingletonName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.theOfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-rtl::OUString SAL_CALL OfficeInstallationDirectories_getSingletonServiceName()
- throw()
-{
- return rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.util.OfficeInstallationDirectories" ) );
-}
-
-//=========================================================================
-uno::Reference< uno::XInterface > SAL_CALL
-OfficeInstallationDirectories_createInstance(
- const uno::Reference< uno::XComponentContext > & rxContext )
- throw( uno::Exception )
-{
- return static_cast< cppu::OWeakObject * >(
- new OfficeInstallationDirectories( rxContext ) );
-}
-
//=========================================================================
static bool makeCanonicalFileURL( rtl::OUString & rURL )
{
@@ -272,7 +227,7 @@ rtl::OUString SAL_CALL
OfficeInstallationDirectories::getImplementationName()
throw ( uno::RuntimeException )
{
- return OfficeInstallationDirectories_getImplementationName();
+ return getImplementationName_static();
}
//=========================================================================
@@ -282,7 +237,7 @@ OfficeInstallationDirectories::supportsService( const rtl::OUString& ServiceName
throw ( uno::RuntimeException )
{
const uno::Sequence< rtl::OUString > & aNames
- = OfficeInstallationDirectories_getSupportedServiceNames();
+ = getSupportedServiceNames();
const rtl::OUString * p = aNames.getConstArray();
for ( sal_Int32 nPos = 0; nPos < aNames.getLength(); nPos++ )
{
@@ -299,7 +254,47 @@ uno::Sequence< ::rtl::OUString > SAL_CALL
OfficeInstallationDirectories::getSupportedServiceNames()
throw ( uno::RuntimeException )
{
- return OfficeInstallationDirectories_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+//=========================================================================
+// static
+rtl::OUString SAL_CALL
+OfficeInstallationDirectories::getImplementationName_static()
+{
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.comp.util.OfficeInstallationDirectories" ) );
+}
+
+//=========================================================================
+// static
+uno::Sequence< ::rtl::OUString > SAL_CALL
+OfficeInstallationDirectories::getSupportedServiceNames_static()
+{
+ const rtl::OUString aServiceName(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.util.OfficeInstallationDirectories" ) );
+ return uno::Sequence< rtl::OUString >( &aServiceName, 1 );
+}
+
+//=========================================================================
+// static
+rtl::OUString SAL_CALL OfficeInstallationDirectories::getSingletonName_static()
+{
+ return rtl::OUString(
+ RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.util.theOfficeInstallationDirectories" ) );
+}
+
+//=========================================================================
+// static
+uno::Reference< uno::XInterface > SAL_CALL
+OfficeInstallationDirectories::Create(
+ const uno::Reference< uno::XComponentContext > & rxContext )
+{
+ return static_cast< cppu::OWeakObject * >(
+ new OfficeInstallationDirectories( rxContext ) );
}
//=========================================================================
@@ -352,3 +347,7 @@ void OfficeInstallationDirectories::initDirs()
}
}
+void createRegistryInfo_OfficeInstallationDirectories()
+{
+ static ::comphelper::module::OSingletonRegistration< OfficeInstallationDirectories > aAutoRegistration;
+}
diff --git a/comphelper/source/officeinstdir/officeinstallationdirectories.hxx b/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
index c829bcdc517c..52dcd38d564a 100644
--- a/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
+++ b/comphelper/source/officeinstdir/officeinstallationdirectories.hxx
@@ -84,6 +84,16 @@ public:
getSupportedServiceNames()
throw (::com::sun::star::uno::RuntimeException);
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL
+ getImplementationName_static();
+ static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL
+ getSupportedServiceNames_static();
+ static ::rtl::OUString SAL_CALL
+ getSingletonName_static();
+ static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL
+ Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& );
+
private:
void initDirs();
diff --git a/comphelper/source/processfactory/processfactory.cxx b/comphelper/source/processfactory/processfactory.cxx
index 0f50f4a4cb01..c4eac583e3c0 100644
--- a/comphelper/source/processfactory/processfactory.cxx
+++ b/comphelper/source/processfactory/processfactory.cxx
@@ -98,24 +98,30 @@ Reference< XInterface > createProcessComponentWithArguments( const ::rtl::OUStri
return xComponent;
}
-} // namesapce comphelper
-
-extern "C" {
-uno::XComponentContext * comphelper_getProcessComponentContext()
+Reference< XComponentContext > getProcessComponentContext()
{
- uno::Reference<uno::XComponentContext> xRet;
+ Reference< XComponentContext > xRet;
uno::Reference<beans::XPropertySet> const xProps(
comphelper::getProcessServiceFactory(), uno::UNO_QUERY );
if (xProps.is()) {
try {
- xRet.set( xProps->getPropertyValue(
- rtl::OUString(
+ xRet.set( xProps->getPropertyValue( rtl::OUString(
RTL_CONSTASCII_USTRINGPARAM("DefaultContext") ) ),
uno::UNO_QUERY );
}
catch (beans::UnknownPropertyException const&) {
}
}
+ return xRet;
+}
+
+} // namespace comphelper
+
+extern "C" {
+uno::XComponentContext * comphelper_getProcessComponentContext()
+{
+ uno::Reference<uno::XComponentContext> xRet;
+ xRet = ::comphelper::getProcessComponentContext();
if (xRet.is())
xRet->acquire();
return xRet.get();
diff --git a/comphelper/source/property/genericpropertyset.cxx b/comphelper/source/property/genericpropertyset.cxx
index 08dd26dcf0ec..19911709860d 100644
--- a/comphelper/source/property/genericpropertyset.cxx
+++ b/comphelper/source/property/genericpropertyset.cxx
@@ -180,8 +180,7 @@ void GenericPropertySet::_setPropertyValues( const PropertyMapEntry** ppEntries,
aEvt.PropertyName = aPropertyName;
aEvt.NewValue = *pValues;
aGuard.clear();
- pHelper->forEach<XPropertyChangeListener>(
- ::boost::bind(&XPropertyChangeListener::propertyChange,_1,boost::cref(aEvt)));
+ pHelper->notifyEach( &XPropertyChangeListener::propertyChange, aEvt );
aGuard.reset();
}
diff --git a/comphelper/source/property/opropertybag.cxx b/comphelper/source/property/opropertybag.cxx
index 7be74ef466b6..8b816e8c1ce9 100644
--- a/comphelper/source/property/opropertybag.cxx
+++ b/comphelper/source/property/opropertybag.cxx
@@ -32,6 +32,7 @@
#include "precompiled_comphelper.hxx"
#include "opropertybag.hxx"
+#include "comphelper_module.hxx"
#include <com/sun/star/beans/PropertyAttribute.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
@@ -49,19 +50,9 @@
//--------------------------------------------------------------------------
using namespace ::com::sun::star;
-uno::Sequence< ::rtl::OUString > SAL_CALL PropertyBag_getSupportedServiceNames() throw()
+void createRegistryInfo_OPropertyBag()
{
- return ::comphelper::OPropertyBag::getSupportedServiceNames_static();
-}
-
-::rtl::OUString SAL_CALL PropertyBag_getImplementationName() throw()
-{
- return ::comphelper::OPropertyBag::getImplementationName_static();
-}
-
-uno::Reference< uno::XInterface > SAL_CALL PropertyBag_createInstance(const uno::Reference< uno::XComponentContext >& rxContext) throw( uno::Exception )
-{
- return ::comphelper::OPropertyBag::Create( rxContext );
+ static ::comphelper::module::OAutoRegistration< ::comphelper::OPropertyBag > aAutoRegistration;
}
//........................................................................
diff --git a/comphelper/source/property/property.cxx b/comphelper/source/property/property.cxx
index 82e38d49c433..fe6cbaa9d767 100644
--- a/comphelper/source/property/property.cxx
+++ b/comphelper/source/property/property.cxx
@@ -97,8 +97,12 @@ void copyProperties(const Reference<XPropertySet>& _rxSource,
try
{
aDestProp = xDestProps->getPropertyByName(pSourceProps->Name);
- if (0 == (aDestProp.Attributes & PropertyAttribute::READONLY))
- _rxDest->setPropertyValue(pSourceProps->Name, _rxSource->getPropertyValue(pSourceProps->Name));
+ if (0 == (aDestProp.Attributes & PropertyAttribute::READONLY) )
+ {
+ const Any aSourceValue = _rxSource->getPropertyValue(pSourceProps->Name);
+ if ( 0 != (aDestProp.Attributes & PropertyAttribute::MAYBEVOID) || aSourceValue.hasValue() )
+ _rxDest->setPropertyValue(pSourceProps->Name, aSourceValue);
+ }
}
catch (Exception&)
{
diff --git a/comphelper/source/property/propertybag.cxx b/comphelper/source/property/propertybag.cxx
index a56793e05769..383e1cc2c5aa 100644
--- a/comphelper/source/property/propertybag.cxx
+++ b/comphelper/source/property/propertybag.cxx
@@ -168,10 +168,11 @@ namespace comphelper
// will throw an UnknownPropertyException if necessary
if ( ( rProp.Attributes & PropertyAttribute::REMOVEABLE ) == 0 )
throw NotRemoveableException( ::rtl::OUString(), NULL );
+ const sal_Int32 nHandle = rProp.Handle;
- revokeProperty( rProp.Handle );
+ revokeProperty( nHandle );
- m_pImpl->aDefaults.erase( rProp.Handle );
+ m_pImpl->aDefaults.erase( nHandle );
}
//--------------------------------------------------------------------
diff --git a/comphelper/source/property/propertycontainerhelper.cxx b/comphelper/source/property/propertycontainerhelper.cxx
index 9d1662d1ecf2..7f5db1d6cf7e 100644
--- a/comphelper/source/property/propertycontainerhelper.cxx
+++ b/comphelper/source/property/propertycontainerhelper.cxx
@@ -76,12 +76,12 @@ namespace
// comparing two property descriptions (by name)
struct PropertyDescriptionNameMatch : public ::std::unary_function< PropertyDescription, bool >
{
- const ::rtl::OUString& m_rCompare;
+ ::rtl::OUString m_rCompare;
PropertyDescriptionNameMatch( const ::rtl::OUString& _rCompare ) : m_rCompare( _rCompare ) { }
bool operator() (const PropertyDescription& x ) const
{
- return x.aProperty.Name == m_rCompare;
+ return x.aProperty.Name.equals(m_rCompare);
}
};
}
diff --git a/comphelper/source/streaming/memorystream.cxx b/comphelper/source/streaming/memorystream.cxx
index 5abbb352b14c..a2baef21010e 100644
--- a/comphelper/source/streaming/memorystream.cxx
+++ b/comphelper/source/streaming/memorystream.cxx
@@ -31,17 +31,20 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/io/XSeekableInputStream.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
-#include <cppuhelper/implbase3.hxx>
+#include <cppuhelper/implbase4.hxx>
#include <string.h>
#include <vector>
using ::rtl::OUString;
using ::cppu::OWeakObject;
-using ::cppu::WeakImplHelper3;
+using ::cppu::WeakImplHelper4;
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
@@ -50,7 +53,7 @@ using namespace ::osl;
namespace comphelper
{
-class UNOMemoryStream : public WeakImplHelper3 < XStream, XSeekableInputStream, XOutputStream >
+class UNOMemoryStream : public WeakImplHelper4 < XStream, XSeekableInputStream, XOutputStream, XTruncate >
{
public:
UNOMemoryStream();
@@ -77,6 +80,14 @@ public:
virtual void SAL_CALL flush() throw (NotConnectedException, BufferSizeExceededException, IOException, RuntimeException);
virtual void SAL_CALL closeOutput() throw (NotConnectedException, BufferSizeExceededException, IOException, RuntimeException);
+ // XTruncate
+ virtual void SAL_CALL truncate() throw (::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static Reference< XInterface > SAL_CALL Create( const Reference< ::com::sun::star::uno::XComponentContext >& );
+
private:
std::vector< sal_Int8 > maData;
sal_Int32 mnCursor;
@@ -109,8 +120,7 @@ sal_Int32 SAL_CALL UNOMemoryStream::readBytes( Sequence< sal_Int8 >& aData, sal_
throw IOException();
nBytesToRead = std::min( nBytesToRead, available() );
- if( aData.getLength() < nBytesToRead )
- aData.realloc( nBytesToRead );
+ aData.realloc( nBytesToRead );
if( nBytesToRead )
{
@@ -150,9 +160,16 @@ void SAL_CALL UNOMemoryStream::closeInput() throw (NotConnectedException, IOExce
// XSeekable
void SAL_CALL UNOMemoryStream::seek( sal_Int64 location ) throw (IllegalArgumentException, IOException, RuntimeException)
{
- if( (location < 0) || (location > SAL_MAX_INT32) || (location > static_cast< sal_Int64 >( maData.size() )) )
+ if( (location < 0) || (location > SAL_MAX_INT32) )
throw IllegalArgumentException( OUString(RTL_CONSTASCII_USTRINGPARAM("this implementation does not support more than 2GB!")), Reference< XInterface >(static_cast<OWeakObject*>(this)), 0 );
+ // seek operation should be able to resize the stream
+ if ( location > static_cast< sal_Int64 >( maData.size() ) )
+ maData.resize( static_cast< sal_Int32 >( location ) );
+
+ if ( location > static_cast< sal_Int64 >( maData.size() ) )
+ maData.resize( static_cast< sal_Int32 >( location ) );
+
mnCursor = static_cast< sal_Int32 >( location );
}
@@ -199,22 +216,35 @@ void SAL_CALL UNOMemoryStream::closeOutput() throw (NotConnectedException, Buffe
mnCursor = 0;
}
-OUString SAL_CALL UNOMemoryStream_getImplementationName() throw()
+//XTruncate
+void SAL_CALL UNOMemoryStream::truncate() throw (IOException, RuntimeException)
+{
+ maData.resize( 0 );
+ mnCursor = 0;
+}
+
+::rtl::OUString SAL_CALL UNOMemoryStream::getImplementationName_static()
{
static const OUString sImplName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.MemoryStream" ) );
return sImplName;
}
-Sequence< OUString > SAL_CALL UNOMemoryStream_getSupportedServiceNames() throw()
+Sequence< ::rtl::OUString > SAL_CALL UNOMemoryStream::getSupportedServiceNames_static()
{
Sequence< OUString > aSeq(1);
- aSeq[0] = UNOMemoryStream_getImplementationName();
+ aSeq[0] = getImplementationName_static();
return aSeq;
}
-Reference< XInterface > SAL_CALL UNOMemoryStream_createInstance(const Reference< XComponentContext > & ) throw( Exception )
+Reference< XInterface > SAL_CALL UNOMemoryStream::Create(
+ const Reference< XComponentContext >& )
{
return static_cast<OWeakObject*>(new UNOMemoryStream());
}
} // namespace comphelper
+
+void createRegistryInfo_UNOMemoryStream()
+{
+ static ::comphelper::module::OAutoRegistration< ::comphelper::UNOMemoryStream > aAutoRegistration;
+}
diff --git a/comphelper/source/streaming/seqinputstreamserv.cxx b/comphelper/source/streaming/seqinputstreamserv.cxx
index b10b38dda05a..af7d9fcf44dd 100644
--- a/comphelper/source/streaming/seqinputstreamserv.cxx
+++ b/comphelper/source/streaming/seqinputstreamserv.cxx
@@ -31,6 +31,8 @@
// MARKER( update_precomp.py ): autogen include statement, do not remove
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <sal/config.h>
#include <osl/mutex.hxx>
#include <cppuhelper/factory.hxx>
@@ -46,11 +48,6 @@
using namespace ::com::sun::star;
-::rtl::OUString SAL_CALL SequenceInputStreamService_getImplementationName();
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames();
-uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance( const uno::Reference< uno::XComponentContext > & rxContext ) SAL_THROW( (uno::Exception ) );
-
-
namespace {
class SequenceInputStreamService:
@@ -67,6 +64,11 @@ public:
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString & ServiceName ) throw ( uno::RuntimeException );
virtual uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw ( uno::RuntimeException );
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
// ::com::sun::star::io::XInputStream:
virtual ::sal_Int32 SAL_CALL readBytes( uno::Sequence< ::sal_Int8 > & aData, ::sal_Int32 nBytesToRead ) throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
virtual ::sal_Int32 SAL_CALL readSomeBytes( uno::Sequence< ::sal_Int8 > & aData, ::sal_Int32 nMaxBytesToRead ) throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
@@ -102,12 +104,17 @@ SequenceInputStreamService::SequenceInputStreamService()
// com.sun.star.uno.XServiceInfo:
::rtl::OUString SAL_CALL SequenceInputStreamService::getImplementationName() throw ( uno::RuntimeException )
{
- return SequenceInputStreamService_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL SequenceInputStreamService::getImplementationName_static()
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.SequenceInputStreamService" ) );
}
::sal_Bool SAL_CALL SequenceInputStreamService::supportsService( ::rtl::OUString const & serviceName ) throw ( uno::RuntimeException )
{
- uno::Sequence< ::rtl::OUString > serviceNames = SequenceInputStreamService_getSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > serviceNames = getSupportedServiceNames();
for ( ::sal_Int32 i = 0; i < serviceNames.getLength(); ++i ) {
if ( serviceNames[i] == serviceName )
return sal_True;
@@ -117,7 +124,21 @@ SequenceInputStreamService::SequenceInputStreamService()
uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService::getSupportedServiceNames() throw ( uno::RuntimeException )
{
- return SequenceInputStreamService_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService::getSupportedServiceNames_static()
+{
+ uno::Sequence< ::rtl::OUString > s( 1 );
+ s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
+ "com.sun.star.io.SequenceInputStream" ) );
+ return s;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService::Create(
+ const uno::Reference< uno::XComponentContext >& )
+{
+ return static_cast< ::cppu::OWeakObject * >( new SequenceInputStreamService() );
}
// ::com::sun::star::io::XInputStream:
@@ -227,23 +248,7 @@ void SAL_CALL SequenceInputStreamService::initialize( const uno::Sequence< ::com
} // anonymous namespace
-::rtl::OUString SAL_CALL SequenceInputStreamService_getImplementationName() {
- return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.SequenceInputStreamService" ) );
-}
-
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceInputStreamService_getSupportedServiceNames()
+void createRegistryInfo_SequenceInputStream()
{
- uno::Sequence< ::rtl::OUString > s( 1 );
- s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.io.SequenceInputStream" ) );
- return s;
+ static ::comphelper::module::OAutoRegistration< SequenceInputStreamService > aAutoRegistration;
}
-
-uno::Reference< uno::XInterface > SAL_CALL SequenceInputStreamService_createInstance(
- const uno::Reference< uno::XComponentContext >& )
- SAL_THROW( (uno::Exception ) )
-{
- return static_cast< ::cppu::OWeakObject * >( new SequenceInputStreamService() );
-}
-
diff --git a/comphelper/source/streaming/seqoutputstreamserv.cxx b/comphelper/source/streaming/seqoutputstreamserv.cxx
index 1334412f941d..63ff63321f2e 100644
--- a/comphelper/source/streaming/seqoutputstreamserv.cxx
+++ b/comphelper/source/streaming/seqoutputstreamserv.cxx
@@ -30,6 +30,8 @@
#include "precompiled_comphelper.hxx"
+#include "comphelper_module.hxx"
+
#include <sal/config.h>
#include <osl/mutex.hxx>
#include <cppuhelper/factory.hxx>
@@ -43,11 +45,6 @@
using namespace ::com::sun::star;
-::rtl::OUString SAL_CALL SequenceOutputStreamService_getImplementationName();
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames();
-uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance( const uno::Reference< uno::XComponentContext >& rxContext )SAL_THROW((uno::Exception));
-
-
namespace {
class SequenceOutputStreamService:
@@ -61,6 +58,11 @@ public:
virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString & ServiceName ) throw ( uno::RuntimeException );
virtual uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw ( uno::RuntimeException );
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static uno::Reference< uno::XInterface > SAL_CALL Create( const uno::Reference< uno::XComponentContext >& );
+
// ::com::sun::star::io::XOutputStream:
virtual void SAL_CALL writeBytes( const uno::Sequence< ::sal_Int8 > & aData ) throw ( io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException );
virtual void SAL_CALL flush() throw ( uno::RuntimeException, io::NotConnectedException, io::BufferSizeExceededException, io::IOException );
@@ -88,12 +90,17 @@ SequenceOutputStreamService::SequenceOutputStreamService()
// com.sun.star.uno.XServiceInfo:
::rtl::OUString SAL_CALL SequenceOutputStreamService::getImplementationName() throw ( uno::RuntimeException )
{
- return SequenceOutputStreamService_getImplementationName();
+ return getImplementationName_static();
+}
+
+::rtl::OUString SAL_CALL SequenceOutputStreamService::getImplementationName_static()
+{
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.SequenceOutputStreamService" ) );
}
::sal_Bool SAL_CALL SequenceOutputStreamService::supportsService( ::rtl::OUString const & serviceName ) throw ( uno::RuntimeException )
{
- uno::Sequence< ::rtl::OUString > serviceNames = SequenceOutputStreamService_getSupportedServiceNames();
+ uno::Sequence< ::rtl::OUString > serviceNames = getSupportedServiceNames();
for ( ::sal_Int32 i = 0; i < serviceNames.getLength(); ++i ) {
if ( serviceNames[i] == serviceName )
return sal_True;
@@ -103,7 +110,20 @@ SequenceOutputStreamService::SequenceOutputStreamService()
uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService::getSupportedServiceNames() throw ( uno::RuntimeException )
{
- return SequenceOutputStreamService_getSupportedServiceNames();
+ return getSupportedServiceNames_static();
+}
+
+uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService::getSupportedServiceNames_static()
+{
+ uno::Sequence< ::rtl::OUString > s( 1 );
+ s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.io.SequenceOutputStream" ) );
+ return s;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService::Create(
+ const uno::Reference< uno::XComponentContext >& )
+{
+ return static_cast< ::cppu::OWeakObject * >( new SequenceOutputStreamService());
}
// ::com::sun::star::io::XOutputStream:
@@ -149,23 +169,7 @@ uno::Sequence< ::sal_Int8 > SAL_CALL SequenceOutputStreamService::getWrittenByte
} // anonymous namespace
-::rtl::OUString SAL_CALL SequenceOutputStreamService_getImplementationName() {
- return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.comp.SequenceOutputStreamService" ) );
-}
-
-uno::Sequence< ::rtl::OUString > SAL_CALL SequenceOutputStreamService_getSupportedServiceNames()
+void createRegistryInfo_SequenceOutputStream()
{
- uno::Sequence< ::rtl::OUString > s( 1 );
- s[0] = ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(
- "com.sun.star.io.SequenceOutputStream" ) );
- return s;
+ static ::comphelper::module::OAutoRegistration< SequenceOutputStreamService > aAutoRegistration;
}
-
-uno::Reference< uno::XInterface > SAL_CALL SequenceOutputStreamService_createInstance(
- const uno::Reference< uno::XComponentContext >& )
- SAL_THROW( (uno::Exception) )
-{
- return static_cast< ::cppu::OWeakObject * >( new SequenceOutputStreamService());
-}
-