diff options
Diffstat (limited to 'ucbhelper/workben/myucp/myucp_provider.cxx')
-rw-r--r-- | ucbhelper/workben/myucp/myucp_provider.cxx | 174 |
1 files changed, 174 insertions, 0 deletions
diff --git a/ucbhelper/workben/myucp/myucp_provider.cxx b/ucbhelper/workben/myucp/myucp_provider.cxx new file mode 100644 index 000000000000..268a33c6a19a --- /dev/null +++ b/ucbhelper/workben/myucp/myucp_provider.cxx @@ -0,0 +1,174 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: myucp_provider.cxx,v $ + * $Revision: 1.8 $ + * + * 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. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_ucbhelper.hxx" + +/************************************************************************** + TODO + ************************************************************************** + + *************************************************************************/ + +#include "osl/diagnose.h" +#include "osl/mutex.hxx" + +#include "ucbhelper/contentidentifier.hxx" + +#include "myucp_provider.hxx" +#include "myucp_content.hxx" + +using namespace com::sun::star; + +// @@@ Adjust namespace name. +namespace myucp { + +//========================================================================= +//========================================================================= +// +// ContentProvider Implementation. +// +//========================================================================= +//========================================================================= + +ContentProvider::ContentProvider( + const uno::Reference< lang::XMultiServiceFactory >& rSMgr ) +: ::ucbhelper::ContentProviderImplHelper( rSMgr ) +{ +} + +//========================================================================= +// virtual +ContentProvider::~ContentProvider() +{ +} + +//========================================================================= +// +// XInterface methods. +// +//========================================================================= + +// @@@ Add own interfaces. +XINTERFACE_IMPL_3( ContentProvider, + lang::XTypeProvider, + lang::XServiceInfo, + ucb::XContentProvider ); + +//========================================================================= +// +// XTypeProvider methods. +// +//========================================================================= + +// @@@ Add own interfaces. +XTYPEPROVIDER_IMPL_3( ContentProvider, + lang::XTypeProvider, + lang::XServiceInfo, + ucb::XContentProvider ); + +//========================================================================= +// +// XServiceInfo methods. +// +//========================================================================= + +// @@@ Adjust implementation name. Keep the prefix "com.sun.star.comp."! +// @@@ Adjust service name. +XSERVICEINFO_IMPL_1( ContentProvider, + rtl::OUString::createFromAscii( + "com.sun.star.comp.myucp.ContentProvider" ), + rtl::OUString::createFromAscii( + MYUCP_CONTENT_PROVIDER_SERVICE_NAME ) ); + +//========================================================================= +// +// Service factory implementation. +// +//========================================================================= + +ONE_INSTANCE_SERVICE_FACTORY_IMPL( ContentProvider ); + +//========================================================================= +// +// XContentProvider methods. +// +//========================================================================= + +// virtual +uno::Reference< ucb::XContent > SAL_CALL ContentProvider::queryContent( + const uno::Reference< ucb::XContentIdentifier >& Identifier ) + throw( ucb::IllegalIdentifierException, uno::RuntimeException ) +{ + // Check URL scheme... + + rtl::OUString aScheme( rtl::OUString::createFromAscii( MYUCP_URL_SCHEME ) ); + if ( !Identifier->getContentProviderScheme().equalsIgnoreAsciiCase( aScheme ) ) + throw ucb::IllegalIdentifierException(); + + // @@@ Further id checks may go here... +#if 0 + if ( id-check-failes ) + throw ucb::IllegalIdentifierException(); +#endif + + // @@@ Id normalization may go here... +#if 0 + // Normalize URL and create new Id. + rtl::OUString aCanonicURL = xxxxx( Identifier->getContentIdentifier() ); + uno::Reference< ucb::XContentIdentifier > xCanonicId + = new ::ucbhelper::ContentIdentifier( m_xSMgr, aCanonicURL ); +#else + uno::Reference< ucb::XContentIdentifier > xCanonicId = Identifier; +#endif + + osl::MutexGuard aGuard( m_aMutex ); + + // Check, if a content with given id already exists... + uno::Reference< ucb::XContent > xContent + = queryExistingContent( xCanonicId ).get(); + if ( xContent.is() ) + return xContent; + + // @@@ Decision, which content implementation to instanciate may be + // made here ( in case you have different content classes ). + + // Create a new content. + + xContent = new Content( m_xSMgr, this, xCanonicId ); + registerNewContent( xContent ); + + if ( !xContent->getIdentifier().is() ) + throw ucb::IllegalIdentifierException(); + + return xContent; +} + +} // namespace |