summaryrefslogtreecommitdiff
path: root/filter/source/config/cache/contenthandlerfactory.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'filter/source/config/cache/contenthandlerfactory.cxx')
-rw-r--r--filter/source/config/cache/contenthandlerfactory.cxx201
1 files changed, 201 insertions, 0 deletions
diff --git a/filter/source/config/cache/contenthandlerfactory.cxx b/filter/source/config/cache/contenthandlerfactory.cxx
new file mode 100644
index 000000000000..3863658d9abb
--- /dev/null
+++ b/filter/source/config/cache/contenthandlerfactory.cxx
@@ -0,0 +1,201 @@
+/*************************************************************************
+ *
+ * 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_filter.hxx"
+
+#include "contenthandlerfactory.hxx"
+#include "querytokenizer.hxx"
+#include "macros.hxx"
+#include "constant.hxx"
+#include "versions.hxx"
+
+//_______________________________________________
+// includes
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <comphelper/enumhelper.hxx>
+
+//_______________________________________________
+// namespace
+
+namespace filter{
+ namespace config{
+
+namespace css = ::com::sun::star;
+
+//_______________________________________________
+// definitions
+
+/*-----------------------------------------------
+ 09.07.2003 07:43
+-----------------------------------------------*/
+ContentHandlerFactory::ContentHandlerFactory(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR)
+{
+ BaseContainer::init(xSMGR ,
+ ContentHandlerFactory::impl_getImplementationName() ,
+ ContentHandlerFactory::impl_getSupportedServiceNames(),
+ FilterCache::E_CONTENTHANDLER );
+}
+
+/*-----------------------------------------------
+ 09.07.2003 07:43
+-----------------------------------------------*/
+ContentHandlerFactory::~ContentHandlerFactory()
+{
+}
+
+/*-----------------------------------------------
+ 16.07.2003 13:38
+-----------------------------------------------*/
+css::uno::Reference< css::uno::XInterface > SAL_CALL ContentHandlerFactory::createInstance(const ::rtl::OUString& sHandler)
+ throw(css::uno::Exception ,
+ css::uno::RuntimeException)
+{
+ return createInstanceWithArguments(sHandler, css::uno::Sequence< css::uno::Any >());
+}
+
+/*-----------------------------------------------
+ 16.07.2003 13:40
+-----------------------------------------------*/
+css::uno::Reference< css::uno::XInterface > SAL_CALL ContentHandlerFactory::createInstanceWithArguments(const ::rtl::OUString& sHandler ,
+ const css::uno::Sequence< css::uno::Any >& lArguments)
+ throw(css::uno::Exception ,
+ css::uno::RuntimeException)
+{
+ css::uno::Reference< css::uno::XInterface > xHandler;
+
+ // SAFE ->
+ ::osl::ResettableMutexGuard aLock(m_aLock);
+
+ ::rtl::OUString sRealHandler = sHandler;
+
+ #ifdef _FILTER_CONFIG_MIGRATION_Q_
+
+ /* -> TODO - HACK
+ check if the given handler name realy exist ...
+ Because our old implementation worked with an internal
+ type name instead of a handler name. For a small migration time
+ we must simulate this old feature :-( */
+
+ if (!m_rCache->hasItem(FilterCache::E_CONTENTHANDLER, sHandler) && m_rCache->hasItem(FilterCache::E_TYPE, sHandler))
+ {
+ _FILTER_CONFIG_LOG_("ContentHandlerFactory::createInstanceWithArguments() ... simulate old type search functionality!\n");
+
+ css::uno::Sequence< ::rtl::OUString > lTypes(1);
+ lTypes[0] = sHandler;
+
+ css::uno::Sequence< css::beans::NamedValue > lQuery(1);
+ lQuery[0].Name = PROPNAME_TYPES;
+ lQuery[0].Value <<= lTypes;
+
+ css::uno::Reference< css::container::XEnumeration > xSet = createSubSetEnumerationByProperties(lQuery);
+ while(xSet->hasMoreElements())
+ {
+ ::comphelper::SequenceAsHashMap lHandlerProps(xSet->nextElement());
+ if (!(lHandlerProps[PROPNAME_NAME] >>= sRealHandler))
+ continue;
+ }
+
+ // prevent outside code against NoSuchElementException!
+ // But dont implement such defensive strategy for our new create handling :-)
+ if (!m_rCache->hasItem(FilterCache::E_CONTENTHANDLER, sRealHandler))
+ return css::uno::Reference< css::uno::XInterface>();
+ }
+
+ /* <- HACK */
+
+ #endif // _FILTER_CONFIG_MIGRATION_Q_
+
+ // search handler on cache
+ CacheItem aHandler = m_rCache->getItem(FilterCache::E_CONTENTHANDLER, sRealHandler);
+
+ // create service instance
+ xHandler = m_xSMGR->createInstance(sRealHandler);
+
+ // initialize filter
+ css::uno::Reference< css::lang::XInitialization > xInit(xHandler, css::uno::UNO_QUERY);
+ if (xInit.is())
+ {
+ // format: lInitData[0] = seq<PropertyValue>, which contains all configuration properties of this handler
+ // lInitData[1] = lArguments[0]
+ // ...
+ // lInitData[n] = lArguments[n-1]
+ css::uno::Sequence< css::beans::PropertyValue > lConfig;
+ aHandler >> lConfig;
+
+ ::comphelper::SequenceAsVector< css::uno::Any > stlArguments(lArguments);
+ stlArguments.insert(stlArguments.begin(), css::uno::makeAny(lConfig));
+
+ css::uno::Sequence< css::uno::Any > lInitData;
+ stlArguments >> lInitData;
+
+ xInit->initialize(lInitData);
+ }
+
+ return xHandler;
+ // <- SAFE
+}
+
+/*-----------------------------------------------
+ 09.07.2003 07:46
+-----------------------------------------------*/
+css::uno::Sequence< ::rtl::OUString > SAL_CALL ContentHandlerFactory::getAvailableServiceNames()
+ throw(css::uno::RuntimeException)
+{
+ // must be the same list as ((XNameAccess*)this)->getElementNames() return!
+ return getElementNames();
+}
+
+/*-----------------------------------------------
+ 09.07.2003 07:43
+-----------------------------------------------*/
+::rtl::OUString ContentHandlerFactory::impl_getImplementationName()
+{
+ return ::rtl::OUString::createFromAscii("com.sun.star.comp.filter.config.ContentHandlerFactory");
+}
+
+/*-----------------------------------------------
+ 09.07.2003 07:43
+-----------------------------------------------*/
+css::uno::Sequence< ::rtl::OUString > ContentHandlerFactory::impl_getSupportedServiceNames()
+{
+ css::uno::Sequence< ::rtl::OUString > lServiceNames(1);
+ lServiceNames[0] = ::rtl::OUString::createFromAscii("com.sun.star.frame.ContentHandlerFactory");
+ return lServiceNames;
+}
+
+/*-----------------------------------------------
+ 09.07.2003 07:43
+-----------------------------------------------*/
+css::uno::Reference< css::uno::XInterface > SAL_CALL ContentHandlerFactory::impl_createInstance(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR)
+{
+ ContentHandlerFactory* pNew = new ContentHandlerFactory(xSMGR);
+ return css::uno::Reference< css::uno::XInterface >(static_cast< css::lang::XMultiServiceFactory* >(pNew), css::uno::UNO_QUERY);
+}
+
+ } // namespace config
+} // namespace filter