Files
libreoffice/include/comphelper/storagehelper.hxx

201 lines
10 KiB
C++
Raw Normal View History

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2012-06-29 14:02:24 +01:00
/*
* 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 .
*/
#ifndef INCLUDED_COMPHELPER_STORAGEHELPER_HXX
#define INCLUDED_COMPHELPER_STORAGEHELPER_HXX
#include <boost/scoped_ptr.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include <com/sun/star/embed/ElementModes.hpp>
#include <comphelper/comphelperdllapi.h>
#define PACKAGE_STORAGE_FORMAT_STRING OUString( "PackageFormat" )
#define ZIP_STORAGE_FORMAT_STRING OUString( "ZipFormat" )
#define OFOPXML_STORAGE_FORMAT_STRING OUString( "OFOPXMLFormat" )
#define PACKAGE_ENCRYPTIONDATA_SHA256UTF8 OUString( "PackageSHA256UTF8EncryptionKey" )
#define PACKAGE_ENCRYPTIONDATA_SHA1UTF8 OUString( "PackageSHA1UTF8EncryptionKey" )
#define PACKAGE_ENCRYPTIONDATA_SHA1MS1252 OUString( "PackageSHA1MS1252EncryptionKey" )
namespace com { namespace sun { namespace star {
namespace beans { struct NamedValue; }
namespace embed { class XStorage; }
namespace io {
class XInputStream;
class XOutputStream;
class XStream;
}
namespace lang { class XSingleServiceFactory; }
namespace uno { class XComponentContext; }
} } }
namespace comphelper {
// Unfortunately - the impl.s of XStorage like to invalidate all
// their sub streams and storages when you release references, so
// it is necessary to keep references to all storages down the
// path - this is 'beautiful' (TM). So we need this ugly hack:
class COMPHELPER_DLLPUBLIC LifecycleProxy
{
private:
class Impl;
public:
::boost::scoped_ptr<Impl> m_pBadness;
LifecycleProxy();
~LifecycleProxy();
// commit the storages: necessary for writes to streams to take effect!
void commitStorages();
};
class COMPHELPER_DLLPUBLIC OStorageHelper
{
public:
static ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory >
GetStorageFactory(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory >
GetFileSystemStorageFactory(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetTemporaryStorage(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
/// this one will only return Storage
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageFromURL(
const OUString& aURL,
sal_Int32 nStorageMode,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
/// this one will return either Storage or FileSystemStorage
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageFromURL2(
const OUString& aURL,
sal_Int32 nStorageMode,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageFromInputStream(
const ::com::sun::star::uno::Reference < ::com::sun::star::io::XInputStream >& xStream,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageFromStream(
const ::com::sun::star::uno::Reference < ::com::sun::star::io::XStream >& xStream,
sal_Int32 nStorageMode = ::com::sun::star::embed::ElementModes::READWRITE,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >() )
throw ( ::com::sun::star::uno::Exception );
static void CopyInputToOutput(
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& xInput,
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutput )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
GetInputStreamFromURL(
const OUString& aURL,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& context )
throw ( ::com::sun::star::uno::Exception );
static void SetCommonStorageEncryptionData(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage,
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >& aEncryptionData )
throw ( ::com::sun::star::uno::Exception );
// the following method supports only storages of OOo formats
static sal_Int32 GetXStorageFormat(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xStorage )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageOfFormatFromURL(
const OUString& aFormat,
const OUString& aURL,
sal_Int32 nStorageMode,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >(),
sal_Bool bRepairStorage = sal_False )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageOfFormatFromInputStream(
const OUString& aFormat,
const ::com::sun::star::uno::Reference < ::com::sun::star::io::XInputStream >& xStream,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >(),
sal_Bool bRepairStorage = sal_False )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
GetStorageOfFormatFromStream(
const OUString& aFormat,
const ::com::sun::star::uno::Reference < ::com::sun::star::io::XStream >& xStream,
sal_Int32 nStorageMode = ::com::sun::star::embed::ElementModes::READWRITE,
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext
= ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >(),
sal_Bool bRepairStorage = sal_False )
throw ( ::com::sun::star::uno::Exception );
static ::com::sun::star::uno::Sequence< ::com::sun::star::beans::NamedValue >
2011-03-17 09:16:41 +01:00
CreatePackageEncryptionData(
const OUString& aPassword );
static sal_Bool IsValidZipEntryFileName( const OUString& aName, sal_Bool bSlashAllowed );
CWS-TOOLING: integrate CWS mav44 2009-01-18 22:39:43 +0100 mav r266467 : #i97073# the soffice file should be a shell script, adjust the plugin 2009-01-18 22:35:15 +0100 mav r266466 : #i97073# the soffice file should be a shell script, integrate fix from hro41 cws 2009-01-16 15:32:10 +0100 mav r266426 : #i96456# fix link resolving 2009-01-16 12:21:39 +0100 mav r266413 : #i97073# the soffice file is no more a shell script 2009-01-16 09:58:05 +0100 mav r266402 : #i95409# add complex test using unicode names 2009-01-15 20:27:03 +0100 mav r266392 : #i95408# fix include list 2009-01-15 20:09:28 +0100 mav r266390 : #i95408# deliver new header 2009-01-15 16:16:33 +0100 mav r266382 : #i95408# rebase to m38 2009-01-15 16:11:16 +0100 mav r266380 : #i95408# rebase to m38 2009-01-15 15:38:16 +0100 mav r266376 : CWS-TOOLING: rebase CWS mav44 to trunk@265758 (milestone: DEV300:m38) 2009-01-14 13:23:55 +0100 mav r266294 : #i97073# let the presentation slideshow be started in window mode in plugin 2009-01-13 17:27:52 +0100 mav r266241 : #i95409#,#i95408# support UTF8 encoding for entry names, check the validity of the entries 2009-01-13 16:35:39 +0100 mav r266236 : #i95408# function to check whether a zip entry name is acceptable 2009-01-13 12:00:18 +0100 mav r266205 : #i94003# a readonly document can not be modified 2009-01-09 13:24:49 +0100 mav r266078 : #i95951# let the title be changed 2009-01-09 11:34:49 +0100 mav r266068 : #i80862# close the link only if was closed by the container, othewise leave it open 2009-01-08 11:30:13 +0100 mav r265989 : #i97071# disable Toolbars during window-based slide show in ActiveX control 2009-01-08 08:23:23 +0100 mav r265983 : #i97071# setVisible does not trigger layout in case there is not MenuBar 2009-01-06 12:39:39 +0100 mav r265908 : #i96185# let the MediaDescriptor get the target URL 2009-01-05 08:46:45 +0100 mav r265856 : #i93473# integrate the patch 2009-01-02 17:45:17 +0100 mav r265845 : #i94468#,#i96456# try to follow links 2009-01-02 16:53:41 +0100 mav r265841 : #i94468#,#i96456# use the same parsing mechanics in sharing control file and document lock file 2009-01-02 16:51:24 +0100 mav r265839 : #i94468#,#i96456# use the same parsing mechanics in sharing control file and document lock file
2009-02-12 10:27:21 +00:00
static sal_Bool IsValidZipEntryFileName( const sal_Unicode *pChar, sal_Int32 nLength, sal_Bool bSlashAllowed );
static sal_Bool PathHasSegment( const OUString& aPath, const OUString& aSegment );
// Methods to allow easy use of hierachical names inside storages
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetStorageAtPath(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage,
const OUString& aPath, sal_uInt32 nOpenMode, LifecycleProxy &rNastiness );
static ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetStreamAtPath(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage,
const OUString& aPath, sal_uInt32 nOpenMode, LifecycleProxy &rNastiness );
static ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > GetStreamAtPackageURL(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage,
const OUString& rURL, sal_uInt32 const nOpenMode,
LifecycleProxy & rNastiness );
};
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */