summaryrefslogtreecommitdiff
path: root/sfx2/source
diff options
context:
space:
mode:
authorMichael Stahl <mstahl@redhat.com>2012-11-22 11:26:49 +0100
committerMichael Stahl <mstahl@redhat.com>2012-11-26 23:14:33 +0100
commite6f81b1898a59280f41177206b777a7a0d32f3fc (patch)
treec8047f94d0e647630ce45f8159600fdad7ebad48 /sfx2/source
parent31170413ae3786bf44564e813d7291354e939a77 (diff)
API CHANGE: remove com.sun.star.document.XDocumentInfo
The following badly designed interfaces and services were deprecated in OpenOffice.org 3.0 and are now remove from the API: com.sun.star.document.DocumentInfo com.sun.star.document.StandaloneDocumentInfo com.sun.star.document.XDocumentInfo com.sun.star.document.XDocumentInfoSupplier com.sun.star.document.XStandaloneDocumentInfo The supported replacements for these have been introduced in OOo 3.0: com.sun.star.document.XDocumentProperties com.sun.star.document.XDocumentPropertiesSupplier com.sun.star.document.DocumentProperties http://www.mail-archive.com/interface-announce@openoffice.org/msg00432.html Remove the implementation of these interfaces and services in sfx2 (SfxBaseModel, objuno.cxx) Also remove unit tests for these services in qadevOOo and sfx2. Conflicts: offapi/type_reference/types.rdb Change-Id: Ib0b48a4e53a8079c82fac3bb49a829812f8e5256
Diffstat (limited to 'sfx2/source')
-rw-r--r--sfx2/source/appl/appuno.cxx2
-rw-r--r--sfx2/source/doc/objuno.cxx1351
-rw-r--r--sfx2/source/doc/sfxbasemodel.cxx92
3 files changed, 9 insertions, 1436 deletions
diff --git a/sfx2/source/appl/appuno.cxx b/sfx2/source/appl/appuno.cxx
index ffb4853e7ec1..0138f4168a00 100644
--- a/sfx2/source/appl/appuno.cxx
+++ b/sfx2/source/appl/appuno.cxx
@@ -105,7 +105,6 @@ using namespace ::com::sun::star::io;
#include "frmload.hxx"
#include <sfx2/frame.hxx>
#include <sfx2/objsh.hxx>
-#include <sfx2/objuno.hxx>
#include <sfx2/unoctitm.hxx>
#include <sfx2/dispatch.hxx>
#include "doctemplates.hxx"
@@ -2218,7 +2217,6 @@ SFX2_DLLPUBLIC void* SAL_CALL sfx_component_getFactory(
IF_NAME_CREATECOMPONENTFACTORY( SfxGlobalEvents_Impl )
IF_NAME_CREATECOMPONENTFACTORY( SfxFrameLoader_Impl )
IF_NAME_CREATECOMPONENTFACTORY( SfxMacroLoader )
- IF_NAME_CREATECOMPONENTFACTORY( SfxStandaloneDocumentInfoObject )
IF_NAME_CREATECOMPONENTFACTORY( SfxAppDispatchProvider )
IF_NAME_CREATECOMPONENTFACTORY( SfxDocTplService )
IF_NAME_CREATECOMPONENTFACTORY( ShutdownIcon )
diff --git a/sfx2/source/doc/objuno.cxx b/sfx2/source/doc/objuno.cxx
deleted file mode 100644
index 336affb2f2ba..000000000000
--- a/sfx2/source/doc/objuno.cxx
+++ /dev/null
@@ -1,1351 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <com/sun/star/lang/DisposedException.hpp>
-#include <com/sun/star/util/DateTime.hpp>
-#include <com/sun/star/util/Date.hpp>
-#include <com/sun/star/util/Time.hpp>
-#include <com/sun/star/beans/PropertyAttribute.hpp>
-#include <com/sun/star/beans/NamedValue.hpp>
-#include <com/sun/star/beans/StringPair.hpp>
-#include <com/sun/star/embed/ElementModes.hpp>
-#include <com/sun/star/xml/sax/XParser.hpp>
-#include <com/sun/star/document/XImporter.hpp>
-#include <com/sun/star/document/XExporter.hpp>
-#include <com/sun/star/io/XActiveDataSource.hpp>
-#include <com/sun/star/document/XFilter.hpp>
-#include <com/sun/star/embed/XTransactedObject.hpp>
-#include <com/sun/star/lang/Locale.hpp>
-#include <com/sun/star/util/XModifiable.hpp>
-#include <com/sun/star/document/DocumentProperties.hpp>
-#include <com/sun/star/document/XCompatWriterDocProperties.hpp>
-
-#include <unotools/configmgr.hxx>
-#include <unotools/bootstrap.hxx>
-#include <cppuhelper/interfacecontainer.hxx>
-#include <osl/mutex.hxx>
-#include <rtl/ustrbuf.hxx>
-#include <vcl/svapp.hxx>
-
-#include <tools/errcode.hxx>
-#include <svl/cntwids.hrc>
-#include <comphelper/processfactory.hxx>
-#include <comphelper/string.hxx>
-#include <comphelper/sequenceasvector.hxx>
-#include <comphelper/storagehelper.hxx>
-#include <sot/storage.hxx>
-
-#include <sfx2/objuno.hxx>
-#include <sfx2/sfx.hrc>
-
-#include <vector>
-#include <algorithm>
-
-#include "sfx2/sfxresid.hxx"
-#include "doc.hrc"
-
-using namespace ::com::sun::star;
-
-// TODO/REFACTOR: provide service for MS formats
-// TODO/REFACTOR: IsEncrypted is never set nor read
-// Generator is not saved ATM; which value?!
-// Generator handling must be implemented
-// Deprecate "Theme", rework IDL
-// AutoLoadEnabled is deprecated?!
-// Reasonable defaults for DateTime
-// MIMEType readonly?!
-// Announce changes about Theme, Language, Generator, removed entries etc.
-// IsEncrypted is necessary for binary formats!
-// Open: When to call PrepareDocInfoForSave? Currently only called for own formats and HTML/Writer
-// Open: How to load and save EditingTime to MS formats
-// PPT-Export should use SavePropertySet
-
-//=============================================================================
-
-// The number of user defined fields handled by the evil XDocumentInfo
-// interface. There are exactly 4. No more, no less.
-#define FOUR 4
-
-#define PROPERTY_UNBOUND 0
-#define PROPERTY_MAYBEVOID ::com::sun::star::beans::PropertyAttribute::MAYBEVOID
-
-static const SfxItemPropertyMapEntry* lcl_GetDocInfoPropertyMap()
-{
- static SfxItemPropertyMapEntry aDocInfoPropertyMap_Impl[] =
- {
- { "Author" , 6 , WID_FROM, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "AutoloadEnabled" , 15, MID_DOCINFO_AUTOLOADENABLED, &::getBooleanCppuType(), PROPERTY_UNBOUND, 0 },
- { "AutoloadSecs" , 12, MID_DOCINFO_AUTOLOADSECS, &::getCppuType((const sal_Int32*)0), PROPERTY_UNBOUND, 0 },
- { "AutoloadURL" , 11, MID_DOCINFO_AUTOLOADURL, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Category" , 8 , MID_CATEGORY, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Company" , 7 , MID_COMPANY, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Manager" , 7 , MID_MANAGER, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "CreationDate" , 12, WID_DATE_CREATED, &::getCppuType((const ::com::sun::star::util::DateTime*)0),PROPERTY_MAYBEVOID, 0 },
- { "DefaultTarget" , 13, MID_DOCINFO_DEFAULTTARGET, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Description" , 11, MID_DOCINFO_DESCRIPTION, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "DocumentStatistic", 17 , MID_DOCINFO_STATISTIC, &::getCppuType((const uno::Sequence< beans::NamedValue >*)0), PROPERTY_UNBOUND, 0 },
- { "EditingCycles" , 13, MID_DOCINFO_REVISION, &::getCppuType((const sal_Int16*)0), PROPERTY_UNBOUND, 0 },
- { "EditingDuration" , 15, MID_DOCINFO_EDITTIME, &::getCppuType((const sal_Int32*)0), PROPERTY_UNBOUND, 0 },
- { "Generator" , 9, SID_APPLICATION, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Keywords" , 8 , WID_KEYWORDS, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Language" , 8, MID_DOCINFO_CHARLOCALE, &::getCppuType((const lang::Locale*)0), PROPERTY_UNBOUND, 0 },
- { "MIMEType" , 8 , WID_CONTENT_TYPE, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND | ::com::sun::star::beans::PropertyAttribute::READONLY, 0 },
- { "ModifiedBy" , 10, MID_DOCINFO_MODIFICATIONAUTHOR, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "ModifyDate" , 10, WID_DATE_MODIFIED, &::getCppuType((const ::com::sun::star::util::DateTime*)0),PROPERTY_MAYBEVOID, 0 },
- { "PrintDate" , 9 , MID_DOCINFO_PRINTDATE, &::getCppuType((const ::com::sun::star::util::DateTime*)0),PROPERTY_MAYBEVOID, 0 },
- { "PrintedBy" , 9 , MID_DOCINFO_PRINTEDBY, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Subject" , 7 , MID_DOCINFO_SUBJECT, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "Template" , 8 , MID_DOCINFO_TEMPLATE, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "TemplateFileName", 16, SID_TEMPLATE_NAME, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- { "TemplateDate" , 12, MID_DOCINFO_TEMPLATEDATE, &::getCppuType((const ::com::sun::star::util::DateTime*)0),PROPERTY_MAYBEVOID, 0 },
- { "Title" , 5 , WID_TITLE, &::getCppuType((const ::rtl::OUString*)0), PROPERTY_UNBOUND, 0 },
- {0,0,0,0,0,0}
- };
- return aDocInfoPropertyMap_Impl;
-}
-
-static sal_uInt16 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30,
- 31, 31, 30, 31, 30, 31 };
-
-inline sal_uInt16 DaysInMonth( sal_uInt16 nMonth, sal_uInt16 nYear )
-{
- if ( nMonth != 2 )
- return aDaysInMonth[nMonth-1];
- else
- {
- if ( (((nYear % 4) == 0) && ((nYear % 100) != 0)) ||
- ((nYear % 400) == 0) )
- return aDaysInMonth[nMonth-1] + 1;
- else
- return aDaysInMonth[nMonth-1];
- }
-}
-
-bool IsValidDateTime( const util::DateTime& rDT )
-{
- if ( !rDT.Month || (rDT.Month > 12) )
- return false;
- if ( !rDT.Day || (rDT.Day > DaysInMonth( rDT.Month, rDT.Year )) )
- return false;
- else if ( rDT.Year <= 1582 )
- {
- if ( rDT.Year < 1582 )
- return false;
- else if ( rDT.Month < 10 )
- return false;
- else if ( (rDT.Month == 10) && (rDT.Day < 15) )
- return false;
- }
-
- return true;
-}
-
-struct OUStringHashCode
-{
- size_t operator()( const ::rtl::OUString& sString ) const
- {
- return sString.hashCode();
- }
-};
-
-struct SfxExtendedItemPropertyMap : public SfxItemPropertyMapEntry
-{
- ::com::sun::star::uno::Any aValue;
-};
-
-void Copy( const uno::Reference < document::XStandaloneDocumentInfo >& rSource, const uno::Reference < document::XStandaloneDocumentInfo >& rTarget )
-{
- try
- {
- uno::Reference< beans::XPropertySet > xSet( rSource, uno::UNO_QUERY );
- uno::Reference< beans::XPropertySet > xTarget( rTarget, uno::UNO_QUERY );
- uno::Reference< beans::XPropertySetInfo > xSetInfo = xSet->getPropertySetInfo();
- uno::Reference< beans::XPropertyContainer > xContainer( rTarget, uno::UNO_QUERY );
- uno::Sequence< beans::Property > lProps = xSetInfo->getProperties();
- const beans::Property* pProps = lProps.getConstArray();
- sal_Int32 c = lProps.getLength();
- sal_Int32 i = 0;
- for (i=0; i<c; ++i)
- {
- uno::Any aValue = xSet->getPropertyValue( pProps[i].Name );
- if ( pProps[i].Attributes & ::com::sun::star::beans::PropertyAttribute::REMOVABLE )
- // QUESTION: DefaultValue?!
- xContainer->addProperty( pProps[i].Name, pProps[i].Attributes, aValue );
- try
- {
- // it is possible that the propertysets from XML and binary files differ; we shouldn't break then
- xTarget->setPropertyValue( pProps[i].Name, aValue );
- }
- catch ( const uno::Exception& ) {}
- }
-
- sal_Int16 nCount = rSource->getUserFieldCount();
- sal_Int16 nSupportedCount = rTarget->getUserFieldCount();
- for ( sal_Int16 nInd = 0; nInd < nCount && nInd < nSupportedCount; nInd++ )
- {
- ::rtl::OUString aPropName = rSource->getUserFieldName( nInd );
- rTarget->setUserFieldName( nInd, aPropName );
- ::rtl::OUString aPropVal = rSource->getUserFieldValue( nInd );
- rTarget->setUserFieldValue( nInd, aPropVal );
- }
- }
- catch ( const uno::Exception& ) {}
-}
-
-class MixedPropertySetInfo : public ::cppu::WeakImplHelper1< ::com::sun::star::beans::XPropertySetInfo >
-{
- private:
-
- SfxItemPropertyMap _aPropertyMap;
- ::rtl::OUString* _pUserKeys;
- uno::Reference<beans::XPropertySet> _xUDProps;
-
- public:
-
- MixedPropertySetInfo( const SfxItemPropertyMapEntry* pFixProps,
- ::rtl::OUString* pUserKeys,
- uno::Reference<beans::XPropertySet> xUDProps);
-
- virtual ~MixedPropertySetInfo();
-
- virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL getProperties( ) throw (::com::sun::star::uno::RuntimeException);
- virtual ::com::sun::star::beans::Property SAL_CALL getPropertyByName( const ::rtl::OUString& aName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
- virtual ::sal_Bool SAL_CALL hasPropertyByName( const ::rtl::OUString& Name ) throw (::com::sun::star::uno::RuntimeException);
-};
-
-//-----------------------------------------------------------------------------
-
-MixedPropertySetInfo::MixedPropertySetInfo(const SfxItemPropertyMapEntry* pFixProps,
- ::rtl::OUString* pUserKeys,
- uno::Reference<beans::XPropertySet> xUDProps)
- : _aPropertyMap( pFixProps )
- , _pUserKeys(pUserKeys)
- , _xUDProps(xUDProps)
-{
-}
-
-//-----------------------------------------------------------------------------
-
-MixedPropertySetInfo::~MixedPropertySetInfo()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL MixedPropertySetInfo::getProperties()
- throw(::com::sun::star::uno::RuntimeException)
-{
- ::comphelper::SequenceAsVector< ::com::sun::star::beans::Property > lProps;
-
- // copy "fix" props
- //todo: os: this ugly thing should be replaced
- const SfxItemPropertyMapEntry* pFixProp = lcl_GetDocInfoPropertyMap();
-
- while(pFixProp && pFixProp->pName)
- {
- ::com::sun::star::beans::Property aProp;
-
- aProp.Name = ::rtl::OUString::createFromAscii(pFixProp->pName);
- aProp.Handle = pFixProp->nWID;
- aProp.Type = *(pFixProp->pType);
- aProp.Attributes = (sal_Int16)(pFixProp->nFlags);
-
- lProps.push_back(aProp);
- ++pFixProp;
- }
-
- // copy "dynamic" props
-
- // NB: this is really ugly:
- // The returned properties must _not_ include the 4 user-defined fields!
- // These are _not_ properties of the XDocumentInfo interface.
- // Some things rely on this, e.g. Copy would break otherwise.
- // This will have interesting consequences if someone expects to insert
- // a property with the same name as an user-defined key, but nobody
- // sane does that.
- uno::Sequence<beans::Property> udProps =
- _xUDProps->getPropertySetInfo()->getProperties();
- for (sal_Int32 i = 0; i < udProps.getLength(); ++i) {
- if (std::find(_pUserKeys, _pUserKeys+FOUR, udProps[i].Name)
- == _pUserKeys+FOUR) {
- // #i100027#: handles from udProps are not valid here
- udProps[i].Handle = -1;
- lProps.push_back(udProps[i]);
- }
- }
-
- return lProps.getAsConstList();
-}
-
-//-----------------------------------------------------------------------------
-
-::com::sun::star::beans::Property SAL_CALL MixedPropertySetInfo::getPropertyByName(
- const ::rtl::OUString& sName )
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::uno::RuntimeException )
-{
- ::com::sun::star::beans::Property aProp;
-
- // search it as "fix" prop
- if( _aPropertyMap.hasPropertyByName( sName ) )
- return _aPropertyMap.getPropertyByName( sName );
- else
- // search it as "dynamic" prop
- return _xUDProps->getPropertySetInfo()->getPropertyByName(sName);
-}
-
-//-----------------------------------------------------------------------------
-
-::sal_Bool SAL_CALL MixedPropertySetInfo::hasPropertyByName(const ::rtl::OUString& sName)
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _aPropertyMap.hasPropertyByName( sName ) ? // "fix" prop?
- sal_True :
- _xUDProps->getPropertySetInfo()->hasPropertyByName(sName); // "dynamic" prop?
-}
-
-//-----------------------------------------------------------------------------
-
-struct SfxDocumentInfoObject_Impl
-{
- ::osl::Mutex _aMutex;
- ::cppu::OInterfaceContainerHelper _aDisposeContainer;
-
- sal_Bool bDisposed;
-
- // this contains the names of the 4 user defined properties
- // which are accessible via the evil XDocumentInfo interface
- ::rtl::OUString m_UserDefined[FOUR];
-
- // the actual contents
- uno::Reference<document::XDocumentProperties> m_xDocProps;
- SfxItemPropertyMap m_aPropertyMap;
-
- SfxDocumentInfoObject_Impl()
- : _aDisposeContainer( _aMutex )
- , bDisposed(sal_False)
- , m_xDocProps()
- , m_aPropertyMap( lcl_GetDocInfoPropertyMap() )
- {
- // the number of user fields is not changeable from the outside
- // we can't set it too high because every name/value pair will be written to the file (even if empty)
- // currently our dialog has only 4 user keys so 4 is still a reasonable number
- }
-
- /// the initialization function
- void Reset(uno::Reference<document::XDocumentProperties> xDocProps, ::rtl::OUString* pUserDefined = 0);
-};
-
-void SfxDocumentInfoObject_Impl::Reset(uno::Reference<document::XDocumentProperties> xDocProps, ::rtl::OUString* pUserDefined)
-{
- if (pUserDefined == 0) {
- // NB: this is an ugly hack; the "Properties" ui dialog displays
- // exactly 4 user-defined fields and expects these to be available
- // (should be redesigned), but I do not want to do this in
- // DocumentProperties; do it here instead
- uno::Reference<beans::XPropertyAccess> xPropAccess(
- xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertyContainer> xPropContainer(
- xPropAccess, uno::UNO_QUERY_THROW);
- uno::Sequence< beans::PropertyValue >
- props = xPropAccess->getPropertyValues();
- sal_Int32 oldLength = props.getLength();
- if (oldLength < FOUR) {
- std::vector< ::rtl::OUString > names;
- for (sal_Int32 i = 0; i < oldLength; ++i) {
- names.push_back(props[i].Name);
- }
- const ::rtl::OUString sInfo(
- SfxResId(STR_DOCINFO_INFOFIELD).toString());
- for (sal_Int32 i = oldLength; i < FOUR; ++i) {
- ::rtl::OUString sName(sInfo);
- sal_Int32 idx = sName.indexOfAsciiL("%1", 2);
- ::rtl::OUString name = (idx > 0)
- ? sName.replaceAt(idx, 2, ::rtl::OUString::valueOf(i+1))
- : sName + ::rtl::OUString::valueOf(i+1);
- while (std::find(names.begin(), names.end(), name)
- != names.end()) {
- name += ::rtl::OUString("'");
- }
- // FIXME there is a race condition here
- try {
- xPropContainer->addProperty(name,
- beans::PropertyAttribute::REMOVEABLE,
- uno::makeAny(::rtl::OUString("")));
- } catch (const uno::RuntimeException&) {
- throw;
- } catch (const uno::Exception&) {
- // ignore
- }
- }
- }
- props = xPropAccess->getPropertyValues();
- for (sal_Int32 i = 0; i < FOUR; ++i) {
- m_UserDefined[i] = props[i].Name;
- }
- } else {
- std::copy(pUserDefined, pUserDefined+FOUR, m_UserDefined);
- }
- m_xDocProps = xDocProps;
-}
-
-//-----------------------------------------------------------------------------
-
-SfxDocumentInfoObject::SfxDocumentInfoObject()
- : _pImp( new SfxDocumentInfoObject_Impl() )
-{
-}
-
-//-----------------------------------------------------------------------------
-
-SfxDocumentInfoObject::~SfxDocumentInfoObject()
-{
- delete _pImp;
-}
-
-//-----------------------------------------------------------------------------
-
-// ::com::sun::star::lang::XInitialization:
-void SAL_CALL
-SfxDocumentInfoObject::initialize(const uno::Sequence< uno::Any > & aArguments)
- throw (uno::RuntimeException, uno::Exception)
-{
- if (aArguments.getLength() >= 1) {
- uno::Any any = aArguments[0];
- uno::Reference<document::XDocumentProperties> xDoc;
- if (!(any >>= xDoc) || !xDoc.is()) throw lang::IllegalArgumentException(
- ::rtl::OUString(
- "SfxDocumentInfoObject::initialize: no XDocumentProperties given"),
- *this, 0);
- _pImp->Reset(xDoc);
- } else {
- throw lang::IllegalArgumentException(
- ::rtl::OUString(
- "SfxDocumentInfoObject::initialize: no argument given"),
- *this, 0);
- }
-}
-
-// ::com::sun::star::util::XCloneable:
-uno::Reference<util::XCloneable> SAL_CALL
-SfxDocumentInfoObject::createClone() throw (uno::RuntimeException)
-{
- SfxDocumentInfoObject *pNew = new SfxDocumentInfoObject;
- uno::Reference< util::XCloneable >
- xCloneable(_pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- uno::Reference<document::XDocumentProperties> xDocProps(
- xCloneable->createClone(), uno::UNO_QUERY_THROW);
- pNew->_pImp->Reset(xDocProps, _pImp->m_UserDefined);
- return pNew;
-}
-
-// ::com::sun::star::document::XDocumentProperties:
-uno::Reference< document::XDocumentProperties > SAL_CALL
-SfxDocumentInfoObject::getDocumentProperties()
- throw(::com::sun::star::uno::RuntimeException)
-{
- return _pImp->m_xDocProps;
-}
-
-//-----------------------------------------------------------------------------
-
-const SfxDocumentInfoObject& SfxDocumentInfoObject::operator=( const SfxDocumentInfoObject & rOther)
-{
- uno::Reference< util::XCloneable >
- xCloneable(rOther._pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- uno::Reference<document::XDocumentProperties> xDocProps(
- xCloneable->createClone(), uno::UNO_QUERY_THROW);
- _pImp->Reset(xDocProps, rOther._pImp->m_UserDefined);
- return *this;
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::dispose() throw( ::com::sun::star::uno::RuntimeException )
-{
- ::com::sun::star::lang::EventObject aEvent( (::cppu::OWeakObject *)this );
- _pImp->_aDisposeContainer.disposeAndClear( aEvent );
- ::osl::MutexGuard aGuard( _pImp->_aMutex );
- _pImp->m_xDocProps = 0;
- // NB: do not call m_xDocProps->dispose(), there could be other refs
- _pImp->bDisposed = sal_True;
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException )
-{
- _pImp->_aDisposeContainer.addInterface( aListener );
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener) throw( ::com::sun::star::uno::RuntimeException )
-{
- _pImp->_aDisposeContainer.removeInterface( aListener );
-}
-//-----------------------------------------------------------------------------
-
-::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL SfxDocumentInfoObject::getPropertySetInfo() throw( ::com::sun::star::uno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( _pImp->_aMutex );
-
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- MixedPropertySetInfo* pInfo = new MixedPropertySetInfo( lcl_GetDocInfoPropertyMap(), _pImp->m_UserDefined, xPropSet);
- uno::Reference< beans::XPropertySetInfo > xInfo(
- static_cast< beans::XPropertySetInfo* >(pInfo), uno::UNO_QUERY_THROW);
- return xInfo;
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::setPropertyValue(const ::rtl::OUString& aPropertyName, const uno::Any& aValue) throw (
- uno::RuntimeException, beans::UnknownPropertyException,
- beans::PropertyVetoException, lang::IllegalArgumentException,
- lang::WrappedTargetException)
-{
- const SfxItemPropertySimpleEntry* pEntry = _pImp->m_aPropertyMap.getByName( aPropertyName );
- // fix prop!
- if ( pEntry )
- setFastPropertyValue( pEntry->nWID, aValue );
- else
- // dynamic prop!
- {
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- return xPropSet->setPropertyValue(aPropertyName, aValue);
- }
-}
-
-//-----------------------------------------------------------------------------
-
-uno::Any SAL_CALL SfxDocumentInfoObject::getPropertyValue(const ::rtl::OUString& aPropertyName) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{
- const SfxItemPropertySimpleEntry* pEntry = _pImp->m_aPropertyMap.getByName( aPropertyName );
- // fix prop!
- if ( pEntry )
- return getFastPropertyValue( pEntry->nWID );
- else
- // dynamic prop!
- {
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- return xPropSet->getPropertyValue(aPropertyName);
- }
-}
-
-sal_Bool SAL_CALL SfxDocumentInfoObject::isModified() throw(::com::sun::star::uno::RuntimeException)
-{
- uno::Reference<util::XModifiable> xModif(
- _pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- return xModif->isModified();
-}
-
-void SAL_CALL SfxDocumentInfoObject::setModified( sal_Bool bModified )
- throw (::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException)
-{
- uno::Reference<util::XModifiable> xModif(
- _pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- return xModif->setModified(bModified);
-}
-
-void SAL_CALL SfxDocumentInfoObject::addModifyListener( const uno::Reference< util::XModifyListener >& xListener) throw( uno::RuntimeException )
-{
- uno::Reference<util::XModifiable> xModif(
- _pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- return xModif->addModifyListener(xListener);
-}
-
-void SAL_CALL SfxDocumentInfoObject::removeModifyListener( const uno::Reference< util::XModifyListener >& xListener) throw( uno::RuntimeException )
-{
- uno::Reference<util::XModifiable> xModif(
- _pImp->m_xDocProps, uno::UNO_QUERY_THROW);
- return xModif->removeModifyListener(xListener);
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::addPropertyChangeListener(const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener > & ) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::removePropertyChangeListener(const ::rtl::OUString&, const uno::Reference< beans::XPropertyChangeListener > & ) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::addVetoableChangeListener(const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener > & ) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::removeVetoableChangeListener(const ::rtl::OUString&, const uno::Reference< beans::XVetoableChangeListener > & ) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{}
-
-uno::Sequence< beans::PropertyValue > SAL_CALL SfxDocumentInfoObject::getPropertyValues( void ) throw( uno::RuntimeException )
-{
- ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > xInfo = getPropertySetInfo();
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > aProps = xInfo->getProperties();
-
- const ::com::sun::star::beans::Property* pProps = aProps.getConstArray();
- sal_uInt32 nCount = aProps.getLength();
-
- ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >aSeq( nCount );
- ::com::sun::star::beans::PropertyValue* pValues = aSeq.getArray();
-
- for ( sal_uInt32 n = 0; n < nCount; ++n )
- {
- ::com::sun::star::beans::PropertyValue& rCurrValue = pValues[n];
- const ::com::sun::star::beans::Property& rCurrProp = pProps[n];
-
- rCurrValue.Name = rCurrProp.Name;
- rCurrValue.Handle = rCurrProp.Handle;
- rCurrValue.Value = getPropertyValue( rCurrProp.Name );
- }
-
- return aSeq;
-}
-
-void SAL_CALL SfxDocumentInfoObject::setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aProps )
- throw( ::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException )
-{
- const ::com::sun::star::beans::PropertyValue* pProps = aProps.getConstArray();
- sal_uInt32 nCount = aProps.getLength();
-
- for ( sal_uInt32 n = 0; n < nCount; ++n )
- {
- const ::com::sun::star::beans::PropertyValue& rProp = pProps[n];
- setPropertyValue( rProp.Name, rProp.Value );
- }
-}
-
-void SAL_CALL SfxDocumentInfoObject::addProperty(const ::rtl::OUString& sName ,
- sal_Int16 nAttributes ,
- const ::com::sun::star::uno::Any& aDefaultValue)
- throw(::com::sun::star::beans::PropertyExistException ,
- ::com::sun::star::beans::IllegalTypeException ,
- ::com::sun::star::lang::IllegalArgumentException,
- ::com::sun::star::uno::RuntimeException )
-{
- // clash with "fix" properties ?
- sal_Bool bFixProp = _pImp->m_aPropertyMap.getByName( sName ) != 0;
- if ( bFixProp )
- {
- ::rtl::OUStringBuffer sMsg(256);
- sMsg.appendAscii(RTL_CONSTASCII_STRINGPARAM("The property \""));
- sMsg.append(sName);
- sMsg.appendAscii(RTL_CONSTASCII_STRINGPARAM("\" "));
- if ( bFixProp )
- sMsg.appendAscii(RTL_CONSTASCII_STRINGPARAM(" already exists as a fix property. Please have a look into the IDL documentation of the DocumentInfo service."));
-
- throw ::com::sun::star::beans::PropertyExistException(
- sMsg.makeStringAndClear(),
- static_cast< ::cppu::OWeakObject* >(this));
- }
-
- uno::Reference<beans::XPropertyContainer> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- return xPropSet->addProperty(sName, nAttributes, aDefaultValue);
-}
-
-void SAL_CALL SfxDocumentInfoObject::removeProperty(const ::rtl::OUString& sName)
- throw(::com::sun::star::beans::UnknownPropertyException,
- ::com::sun::star::beans::NotRemoveableException ,
- ::com::sun::star::uno::RuntimeException )
-{
- // clash with "fix" properties ?
- sal_Bool bFixProp = _pImp->m_aPropertyMap.getByName( sName ) != 0;
- if ( bFixProp )
- {
- ::rtl::OUStringBuffer sMsg(256);
- sMsg.appendAscii(RTL_CONSTASCII_STRINGPARAM("The property \""));
- sMsg.append(sName);
- sMsg.appendAscii(RTL_CONSTASCII_STRINGPARAM("\" cant be removed. Its a fix property of the DocumentInfo service."));
-
- throw ::com::sun::star::beans::NotRemoveableException(
- sMsg.makeStringAndClear(),
- static_cast< ::cppu::OWeakObject* >(this));
- }
-
- uno::Reference<beans::XPropertyContainer> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- return xPropSet->removeProperty(sName);
-}
-
-sal_Bool equalsDateTime( const util::DateTime& D1, const util::DateTime& D2 )
-{
- return D1.HundredthSeconds == D2.HundredthSeconds &&
- D1.Seconds == D2.Seconds &&
- D1.Minutes == D2.Minutes &&
- D1.Hours == D2.Hours &&
- D1.Day == D2.Day &&
- D1.Month == D2.Month &&
- D1.Year == D2.Year;
-}
-
-void SAL_CALL SfxDocumentInfoObject::setFastPropertyValue(sal_Int32 nHandle, const ::com::sun::star::uno::Any& aValue) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- beans::PropertyVetoException, lang::IllegalArgumentException,
- lang::WrappedTargetException)
-{
- // Attention: Only fix properties should be provided by this method.
- // Dynamic properties has no handle in real ... because it cant be used inside multithreaded environments :-)
-
- ::osl::ClearableMutexGuard aGuard( _pImp->_aMutex );
-
- if ( aValue.getValueType() == ::getCppuType((const ::rtl::OUString*)0) )
- {
- ::rtl::OUString sTemp ;
- aValue >>= sTemp ;
- switch ( nHandle )
- {
- case SID_APPLICATION :
- _pImp->m_xDocProps->setGenerator(sTemp);
- break;
- case WID_FROM :
- {
- if ( _pImp->m_xDocProps->getAuthor() != sTemp )
- _pImp->m_xDocProps->setAuthor(sTemp);
- break;
- }
- case MID_DOCINFO_PRINTEDBY:
- if ( _pImp->m_xDocProps->getPrintedBy() != sTemp )
- _pImp->m_xDocProps->setPrintedBy(sTemp);
- break;
- case MID_DOCINFO_MODIFICATIONAUTHOR:
- if ( _pImp->m_xDocProps->getModifiedBy() != sTemp )
- _pImp->m_xDocProps->setModifiedBy(sTemp);
- break;
- case WID_TITLE :
- {
- if ( _pImp->m_xDocProps->getTitle() != sTemp )
- _pImp->m_xDocProps->setTitle(sTemp);
- break;
- }
- case MID_DOCINFO_SUBJECT :
- if ( _pImp->m_xDocProps->getSubject() != sTemp )
- _pImp->m_xDocProps->setSubject(sTemp);
- break;
- case WID_KEYWORDS :
- {
- _pImp->m_xDocProps->setKeywords(
- ::comphelper::string::convertCommaSeparated(sTemp));
- }
- break;
- case MID_DOCINFO_TEMPLATE:
- if ( _pImp->m_xDocProps->getTemplateName() != sTemp )
- _pImp->m_xDocProps->setTemplateName(sTemp);
- break;
- case SID_TEMPLATE_NAME:
- if ( _pImp->m_xDocProps->getTemplateURL() != sTemp )
- _pImp->m_xDocProps->setTemplateURL(sTemp);
- break;
- case MID_DOCINFO_DESCRIPTION:
- if ( _pImp->m_xDocProps->getDescription() != sTemp )
- _pImp->m_xDocProps->setDescription(sTemp);
- break;
- case MID_DOCINFO_AUTOLOADURL:
- if ( _pImp->m_xDocProps->getAutoloadURL() != sTemp )
- _pImp->m_xDocProps->setAutoloadURL(sTemp);
- break;
- case MID_DOCINFO_DEFAULTTARGET:
- if ( _pImp->m_xDocProps->getDefaultTarget() != sTemp )
- _pImp->m_xDocProps->setDefaultTarget(sTemp);
- break;
- case MID_CATEGORY:
- case MID_MANAGER:
- case MID_COMPANY:
- {
- uno::Reference< document::XCompatWriterDocProperties > xWriterProps( _pImp->m_xDocProps, uno::UNO_QUERY );
- if ( xWriterProps.is() )
- {
- if ( nHandle == MID_CATEGORY )
- xWriterProps->setCategory( sTemp );
- else if ( nHandle == MID_MANAGER )
- xWriterProps->setManager( sTemp );
- else
- xWriterProps->setCompany( sTemp );
- break;
- }
- }
- default:
- break;
- }
- }
- else if ( aValue.getValueType() == ::getCppuType((const ::com::sun::star::util::DateTime*)0) )
- {
- com::sun::star::util::DateTime aTemp;
- aValue >>= aTemp ;
- switch ( nHandle )
- {
- case WID_DATE_CREATED :
- {
- if ( !equalsDateTime(_pImp->m_xDocProps->getCreationDate(), aTemp ) )
- {
- _pImp->m_xDocProps->setCreationDate(aTemp);
- }
- break;
- }
- case WID_DATE_MODIFIED :
- {
- if ( !equalsDateTime(_pImp->m_xDocProps->getModificationDate(), aTemp ) )
- {
- _pImp->m_xDocProps->setModificationDate(aTemp);
- }
- break;
- }
- case MID_DOCINFO_PRINTDATE :
- {
- if ( !equalsDateTime(_pImp->m_xDocProps->getPrintDate(), aTemp ) )
- {
- _pImp->m_xDocProps->setPrintDate(aTemp);
- }
- break;
- }
- case MID_DOCINFO_TEMPLATEDATE :
- {
- if ( !equalsDateTime(_pImp->m_xDocProps->getTemplateDate(), aTemp ) )
- {
- _pImp->m_xDocProps->setTemplateDate(aTemp);
- }
- break;
- }
- default:
- break;
- }
- }
-
- else if ( aValue.getValueType() == ::getBooleanCppuType() )
- {
- sal_Bool bBoolVal = false;
- aValue >>= bBoolVal ;
- switch ( nHandle )
- {
- case MID_DOCINFO_AUTOLOADENABLED:
- // NB: this property does not exist any more
- // it is emulated as enabled iff delay > 0
- if ( bBoolVal && (0 == _pImp->m_xDocProps->getAutoloadSecs()) ) {
- _pImp->m_xDocProps->setAutoloadSecs(60); // default
- } else if ( !bBoolVal && (0 != _pImp->m_xDocProps->getAutoloadSecs()) ) {
- _pImp->m_xDocProps->setAutoloadSecs(0);
- _pImp->m_xDocProps->setAutoloadURL(::rtl::OUString(""));
- }
- break;
- default:
- break;
- }
- }
- else if ( aValue.getValueType() == ::getCppuType((const sal_Int32*)0) )
- {
- sal_Int32 nIntVal = 0;
- aValue >>= nIntVal ;
- switch ( nHandle )
- {
- case MID_DOCINFO_AUTOLOADSECS:
- if ( nIntVal != _pImp->m_xDocProps->getAutoloadSecs())
- _pImp->m_xDocProps->setAutoloadSecs(nIntVal);
- break;
- case MID_DOCINFO_EDITTIME:
- if ( nIntVal != _pImp->m_xDocProps->getEditingDuration())
- _pImp->m_xDocProps->setEditingDuration(nIntVal);
- break;
- default:
- break;
- }
- }
- else if ( aValue.getValueType() == ::getCppuType((const sal_Int16*)0) )
- {
- short nIntVal = 0;
- aValue >>= nIntVal ;
- switch ( nHandle )
- {
- case MID_DOCINFO_REVISION:
- if ( nIntVal != _pImp->m_xDocProps->getEditingCycles())
- _pImp->m_xDocProps->setEditingCycles(nIntVal);
- break;
- default:
- break;
- }
- }
- else if ( aValue.getValueType() == ::getCppuType((const uno::Sequence< beans::NamedValue >*)0) )
- {
- if ( nHandle == MID_DOCINFO_STATISTIC )
- {
- uno::Sequence < beans::NamedValue > aData;
- aValue >>= aData;
- {
- _pImp->m_xDocProps->setDocumentStatistics(aData);
- }
- }
- }
- else if ( aValue.getValueType() == ::getCppuType((const lang::Locale*)0) )
- {
- if ( nHandle == MID_DOCINFO_CHARLOCALE )
- {
- lang::Locale aLocale;
- aValue >>= aLocale;
- lang::Locale oldLocale = _pImp->m_xDocProps->getLanguage();
- if ( aLocale.Language != oldLocale.Language ||
- aLocale.Country != oldLocale.Country ||
- aLocale.Variant != oldLocale.Variant )
- {
- _pImp->m_xDocProps->setLanguage(aLocale);
- }
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-::com::sun::star::uno::Any SAL_CALL SfxDocumentInfoObject::getFastPropertyValue(sal_Int32 nHandle) throw(
- uno::RuntimeException, beans::UnknownPropertyException,
- lang::WrappedTargetException)
-{
- // Attention: Only fix properties should be provided by this method.
- // Dynamic properties has no handle in real ... because it cant be used inside multithreaded environments :-)
-
- ::osl::MutexGuard aGuard( _pImp->_aMutex );
- ::com::sun::star::uno::Any aValue;
- switch ( nHandle )
- {
- case SID_APPLICATION :
- aValue <<= _pImp->m_xDocProps->getGenerator();
- break;
- case WID_CONTENT_TYPE :
-// FIXME this is not available anymore
- aValue <<= ::rtl::OUString();
- break;
- case MID_DOCINFO_REVISION :
- aValue <<= _pImp->m_xDocProps->getEditingCycles();
- break;
- case MID_DOCINFO_EDITTIME :
- aValue <<= _pImp->m_xDocProps->getEditingDuration();
- break;
- case WID_FROM :
- aValue <<= _pImp->m_xDocProps->getAuthor();
- break;
- case WID_DATE_CREATED :
- if ( IsValidDateTime( _pImp->m_xDocProps->getCreationDate() ) )
- aValue <<= _pImp->m_xDocProps->getCreationDate();
- break;
- case WID_TITLE :
- aValue <<= _pImp->m_xDocProps->getTitle();
- break;
- case MID_DOCINFO_SUBJECT:
- aValue <<= _pImp->m_xDocProps->getSubject();
- break;
- case MID_DOCINFO_MODIFICATIONAUTHOR:
- aValue <<= _pImp->m_xDocProps->getModifiedBy();
- break;
- case WID_DATE_MODIFIED :
- if ( IsValidDateTime( _pImp->m_xDocProps->getModificationDate() ) )
- aValue <<= _pImp->m_xDocProps->getModificationDate();
- break;
- case MID_DOCINFO_PRINTEDBY:
- aValue <<= _pImp->m_xDocProps->getPrintedBy();
- break;
- case MID_DOCINFO_PRINTDATE:
- if ( IsValidDateTime( _pImp->m_xDocProps->getPrintDate() ) )
- aValue <<= _pImp->m_xDocProps->getPrintDate();
- break;
- case WID_KEYWORDS :
- aValue <<= ::comphelper::string::convertCommaSeparated(
- _pImp->m_xDocProps->getKeywords());
- break;
- case MID_DOCINFO_DESCRIPTION:
- aValue <<= _pImp->m_xDocProps->getDescription();
- break;
- case MID_DOCINFO_TEMPLATE:
- aValue <<= _pImp->m_xDocProps->getTemplateName();
- break;
- case SID_TEMPLATE_NAME:
- aValue <<= _pImp->m_xDocProps->getTemplateURL();
- break;
- case MID_DOCINFO_TEMPLATEDATE:
- if ( IsValidDateTime( _pImp->m_xDocProps->getTemplateDate() ) )
- aValue <<= _pImp->m_xDocProps->getTemplateDate();
- break;
- case MID_DOCINFO_AUTOLOADENABLED:
- aValue <<= static_cast<sal_Bool>
- ( (_pImp->m_xDocProps->getAutoloadSecs() != 0)
- || !_pImp->m_xDocProps->getAutoloadURL().isEmpty());
- break;
- case MID_DOCINFO_AUTOLOADURL:
- aValue <<= _pImp->m_xDocProps->getAutoloadURL();
- break;
- case MID_DOCINFO_AUTOLOADSECS:
- aValue <<= _pImp->m_xDocProps->getAutoloadSecs();
- break;
- case MID_DOCINFO_DEFAULTTARGET:
- aValue <<= _pImp->m_xDocProps->getDefaultTarget();
- break;
- case MID_DOCINFO_STATISTIC:
- aValue <<= _pImp->m_xDocProps->getDocumentStatistics();
- break;
- case MID_DOCINFO_CHARLOCALE:
- aValue <<= _pImp->m_xDocProps->getLanguage();
- break;
- case MID_CATEGORY:
- case MID_MANAGER:
- case MID_COMPANY:
- {
- uno::Reference< document::XCompatWriterDocProperties > xWriterProps( _pImp->m_xDocProps, uno::UNO_QUERY );
- if ( xWriterProps.is() )
- {
- if ( nHandle == MID_CATEGORY )
- aValue <<= xWriterProps->getCategory();
- else if ( nHandle == MID_MANAGER )
- aValue <<= xWriterProps->getManager();
- else
- aValue <<= xWriterProps->getCompany();
- break;
- }
- }
-
- default:
- aValue <<= ::rtl::OUString();
- break;
- }
-
- return aValue;
-}
-
-//-----------------------------------------------------------------------------
-
-sal_Int16 SAL_CALL SfxDocumentInfoObject::getUserFieldCount() throw( ::com::sun::star::uno::RuntimeException )
-{
- return FOUR;
-}
-
-//-----------------------------------------------------------------------------
-
-::rtl::OUString SAL_CALL SfxDocumentInfoObject::getUserFieldName(sal_Int16 nIndex) throw( ::com::sun::star::uno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( _pImp->_aMutex );
- if (nIndex < FOUR)
- return _pImp->m_UserDefined[nIndex];
- else
- return ::rtl::OUString();
-}
-
-//-----------------------------------------------------------------------------
-
-::rtl::OUString SAL_CALL SfxDocumentInfoObject::getUserFieldValue(sal_Int16 nIndex) throw( ::com::sun::star::uno::RuntimeException )
-{
- ::osl::MutexGuard aGuard( _pImp->_aMutex );
- if (nIndex < FOUR) {
- ::rtl::OUString name = _pImp->m_UserDefined[nIndex];
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
- ::rtl::OUString val;
- try {
- xPropSet->getPropertyValue(name) >>= val;
- return val;
- } catch (const uno::RuntimeException &) {
- throw;
- } catch (const uno::Exception &) {
- return ::rtl::OUString(); // ignore
- }
- } else
- return ::rtl::OUString();
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::setUserFieldName(sal_Int16 nIndex, const ::rtl::OUString& aName ) throw( ::com::sun::star::uno::RuntimeException )
-{
- ::osl::ClearableMutexGuard aGuard( _pImp->_aMutex );
- if (nIndex < FOUR) // yes, four!
- {
- // FIXME this is full of race conditions because the PropertyBag
- // can be accessed from clients of the DocumentProperties!
- ::rtl::OUString name = _pImp->m_UserDefined[nIndex];
- if (name != aName) {
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(),
- uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertyContainer> xPropContainer(
- _pImp->m_xDocProps->getUserDefinedProperties(),
- uno::UNO_QUERY_THROW);
- uno::Any value;
- try {
- value = xPropSet->getPropertyValue(name);
- xPropContainer->removeProperty(name);
- xPropContainer->addProperty(aName,
- beans::PropertyAttribute::REMOVEABLE, value);
- _pImp->m_UserDefined[nIndex] = aName;
- } catch (const beans::UnknownPropertyException&) {
- try {
- xPropContainer->addProperty(aName,
- beans::PropertyAttribute::REMOVEABLE,
- uno::makeAny(::rtl::OUString("")));
- _pImp->m_UserDefined[nIndex] = aName;
- } catch (const beans::PropertyExistException&) {
- _pImp->m_UserDefined[nIndex] = aName;
- // ignore
- }
- } catch (const beans::PropertyExistException&) {
- try {
- xPropContainer->addProperty(name,
- beans::PropertyAttribute::REMOVEABLE, value);
- } catch (const beans::PropertyExistException&) {
- // bugger...
- }
- } catch (const uno::RuntimeException &) {
- throw;
- } catch (const uno::Exception &) {
- // ignore everything else; xPropSet _may_ be corrupted
- }
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxDocumentInfoObject::setUserFieldValue( sal_Int16 nIndex, const ::rtl::OUString& aValue ) throw( ::com::sun::star::uno::RuntimeException )
-{
- ::osl::ClearableMutexGuard aGuard( _pImp->_aMutex );
- if (nIndex < FOUR) // yes, four!
- {
- ::rtl::OUString name = _pImp->m_UserDefined[nIndex];
- uno::Reference<beans::XPropertySet> xPropSet(
- _pImp->m_xDocProps->getUserDefinedProperties(),
- uno::UNO_QUERY_THROW);
- uno::Reference<beans::XPropertyContainer> xPropContainer(
- _pImp->m_xDocProps->getUserDefinedProperties(),
- uno::UNO_QUERY_THROW);
- uno::Any aAny;
- aAny <<= aValue;
- try {
- uno::Any value = xPropSet->getPropertyValue(name);
- if (value != aAny) {
- xPropSet->setPropertyValue(name, aAny);
- }
- } catch (const beans::UnknownPropertyException&) {
- try {
- // someone removed it, add it back again
- xPropContainer->addProperty(name,
- beans::PropertyAttribute::REMOVEABLE, aAny);
- } catch (const uno::RuntimeException &) {
- throw;
- } catch (const uno::Exception &) {
- // ignore everything else
- }
- } catch (const uno::RuntimeException &) {
- throw;
- } catch (const uno::Exception &) {
- // ignore everything else
- }
- }
-}
-
-//-----------------------------------------------------------------------------
-SFX_IMPL_XINTERFACE_2( SfxStandaloneDocumentInfoObject, SfxDocumentInfoObject, ::com::sun::star::lang::XServiceInfo, ::com::sun::star::document::XStandaloneDocumentInfo )
-SFX_IMPL_XTYPEPROVIDER_10( SfxStandaloneDocumentInfoObject, ::com::sun::star::document::XDocumentInfo, ::com::sun::star::lang::XComponent,
- ::com::sun::star::beans::XPropertySet, ::com::sun::star::beans::XFastPropertySet, ::com::sun::star::beans::XPropertyAccess,
- ::com::sun::star::beans::XPropertyContainer, ::com::sun::star::util::XModifiable, ::com::sun::star::util::XModifyBroadcaster,
- ::com::sun::star::document::XStandaloneDocumentInfo, ::com::sun::star::lang::XServiceInfo )
-
-SFX_IMPL_XSERVICEINFO( SfxStandaloneDocumentInfoObject, "com.sun.star.document.StandaloneDocumentInfo", "com.sun.star.comp.sfx2.StandaloneDocumentInfo" )
-SFX_IMPL_SINGLEFACTORY( SfxStandaloneDocumentInfoObject )
-
-SfxStandaloneDocumentInfoObject::SfxStandaloneDocumentInfoObject( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xFactory )
- : SfxDocumentInfoObject()
- , _xFactory( xFactory )
-{
- uno::Reference< lang::XInitialization > xDocProps(
- document::DocumentProperties::create(comphelper::getComponentContext(_xFactory)),
- uno::UNO_QUERY_THROW);
- uno::Any a;
- a <<= xDocProps;
- uno::Sequence<uno::Any> args(1);
- args[0] = a;
- initialize(args);
-}
-
-//-----------------------------------------------------------------------------
-
-SfxStandaloneDocumentInfoObject::~SfxStandaloneDocumentInfoObject()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-uno::Reference< embed::XStorage > GetStorage_Impl( const ::rtl::OUString& rName, sal_Bool bWrite, uno::Reference < lang::XMultiServiceFactory >& xFactory )
-{
- // catch unexpected exceptions under solaris
- // Client code checks the returned reference but is not interested on error details.
- try
- {
- SolarMutexGuard aSolarGuard;
- return ::comphelper::OStorageHelper::GetStorageFromURL(
- rName,
- bWrite ? embed::ElementModes::READWRITE : embed::ElementModes::READ,
- xFactory );
- }
- catch(const uno::Exception&)
- {}
-
- return uno::Reference< embed::XStorage >();
-}
-
-//-----------------------------------------------------------------------------
-
-sal_Int16 SAL_CALL SfxStandaloneDocumentInfoObject::getUserFieldCount() throw( ::com::sun::star::uno::RuntimeException )
-{
- return SfxDocumentInfoObject::getUserFieldCount();
-}
-
-//-----------------------------------------------------------------------------
-
-::rtl::OUString SAL_CALL SfxStandaloneDocumentInfoObject::getUserFieldName(sal_Int16 nIndex) throw( ::com::sun::star::uno::RuntimeException )
-{
- return SfxDocumentInfoObject::getUserFieldName(nIndex);
-}
-
-//-----------------------------------------------------------------------------
-
-::rtl::OUString SAL_CALL SfxStandaloneDocumentInfoObject::getUserFieldValue(sal_Int16 nIndex) throw( ::com::sun::star::uno::RuntimeException )
-{
- return SfxDocumentInfoObject::getUserFieldValue(nIndex);
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxStandaloneDocumentInfoObject::setUserFieldName(sal_Int16 nIndex, const ::rtl::OUString& aName ) throw( ::com::sun::star::uno::RuntimeException )
-{
- SfxDocumentInfoObject::setUserFieldName( nIndex, aName );
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxStandaloneDocumentInfoObject::setUserFieldValue( sal_Int16 nIndex, const ::rtl::OUString& aValue ) throw( ::com::sun::star::uno::RuntimeException )
-{
- SfxDocumentInfoObject::setUserFieldValue( nIndex, aValue );
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxStandaloneDocumentInfoObject::loadFromURL(const ::rtl::OUString& aURL)
- throw( ::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException )
-{
- sal_Bool bOK = sal_False;
-
- ::osl::ClearableMutexGuard aGuard( _pImp->_aMutex );
- uno::Reference< document::XDocumentProperties > xDocProps(
- document::DocumentProperties::create(comphelper::getComponentContext(_xFactory)) );
- _pImp->Reset(xDocProps);
- aGuard.clear();
-
- uno::Reference< embed::XStorage > xStorage = GetStorage_Impl( aURL, sal_False, _xFactory );
- if ( xStorage.is() )
- {
- try
- {
- uno::Sequence<beans::PropertyValue> medium(2);
- medium[0].Name = ::rtl::OUString("DocumentBaseURL");
- medium[0].Value <<= aURL;
- medium[1].Name = ::rtl::OUString("URL");
- medium[1].Value <<= aURL;
- _pImp->m_xDocProps->loadFromStorage(xStorage, medium);
- _pImp->Reset(_pImp->m_xDocProps);
- bOK = sal_True;
- }
- catch( const uno::Exception& )
- {
- }
- }
- else
- {
- uno::Reference < document::XStandaloneDocumentInfo > xBinary( _xFactory->createInstance(
- ::rtl::OUString("com.sun.star.document.BinaryStandaloneDocumentInfo" ) ), uno::UNO_QUERY );
- if ( xBinary.is() )
- {
- xBinary->loadFromURL( aURL );
- bOK = sal_True;
- uno::Reference < document::XStandaloneDocumentInfo > xTarget( static_cast < document::XStandaloneDocumentInfo*> (this), uno::UNO_QUERY );
- Copy( xBinary, xTarget );
- }
- }
-
- if ( !bOK )
- throw task::ErrorCodeIOException( ::rtl::OUString(), uno::Reference< uno::XInterface >(), ERRCODE_IO_CANTREAD );
-}
-
-//-----------------------------------------------------------------------------
-
-void SAL_CALL SfxStandaloneDocumentInfoObject::storeIntoURL(const ::rtl::OUString& aURL) throw( ::com::sun::star::io::IOException )
-{
- sal_Bool bOK = sal_False;
- uno::Reference< embed::XStorage > xStorage = GetStorage_Impl( aURL, sal_True, _xFactory );
- if ( xStorage.is() )
- {
- try
- {
- uno::Sequence<beans::PropertyValue> medium(2);
- medium[0].Name = ::rtl::OUString("DocumentBaseURL");
- medium[0].Value <<= aURL;
- medium[1].Name = ::rtl::OUString("URL");
- medium[1].Value <<= aURL;
-
- _pImp->m_xDocProps->storeToStorage(xStorage, medium);
- bOK = sal_True;
- }
- catch( const io::IOException & )
- {
- throw;
- }
- catch( const uno::RuntimeException& )
- {
- throw;
- }
- catch( const uno::Exception& )
- {
- }
- }
- else
- {
- uno::Reference < document::XStandaloneDocumentInfo > xBinary( _xFactory->createInstance(
- ::rtl::OUString("com.sun.star.document.BinaryStandaloneDocumentInfo" ) ), uno::UNO_QUERY );
- if ( xBinary.is() )
- {
- Copy( this, xBinary );
- xBinary->storeIntoURL( aURL );
- bOK = sal_True;
- }
- }
-
- if ( !bOK )
- throw task::ErrorCodeIOException( ::rtl::OUString(), uno::Reference< uno::XInterface >(), ERRCODE_IO_CANTWRITE );
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/doc/sfxbasemodel.cxx b/sfx2/source/doc/sfxbasemodel.cxx
index 276b1b7bbb09..57e8f27d4609 100644
--- a/sfx2/source/doc/sfxbasemodel.cxx
+++ b/sfx2/source/doc/sfxbasemodel.cxx
@@ -46,6 +46,7 @@
#include <com/sun/star/document/DocumentProperties.hpp>
#include <com/sun/star/frame/XTransientDocumentsDocumentContentFactory.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
+#include <com/sun/star/util/XCloneable.hpp>
#include <comphelper/enumhelper.hxx> // can be removed when this is a "real" service
#include <cppuhelper/interfacecontainer.hxx>
@@ -91,7 +92,6 @@
#include <sfx2/docfile.hxx>
#include <sfx2/dispatch.hxx>
#include <sfx2/request.hxx>
-#include <sfx2/objuno.hxx>
#include <sfx2/printer.hxx>
#include <sfx2/basmgr.hxx>
#include <sfx2/event.hxx>
@@ -187,7 +187,6 @@ struct IMPL_SfxBaseModel_DataContainer : public ::sfx2::IModifiableDocument
::cppu::OMultiTypeInterfaceContainerHelper m_aInterfaceContainer ;
uno::Reference< uno::XInterface > m_xParent ;
uno::Reference< frame::XController > m_xCurrent ;
- uno::Reference< document::XDocumentInfo > m_xDocumentInfo ;
uno::Reference< document::XDocumentProperties > m_xDocumentProperties;
uno::Reference< script::XStarBasicAccess > m_xStarBasicAccess ;
uno::Reference< container::XNameReplace > m_xEvents ;
@@ -813,13 +812,6 @@ void SAL_CALL SfxBaseModel::dispose() throw(::com::sun::star::uno::RuntimeExcept
lang::EventObject aEvent( (frame::XModel *)this );
m_pData->m_aInterfaceContainer.disposeAndClear( aEvent );
- if ( m_pData->m_xDocumentInfo.is() )
- {
- // as long as an SfxObjectShell is assigned to an SfxBaseModel it is still existing here
- // so we can't dispose the shared DocumentInfoObject here
- m_pData->m_xDocumentInfo = 0;
- }
-
m_pData->m_xDocumentProperties.clear();
m_pData->m_xDocumentMetadata.clear();
@@ -859,53 +851,6 @@ void SAL_CALL SfxBaseModel::removeEventListener( const uno::Reference< XEVENTLIS
m_pData->m_aInterfaceContainer.removeInterface( ::getCppuType((const uno::Reference< XEVENTLISTENER >*)0), aListener );
}
-//________________________________________________________________________________________________________
-// document::XDocumentInfoSupplier
-//________________________________________________________________________________________________________
-
-uno::Reference< document::XDocumentInfo > SAL_CALL SfxBaseModel::getDocumentInfo() throw(::com::sun::star::uno::RuntimeException)
-{
- SfxModelGuard aGuard( *this, SfxModelGuard::E_INITIALIZING );
- if ( !m_pData->m_xDocumentInfo.is() )
- {
- // WARNING: this will only work if (when loading a document) the
- // document meta-data has already been read and completely written
- // into the XDocumentProperties at this point
- // ==> DO NOT call getDocumentInfo before document info has been read!
- uno::Reference< document::XDocumentInfo > xDocInfo =
- new SfxDocumentInfoObject;
- uno::Reference< document::XDocumentProperties > xDocProps =
- getDocumentProperties();
- uno::Sequence< uno::Any > args(1);
- args[0] <<= xDocProps;
- uno::Reference< lang::XInitialization > xInit(
- xDocInfo, uno::UNO_QUERY_THROW);
- try {
- xInit->initialize(args);
- ((SfxBaseModel*)this)->m_pData->m_xDocumentInfo = xDocInfo;
- } catch (uno::RuntimeException &) {
- throw;
- } catch (const uno::Exception & e) {
- throw lang::WrappedTargetRuntimeException(::rtl::OUString(
- "SfxBaseModel::getDocumentInfo: cannot initialize"), *this,
- uno::makeAny(e));
- }
- try {
- rtl::OUString aName("MediaType");
- uno::Reference < beans::XPropertySet > xSet(
- getDocumentStorage(), uno::UNO_QUERY_THROW );
- uno::Any aMediaType = xSet->getPropertyValue( aName );
- uno::Reference < beans::XPropertySet > xDocSet(
- m_pData->m_xDocumentInfo, uno::UNO_QUERY_THROW );
- xDocSet->setPropertyValue( aName, aMediaType );
- } catch (uno::Exception &) {
- //ignore
- }
- }
-
- return m_pData->m_xDocumentInfo;
-}
-
void
IMPL_SfxBaseModel_DataContainer::impl_setDocumentProperties(
const uno::Reference< document::XDocumentProperties >& rxNewDocProps)
@@ -3086,47 +3031,28 @@ void SfxBaseModel::impl_store( const ::rtl::OUString& sURL
uno::Sequence< beans::PropertyValue > aOldModifyPasswordInfo = m_pData->m_pObjectShell->GetModifyPasswordInfo();
m_pData->m_pObjectShell->SetModifyPasswordInfo( aModifyPasswordInfo );
- // since saving a document modifies its DocumentInfo, the current
- // DocumentInfo must be saved on "SaveTo", so it can be restored
+ // since saving a document modifies its DocumentProperties, the current
+ // DocumentProperties must be saved on "SaveTo", so it can be restored
// after saving
sal_Bool bCopyTo = bSaveTo ||
m_pData->m_pObjectShell->GetCreateMode() == SFX_CREATE_MODE_EMBEDDED;
uno::Reference<document::XDocumentProperties> xOldDocProps;
- uno::Reference<document::XDocumentInfo> xOldDocInfo;
if ( bCopyTo )
{
xOldDocProps = getDocumentProperties();
- if (m_pData->m_xDocumentInfo.is())
- {
- xOldDocInfo = getDocumentInfo();
- const Reference<util::XCloneable> xCloneable(xOldDocInfo,
- UNO_QUERY_THROW);
- const Reference<document::XDocumentInfo> xNewDocInfo(
- xCloneable->createClone(), UNO_QUERY_THROW);
- const Reference<document::XDocumentPropertiesSupplier> xDPS(
- xNewDocInfo, UNO_QUERY_THROW);
- const Reference<document::XDocumentProperties> xNewDocProps(
- xDPS->getDocumentProperties());
- m_pData->m_xDocumentProperties = xNewDocProps;
- m_pData->m_xDocumentInfo = xNewDocInfo;
- }
- else // try not to create DocumentInfo if it does not exist...
- {
- const Reference<util::XCloneable> xCloneable(xOldDocProps,
- UNO_QUERY_THROW);
- const Reference<document::XDocumentProperties> xNewDocProps(
- xCloneable->createClone(), UNO_QUERY_THROW);
- m_pData->m_xDocumentProperties = xNewDocProps;
- }
+ const Reference<util::XCloneable> xCloneable(xOldDocProps,
+ UNO_QUERY_THROW);
+ const Reference<document::XDocumentProperties> xNewDocProps(
+ xCloneable->createClone(), UNO_QUERY_THROW);
+ m_pData->m_xDocumentProperties = xNewDocProps;
}
sal_Bool bRet = m_pData->m_pObjectShell->APISaveAs_Impl( sURL, aParams );
if ( bCopyTo )
{
- // restore DocumentInfo if a copy was created
+ // restore DocumentProperties if a copy was created
m_pData->m_xDocumentProperties = xOldDocProps;
- m_pData->m_xDocumentInfo = xOldDocInfo;
}
uno::Reference < task::XInteractionHandler > xHandler;