summaryrefslogtreecommitdiff
path: root/comphelper/source/compare/AnyCompareFactory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'comphelper/source/compare/AnyCompareFactory.cxx')
-rw-r--r--comphelper/source/compare/AnyCompareFactory.cxx191
1 files changed, 191 insertions, 0 deletions
diff --git a/comphelper/source/compare/AnyCompareFactory.cxx b/comphelper/source/compare/AnyCompareFactory.cxx
new file mode 100644
index 000000000000..136bff63f69b
--- /dev/null
+++ b/comphelper/source/compare/AnyCompareFactory.cxx
@@ -0,0 +1,191 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_comphelper.hxx"
+
+#include "comphelper_module.hxx"
+
+#include <com/sun/star/ucb/XAnyCompareFactory.hpp>
+#include <com/sun/star/i18n/XCollator.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/uno/Sequence.h>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <cppuhelper/implbase3.hxx>
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/IllegalArgumentException.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <comphelper/stl_types.hxx>
+#include <map>
+
+
+using namespace com::sun::star::uno;
+using namespace com::sun::star::ucb;
+using namespace com::sun::star::lang;
+using namespace com::sun::star::i18n;
+using namespace rtl;
+
+//=============================================================================
+
+class AnyCompare : public ::cppu::WeakImplHelper1< XAnyCompare >
+{
+ Reference< XCollator > m_rCollator;
+
+public:
+ AnyCompare( Reference< XComponentContext > xContext, const Locale& rLocale ) throw()
+ {
+ Reference< XMultiComponentFactory > xFactory = xContext->getServiceManager();
+ if ( xFactory.is() )
+ {
+ m_rCollator = Reference< XCollator >(
+ xFactory->createInstanceWithContext( OUString::createFromAscii( "com.sun.star.i18n.Collator" ), xContext ),
+ UNO_QUERY );
+ m_rCollator->loadDefaultCollator( rLocale,
+ 0 ); //???
+ }
+
+ }
+
+ virtual sal_Int16 SAL_CALL compare( const Any& any1, const Any& any2 ) throw(RuntimeException);
+};
+
+//=============================================================================
+
+class AnyCompareFactory : public cppu::WeakImplHelper3< XAnyCompareFactory, XInitialization, XServiceInfo >
+{
+ Reference< XAnyCompare > m_rAnyCompare;
+ Reference< XComponentContext > m_rContext;
+ Locale m_Locale;
+
+public:
+ AnyCompareFactory( Reference< XComponentContext > xContext ) : m_rContext( xContext )
+ {}
+
+ // XAnyCompareFactory
+ virtual Reference< XAnyCompare > SAL_CALL createAnyCompareByName ( const OUString& aPropertyName ) throw(::com::sun::star::uno::RuntimeException);
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const Sequence< Any >& aArguments )
+ throw ( Exception, RuntimeException );
+
+ // XServiceInfo
+ virtual OUString SAL_CALL getImplementationName( ) throw(RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) throw(RuntimeException);
+ virtual Sequence< OUString > SAL_CALL getSupportedServiceNames( ) throw(RuntimeException);
+
+ // XServiceInfo - static versions (used for component registration)
+ static ::rtl::OUString SAL_CALL getImplementationName_static();
+ static Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static();
+ static Reference< XInterface > SAL_CALL Create( const Reference< XComponentContext >& );
+};
+
+//===========================================================================================
+
+sal_Int16 SAL_CALL AnyCompare::compare( const Any& any1, const Any& any2 ) throw(::com::sun::star::uno::RuntimeException)
+{
+ sal_Int16 aResult = 0;
+
+ if( m_rCollator.is() )
+ {
+ OUString aStr1;
+ OUString aStr2;
+
+ any1 >>= aStr1;
+ any2 >>= aStr2;
+
+ aResult = ( sal_Int16 )m_rCollator->compareString( aStr1, aStr2 );
+ }
+
+ return aResult;
+}
+
+//===========================================================================================
+
+Reference< XAnyCompare > SAL_CALL AnyCompareFactory::createAnyCompareByName( const OUString& aPropertyName ) throw(::com::sun::star::uno::RuntimeException)
+{
+ // for now only OUString properties compare is implemented
+ // so no check for the property name is done
+
+ if( aPropertyName.equals( OUString::createFromAscii( "Title" ) ) )
+ return m_rAnyCompare;
+
+ return Reference< XAnyCompare >();
+}
+
+void SAL_CALL AnyCompareFactory::initialize( const Sequence< Any >& aArguments ) throw ( Exception, RuntimeException )
+{
+ if( aArguments.getLength() )
+ {
+ if( aArguments[0] >>= m_Locale )
+ {
+ m_rAnyCompare = new AnyCompare( m_rContext, m_Locale );
+ return;
+ }
+ }
+
+}
+
+OUString SAL_CALL AnyCompareFactory::getImplementationName( ) throw( RuntimeException )
+{
+ return getImplementationName_static();
+}
+
+OUString SAL_CALL AnyCompareFactory::getImplementationName_static( )
+{
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "AnyCompareFactory" ) );
+}
+
+sal_Bool SAL_CALL AnyCompareFactory::supportsService( const OUString& ServiceName ) throw(RuntimeException)
+{
+ rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.AnyCompareFactory" ) );
+ return aServiceName == ServiceName;
+}
+
+Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames( ) throw(RuntimeException)
+{
+ return getSupportedServiceNames_static();
+}
+
+Sequence< OUString > SAL_CALL AnyCompareFactory::getSupportedServiceNames_static( )
+{
+ const rtl::OUString aServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ucb.AnyCompareFactory" ) );
+ const Sequence< rtl::OUString > aSeq( &aServiceName, 1 );
+ return aSeq;
+}
+
+Reference< XInterface > SAL_CALL AnyCompareFactory::Create(
+ const Reference< XComponentContext >& rxContext )
+{
+ return (cppu::OWeakObject*)new AnyCompareFactory( rxContext );
+}
+
+void createRegistryInfo_AnyCompareFactory()
+{
+ static ::comphelper::module::OAutoRegistration< AnyCompareFactory > aAutoRegistration;
+}