diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2004-11-09 13:11:35 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2004-11-09 13:11:35 +0000 |
commit | 6ee1fa83e6d6bbf340a16fc863dc50686236b349 (patch) | |
tree | 3f6b2ce03dbf5e47d2db449a65d37f5b8c36b51f /desktop | |
parent | 65d35dbbdb15f6dd04d5f8a9c90e27955cb57fa4 (diff) |
INTEGRATION: CWS jl13 (1.4.12); FILE MERGED
2004/10/15 12:48:59 dbo 1.4.12.6: #i35536##i34555##i34149#
- rc files without vnd.sun.star.expand urls
- export file picker filter
- reinstall cleans xlc files
- minor improvements
Issue number:
Submitted by:
Reviewed by:
2004/09/30 16:53:57 dbo 1.4.12.5: #i34555# correct double checked locking, misc cleanup
2004/09/29 16:56:57 dbo 1.4.12.4: #i34555##i34149# changes for CC
2004/09/29 16:16:29 dbo 1.4.12.3: #i34555##i34409# GUI filter list, legacy bundles error warnings
2004/09/23 16:40:15 dbo 1.4.12.2: #i34409# + misc fixes
2004/09/14 15:31:46 dbo 1.4.12.1: #i34149##i33982# modified makeURL(), misc fixes
Diffstat (limited to 'desktop')
-rw-r--r-- | desktop/source/deployment/registry/configuration/dp_configuration.cxx | 278 |
1 files changed, 149 insertions, 129 deletions
diff --git a/desktop/source/deployment/registry/configuration/dp_configuration.cxx b/desktop/source/deployment/registry/configuration/dp_configuration.cxx index 7fdf71fe6705..d7e3d1c9bb5c 100644 --- a/desktop/source/deployment/registry/configuration/dp_configuration.cxx +++ b/desktop/source/deployment/registry/configuration/dp_configuration.cxx @@ -2,9 +2,9 @@ * * $RCSfile: dp_configuration.cxx,v $ * - * $Revision: 1.4 $ + * $Revision: 1.5 $ * - * last change: $Author: obo $ $Date: 2004-08-12 12:10:23 $ + * last change: $Author: hr $ $Date: 2004-11-09 14:11:35 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -70,10 +70,12 @@ #include "rtl/memory.h" #include "osl/file.hxx" #include "ucbhelper/content.hxx" +#include "comphelper/anytostring.hxx" #include "xmlscript/xml_helper.hxx" #include "svtools/inettype.hxx" #include "com/sun/star/ucb/NameClash.hpp" #include "com/sun/star/io/XActiveDataSink.hpp" +#include "com/sun/star/lang/WrappedTargetRuntimeException.hpp" #include "com/sun/star/util/XRefreshable.hpp" #include "com/sun/star/configuration/backend/XLayerImporter.hpp" #include <memory> @@ -88,24 +90,52 @@ using ::rtl::OUString; namespace dp_registry { namespace backend { namespace configuration { +namespace { //============================================================================== class BackendImpl : public ::dp_registry::backend::PackageRegistryBackend { -protected: + class PackageImpl : public ::dp_registry::backend::Package + { + BackendImpl * getMyBackend() const { + return static_cast< BackendImpl * >(m_myBackend.get()); + } + + const bool m_isSchema; + + // Package + virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_( + ::osl::ResettableMutexGuard & guard, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + virtual void processPackage_( + ::osl::ResettableMutexGuard & guard, + bool registerPackage, + ::rtl::Reference<AbortChannel> const & abortChannel, + Reference<XCommandEnvironment> const & xCmdEnv ); + + public: + inline PackageImpl( + ::rtl::Reference<PackageRegistryBackend> const & myBackend, + OUString const & url, OUString const & name, + Reference<deployment::XPackageTypeInfo> const & xPackageType, + bool isSchema ) + : Package( myBackend, url, name, name /* display-name */, + xPackageType ), + m_isSchema( isSchema ) + {} + }; + friend class PackageImpl; + Reference< ::com::sun::star::configuration::backend::XLayerImporter > m_xMergeImporter; OUString m_configLayer; - OUString m_strConfSchema; - OUString m_strConfData; - // PackageRegistryBackend virtual Reference<deployment::XPackage> bindPackage_( OUString const & url, OUString const & mediaType, Reference<XCommandEnvironment> const & xCmdEnv ); -public: void xcu_merge_in( OUString const & url, Reference< XCommandEnvironment > const & xCmdEnv ); void xcs_merge_in( OUString const & url, @@ -114,86 +144,47 @@ public: OUString const & getConfigLayer(); Reference<util::XRefreshable> m_defaultProvider; - BackendImpl( - Sequence<Any> const & args, - Reference<XComponentContext> const & xComponentContext, - OUString const & implName, - Sequence<OUString> const & supportedMediaTypes ); -}; - -//============================================================================== -class PackageImpl : public ::dp_registry::backend::Package -{ -protected: - bool m_isSchema; - - inline BackendImpl * getMyBackend() const - { return static_cast< BackendImpl * >(m_myBackend.get()); } - - // Package - virtual beans::Optional< beans::Ambiguous<sal_Bool> > isRegistered_( - ::osl::ResettableMutexGuard & guard, - ::rtl::Reference<AbortChannel> const & abortChannel, - Reference<XCommandEnvironment> const & xCmdEnv ); - virtual void processPackage_( - ::osl::ResettableMutexGuard & guard, - bool registerPackage, - ::rtl::Reference<AbortChannel> const & abortChannel, - Reference<XCommandEnvironment> const & xCmdEnv ); + const Reference<deployment::XPackageTypeInfo> m_xConfDataTypeInfo; + const Reference<deployment::XPackageTypeInfo> m_xConfSchemaTypeInfo; + Sequence< Reference<deployment::XPackageTypeInfo> > m_typeInfos; public: - inline PackageImpl( - ::rtl::Reference<PackageRegistryBackend> const & myBackend, - OUString const & url, OUString const & mediaType, - OUString const & name, OUString const & description, - bool isSchema ) - : Package( myBackend, url, mediaType, name, name /* display-name */, - description ), - m_isSchema( isSchema ) - {} + BackendImpl( Sequence<Any> const & args, + Reference<XComponentContext> const & xComponentContext, + OUString const & implName ); - // XPackage - virtual Any SAL_CALL getIcon( sal_Bool highContrast, sal_Bool smallIcon ) - throw (RuntimeException); + // XPackageRegistry + virtual Sequence< Reference<deployment::XPackageTypeInfo> > SAL_CALL + getSupportedPackageTypes() throw (RuntimeException); }; -//============================================================================== -OUString SAL_CALL getImplementationName() -{ - return OUSTR( - "com.sun.star.comp.deployment.configuration.PackageRegistryBackend"); -} - -//============================================================================== -Reference<XInterface> SAL_CALL create( - Sequence<Any> const & args, - Reference<XComponentContext> const & xComponentContext ) -{ - OUString const mediaTypes [] = { - OUSTR("application/vnd.sun.star.configuration-data"), - OUSTR("application/vnd.sun.star.configuration-schema") - }; - return static_cast< ::cppu::OWeakObject * >( - new BackendImpl( - args, xComponentContext, getImplementationName(), - Sequence<OUString>( mediaTypes, ARLEN(mediaTypes) ) ) ); -} - //______________________________________________________________________________ BackendImpl::BackendImpl( Sequence<Any> const & args, Reference<XComponentContext> const & xComponentContext, - OUString const & implName, - Sequence<OUString> const & supportedMediaTypes ) - : PackageRegistryBackend( - args, xComponentContext, implName, supportedMediaTypes ), - m_strConfSchema( getResourceString(RID_STR_CONF_SCHEMA) ), - m_strConfData( getResourceString(RID_STR_CONF_DATA) ), - m_defaultProvider( - xComponentContext->getValueByName( - OUSTR("/singletons/com.sun.star." - "configuration.theDefaultProvider") ), UNO_QUERY ) + OUString const & implName ) + : PackageRegistryBackend( args, xComponentContext, implName ), + m_defaultProvider( xComponentContext->getValueByName( + OUSTR("/singletons/com.sun.star." + "configuration.theDefaultProvider") ), + UNO_QUERY ), + m_xConfDataTypeInfo( new Package::TypeInfo( + OUSTR("application/" + "vnd.sun.star.configuration-data"), + OUSTR("*.xcu"), + getResourceString(RID_STR_CONF_DATA), + RID_IMG_CONF_XML, RID_IMG_CONF_XML_HC ) ), + m_xConfSchemaTypeInfo( new Package::TypeInfo( + OUSTR("application/" + "vnd.sun.star.configuration-schema"), + OUSTR("*.xcs"), + getResourceString(RID_STR_CONF_SCHEMA), + RID_IMG_CONF_XML, RID_IMG_CONF_XML_HC ) ), + m_typeInfos( 2 ) { + m_typeInfos[ 0 ] = m_xConfDataTypeInfo; + m_typeInfos[ 1 ] = m_xConfSchemaTypeInfo; + OSL_ASSERT( m_defaultProvider.is() ); if (transientMode()) { @@ -202,7 +193,7 @@ BackendImpl::BackendImpl( else { m_registeredPackages.reset( new PersistentMap( - make_url( getCachePath(), OUSTR("registered_packages.db") ), + makeURL( getCachePath(), OUSTR("registered_packages.db") ), m_readOnly ) ); if (! m_readOnly) create_folder( 0, getConfigLayer(), @@ -210,6 +201,14 @@ BackendImpl::BackendImpl( } } +// XPackageRegistry +//______________________________________________________________________________ +Sequence< Reference<deployment::XPackageTypeInfo> > +BackendImpl::getSupportedPackageTypes() throw (RuntimeException) +{ + return m_typeInfos; +} + // PackageRegistryBackend //______________________________________________________________________________ Reference<deployment::XPackage> BackendImpl::bindPackage_( @@ -225,19 +224,21 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( { OUString title( extract_throw<OUString>( ucbContent.getPropertyValue( - OUSTR("Title") ) ) ); + StrTitle::get() ) ) ); if (title.endsWithIgnoreAsciiCaseAsciiL( - RTL_CONSTASCII_STRINGPARAM(".xcu") )) - mediaType = - OUSTR("application/vnd.sun.star.configuration-data"); + RTL_CONSTASCII_STRINGPARAM(".xcu") )) { + mediaType = OUSTR("application/" + "vnd.sun.star.configuration-data"); + } if (title.endsWithIgnoreAsciiCaseAsciiL( - RTL_CONSTASCII_STRINGPARAM(".xcs") )) - mediaType = - OUSTR("application/vnd.sun.star.configuration-schema"); + RTL_CONSTASCII_STRINGPARAM(".xcs") )) { + mediaType = OUSTR("application/" + "vnd.sun.star.configuration-schema"); + } } if (mediaType.getLength() == 0) throw lang::IllegalArgumentException( - m_strCannotDetectMediaType + url, + StrCannotDetectMediaType::get() + url, static_cast<OWeakObject *>(this), static_cast<sal_Int16>(-1) ); } @@ -249,21 +250,23 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( { ::ucb::Content ucbContent( url, xCmdEnv ); if (subType.EqualsIgnoreCaseAscii( - "vnd.sun.star.configuration-data")) + "vnd.sun.star.configuration-data")) { return new PackageImpl( - this, url, mediaType, extract_throw<OUString>( - ucbContent.getPropertyValue( OUSTR("Title") ) ), - m_strConfData, false /* data file */ ); + this, url, extract_throw<OUString>( + ucbContent.getPropertyValue( StrTitle::get() ) ), + m_xConfDataTypeInfo, false /* data file */ ); + } else if (subType.EqualsIgnoreCaseAscii( - "vnd.sun.star.configuration-schema")) + "vnd.sun.star.configuration-schema")) { return new PackageImpl( - this, url, mediaType, extract_throw<OUString>( - ucbContent.getPropertyValue( OUSTR("Title") ) ), - m_strConfSchema, true /* schema file */ ); + this, url, extract_throw<OUString>( + ucbContent.getPropertyValue( StrTitle::get() ) ), + m_xConfSchemaTypeInfo, true /* schema file */ ); + } } } throw lang::IllegalArgumentException( - m_strUnsupportedMediaType + mediaType, + StrUnsupportedMediaType::get() + mediaType, static_cast<OWeakObject *>(this), static_cast<sal_Int16>(-1) ); } @@ -271,9 +274,10 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_( //______________________________________________________________________________ OUString const & BackendImpl::getConfigLayer() { - if (m_configLayer.getLength() == 0) { + if (m_configLayer.getLength() == 0) + { OUString path( - make_url( expand_url(getCachePath()), OUSTR("registry") ) ); + makeURL( expandUnoRcUrl( getCachePath() ), OUSTR("registry") ) ); ::osl::FileBase::RC rc = ::osl::File::getAbsoluteFileURL( OUString(), path, m_configLayer ); if (rc != ::osl::FileBase::E_None) @@ -342,15 +346,15 @@ void BackendImpl::xcs_merge_in( xml_parse( xRoot, ucb_content, getComponentContext() ); OUString dest_folder( - make_url( getConfigLayer(), OUSTR("schema/") + ::rtl::Uri::encode( - root->m_package, rtl_UriCharClassPchar, - rtl_UriEncodeIgnoreEscapes, - RTL_TEXTENCODING_UTF8 ).replace( '.', '/' ) ) ); + makeURL( getConfigLayer(), OUSTR("schema/") + ::rtl::Uri::encode( + root->m_package, rtl_UriCharClassPchar, + rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8 ).replace( '.', '/' ) ) ); OUString title( root->m_name + OUSTR(".xcs") ); - OUString dest_url( make_url( dest_folder, ::rtl::Uri::encode( - title, rtl_UriCharClassPchar, - rtl_UriEncodeIgnoreEscapes, - RTL_TEXTENCODING_UTF8 ) ) ); + OUString dest_url( makeURL( dest_folder, ::rtl::Uri::encode( + title, rtl_UriCharClassPchar, + rtl_UriEncodeIgnoreEscapes, + RTL_TEXTENCODING_UTF8 ) ) ); // assure dest folder is existing: ::ucb::Content ucb_dest_folder; create_folder( &ucb_dest_folder, dest_folder, xCmdEnv ); @@ -365,7 +369,7 @@ void BackendImpl::xcs_merge_in( //############################################################################## //------------------------------------------------------------------------------ -static OUString encodeForXml( OUString const & text ) +OUString encodeForXml( OUString const & text ) { // encode conforming xml: sal_Int32 len = text.getLength(); @@ -496,22 +500,10 @@ void BackendImpl::xcu_merge_in( //############################################################################## -// XPackage -//______________________________________________________________________________ -Any PackageImpl::getIcon( sal_Bool highContrast, sal_Bool smallIcon ) - throw (RuntimeException) -{ - OSL_ASSERT( smallIcon ); - if (smallIcon) { - sal_uInt16 ret = highContrast ? RID_IMG_CONF_XML_HC : RID_IMG_CONF_XML; - return makeAny(ret); - } - return Package::getIcon( highContrast, smallIcon ); -} - // Package //______________________________________________________________________________ -beans::Optional< beans::Ambiguous<sal_Bool> > PackageImpl::isRegistered_( +beans::Optional< beans::Ambiguous<sal_Bool> > +BackendImpl::PackageImpl::isRegistered_( ::osl::ResettableMutexGuard & guard, ::rtl::Reference<AbortChannel> const & abortChannel, Reference<XCommandEnvironment> const & xCmdEnv ) @@ -524,7 +516,7 @@ beans::Optional< beans::Ambiguous<sal_Bool> > PackageImpl::isRegistered_( } //______________________________________________________________________________ -void PackageImpl::processPackage_( +void BackendImpl::PackageImpl::processPackage_( ::osl::ResettableMutexGuard & guard, bool registerPackage, ::rtl::Reference<AbortChannel> const & abortChannel, @@ -562,10 +554,10 @@ void PackageImpl::processPackage_( if (! that->transientMode()) { ::ucb::Content ucbSaveLayer( - make_url( that->getConfigLayer(), OUSTR("schema") ), + makeURL( that->getConfigLayer(), OUSTR("schema") ), xCmdEnv ); ucbSaveLayer.setPropertyValue( - OUSTR("Title"), makeAny( OUSTR("schema.bak") ) ); + StrTitle::get(), makeAny( OUSTR("schema.bak") ) ); try { for ( ; iPos != iEnd; ++iPos ) { @@ -583,7 +575,7 @@ void PackageImpl::processPackage_( } catch (Exception &) { ucbSaveLayer.setPropertyValue( - OUSTR("Title"), makeAny( OUSTR("schema") ) ); + StrTitle::get(), makeAny( OUSTR("schema") ) ); throw; } that->m_registeredPackages->erase( m_url ); @@ -596,10 +588,10 @@ void PackageImpl::processPackage_( if (! that->transientMode()) { ::ucb::Content ucbSaveLayer( - make_url( that->getConfigLayer(), OUSTR("data") ), + makeURL( that->getConfigLayer(), OUSTR("data") ), xCmdEnv ); ucbSaveLayer.setPropertyValue( - OUSTR("Title"), makeAny( OUSTR("data.bak") ) ); + StrTitle::get(), makeAny( OUSTR("data.bak") ) ); try { for ( ; iPos != iEnd; ++iPos ) { @@ -617,7 +609,7 @@ void PackageImpl::processPackage_( } catch (Exception &) { ucbSaveLayer.setPropertyValue( - OUSTR("Title"), makeAny( OUSTR("data") ) ); + StrTitle::get(), makeAny( OUSTR("data") ) ); throw; } that->m_registeredPackages->erase( m_url ); @@ -627,8 +619,36 @@ void PackageImpl::processPackage_( } } - if (!m_isSchema && getMyBackend()->m_defaultProvider.is()) - getMyBackend()->m_defaultProvider->refresh(); + if (!m_isSchema && getMyBackend()->m_defaultProvider.is()) { + // temp workaround for config bug: + try { + getMyBackend()->m_defaultProvider->refresh(); + } + catch (lang::WrappedTargetRuntimeException & exc) { + (void) exc; + OSL_ENSURE( 0, ::rtl::OUStringToOString( + ::comphelper::anyToString(exc.TargetException), + RTL_TEXTENCODING_UTF8 ).getStr() ); + } + } +} + +} // anon namespace + +//============================================================================== +OUString SAL_CALL getImplementationName() +{ + return OUSTR( + "com.sun.star.comp.deployment.configuration.PackageRegistryBackend"); +} + +//============================================================================== +Reference<XInterface> SAL_CALL create( + Sequence<Any> const & args, + Reference<XComponentContext> const & xComponentContext ) +{ + return static_cast< ::cppu::OWeakObject * >( + new BackendImpl( args, xComponentContext, getImplementationName() ) ); } } // namespace configuration |