office-gobmx/ucb/source/ucp/gio/gio_provider.cxx

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: */