129 lines
4.1 KiB
C++
129 lines
4.1 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org 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 version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#include <ucbhelper/contentidentifier.hxx>
|
|
#include <ucbhelper/contenthelper.hxx>
|
|
#include <com/sun/star/ucb/ContentCreationException.hpp>
|
|
#include "gio_provider.hxx"
|
|
#include "gio_content.hxx"
|
|
|
|
#include <stdio.h>
|
|
|
|
using namespace com::sun::star;
|
|
|
|
namespace gio
|
|
{
|
|
uno::Reference< com::sun::star::ucb::XContent > SAL_CALL
|
|
ContentProvider::queryContent(
|
|
const uno::Reference<
|
|
com::sun::star::ucb::XContentIdentifier >& Identifier )
|
|
throw( com::sun::star::ucb::IllegalIdentifierException,
|
|
uno::RuntimeException )
|
|
{
|
|
#ifdef DEBUG
|
|
fprintf(stderr, "QueryContent: '%s'",
|
|
(const sal_Char *)rtl::OUStringToOString
|
|
(Identifier->getContentIdentifier(), RTL_TEXTENCODING_UTF8));
|
|
#endif
|
|
|
|
osl::MutexGuard aGuard( m_aMutex );
|
|
|
|
// Check, if a content with given id already exists...
|
|
uno::Reference< ucb::XContent > xContent = queryExistingContent( Identifier ).get();
|
|
if ( xContent.is() )
|
|
return xContent;
|
|
|
|
try
|
|
{
|
|
xContent = new ::gio::Content(m_xSMgr, this, Identifier);
|
|
}
|
|
catch ( com::sun::star::ucb::ContentCreationException const & )
|
|
{
|
|
throw com::sun::star::ucb::IllegalIdentifierException();
|
|
}
|
|
|
|
if ( !xContent->getIdentifier().is() )
|
|
throw com::sun::star::ucb::IllegalIdentifierException();
|
|
|
|
return xContent;
|
|
}
|
|
|
|
ContentProvider::ContentProvider(
|
|
const uno::Reference< lang::XMultiServiceFactory >& rSMgr )
|
|
: ::ucbhelper::ContentProviderImplHelper( rSMgr )
|
|
{
|
|
}
|
|
|
|
ContentProvider::~ContentProvider()
|
|
{
|
|
}
|
|
|
|
XINTERFACE_IMPL_3( ContentProvider,
|
|
lang::XTypeProvider,
|
|
lang::XServiceInfo,
|
|
com::sun::star::ucb::XContentProvider );
|
|
|
|
XTYPEPROVIDER_IMPL_3( ContentProvider,
|
|
lang::XTypeProvider,
|
|
lang::XServiceInfo,
|
|
com::sun::star::ucb::XContentProvider );
|
|
|
|
XSERVICEINFO_IMPL_1( ContentProvider,
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
|
|
"com.sun.star.comp.GIOContentProvider" )),
|
|
rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
|
|
"com.sun.star.ucb.GIOContentProvider" )) );
|
|
|
|
ONE_INSTANCE_SERVICE_FACTORY_IMPL( ContentProvider );
|
|
|
|
}
|
|
|
|
extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( const sal_Char *pImplName,
|
|
void *pServiceManager, void * )
|
|
{
|
|
void * pRet = 0;
|
|
|
|
uno::Reference< lang::XMultiServiceFactory > xSMgr
|
|
(reinterpret_cast< lang::XMultiServiceFactory * >( pServiceManager ) );
|
|
uno::Reference< lang::XSingleServiceFactory > xFactory;
|
|
|
|
g_type_init();
|
|
|
|
if ( !::gio::ContentProvider::getImplementationName_Static().compareToAscii( pImplName ) )
|
|
xFactory = ::gio::ContentProvider::createServiceFactory( xSMgr );
|
|
|
|
if ( xFactory.is() )
|
|
{
|
|
xFactory->acquire();
|
|
pRet = xFactory.get();
|
|
}
|
|
|
|
return pRet;
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|