00001 #ifndef _IT_BUSIMPL_DELEGATING_TYPE_FACTINGY_H_
00002 #define _IT_BUSIMPL_DELEGATING_TYPE_FACTINGY_H_
00003
00004
00005
00006
00007 #include <it_bus/api_defines.h>
00008 #include <it_bus/type_factory.h>
00009 #include <it_bus/implementation_details.h>
00010
00011 namespace IT_Bus
00012 {
00013 class QName;
00014 class AnyType;
00015 class UserFaultException;
00016
00017 class IT_AFC_API DelegatingTypeFactory : public TypeFactory
00018 {
00019 public:
00020
00021 virtual ~DelegatingTypeFactory();
00022
00023 virtual AnyType*
00024 create_type(
00025 const QName& type_name
00026 ) const;
00027
00028 virtual UserFaultException*
00029 create_exception(
00030 const QName& type_name
00031 ) const;
00032
00033 virtual AnyType*
00034 create_type_for_element(
00035 const QName& element_name
00036 ) const;
00037
00038 virtual void
00039 destroy_type(
00040 AnyType* any_type
00041 ) const;
00042
00043 virtual void
00044 destroy_exception(
00045 UserFaultException* ex_type
00046 ) const;
00047
00048 virtual void
00049 add_factory(
00050 const TypeFactory* factory
00051 );
00052
00053 virtual AnyType*
00054 create_type(
00055 const QName& type_name,
00056 ImplementationDetails::ImplementationType impl_type
00057 );
00058
00059 virtual AnyType*
00060 create_type_for_element(
00061 const QName& type_name,
00062 ImplementationDetails::ImplementationType impl_type
00063 );
00064
00065 private:
00066 typedef IT_Vector<const TypeFactory*> FactoryList;
00067 FactoryList m_factories;
00068 };
00069 }
00070
00071 #endif