Kaydet (Commit) ed85e11a authored tarafından Miklos Vajna's avatar Miklos Vajna

embeddedobj: allow creating objects lacking a FileFormatVersion=6800 filter

dbaccess::ODatabaseDocument::loadFromStorage() is still not implemented,
though.

Change-Id: I1be11f2a2274f67dd0a11f96a718394d5f72605f
üst e1b1f18a
......@@ -447,6 +447,10 @@ OUString OCommonEmbeddedObject::GetFilterName( sal_Int32 nVersion ) const
try {
::comphelper::MimeConfigurationHelper aHelper( m_xContext );
aFilterName = aHelper.GetDefaultFilterFromServiceName( GetDocumentServiceName(), nVersion );
// If no filter is found, fall back to the FileFormatVersion=6200 filter, Base only has that.
if (aFilterName.isEmpty() && nVersion == SOFFICE_FILEFORMAT_CURRENT)
aFilterName = aHelper.GetDefaultFilterFromServiceName(GetDocumentServiceName(), SOFFICE_FILEFORMAT_60);
} catch( const uno::Exception& )
{}
}
......
......@@ -26,6 +26,7 @@
#include <comphelper/processfactory.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/documentconstants.hxx>
#include "xfactory.hxx"
#include "commonembobj.hxx"
......@@ -114,6 +115,11 @@ uno::Reference< uno::XInterface > SAL_CALL OOoEmbeddedObjectFactory::createInsta
xSubStorage = uno::Reference< embed::XStorage >();
uno::Sequence< beans::NamedValue > aObject = m_aConfigHelper.GetObjectPropsByMediaType( aMediaType );
// If the sequence is empty, fall back to the FileFormatVersion=6200 filter, Base only has that.
if (!aObject.hasElements() && aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII)
aObject = m_aConfigHelper.GetObjectPropsByMediaType(MIMETYPE_VND_SUN_XML_BASE_ASCII);
if ( !aObject.getLength() )
throw io::IOException(); // unexpected mimetype of the storage
......
......@@ -31,6 +31,7 @@
#include <comphelper/processfactory.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <comphelper/documentconstants.hxx>
#include <xcreator.hxx>
#include <dummyobject.hxx>
......@@ -200,8 +201,14 @@ uno::Reference< uno::XInterface > SAL_CALL UNOEmbeddedObjectCreator::createInsta
OSL_ENSURE( !aMediaType.isEmpty(), "No media type is specified for the object!" );
if ( !aMediaType.isEmpty() && aEmbedFactory.isEmpty() )
{
aEmbedFactory = m_aConfigHelper.GetFactoryNameByMediaType( aMediaType );
// If no factory is found, fall back to the FileFormatVersion=6200 filter, Base only has that.
if (aEmbedFactory.isEmpty() && aMediaType == MIMETYPE_OASIS_OPENDOCUMENT_DATABASE_ASCII)
aEmbedFactory = m_aConfigHelper.GetFactoryNameByMediaType(MIMETYPE_VND_SUN_XML_BASE_ASCII);
}
if ( !aEmbedFactory.isEmpty() )
{
uno::Reference< uno::XInterface > xFact = m_xContext->getServiceManager()->createInstanceWithContext(aEmbedFactory, m_xContext);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment