diff options
Diffstat (limited to '')
-rw-r--r-- | dtrans/source/cnttype/mcnttfactory.cxx | 68 | ||||
-rw-r--r-- | dtrans/source/cnttype/mcnttfactory.hxx | 55 | ||||
-rw-r--r-- | dtrans/source/cnttype/mcnttype.cxx | 92 | ||||
-rw-r--r-- | dtrans/source/cnttype/mcnttype.hxx | 61 | ||||
-rw-r--r-- | dtrans/source/cnttype/mctfentry.cxx | 78 | ||||
-rw-r--r-- | dtrans/source/cnttype/wbench/makefile.mk | 44 | ||||
-rw-r--r-- | dtrans/source/cnttype/wbench/testcnttype.cxx | 186 |
7 files changed, 584 insertions, 0 deletions
diff --git a/dtrans/source/cnttype/mcnttfactory.cxx b/dtrans/source/cnttype/mcnttfactory.cxx new file mode 100644 index 000000000..49db62746 --- /dev/null +++ b/dtrans/source/cnttype/mcnttfactory.cxx @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <cppuhelper/supportsservice.hxx> +#include "mcnttfactory.hxx" +#include "mcnttype.hxx" + +#define MIMECONTENTTYPEFACTORY_IMPL_NAME "com.sun.star.datatransfer.MimeCntTypeFactory" + +using namespace ::osl; +using namespace ::cppu; +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::datatransfer; + +namespace +{ + Sequence< OUString > MimeContentTypeFactory_getSupportedServiceNames( ) + { + Sequence< OUString > aRet { "com.sun.star.datatransfer.MimeContentTypeFactory" }; + return aRet; + } +} + +CMimeContentTypeFactory::CMimeContentTypeFactory() +{ +} + +Reference< XMimeContentType > CMimeContentTypeFactory::createMimeContentType( const OUString& aContentType ) +{ + MutexGuard aGuard( m_aMutex ); + return Reference< XMimeContentType >( new CMimeContentType( aContentType ) ); +} + +// XServiceInfo + +OUString SAL_CALL CMimeContentTypeFactory::getImplementationName( ) +{ + return MIMECONTENTTYPEFACTORY_IMPL_NAME; +} + +sal_Bool SAL_CALL CMimeContentTypeFactory::supportsService( const OUString& ServiceName ) +{ + return cppu::supportsService(this, ServiceName); +} + +Sequence< OUString > SAL_CALL CMimeContentTypeFactory::getSupportedServiceNames( ) +{ + return MimeContentTypeFactory_getSupportedServiceNames( ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dtrans/source/cnttype/mcnttfactory.hxx b/dtrans/source/cnttype/mcnttfactory.hxx new file mode 100644 index 000000000..d79cd6063 --- /dev/null +++ b/dtrans/source/cnttype/mcnttfactory.hxx @@ -0,0 +1,55 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_DTRANS_SOURCE_CNTTYPE_MCNTTFACTORY_HXX +#define INCLUDED_DTRANS_SOURCE_CNTTYPE_MCNTTFACTORY_HXX + +#include <rtl/ustring.hxx> +#include <sal/types.h> +#include <cppuhelper/implbase.hxx> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp> + +class CMimeContentTypeFactory : public + cppu::WeakImplHelper< css::datatransfer::XMimeContentTypeFactory, + css::lang::XServiceInfo > +{ + +public: + CMimeContentTypeFactory(); + + // XMimeContentTypeFactory + + virtual css::uno::Reference< css::datatransfer::XMimeContentType > SAL_CALL createMimeContentType( const OUString& aContentType ) override; + + // XServiceInfo + + virtual OUString SAL_CALL getImplementationName( ) override; + + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; + +private: + ::osl::Mutex m_aMutex; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dtrans/source/cnttype/mcnttype.cxx b/dtrans/source/cnttype/mcnttype.cxx new file mode 100644 index 000000000..8b35abb23 --- /dev/null +++ b/dtrans/source/cnttype/mcnttype.cxx @@ -0,0 +1,92 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <sal/config.h> + +#include <com/sun/star/container/NoSuchElementException.hpp> +#include <comphelper/sequence.hxx> +#include <rtl/ustring.hxx> +#include <tools/inetmime.hxx> + +#include "mcnttype.hxx" + +using namespace com::sun::star::uno; +using namespace com::sun::star::container; +using namespace std; + +CMimeContentType::CMimeContentType( const OUString& aCntType ) +{ + init( aCntType ); +} + +OUString SAL_CALL CMimeContentType::getMediaType( ) +{ + return m_MediaType; +} + +OUString SAL_CALL CMimeContentType::getMediaSubtype( ) +{ + return m_MediaSubtype; +} + +OUString SAL_CALL CMimeContentType::getFullMediaType( ) +{ + return m_MediaType + "/" + m_MediaSubtype; +} + +Sequence< OUString > SAL_CALL CMimeContentType::getParameters( ) +{ + return comphelper::mapKeysToSequence(m_ParameterMap); +} + +sal_Bool SAL_CALL CMimeContentType::hasParameter( const OUString& aName ) +{ + return ( m_ParameterMap.end( ) != m_ParameterMap.find( aName.toAsciiLowerCase() ) ); +} + +OUString SAL_CALL CMimeContentType::getParameterValue( const OUString& aName ) +{ + auto const lower = aName.toAsciiLowerCase(); + + if ( !hasParameter( lower ) ) + throw NoSuchElementException( ); + + return m_ParameterMap.find( lower )->second; +} + +void CMimeContentType::init( const OUString& aCntType ) +{ + INetContentTypeParameterList params; + if (INetMIME::scanContentType(aCntType, &m_MediaType, &m_MediaSubtype, ¶ms) + != aCntType.getStr() + aCntType.getLength()) + { + throw css::lang::IllegalArgumentException( + "illegal media type " + aCntType, css::uno::Reference<css::uno::XInterface>(), -1); + } + for (auto const & i: params) { + if (!i.second.m_bConverted) { + throw css::lang::IllegalArgumentException( + "illegal parameter value in media type " + aCntType, + css::uno::Reference<css::uno::XInterface>(), -1); + } + m_ParameterMap[OUString::fromUtf8(i.first)] = i.second.m_sValue; + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dtrans/source/cnttype/mcnttype.hxx b/dtrans/source/cnttype/mcnttype.hxx new file mode 100644 index 000000000..6b2dd4c8e --- /dev/null +++ b/dtrans/source/cnttype/mcnttype.hxx @@ -0,0 +1,61 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef INCLUDED_DTRANS_SOURCE_CNTTYPE_MCNTTYPE_HXX +#define INCLUDED_DTRANS_SOURCE_CNTTYPE_MCNTTYPE_HXX + +#include <cppuhelper/implbase.hxx> +#include <rtl/ustring.hxx> +#include <sal/types.h> +#include <com/sun/star/lang/IllegalArgumentException.hpp> +#include <com/sun/star/datatransfer/XMimeContentType.hpp> + +#include <map> + +class CMimeContentType : public + cppu::WeakImplHelper< css::datatransfer::XMimeContentType > +{ +public: + explicit CMimeContentType(const OUString& rCntType); + + // XMimeContentType + + virtual OUString SAL_CALL getMediaType( ) override; + virtual OUString SAL_CALL getMediaSubtype( ) override; + virtual OUString SAL_CALL getFullMediaType( ) override; + + virtual css::uno::Sequence< OUString > SAL_CALL getParameters( ) override; + + virtual sal_Bool SAL_CALL hasParameter( const OUString& aName ) override; + + virtual OUString SAL_CALL getParameterValue( const OUString& aName ) override; + +private: + /// @throws css::lang::IllegalArgumentException + void init( const OUString& aCntType ); + +private: + OUString m_MediaType; + OUString m_MediaSubtype; + std::map< OUString, OUString > m_ParameterMap; +}; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dtrans/source/cnttype/mctfentry.cxx b/dtrans/source/cnttype/mctfentry.cxx new file mode 100644 index 000000000..43d165876 --- /dev/null +++ b/dtrans/source/cnttype/mctfentry.cxx @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <cppuhelper/factory.hxx> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <com/sun/star/container/XSet.hpp> +#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp> +#include "mcnttfactory.hxx" + +#define MIMECONTENTTYPEFACTORY_IMPL_NAME "com.sun.star.datatransfer.MimeCntTypeFactory" + +using namespace ::cppu; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::registry; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::datatransfer; + +namespace +{ + + // functions to create a new Clipboard instance; is needed by factory helper implementation + // @param rServiceManager - service manager, useful if the component needs other uno services + // so we should give it to every UNO-Implementation component + + Reference< XInterface > createInstance( const Reference< XMultiServiceFactory >& ) + { + return Reference< XInterface >( static_cast< XMimeContentTypeFactory* >( new CMimeContentTypeFactory() ) ); + } +} + +extern "C" +{ + +// component_getFactory +// returns a factory to create XFilePicker-Services + +SAL_DLLPUBLIC_EXPORT void* mcnttype_component_getFactory( const char* pImplName, void* pSrvManager, void* /*pRegistryKey*/ ) +{ + void* pRet = nullptr; + + if ( pSrvManager && ( 0 == rtl_str_compare( pImplName, MIMECONTENTTYPEFACTORY_IMPL_NAME ) ) ) + { + Sequence<OUString> aSNS { "com.sun.star.datatransfer.MimeContentTypeFactory" }; + + Reference< XSingleServiceFactory > xFactory ( createSingleFactory( + static_cast< XMultiServiceFactory* > ( pSrvManager ), + OUString::createFromAscii( pImplName ), + createInstance, + aSNS ) ); + if ( xFactory.is() ) + { + xFactory->acquire(); + pRet = xFactory.get(); + } + } + + return pRet; +} + +} // extern "C" + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/dtrans/source/cnttype/wbench/makefile.mk b/dtrans/source/cnttype/wbench/makefile.mk new file mode 100644 index 000000000..ad1e635eb --- /dev/null +++ b/dtrans/source/cnttype/wbench/makefile.mk @@ -0,0 +1,44 @@ +# +# This file is part of the LibreOffice project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This file incorporates work covered by the following license notice: +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed +# with this work for additional information regarding copyright +# ownership. The ASF licenses this file to you under the Apache +# License, Version 2.0 (the "License"); you may not use this file +# except in compliance with the License. You may obtain a copy of +# the License at http://www.apache.org/licenses/LICENSE-2.0 . +# + +PRJ=..$/..$/.. + +PRJNAME=dtrans +TARGET=testcnttype +LIBTARGET=NO +TARGETTYPE=CUI + +# --- Settings ----------------------------------------------------- + +.INCLUDE : settings.mk + +CFLAGS+=-GX + +# --- Files -------------------------------------------------------- + +OBJFILES= $(OBJ)$/testcnttype.obj +APP1TARGET= $(TARGET) +APP1OBJS= $(OBJ)$/testcnttype.obj + +APP1STDLIBS= $(SALLIB) \ + $(CPPULIB) \ + $(CPPUHELPERLIB) \ + +# --- Targets ------------------------------------------------------ +.INCLUDE : target.mk + diff --git a/dtrans/source/cnttype/wbench/testcnttype.cxx b/dtrans/source/cnttype/wbench/testcnttype.cxx new file mode 100644 index 000000000..a148348ff --- /dev/null +++ b/dtrans/source/cnttype/wbench/testcnttype.cxx @@ -0,0 +1,186 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <cppuhelper/servicefactory.hxx> +#include <com/sun/star/lang/XTypeProvider.hpp> +#include <com/sun/star/lang/IllegalArgumentException.hpp> +#include <com/sun/star/container/NoSuchElementException.hpp> +#include <com/sun/star/datatransfer/XMimeContentType.hpp> +#include <com/sun/star/datatransfer/XMimeContentTypeFactory.hpp> +#include <com/sun/star/lang/XComponent.hpp> +#include <rtl/ustring.hxx> +#include <sal/types.h> +#include <osl/diagnose.h> + +#include <stdio.h> + +#include <vector> + +// my defines + +#define TEST_CLIPBOARD +#define RDB_SYSPATH "d:\\projects\\src621\\dtrans\\wntmsci7\\bin\\applicat.rdb" + +// namespaces + +using namespace ::std; +using namespace ::cppu; +using namespace ::com::sun::star::datatransfer; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::container; + +void ShutdownServiceMgr( Reference< XMultiServiceFactory >& SrvMgr ) +{ + // Cast factory to XComponent + Reference< XComponent > xComponent( SrvMgr, UNO_QUERY ); + + if ( !xComponent.is() ) + OSL_FAIL("Error shutting down"); + + // Dispose and clear factory + xComponent->dispose(); + SrvMgr.clear(); +} + +sal_Bool readCntTypesFromFileIntoVector( char* fname, vector< string >& vecData ) +{ + FILE* fstream; + + fstream = fopen( fname, "r+" ); + if ( !fstream ) + return sal_False; + + // set pointer to file start + fseek( fstream, 0, SEEK_SET ); + + char line[1024]; + while ( fscanf( fstream, "%1023[^\n]s", line ) != EOF ) + { + vecData.push_back( line ); + fgetc( fstream ); + } + + fclose( fstream ); + + return sal_True; +} + +sal_Bool processCntTypesAndWriteResultIntoFile( char* fname, vector< string >& vecData, Reference< XMimeContentTypeFactory > cnttypeFactory ) +{ + FILE* fstream; + + fstream = fopen( fname, "w" ); + if ( !fstream ) + return sal_False; + + // set pointer to file start + fseek( fstream, 0, SEEK_SET ); + + for ( const auto& rData : vecData ) + { + try + { + fprintf( fstream, "Read: %s\n", rData.c_str( ) ); + + Reference< XMimeContentType > xMCntTyp = cnttypeFactory->createMimeContentType( OUString::createFromAscii( rData.c_str( ) ) ); + + fwprintf( fstream, OUString("Type: %s\n"), xMCntTyp->getMediaType( ).getStr( ) ); + fwprintf( fstream, OUString("Subtype: %s\n"), xMCntTyp->getMediaSubtype( ).getStr( ) ); + + Sequence< OUString > seqParam = xMCntTyp->getParameters( ); + sal_Int32 nParams = seqParam.getLength( ); + + for ( sal_Int32 i = 0; i < nParams; i++ ) + { + fwprintf( fstream, OUString("PName: %s\n"), seqParam[i].getStr( ) ); + fwprintf( fstream, OUString("PValue: %s\n"), xMCntTyp->getParameterValue( seqParam[i] ).getStr( ) ); + } + } + catch( IllegalArgumentException& ex ) + { + fwprintf( fstream, OUString("Read incorrect content type!\n\n") ); + } + catch( NoSuchElementException& ) + { + fwprintf( fstream, OUString("Value of parameter not available\n") ); + } + catch( ... ) + { + fwprintf( fstream, OUString("Unknown error!\n\n") ); + } + + fwprintf( fstream, OUString("\n#############################################\n\n") ); + } + + fclose( fstream ); + + return sal_True; +} + +// main + +int SAL_CALL main( int nArgc, char* argv[] ) +{ + if ( nArgc != 3 ) + printf( "Start with: testcnttype input-file output-file\n" ); + + // get the global service-manager + + Reference< XMultiServiceFactory > g_xFactory( createRegistryServiceFactory( RDB_SYSPATH ) ); + + // Print a message if an error occurred. + if ( !g_xFactory.is( ) ) + { + OSL_FAIL("Can't create RegistryServiceFactory"); + return(-1); + } + + vector< string > vecCntTypes; + + // open input-file and read the data + if ( !readCntTypesFromFileIntoVector( argv[1], vecCntTypes ) ) + { + printf( "Can't open input file" ); + ShutdownServiceMgr( g_xFactory ); + } + + Reference< XMimeContentTypeFactory > + xMCntTypeFactory( g_xFactory->createInstance("com.sun.star.datatransfer.MimeContentTypeFactory"), UNO_QUERY ); + + if ( !xMCntTypeFactory.is( ) ) + { + OSL_FAIL( "Error creating MimeContentTypeFactory Service" ); + return(-1); + } + + if ( !processCntTypesAndWriteResultIntoFile( argv[2], vecCntTypes, xMCntTypeFactory ) ) + { + printf( "Can't open output file" ); + ShutdownServiceMgr( g_xFactory ); + } + + // shutdown the service manager + + ShutdownServiceMgr( g_xFactory ); + + return 0; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |