summaryrefslogtreecommitdiff
path: root/framework/inc/classes/filtercache.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'framework/inc/classes/filtercache.hxx')
-rw-r--r--framework/inc/classes/filtercache.hxx447
1 files changed, 447 insertions, 0 deletions
diff --git a/framework/inc/classes/filtercache.hxx b/framework/inc/classes/filtercache.hxx
new file mode 100644
index 000000000000..516c50a1141a
--- /dev/null
+++ b/framework/inc/classes/filtercache.hxx
@@ -0,0 +1,447 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+/*TODO
+ - late init
+ - order by number!
+ - insert default detector and loader as last ones in hashes ... don't hold it as an extra member!
+ => CheckedIterator will be obsolete!
+ */
+
+#ifndef __FRAMEWORK_CLASSES_FILTERCACHE_HXX_
+#define __FRAMEWORK_CLASSES_FILTERCACHE_HXX_
+
+//_________________________________________________________________________________________________________________
+// my own includes
+//_________________________________________________________________________________________________________________
+
+#include <classes/filtercachedata.hxx>
+#include <threadhelp/threadhelpbase.hxx>
+
+#ifndef __FRAMEWORK_THREADHELP_TRANSACTIONBASE_HXX_
+#include <threadhelp/transactionbase.hxx>
+#endif
+#include <general.h>
+#include <queries.h>
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/registry/XRegistryKey.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/container/ElementExistException.hpp>
+#include <com/sun/star/container/NoSuchElementException.hpp>
+
+//_________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________
+#include <rtl/ustring.hxx>
+
+#ifdef ENABLE_GENERATEFILTERCACHE
+ #ifndef _RTL_USTRBUF_HXX_
+ #include <rtl/ustrbuf.hxx>
+ #endif
+#endif
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace framework{
+
+//_________________________________________________________________________________________________________________
+// exported const
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// exported definitions
+//_________________________________________________________________________________________________________________
+
+/*-************************************************************************************************************//**
+ @short cache for all filter and type information
+ @descr Frameloader- and filterfactory need some informations about our current registered filters and types.
+ For better performance its neccessary to cache all needed values.
+
+ @implements -
+ @base ThreadHelpBase
+ TransactionBase
+
+ @devstatus ready to use
+ @threadsafe yes
+*//*-*************************************************************************************************************/
+
+class FilterCache : private ThreadHelpBase
+ , private TransactionBase
+{
+ public:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // public methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ public:
+
+ //---------------------------------------------------------------------------------------------------------
+ // constructor / destructor
+ //---------------------------------------------------------------------------------------------------------
+
+ FilterCache( sal_Int32 nVersion = DEFAULT_FILTERCACHE_VERSION,
+ sal_Int16 nMode = DEFAULT_FILTERCACHE_MODE );
+
+ /*-****************************************************************************************************//**
+ @short standard destructor to delete instance
+ @descr This will clear the cache if last owner release it.
+
+ @seealso -
+
+ @param -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ virtual ~FilterCache();
+
+ void flush( DataContainer::ECFGType eType );
+
+ /*-****************************************************************************************************//**
+ @short get the current state of the cache
+ @descr Call this methods to get information about the state of the current cache.
+
+ @seealso -
+
+ @param -
+ @return -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ sal_Bool isValidOrRepairable() const;
+ sal_Bool hasTypes () const;
+ sal_Bool hasFilters () const;
+ sal_Bool hasDetectors () const;
+ sal_Bool hasLoaders () const;
+ sal_Bool hasContentHandlers () const;
+
+ /*-****************************************************************************************************//**
+ @short search routines to find items which match given parameter
+ @descr Mostly we search for a type first and get all informations about filter, detector and loader
+ services from the other configuration tables which are registered for this type.
+ These operations support a FindFirst/Next mechanism.
+ If you call search...( ... nStartEntry=0 ... ) we search for
+ the first entry. If these return a value different from <empty> you can work with these value.
+ If found value isn't the right one - you can call search method again.
+ DONT'T CHANGE THE VALUE OF "rStartEntry" between two search calls!
+ You can use returned value as parameter for getBy...Name() functions of this implementation too!
+
+ @attention returned type name is an internal name
+ returned filter name is an internal name
+ returned loader name is an implementation name of a service
+ returned detector name is an implementation name of a service
+
+ @seealso -
+
+ @param "sResult", name of found type, filter, ...
+ @return true, if search was successful,
+ false, otherwise.
+
+ @onerror We return false.
+ *//*-*****************************************************************************************************/
+
+ sal_Bool searchType ( const ::rtl::OUString& sURL ,
+ const ::rtl::OUString& sMediaType ,
+ const ::rtl::OUString& sClipboardFormat ,
+ CheckedTypeIterator& aStartEntry ,
+ ::rtl::OUString& sResult ) const;
+
+ sal_Bool searchFilterForType ( const ::rtl::OUString& sInternalTypeName ,
+ CheckedStringListIterator& aStartEntry ,
+ ::rtl::OUString& sResult ) const;
+
+ sal_Bool searchDetectorForType ( const ::rtl::OUString& sInternalTypeName ,
+ CheckedStringListIterator& aStartEntry ,
+ ::rtl::OUString& sResult ) const;
+
+ sal_Bool searchLoaderForType ( const ::rtl::OUString& sInternalTypeName ,
+ CheckedStringListIterator& aStartEntry ,
+ ::rtl::OUString& sResult ) const;
+
+ sal_Bool searchContentHandlerForType ( const ::rtl::OUString& sInternalTypeName ,
+ CheckedStringListIterator& aStartEntry ,
+ ::rtl::OUString& sResult ) const;
+
+ /*-****************************************************************************************************//**
+ @short get all properties of a cache entry by given name
+ @descr If you need additional informations about our internal cache values
+ you can use these methods to get a list of all cached config values
+ and subkeys of specified entry.
+
+ @seealso -
+
+ @param "sName", name of suspected entry in cache
+ @return A structure with valid information if item exists! An empty Any otherwise.
+
+ @onerror We return an empty Any.
+ *//*-*****************************************************************************************************/
+
+ css::uno::Sequence< ::rtl::OUString > getAllTypeNames () const;
+ css::uno::Sequence< ::rtl::OUString > getAllFilterNames () const;
+ css::uno::Sequence< ::rtl::OUString > getAllDetectorNames () const; // without default detector!
+ css::uno::Sequence< ::rtl::OUString > getAllLoaderNames () const; // without default loader!
+ css::uno::Sequence< ::rtl::OUString > getAllContentHandlerNames () const;
+ css::uno::Sequence< ::rtl::OUString > getAllDetectorNamesWithDefault () const; // default detector is last one!
+ css::uno::Sequence< ::rtl::OUString > getAllLoaderNamesWithDefault () const; // default loader is last one!
+ ::rtl::OUString getDefaultLoader () const;
+
+ css::uno::Sequence< css::beans::PropertyValue > getTypeProperties ( const ::rtl::OUString& sName ) const;
+ css::uno::Sequence< css::beans::PropertyValue > getFilterProperties ( const ::rtl::OUString& sName ) const;
+ css::uno::Sequence< css::beans::PropertyValue > getDetectorProperties ( const ::rtl::OUString& sName ) const;
+ css::uno::Sequence< css::beans::PropertyValue > getLoaderProperties ( const ::rtl::OUString& sName ) const;
+ css::uno::Sequence< css::beans::PropertyValue > getContentHandlerProperties ( const ::rtl::OUString& sName ) const;
+
+ FileType getType ( const ::rtl::OUString& sName ) const;
+ Filter getFilter ( const ::rtl::OUString& sName ) const;
+ Detector getDetector ( const ::rtl::OUString& sName ) const;
+ Loader getLoader ( const ::rtl::OUString& sName ) const;
+ ContentHandler getContentHandler ( const ::rtl::OUString& sName ) const;
+
+ sal_Bool existsType ( const ::rtl::OUString& sName ) const;
+ sal_Bool existsFilter ( const ::rtl::OUString& sName ) const;
+ sal_Bool existsDetector ( const ::rtl::OUString& sName ) const;
+ sal_Bool existsLoader ( const ::rtl::OUString& sName ) const;
+ sal_Bool existsContentHandler ( const ::rtl::OUString& sName ) const;
+
+ /*-****************************************************************************************************//**
+ @short support special query modes
+ @descr Our owner services need sometimes a special mode to query for subsets of our configuration!
+ They give us a special query string - we return right values.
+
+ @seealso file queries.h
+ @seealso class FilterFactory
+ @seealso class FrameLoaderFactory
+ @seealso class TypeDetection
+
+ @param "sName", name of query
+ @return A structure with valid information!
+
+ @onerror We return an empty result set.
+ *//*-*****************************************************************************************************/
+
+ css::uno::Any queryFilters( const ::rtl::OUString& sQuery ) const;
+
+ /*-****************************************************************************************************//**
+ @short support registration of elements in current configuration
+ @descr Use this methods to add or remove items in our configuration files.
+ We use the globale configuration to do that ... in fat office "share/config/registry/..."!
+
+ *** structure of type properties **********************************************************
+
+ PropertyValue.Name PropertyValue.Value Description
+ ---------------------------------------------------------------------------------------
+ ...
+
+ *** structure of filter properties ********************************************************
+
+ PropertyValue.Name PropertyValue.Value Description
+ ---------------------------------------------------------------------------------------
+ "Name" [string] internal name
+ "Type" [string] registered for these type
+ "UIName" [string] localized name for UI (valid for current locale at runtime!)
+ "UINames" [stringlist] assignment of all supported localized names to right locales
+ "DocumentService" [string] uno servicename of document services
+ "FilterService" [string] uno servicename of filter implementation
+ "Flags" [long] describe filter
+ "UserData" [stringlist] additional user data (format not fixed!)
+ "FileFormatVersion" [long] version numbher of supported files
+ "TemplateName" [string] name of template
+
+ *** structure of detector properties ******************************************************
+
+ PropertyValue.Name PropertyValue.Value Description
+ ---------------------------------------------------------------------------------------
+ ...
+
+ *** structure of loader properties ********************************************************
+
+ PropertyValue.Name PropertyValue.Value Description
+ ---------------------------------------------------------------------------------------
+ ...
+
+ @seealso -
+
+ @param "sName" , name of type, filter ...
+ @param "lProperties" , values of new type, filter
+ @return state of operation as bool
+
+ @onerror We return false then.
+ *//*-*****************************************************************************************************/
+
+ sal_Bool addFilter ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::ElementExistException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool replaceFilter( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool removeFilter ( const ::rtl::OUString& sName ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+
+ sal_Bool addType ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::ElementExistException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool replaceType ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool removeType ( const ::rtl::OUString& sName ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+
+ sal_Bool addDetector ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::ElementExistException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool replaceDetector( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+ sal_Bool removeDetector ( const ::rtl::OUString& sName ,
+ sal_Bool bException ) throw(css::container::NoSuchElementException ,
+ css::registry::InvalidRegistryException);
+
+ sal_Bool validateAndRepair();
+ sal_Bool validateAndRepairTypes();
+ sal_Bool validateAndRepairFilter();
+ sal_Bool validateAndRepairDetectors();
+ sal_Bool validateAndRepairLoader();
+ sal_Bool validateAndRepairHandler();
+
+ //-------------------------------------------------------------------------------------------------------------
+ // protected methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ protected:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ private:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // debug methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short debug-method to check incoming parameter of some other mehods of this class
+ @descr The following methods are used to check parameters for other methods
+ of this class. The return value is used directly for an ASSERT(...).
+
+ @seealso ASSERT in implementation!
+
+ @param references to checking variables
+ @return sal_False ,on invalid parameter
+ @return sal_True ,otherwise
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ #ifdef ENABLE_ASSERTIONS
+
+ private:
+
+ static sal_Bool implcp_searchType ( const ::rtl::OUString& sURL ,
+ const ::rtl::OUString* pMediaType ,
+ const ::rtl::OUString* pClipboardFormat ,
+ const CheckedTypeIterator& aStartEntry ,
+ const ::rtl::OUString& sResult );
+ static sal_Bool implcp_searchFilterForType ( const ::rtl::OUString& sInternalTypeName ,
+ const CheckedStringListIterator& aStartEntry ,
+ const ::rtl::OUString& sResult );
+ static sal_Bool implcp_searchDetectorForType ( const ::rtl::OUString& sInternalTypeName ,
+ const CheckedStringListIterator& aStartEntry ,
+ const ::rtl::OUString& sResult );
+ static sal_Bool implcp_searchLoaderForType ( const ::rtl::OUString& sInternalTypeName ,
+ const CheckedStringListIterator& aStartEntry ,
+ const ::rtl::OUString& sResult );
+ static sal_Bool implcp_searchContentHandlerForType ( const ::rtl::OUString& sInternalTypeName ,
+ const CheckedStringListIterator& aStartEntry ,
+ const ::rtl::OUString& sResult );
+ static sal_Bool implcp_getTypeProperties ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getFilterProperties ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getDetectorProperties ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getLoaderProperties ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getContentHandlerProperties ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getType ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getFilter ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getDetector ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getLoader ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_getContentHandler ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_existsType ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_existsFilter ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_existsDetector ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_existsLoader ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_existsContentHandler ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_addFilter ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties );
+ static sal_Bool implcp_replaceFilter ( const ::rtl::OUString& sName ,
+ const css::uno::Sequence< css::beans::PropertyValue >& lProperties );
+ static sal_Bool implcp_removeFilter ( const ::rtl::OUString& sName );
+ static sal_Bool implcp_queryFilters ( const ::rtl::OUString& sQuery );
+
+ #endif // #ifdef ENABLE_ASSERTIONS
+
+ #ifdef ENABLE_COMPONENT_SELF_CHECK
+
+ private:
+
+ void impldbg_dumpCache();
+
+ #endif // ENABLE_COMPONENT_SELF_CHECK
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private variables
+ //-------------------------------------------------------------------------------------------------------------
+ private:
+
+ static sal_Int32 m_nRefCount ;
+ static DataContainer* m_pData ;
+ static sal_Int32 m_nVersion ;
+ static sal_Int16 m_nMode ;
+
+}; // class FilterCache
+
+} // namespace framework
+
+#endif // #ifndef __FRAMEWORK_CLASSES_FILTERCACHE_HXX_