Files
libreoffice/sfx2/source/doc/doctemplates.cxx

917 lines
30 KiB
C++
Raw Normal View History

2001-03-09 13:50:08 +00:00
/*************************************************************************
*
* $RCSfile: doctemplates.cxx,v $
*
* $Revision: 1.1 $
*
* last change: $Author: dv $ $Date: 2001-03-09 14:50:08 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (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.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#include "doctemplates.hxx"
#ifndef _VOS_MUTEX_HXX_
#include <vos/mutex.hxx>
#endif
#ifndef _TOOLS_DEBUG_HXX
#include <tools/debug.hxx>
#endif
#ifndef _URLOBJ_HXX
#include <tools/urlobj.hxx>
#endif
#ifndef _RTL_USTRING_HXX_
#include <rtl/ustring.hxx>
#endif
#ifndef _SV_RESARY_HXX
#include <vcl/resary.hxx>
#endif
#ifndef _SV_SETTINGS_HXX
#include <vcl/settings.hxx>
#endif
#ifndef _SV_SVAPP_HXX
#include <vcl/svapp.hxx>
#endif
#ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX
#include <svtools/pathoptions.hxx>
#endif
#ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
#include <com/sun/star/beans/PropertyAttribute.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
#include <com/sun/star/beans/XPropertySet.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP_
#include <com/sun/star/beans/XPropertySetInfo.hpp>
#endif
#ifndef _COM_SUN_STAR_BEANS_XPROPERTYCONTAINER_HPP_
#include <com/sun/star/beans/XPropertyContainer.hpp>
#endif
#ifndef _COM_SUN_STAR_IO_XPERSIST_HPP_
#include <com/sun/star/io/XPersist.hpp>
#endif
#ifndef _COM_SUN_STAR_SDBC_XRESULTSET_HPP_
#include <com/sun/star/sdbc/XResultSet.hpp>
#endif
#ifndef _COM_SUN_STAR_SDBC_XROW_HPP_
#include <com/sun/star/sdbc/XRow.hpp>
#endif
#ifndef _COM_SUN_STAR_UCB_XCOMMANDENVIRONMENT_HPP_
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#endif
#ifndef _COM_SUN_STAR_UCB_XCONTENTACCESS_HPP_
#include <com/sun/star/ucb/XContentAccess.hpp>
#endif
#include "sfxresid.hxx"
#include "doc.hrc"
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
#define TEMPLATE_SERVICE_NAME "com.sun.star.frame.DocumentTemplates"
#define TEMPLATE_IMPLEMENTATION_NAME "com.sun.star.comp.sfx2.DocumentTemplates"
#define HIERARCHIE_ROOT_URL "vnd.sun.star.hier:/"
#define TEMPLATE_ROOT_URL "vnd.sun.star.hier:/templates"
#define TEMPLATE_DIR_NAME "templates"
#define TITLE "Title"
#define IS_FOLDER "IsFolder"
#define TARGET_URL "TargetURL"
#define TYPE_FOLDER "application/vnd.sun.star.hier-folder"
#define TYPE_LINK "application/vnd.sun.star.hier-link"
#define TYPE_FSYS_FOLDER "application/vnd.sun.staroffice.fsys-folder"
#define PROPERTY_DIRLIST "DirectoryList"
#define PROPERTY_TYPE "TypeDescription"
#define TARGET_DIR_URL "TargetDirURL"
#define COMMAND_DELETE "delete"
#define COMMAND_TRANSFER "transfer"
#define STANDARD_FOLDER "standard"
#define SERVICENAME_TYPEDETECTION "com.sun.star.document.TypeDetection"
#define TYPEDETECTION_PARAMETER "FileName"
#define SERVICENAME_OLD_TYPEDETECTION "com.sun.star.frame.FrameLoaderFactory"
#define PARAMETER_OLD_TYPEDETECTION "DeepDetection"
#define SERVICENAME_DOCINFO "com.sun.star.document.DocumentProperties"
#define C_DELIM ';'
//-----------------------------------------------------------------------------
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::sdbc;
using namespace ::com::sun::star::ucb;
using namespace ::com::sun::star::uno;
using namespace rtl;
using namespace ucb;
//-----------------------------------------------------------------------------
struct NamePair_Impl
{
OUString maShortName;
OUString maLongName;
};
DECLARE_LIST( NameList_Impl, NamePair_Impl* );
//-----------------------------------------------------------------------------
class SfxDocTplService_Impl
{
Reference< XMultiServiceFactory > mxFactory;
Reference< XPersist > mxInfo;
Sequence< OUString > maTemplateDirs;
NameList_Impl maNames;
Locale maLocale;
Content maRootContent;
sal_Bool mbIsInitialized : 1;
sal_Bool mbLocaleSet : 1;
void init_Impl();
void getDefaultLocale();
void getDirList();
void readFolderList();
OUString getLongName( const OUString& rShortName );
void getTitleFromURL( const OUString& rURL, OUString& aTitle, OUString& aType );
void getFolders( Content& rRoot,
Content& rFolder );
void getTemplates( Content& rTargetFolder,
Content& rParentFolder );
void addEntry( Content& rParentFolder,
const OUString& rTitle,
const OUString& rTargetURL );
void addToStandard( Content& rRoot,
Content& rFolder );
public:
SfxDocTplService_Impl( Reference< XMultiServiceFactory > xFactory );
~SfxDocTplService_Impl();
void init() { if ( !mbIsInitialized ) init_Impl(); }
Content getContent();
void setLocale( const LOCALE & rLocale );
Locale getLocale();
void update();
};
//-----------------------------------------------------------------------------
// private SfxDocTplService_Impl
//-----------------------------------------------------------------------------
void SfxDocTplService_Impl::init_Impl()
{
if ( !mbLocaleSet )
getDefaultLocale();
// convert locale to string
OUString aLang = maLocale.Language;
aLang += OUString( '-' );
aLang += maLocale.Country;
// set maRootContent to the root of the templates hierarchy. Create the
// entry if necessary
Reference < XCommandEnvironment > aCmdEnv;
OUString aRootURL( RTL_CONSTASCII_USTRINGPARAM( TEMPLATE_ROOT_URL ) );
aRootURL += OUString( '/' );
aRootURL += aLang;
if ( Content::create( aRootURL, aCmdEnv, maRootContent ) )
{
mbIsInitialized = sal_True;
}
else
{
try
{
Sequence< OUString > aNames(2);
OUString* pNames = aNames.getArray();
pNames[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( TITLE ) );
pNames[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( IS_FOLDER ) );
Sequence< Any > aValues(2);
Any* pValues = aValues.getArray();
pValues[1] = makeAny( sal_Bool( sal_True ) );
OUString aType( RTL_CONSTASCII_USTRINGPARAM( TYPE_FOLDER ) );
OUString aLangRootURL( RTL_CONSTASCII_USTRINGPARAM( HIERARCHIE_ROOT_URL ) );
aLangRootURL += OUString( RTL_CONSTASCII_USTRINGPARAM( TEMPLATE_DIR_NAME ) );
Content aLangRoot;
if ( ! Content::create( aLangRootURL, aCmdEnv, aLangRoot ) )
{
OUString aHierRootURL( RTL_CONSTASCII_USTRINGPARAM( HIERARCHIE_ROOT_URL ) );
Content aHierRoot( aHierRootURL, aCmdEnv );
pValues[0] = makeAny( OUString( RTL_CONSTASCII_USTRINGPARAM( TEMPLATE_DIR_NAME ) ) );
aHierRoot.insertNewContent( aType, aNames, aValues, aLangRoot );
}
pValues[0] = makeAny( aLang );
aLangRoot.insertNewContent( aType, aNames, aValues, maRootContent );
mbIsInitialized = sal_True;
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "Init_Impl(): Could not create hierarchy entry" );
}
catch( RuntimeException& )
{
DBG_ERRORFILE( "Init_Impl(): got runtime exception" );
}
}
if ( mbIsInitialized )
{
OUString aService( RTL_CONSTASCII_USTRINGPARAM( SERVICENAME_DOCINFO ) );
Reference< XPersist > xInfo( mxFactory->createInstance( aService ), UNO_QUERY );
mxInfo = xInfo;
getDirList();
readFolderList();
update();
}
}
//-----------------------------------------------------------------------------
void SfxDocTplService_Impl::getDefaultLocale()
{
AllSettings aSettings;
maLocale = aSettings.GetLocale();
mbLocaleSet = sal_True;
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::readFolderList()
{
::vos::OGuard aGuard( Application::GetSolarMutex() );
ResStringArray aShortNames( SfxResId( TEMPLATE_SHORT_NAMES_ARY ) );
ResStringArray aLongNames( SfxResId( TEMPLATE_LONG_NAMES_ARY ) );
NamePair_Impl* pPair;
USHORT nCount = Min( aShortNames.Count(), aLongNames.Count() );
for ( USHORT i=0; i<nCount; i++ )
{
pPair = new NamePair_Impl;
pPair->maShortName = aShortNames.GetString( i );
pPair->maLongName = aLongNames.GetString( i );
maNames.Insert( pPair, LIST_APPEND );
}
}
// -----------------------------------------------------------------------
OUString SfxDocTplService_Impl::getLongName( const OUString& rShortName )
{
OUString aRet;
NamePair_Impl *pPair = maNames.First();
while ( pPair )
{
if ( pPair->maShortName == rShortName )
{
aRet = pPair->maLongName;
break;
}
else
pPair = maNames.Next();
}
if ( !aRet.len() )
aRet = rShortName;
return aRet;
}
//-----------------------------------------------------------------------------
void SfxDocTplService_Impl::getDirList()
{
OUString aPropName( RTL_CONSTASCII_USTRINGPARAM( PROPERTY_DIRLIST ) );
sal_Bool bHasProperty = sal_False;
Any aValue;
// Get the template dir list
try
{
Reference< XPropertySetInfo > aPropSet = maRootContent.getProperties();
if ( aPropSet.is() && aPropSet->hasPropertyByName( aPropName ) )
{
aValue = maRootContent.getPropertyValue( aPropName );
aValue >>= maTemplateDirs;
bHasProperty = sal_True;
}
}
catch ( CommandAbortedException& ) {}
catch ( RuntimeException& ) {}
catch ( Exception& ) {}
if ( bHasProperty )
return;
INetURLObject aURL;
String aDirs = SvtPathOptions().GetTemplatePath();
USHORT nCount = aDirs.GetTokenCount( C_DELIM );
maTemplateDirs = Sequence< OUString >( nCount );
OUString* pDirs = maTemplateDirs.getArray();
for ( USHORT i=0; i<nCount; i++ )
{
aURL.SetSmartProtocol( INET_PROT_FILE );
aURL.SetURL( aDirs.GetToken( i, C_DELIM ) );
pDirs[i] = aURL.GetMainURL();
}
// Store the template dir list
try
{
aValue <<= maTemplateDirs;
Reference< XPropertyContainer > xProperties( maRootContent.get(), UNO_QUERY );
if ( xProperties.is() )
{
try
{
xProperties->addProperty( aPropName, PropertyAttribute::MAYBEVOID, aValue );
}
catch( PropertyExistException& ) {}
catch( IllegalTypeException& ) { DBG_ERRORFILE( "IllegalTypeException" ); }
catch( IllegalArgumentException& ) { DBG_ERRORFILE( "IllegalArgumentException" ); }
}
maRootContent.setPropertyValue( aPropName, aValue );
}
catch ( CommandAbortedException& ) {}
catch ( RuntimeException& ) {}
catch ( Exception& ) {}
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::getFolders( Content& rRoot,
Content& rFolder )
{
Reference< XResultSet > xResultSet;
Sequence< OUString > aProps(1);
OUString* pProps = aProps.getArray();
pProps[0] = OUString::createFromAscii( TITLE );
addToStandard( rRoot, rFolder );
try
{
ResultSetInclude eInclude = INCLUDE_FOLDERS_ONLY;
xResultSet = rFolder.createCursor( aProps, eInclude );
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "createCursor: CommandAbortedException" );
}
catch ( Exception& ) {}
if ( xResultSet.is() )
{
Reference< XCommandEnvironment > aCmdEnv;
Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY );
Reference< XRow > xRow( xResultSet, UNO_QUERY );
OUString aFolderURL = rFolder.get()->getIdentifier()->getContentIdentifier();
OUString aRootURL = rRoot.get()->getIdentifier()->getContentIdentifier();
aRootURL += OUString( '/' );
Content aFolder;
Sequence< OUString > aNames(2);
OUString* pNames = aNames.getArray();
pNames[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( TITLE ) );
pNames[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( IS_FOLDER ) );
OUString aAdditionalProp( RTL_CONSTASCII_USTRINGPARAM( TARGET_DIR_URL ) );
Sequence< Any > aValues(2);
Any* pValues = aValues.getArray();
OUString aType = OUString( RTL_CONSTASCII_USTRINGPARAM( TYPE_FOLDER ) );
try
{
while ( xResultSet->next() )
{
OUString aTitle( xRow->getString(1) );
OUString aId = xContentAccess->queryContentIdentifierString();
if ( aTitle.compareToAscii( "wizard" ) == 0 )
continue;
else if ( aTitle.compareToAscii( "internal" ) == 0 )
continue;
aTitle = getLongName( aTitle );
INetURLObject aNewFolderObj( aRootURL );
aNewFolderObj.insertName( aTitle, false,
INetURLObject::LAST_SEGMENT, true,
INetURLObject::ENCODE_ALL );
OUString aNewFolderURL = aNewFolderObj.GetMainURL();
if ( ! Content::create( aNewFolderURL, aCmdEnv, aFolder ) )
{
pValues[0] = makeAny( aTitle );
pValues[1] = makeAny( sal_Bool( sal_True ) );
try
{
rRoot.insertNewContent( aType, aNames, aValues, aFolder );
Reference< XPropertySetInfo > xPropSet = aFolder.getProperties();
if ( xPropSet.is() )
{
if ( ! xPropSet->hasPropertyByName( aAdditionalProp ) )
{
Reference< XPropertyContainer > xFolderProp( aFolder.get(), UNO_QUERY );
if ( xFolderProp.is() )
{
try
{
xFolderProp->addProperty( aAdditionalProp,
PropertyAttribute::MAYBEVOID,
makeAny( aId ) );
}
catch( PropertyExistException& ) {}
catch( IllegalTypeException& ) { DBG_ERRORFILE( "IllegalTypeException" ); }
catch( IllegalArgumentException& ) { DBG_ERRORFILE( "IllegalArgumentException" ); }
}
}
aFolder.setPropertyValue( aAdditionalProp, makeAny( aId ) );
}
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "CommandAbortedException" );
}
}
Content aSubFolder( xContentAccess->queryContent(), aCmdEnv );
getTemplates( aSubFolder, aFolder );
}
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "GetFolders::next(): CommandAbortedException" );
}
catch ( Exception& ) {}
}
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::getTemplates( Content& rTargetFolder,
Content& rParentFolder )
{
Reference< XResultSet > xResultSet;
Sequence< OUString > aProps(1);
OUString* pProps = aProps.getArray();
pProps[0] = OUString::createFromAscii( TITLE );
try
{
ResultSetInclude eInclude = INCLUDE_DOCUMENTS_ONLY;
xResultSet = rTargetFolder.createCursor( aProps, eInclude );
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "createCursor: CommandAbortedException" );
}
catch ( Exception& ) {}
if ( xResultSet.is() )
{
Reference< XContentAccess > xContentAccess( xResultSet, UNO_QUERY );
Reference< XRow > xRow( xResultSet, UNO_QUERY );
try
{
while ( xResultSet->next() )
{
OUString aTitle( xRow->getString(1) );
if ( aTitle.compareToAscii( "sfx.tlx" ) == 0 )
continue;
OUString aId = xContentAccess->queryContentIdentifierString();
OUString aFullTitle;
OUString aType;
getTitleFromURL( aId, aFullTitle, aType );
if ( aFullTitle.len() )
aTitle = aFullTitle;
addEntry( rParentFolder, aTitle, aId );
}
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "XContentAccess::next(): CommandAbortedException" );
}
catch ( Exception& ) {}
}
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::getTitleFromURL( const OUString& rURL, OUString& aTitle, OUString& aType )
{
if ( mxInfo.is() )
{
try
{
mxInfo->read( rURL );
Reference< XPropertySet > aPropSet( mxInfo, UNO_QUERY );
if ( aPropSet.is() )
{
OUString aPropName( RTL_CONSTASCII_USTRINGPARAM( TITLE ) );
Any aValue = aPropSet->getPropertyValue( aPropName );
aValue >>= aTitle;
aPropName = OUString( RTL_CONSTASCII_USTRINGPARAM( "MIMEType" ) );
aValue = aPropSet->getPropertyValue( aPropName );
aValue >>= aType;
}
}
catch ( IOException& ) {}
catch ( UnknownPropertyException& ) {}
catch ( Exception& ) {}
}
if ( ! aTitle.len() )
{
INetURLObject aURL( rURL );
aURL.CutExtension();
aTitle = aURL.GetName();
}
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::addEntry( Content& rParentFolder,
const OUString& rTitle,
const OUString& rTargetURL )
{
INetURLObject aLinkObj( rParentFolder.getURL() );
aLinkObj.insertName( rTitle, false,
INetURLObject::LAST_SEGMENT, true,
INetURLObject::ENCODE_ALL );
OUString aLinkURL = aLinkObj.GetMainURL();
Content aLink;
Reference< XCommandEnvironment > aCmdEnv;
if ( ! Content::create( aLinkURL, aCmdEnv, aLink ) )
{
Sequence< OUString > aNames(3);
OUString* pNames = aNames.getArray();
pNames[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( TITLE ) );
pNames[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( IS_FOLDER ) );
pNames[2] = OUString( RTL_CONSTASCII_USTRINGPARAM( TARGET_URL ) );
Sequence< Any > aValues(3);
Any* pValues = aValues.getArray();
pValues[0] = makeAny( rTitle );
pValues[1] = makeAny( sal_Bool( sal_False ) );
pValues[2] = makeAny( rTargetURL );
OUString aType( RTL_CONSTASCII_USTRINGPARAM( TYPE_LINK ) );
try
{
rParentFolder.insertNewContent( aType, aNames, aValues, aLink );
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "CommandAbortedException" );
}
}
}
// -----------------------------------------------------------------------
void SfxDocTplService_Impl::addToStandard( Content& rRoot,
Content& rFolder )
{
OUString aNewFolderURL;
OUString aTitle = getLongName( OUString( RTL_CONSTASCII_USTRINGPARAM( STANDARD_FOLDER ) ) );
OUString aFolderURL = rFolder.get()->getIdentifier()->getContentIdentifier();
Content aFolder;
OUString aRootURL = rRoot.get()->getIdentifier()->getContentIdentifier();
INetURLObject aNewFolderObj( aRootURL );
aNewFolderObj.insertName( aTitle, false,
INetURLObject::LAST_SEGMENT, true,
INetURLObject::ENCODE_ALL );
aNewFolderURL = aNewFolderObj.GetMainURL();
Reference< XCommandEnvironment > aCmdEnv;
if ( ! Content::create( aNewFolderURL, aCmdEnv, aFolder ) )
{
OUString aType = OUString( RTL_CONSTASCII_USTRINGPARAM( TYPE_FOLDER ) );
Sequence< OUString > aNames(2);
OUString* pNames = aNames.getArray();
pNames[0] = OUString( RTL_CONSTASCII_USTRINGPARAM( TITLE ) );
pNames[1] = OUString( RTL_CONSTASCII_USTRINGPARAM( IS_FOLDER ) );
Sequence< Any > aValues(2);
Any* pValues = aValues.getArray();
pValues[0] = makeAny( aTitle );
pValues[1] = makeAny( sal_Bool( sal_True ) );
try
{
rRoot.insertNewContent( aType, aNames, aValues, aFolder );
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "CommandAbortedException" );
return;
}
catch( Exception& ) { return; }
}
// Always set the target URL, because the last one should win!
OUString aAdditionalProp( RTL_CONSTASCII_USTRINGPARAM( TARGET_DIR_URL ) );
try
{
Reference< XPropertySetInfo > xPropSet = aFolder.getProperties();
if ( xPropSet.is() )
{
if ( ! xPropSet->hasPropertyByName( aAdditionalProp ) )
{
Reference< XPropertyContainer > xFolderProp( aFolder.get(), UNO_QUERY );
if ( xFolderProp.is() )
{
try
{
xFolderProp->addProperty( aAdditionalProp,
PropertyAttribute::MAYBEVOID,
makeAny( aFolderURL ) );
}
catch( PropertyExistException& ) {}
catch( IllegalTypeException& ) { DBG_ERRORFILE( "IllegalTypeException" ); }
catch( IllegalArgumentException& ) { DBG_ERRORFILE( "IllegalArgumentException" ); }
}
}
aFolder.setPropertyValue( aAdditionalProp, makeAny( aFolderURL ) );
}
}
catch( CommandAbortedException& )
{
DBG_ERRORFILE( "CommandAbortedException" );
}
catch( Exception& ) {}
getTemplates( rFolder, aFolder );
}
//-----------------------------------------------------------------------------
// public SfxDocTplService_Impl
//-----------------------------------------------------------------------------
SfxDocTplService_Impl::SfxDocTplService_Impl( Reference< XMultiServiceFactory > xFactory )
{
mxFactory = xFactory;
mbIsInitialized = sal_False;
mbLocaleSet = sal_False;
}
//-----------------------------------------------------------------------------
SfxDocTplService_Impl::~SfxDocTplService_Impl()
{
}
//-----------------------------------------------------------------------------
Locale SfxDocTplService_Impl::getLocale()
{
if ( !mbLocaleSet )
getDefaultLocale();
return maLocale;
}
//-----------------------------------------------------------------------------
void SfxDocTplService_Impl::setLocale( const Locale &rLocale )
{
if ( mbLocaleSet &&
( maLocale.Language != rLocale.Language ) &&
( maLocale.Country != rLocale.Country ) )
mbIsInitialized = sal_False;
maLocale = rLocale;
mbLocaleSet = sal_True;
}
//-----------------------------------------------------------------------------
Content SfxDocTplService_Impl::getContent()
{
init();
return maRootContent;
}
//-----------------------------------------------------------------------------
void SfxDocTplService_Impl::update()
{
init();
Reference< XCommandEnvironment > aCmdEnv;
sal_Int32 nCount = maTemplateDirs.getLength();
OUString* pDirs = maTemplateDirs.getArray();
Content aDirContent;
while ( nCount )
{
nCount--;
if ( Content::create( pDirs[ nCount ], aCmdEnv, aDirContent ) )
getFolders( maRootContent, aDirContent );
}
}
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
SFX_IMPL_XSERVICEINFO( SfxDocTplService, TEMPLATE_SERVICE_NAME, TEMPLATE_IMPLEMENTATION_NAME )
SFX_IMPL_SINGLEFACTORY( SfxDocTplService )
//-----------------------------------------------------------------------------
SfxDocTplService::SfxDocTplService( const Reference< XMultiServiceFactory >& xFactory )
{
pImp = new SfxDocTplService_Impl( xFactory );
}
//-----------------------------------------------------------------------------
SfxDocTplService::~SfxDocTplService()
{
delete pImp;
}
//-----------------------------------------------------------------------------
//--- XLocalizable ---
//-----------------------------------------------------------------------------
LOCALE SAL_CALL SfxDocTplService::getLocale()
throw( RUNTIMEEXCEPTION )
{
return pImp->getLocale();
}
//-----------------------------------------------------------------------------
void SAL_CALL SfxDocTplService::setLocale( const LOCALE & rLocale )
throw( RUNTIMEEXCEPTION )
{
pImp->setLocale( rLocale );
}
//-----------------------------------------------------------------------------
//--- XDocumentTemplates ---
//-----------------------------------------------------------------------------
Reference< XCONTENT > SAL_CALL SfxDocTplService::getContent()
throw( RUNTIMEEXCEPTION )
{
return pImp->getContent().get();
}
//-----------------------------------------------------------------------------
sal_Bool SAL_CALL SfxDocTplService::storeTemplate( const ::rtl::OUString& GroupName,
const ::rtl::OUString& TemplateName,
const Reference< XSTORABLE >& Storable )
throw( RUNTIMEEXCEPTION )
{
return sal_False;
}
//-----------------------------------------------------------------------------
sal_Bool SAL_CALL SfxDocTplService::addTemplate( const ::rtl::OUString& GroupName,
const ::rtl::OUString& TemplateName,
const ::rtl::OUString& SourceURL )
throw( RUNTIMEEXCEPTION )
{
return sal_False;
}
//-----------------------------------------------------------------------------
sal_Bool SAL_CALL SfxDocTplService::removeTemplate( const ::rtl::OUString& GroupName,
const ::rtl::OUString& TemplateName )
throw( RUNTIMEEXCEPTION )
{
return sal_False;
}
//-----------------------------------------------------------------------------
sal_Bool SAL_CALL SfxDocTplService::addGroup( const ::rtl::OUString& GroupName )
throw( RUNTIMEEXCEPTION )
{
return sal_False;
}
//-----------------------------------------------------------------------------
sal_Bool SAL_CALL SfxDocTplService::removeGroup( const ::rtl::OUString& GroupName )
throw( RUNTIMEEXCEPTION )
{
return sal_False;
}
//-----------------------------------------------------------------------------
void SAL_CALL SfxDocTplService::update()
throw( RUNTIMEEXCEPTION )
{
pImp->update();
}