summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorAndreas Schlüns <as@openoffice.org>2001-01-26 07:41:06 +0000
committerAndreas Schlüns <as@openoffice.org>2001-01-26 07:41:06 +0000
commit99874dd446194de8c4f39b523f99f5ecbe2b5852 (patch)
treebf82d7b2bd19859bd965d85806b1178428019451 /framework
parentf2cfc0f208a42d7128e51f59000d5e2a116e8343 (diff)
new frameloaderfactory for filter detection with task force TF_FILTER
Diffstat (limited to 'framework')
-rw-r--r--framework/inc/services/frameloaderfactory.hxx437
1 files changed, 435 insertions, 2 deletions
diff --git a/framework/inc/services/frameloaderfactory.hxx b/framework/inc/services/frameloaderfactory.hxx
index ded4b83dcc96..b71a5f4738a1 100644
--- a/framework/inc/services/frameloaderfactory.hxx
+++ b/framework/inc/services/frameloaderfactory.hxx
@@ -2,9 +2,9 @@
*
* $RCSfile: frameloaderfactory.hxx,v $
*
- * $Revision: 1.1.1.1 $
+ * $Revision: 1.2 $
*
- * last change: $Author: hr $ $Date: 2000-09-18 16:29:23 $
+ * last change: $Author: as $ $Date: 2001-01-26 08:41:06 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -59,6 +59,437 @@
*
************************************************************************/
+#ifdef TF_FILTER
+
+#ifndef __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
+#define __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
+
+//_________________________________________________________________________________________________________________
+// my own includes
+//_________________________________________________________________________________________________________________
+
+#ifndef __FRAMEWORK_CLASSES_FILTERCACHE_HXX_
+#include <classes/filtercache.hxx>
+#endif
+
+#ifndef __FRAMEWORK_HELPER_OMUTEXMEMBER_HXX_
+#include <helper/omutexmember.hxx>
+#endif
+
+#ifndef __FRAMEWORK_MACROS_GENERIC_HXX_
+#include <macros/generic.hxx>
+#endif
+
+#ifndef __FRAMEWORK_MACROS_DEBUG_HXX_
+#include <macros/debug.hxx>
+#endif
+
+#ifndef __FRAMEWORK_MACROS_XINTERFACE_HXX_
+#include <macros/xinterface.hxx>
+#endif
+
+#ifndef __FRAMEWORK_MACROS_XTYPEPROVIDER_HXX_
+#include <macros/xtypeprovider.hxx>
+#endif
+
+#ifndef __FRAMEWORK_MACROS_XSERVICEINFO_HXX_
+#include <macros/xserviceinfo.hxx>
+#endif
+
+#ifndef __FRAMEWORK_DEFINES_HXX_
+#include <defines.hxx>
+#endif
+
+//_________________________________________________________________________________________________________________
+// interface includes
+//_________________________________________________________________________________________________________________
+
+#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HPP_
+#include <com/sun/star/beans/PropertyValue.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_LANG_XINITIALIZATION_HPP_
+#include <com/sun/star/lang/XInitialization.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_LANG_WRAPPEDTARGETEXCEPTION_HPP_
+#include <com/sun/star/lang/WrappedTargetException.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
+#include <com/sun/star/container/XNameAccess.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_CONTAINER_NOSUCHELEMENTEXCEPTION_HPP_
+#include <com/sun/star/container/NoSuchElementException.hpp>
+#endif
+
+#ifndef _COM_SUN_STAR_IO_XINPUTSTREAM_HPP_
+#include <com/sun/star/io/XInputStream.hpp>
+#endif
+
+//_________________________________________________________________________________________________________________
+// other includes
+//_________________________________________________________________________________________________________________
+
+#ifndef _CPPUHELPER_WEAK_HXX_
+#include <cppuhelper/weak.hxx>
+#endif
+
+//_________________________________________________________________________________________________________________
+// namespace
+//_________________________________________________________________________________________________________________
+
+namespace framework{
+
+#define ANY ::com::sun::star::uno::Any
+#define OWEAKOBJECT ::cppu::OWeakObject
+#define PROPERTYVALUE ::com::sun::star::beans::PropertyValue
+#define RUNTIMEEXCEPTION ::com::sun::star::uno::RuntimeException
+#define NOSUCHELEMENTEXCEPTION ::com::sun::star::container::NoSuchElementException
+#define WRAPPEDTARGETEXCEPTION ::com::sun::star::lang::WrappedTargetException
+#define XINPUTSTREAM ::com::sun::star::io::XInputStream
+#define XMULTISERVICEFACTORY ::com::sun::star::lang::XMultiServiceFactory
+#define XPROPERTYSET ::com::sun::star::beans::XPropertySet
+#define XSERVICEINFO ::com::sun::star::lang::XServiceInfo
+#define XTYPEPROVIDER ::com::sun::star::lang::XTypeProvider
+#define XINTERFACE ::com::sun::star::uno::XInterface
+#define XNAMEACCESS ::com::sun::star::container::XNameAccess
+#define UNOTYPE ::com::sun::star::uno::Type
+
+//_________________________________________________________________________________________________________________
+// exported const
+//_________________________________________________________________________________________________________________
+
+//_________________________________________________________________________________________________________________
+// exported definitions
+//_________________________________________________________________________________________________________________
+
+struct tIMPLExtractedArguments
+{
+ OUSTRING sMimeType ;
+ sal_Int32 nFlags ;
+ OUSTRING sFilterName ;
+ sal_Int32 nClipboardFormat ;
+ OUSTRING sDetectService ;
+ REFERENCE< XINPUTSTREAM > xInputStream ;
+
+ sal_Int32 nValidMask ;
+};
+
+/*-************************************************************************************************************//**
+ @short factory to create frameloader-objects
+ @descr These class can be used to create new loader for specified contents.
+ We use cached values of the registry to lay down, wich frameloader match
+ a given URL or filtername. To do this, we use the XMultiServiceFactory-interface.
+
+ @ATTENTION In a specialmode of these implementation we support a simple filterdetection.
+ But there is no special interface. You must call some existing methods in another context!
+ see createInstanceWithArguments() fo rfurther informations!
+
+ @implements XInterface
+ XTypeProvider
+ XServiceInfo
+ XMultiServiceFactory
+ XNameAccess
+ XElementAccess
+ @base OMutexMember
+ OWeakObject
+
+ @devstatus deprecated
+*//*-*************************************************************************************************************/
+
+class FrameLoaderFactory : public XTYPEPROVIDER ,
+ public XSERVICEINFO ,
+ public XMULTISERVICEFACTORY ,
+ public XNAMEACCESS , // => XElementAccess
+ public OMutexMember , // Struct for right initalization of mutex member! Mst first of baseclasses
+ public OWEAKOBJECT
+{
+ //-------------------------------------------------------------------------------------------------------------
+ // public methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ public:
+
+ //---------------------------------------------------------------------------------------------------------
+ // constructor / destructor
+ //---------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short standard constructor
+ @descr Initialize a new instance and fill the registrycache with values.
+ To do this - xFactory must be valid!
+
+ @seealso class RegistryCache
+ @seealso member m_aRegistryCache
+
+ @param "xFactory", factory which has created us.
+ @return -
+
+ @onerror An ASSERTION is thrown in debug version, if xFactory is invalid or cache can't filled.
+ *//*-*****************************************************************************************************/
+
+ FrameLoaderFactory( const REFERENCE< XMULTISERVICEFACTORY >& xFactory );
+
+ /*-****************************************************************************************************//**
+ @short standard destructor to delete instance
+ @descr We use it to clear ouer cache.
+
+ @seealso class RegistryCache
+
+ @param -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ virtual ~FrameLoaderFactory();
+
+ //---------------------------------------------------------------------------------------------------------
+ // XInterface, XTypeProvider, XServiceInfo
+ //---------------------------------------------------------------------------------------------------------
+
+ DECLARE_XINTERFACE
+ DECLARE_XTYPEPROVIDER
+ DECLARE_XSERVICEINFO
+
+ //---------------------------------------------------------------------------------------------------------
+ // XMultiServiceFactory
+ //---------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short create a new frameloder (without arguments!)
+ @descr We search for an agreement between given type name and our cache-content.
+ If we found some information, we create the registered frameloader for these type.
+ Otherwise - we return NULL.
+ We search from begin to end of internal loader list!
+
+ @seealso method impl_createFrameLoader()
+ @seealso method createInstanceWithArguments()
+
+ @param "sTypeName", type name of a document to filter, open or save.
+ @return A reference to a new created frameloader.
+
+ @onerror A null reference is returned.
+ *//*-*****************************************************************************************************/
+
+ virtual REFERENCE< XINTERFACE > SAL_CALL createInstance( const OUSTRING& sTypeName ) throw( EXCEPTION ,
+ RUNTIMEEXCEPTION);
+
+ /*-****************************************************************************************************//**
+ @short create a new frameloder
+ @descr We search for an agreement between given type name and our cache-content.
+ If we found some information, we create the registered frameloader for these type.
+ Otherwise - we return NULL.
+ You can give us some optional arguments to influence our search!
+
+ @seealso method impl_createFrameLoader()
+ @seealso method createInstance()
+
+ @param "sTypeName", type name of a document to filter, open or save.
+ @param "seqArguments", list of optional arguments for initializing of new frameloader.
+ @return A reference to a new created frameloader.
+
+ @onerror A null reference is returned.
+ *//*-*****************************************************************************************************/
+
+ virtual REFERENCE< XINTERFACE > SAL_CALL createInstanceWithArguments( const OUSTRING& sTypeName ,
+ const SEQUENCE< ANY >& seqArguments) throw( EXCEPTION ,
+ RUNTIMEEXCEPTION);
+
+ /*-****************************************************************************************************//**
+ @short not supported
+ @descr Please use XNameAcces instead of these!
+
+ @seealso -
+
+ @param -
+ @return -
+
+ @onerror -
+ *//*-*****************************************************************************************************/
+
+ virtual SEQUENCE< OUSTRING > SAL_CALL getAvailableServiceNames() throw( RUNTIMEEXCEPTION );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XNameAccess
+ //---------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short return properties of registered frame loader specified by his implementation name
+ @descr Use these method to get all informations about our internal loader cache
+ and a special frame loader.
+ We return a Sequence< PropertyValue > in an Any packed as result.
+
+ structure of return value:
+ [0].Name = "Types"
+ [0].Value = list of supported types of these loader as [sequence< oustring >]
+
+ [1].Name = "UIName"
+ [1].Value = localized name of loader as [string]
+
+ @seealso method getElementNames()
+ @seealso method hasByName()
+
+ @param "sName", the name of searched frame loader (use getElementNames() to get it!)
+ @return A Sequence< PropertyValue > packed in an Any.
+
+ @onerror If given name not exist a NoSuchElementException is thrown.
+ *//*-*****************************************************************************************************/
+
+ virtual ANY SAL_CALL getByName( const OUSTRING& sName ) throw( NOSUCHELEMENTEXCEPTION ,
+ WRAPPEDTARGETEXCEPTION ,
+ RUNTIMEEXCEPTION );
+
+ /*-****************************************************************************************************//**
+ @short return list of all well known loader names from configuration
+ @descr Use these method to get all names of well known loader.
+ You can use it to get the properties of a loader by calling getByName()!
+
+ @seealso method getByName()
+ @seealso method hasByName()
+
+ @param -
+ @return A list of well known loader. Is static at runtime!
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ virtual SEQUENCE< OUSTRING > SAL_CALL getElementNames() throw( RUNTIMEEXCEPTION );
+
+ /*-****************************************************************************************************//**
+ @short check if searched frame loader exist in configuration
+ @descr Normaly nobody need these method realy (use getElementNames() in combination with getByName()).
+ We guarantee correctness of these mechanism. There is no reason to check for existing elements then ...
+ but if you have an unknwon name and has no fun to search it in returned sequence ...
+ you can call these ...
+
+ @seealso method getByName()
+ @seealso method getElementNames()
+
+ @param "sName", implementation name of searched frame loader
+ @return sal_True if loader exist, sal_False otherwise.
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ virtual sal_Bool SAL_CALL hasByName( const OUSTRING& sName ) throw( RUNTIMEEXCEPTION );
+
+ //---------------------------------------------------------------------------------------------------------
+ // XElementAccess
+ //---------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @short return the type of retrun value of method XNameAccess::getByName()
+ @descr In these implementation its a Sequence< PropertyValue > everytime!
+
+ @seealso description of interface XNameAccess
+
+ @param -
+ @return Type of Sequence< PropertyValue >.
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ virtual UNOTYPE SAL_CALL getElementType() throw( RUNTIMEEXCEPTION );
+
+ /*-****************************************************************************************************//**
+ @short return state if informations about frame loader available
+ @descr If these method return false - no information could'nt read from configuration ...
+ I think nothing will work then. Normaly we return TRUE!
+
+ @seealso class FilterCache!
+
+ @param -
+ @return sal_True if information available, sal_False otherwise.
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ virtual sal_Bool SAL_CALL hasElements() throw( RUNTIMEEXCEPTION );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // protected methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ protected:
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private methods
+ //-------------------------------------------------------------------------------------------------------------
+
+ private:
+
+ /*-****************************************************************************************************//**
+ @short try to set configuration properties at created loader
+ @descr We support the old async. loader interface ( XFrameLoader ) and the new one XSynchronousFrameLoader.
+ The new one should implement a property set on which we can set his configuration values!
+ We try to cast given loader to these interface - if it's exist we set the values - otherwise not!
+
+ @seealso service FrameLoader
+ @seealso service SynchronousFrameLoader
+
+ @param "xLoader" loader with generic XInterface! (We don't know before which service type is used!)
+ @param "pLoaderInfo" configuration structure of these loader.
+ @return -
+
+ @onerror No error should occure.
+ *//*-*****************************************************************************************************/
+
+ void impl_initializeLoader( REFERENCE< XINTERFACE >& xLoader, const TLoader* pLoaderInfo );
+
+ //-------------------------------------------------------------------------------------------------------------
+ // debug methods
+ // (should be private everyway!)
+ //-------------------------------------------------------------------------------------------------------------
+
+ /*-****************************************************************************************************//**
+ @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 ASSERTs 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 impldbg_checkParameter_FrameLoaderFactory ( const REFERENCE< XMULTISERVICEFACTORY >& xFactory );
+ static sal_Bool impldbg_checkParameter_createInstance ( const OUSTRING& sTypeName );
+ static sal_Bool impldbg_checkParameter_createInstanceWithArguments ( const OUSTRING& sTypeName ,
+ const SEQUENCE< ANY >& seqArguments);
+ static sal_Bool impldbg_checkParameter_getByName ( const OUSTRING& sName );
+ static sal_Bool impldbg_checkParameter_hasByName ( const OUSTRING& sName );
+
+ #endif // #ifdef ENABLE_ASSERTIONS
+
+ //-------------------------------------------------------------------------------------------------------------
+ // private variables
+ // (should be private everyway!)
+ //-------------------------------------------------------------------------------------------------------------
+
+ private:
+
+ REFERENCE< XMULTISERVICEFACTORY > m_xFactory ;
+ FilterCache m_aCache ;
+
+}; // class FrameLoaderFactory
+
+} // namespace framework
+
+#endif // #ifndef __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
+
+#else // #ifdef TF_FILTER
+
#ifndef __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
#define __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
@@ -498,3 +929,5 @@ class FrameLoaderFactory : public XTYPEPROVIDER ,
} // namespace framework
#endif // #ifndef __FRAMEWORK_SERVICES_FRAMELOADERFACTORY_HXX_
+
+#endif // #ifdef ... #else TF_FILTER