From ebf6c90bb7db49a7aca9e12e74a5df68f8360f1e Mon Sep 17 00:00:00 2001 From: Kurt Zenker Date: Wed, 9 May 2007 12:27:36 +0000 Subject: [PATCH] INTEGRATION: CWS bunoexttm (1.1.2.5.2); FILE ADDED 2007/01/31 11:00:37 kr 1.1.2.5.2.1: fixed: license, warnings; adapted: to EnvDcp; simplified: --- cppuhelper/test/testcmp/TestComponent.cxx | 251 ++++++++++++++++++++++ 1 file changed, 251 insertions(+) create mode 100644 cppuhelper/test/testcmp/TestComponent.cxx diff --git a/cppuhelper/test/testcmp/TestComponent.cxx b/cppuhelper/test/testcmp/TestComponent.cxx new file mode 100644 index 000000000000..d4de5c928548 --- /dev/null +++ b/cppuhelper/test/testcmp/TestComponent.cxx @@ -0,0 +1,251 @@ +/************************************************************************* + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: TestComponent.cxx,v $ + * + * $Revision: 1.2 $ + * + * last change: $Author: kz $ $Date: 2007-05-09 13:27:36 $ + * + * The Contents of this file are made available subject to + * the terms of GNU Lesser General Public License Version 2.1. + * + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2005 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library 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 for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + ************************************************************************/ + +#define CPPUHELPER_TEST_COMPONENT_IMPL +#include "TestComponent.hxx" + + +#include + +#include "osl/thread.h" + +#include "cppuhelper/implbase1.hxx" +#include "cppuhelper/implementationentry.hxx" + +#include "com/sun/star/lang/XMultiComponentFactory.hpp" +#include "com/sun/star/lang/XServiceInfo.hpp" + +#include "com/sun/star/uno/XComponentContext.hpp" + + +#include "cppu/EnvDcp.hxx" + +#include + +using namespace ::com::sun::star; + + +#define LOG_LIFECYCLE_TestComponent +#ifdef LOG_LIFECYCLE_TestComponent +# include +# define LOG_LIFECYCLE_TestComponent_emit(x) x + +#else +# define LOG_LIFECYCLE_TestComponent_emit(x) + +#endif + + +class TestComponent: public cppu::WeakImplHelper1 +{ + rtl::OUString m_implName; + +public: + static uno::Reference create( + uno::Reference const & xCtx + ) + SAL_THROW((uno::Exception)); + + + static uno::Sequence SAL_CALL getSupportedServiceNames_Static(); + + explicit TestComponent(uno::Reference const & xCtx); + virtual ~TestComponent(); + + uno::Any SAL_CALL queryInterface(uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException); + void SAL_CALL release() throw (); + void SAL_CALL acquire() throw (); + + // lang::XServiceInfo + virtual rtl::OUString SAL_CALL getImplementationName() throw (uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService(rtl::OUString const & ServiceName) + throw (uno::RuntimeException); + virtual uno::Sequence SAL_CALL getSupportedServiceNames() + throw (uno::RuntimeException); + +protected: + uno::Reference m_xComponentContext; +}; + + +uno::Reference SAL_CALL TestComponent::create( + uno::Reference const & xCtx +) + SAL_THROW((uno::Exception)) +{ + try + { + return static_cast(new TestComponent(xCtx)); + } + catch (std::bad_alloc &) + { + throw uno::RuntimeException(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("std::bad_alloc")), + uno::Reference()); + } +} + +uno::Sequence SAL_CALL TestComponent::getSupportedServiceNames_Static() +{ + uno::Sequence serviceNames(1); + serviceNames[0] = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.lang.ServiceInfo")); + + return serviceNames; +} + + +TestComponent::TestComponent(uno::Reference const & xCtx) + : m_xComponentContext(xCtx) +{ + LOG_LIFECYCLE_TestComponent_emit(fprintf(stderr, "LIFE: %s -> %p\n", "TestComponent::TestComponent()", this)); +} + +TestComponent::~TestComponent() +{ + LOG_LIFECYCLE_TestComponent_emit(fprintf(stderr, "LIFE: %s -> %p\n", "TestComponent::~TestComponent", this)); +} + +rtl::OUString SAL_CALL TestComponent::getImplementationName() + throw (uno::RuntimeException) +{ + return m_implName; +} + +void SAL_CALL TestComponent::acquire() throw () +{ + cppu::WeakImplHelper1::acquire(); +} + +void SAL_CALL TestComponent::release() throw () +{ + cppu::WeakImplHelper1::release(); +} + +uno::Any SAL_CALL TestComponent::queryInterface(uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) +{ + return cppu::WeakImplHelper1::queryInterface(rType); +} + +sal_Bool SAL_CALL TestComponent::supportsService(rtl::OUString const & ServiceName) + throw (uno::RuntimeException) +{ + uno::Sequence serviceNames = getSupportedServiceNames_Static(); + + for (sal_Int32 n = 0; n < serviceNames.getLength(); ++n) + { + if (serviceNames[n] == ServiceName) + return true; + } + + return false; +} + +uno::Sequence SAL_CALL TestComponent::getSupportedServiceNames() + throw (uno::RuntimeException) +{ + return getSupportedServiceNames_Static(); +} + +extern "C" sal_Bool SAL_CALL component_writeInfo( + void * /*serviceManager*/, + void * /*registryKey*/ +) +{ + g_envDcp = uno::Environment::getCurrent().getTypeName(); + + return true; +} + +extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL component_getFactory( + char const * pImplName, + void * /*serviceManager*/, + void * /*registryKey*/ +) +{ + g_envDcp = uno::Environment::getCurrent().getTypeName(); + + uno::Reference< lang::XSingleComponentFactory > xFactory; + + rtl::OUString uTmp(pImplName, rtl_str_getLength(pImplName), RTL_TEXTENCODING_ASCII_US); + + rtl::OUString uImplName(cppu::EnvDcp::getTypeName(uTmp)); + rtl::OUString cmpName(RTL_CONSTASCII_USTRINGPARAM("impl.test.TestComponent")); + + if (uImplName.equals(cmpName)) + { + xFactory = cppu::createSingleComponentFactory( + TestComponent::create, + uImplName, + TestComponent::getSupportedServiceNames_Static()); + + xFactory->acquire(); + } + + return xFactory.get(); +} + +extern "C" SAL_DLLPUBLIC_EXPORT void SAL_CALL component_getImplementationEnvironmentExt( + sal_Char const ** envTypeName, + uno_Environment ** /*ppEnv*/, + sal_Char const * pImplName, + uno_Environment * /*pSrcEnv*/ +) +{ + rtl::OString purpose; + + if (pImplName) // this is the purpose for a specified impl + { + rtl::OUString uImplName(pImplName, rtl_str_getLength(pImplName), RTL_TEXTENCODING_ASCII_US); + purpose = rtl::OUStringToOString(cppu::EnvDcp::getPurpose(uImplName), RTL_TEXTENCODING_ASCII_US); + } + + if (!purpose.getLength()) + { + char * pPurpose = getenv("TestComponent.uno"); + if (pPurpose) + purpose = rtl::OString(pPurpose); + } + + if (purpose.getLength() == 0) + *envTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; + + else + { + char buff[256]; + strcpy(buff, CPPU_STRINGIFY(CPPU_ENV)); + strcat(buff, purpose.getStr()); + + *envTypeName = strdup(buff); + } +}