// ================================================== // Copyright 2014. // Siemens Product Lifecycle Management Software Inc. // All Rights Reserved. // ================================================== /** @file Holds registry information about a Business Object Extender. */ /* */ #ifndef TEAMCENTER_BUSINESSOBJECTEXTENDERREGISTRY_HXX #define TEAMCENTER_BUSINESSOBJECTEXTENDERREGISTRY_HXX #include #include #include /** @ingroup BO @{ */ namespace Teamcenter { /** Constructor method Definition */ typedef BusinessObjectExtender* (*BusinessObjectExtenderConstructor)( tag_t ); /** Initializer method Definition */ typedef int (*BusinessObjectExtenderInitializer)(); class BusinessObjectExtender; } /** Method to register the Extender Interface */ extern METAFRAMEWORK_API void registerExtenderInterface(const std::string& owningExtenderInterfaceName, const std::string& boInterfaceName, const std::string& boName, Teamcenter::BusinessObjectExtenderConstructor ctr, Teamcenter::BusinessObjectExtenderInitializer initilaizer); /** Method to find the Extender Interface in the registry */ extern METAFRAMEWORK_API Teamcenter::BusinessObjectExtender* findExtenderInterfaceObject (const std::string& interfaceName, tag_t objTag); namespace Teamcenter { /** @brief Holds the registry information for a behavior. Holds the registry information for a Business Object Extender. @code Auto generated usage for business object extender's: Teamcenter::BusinessObjectExtenderRegistry& Teamcenter::aosinternal::Item::extenderRegistry() { Teamcenter::BusinessObjectRegistry::instance().loadBusinessObjectExtenderLibrary ( "Item" ); static Teamcenter::BusinessObjectExtenderRegistry< Teamcenter::aosinternal::Item > extenderRegistry; return extenderRegistry; } @endcode */ template class BusinessObjectExtenderRegistry { public: /** Add the registration into TypeExtenderMap. In this design, key will be typeTag. */ void registerExtender(const std::string& boName, const std::string& boInterface, BusinessObjectExtenderConstructor ctr, BusinessObjectExtenderInitializer initilaizer) { registerExtenderInterface(B::getExtenderInterfaceName(), boInterface, boName, ctr, initilaizer); }; /** Find the Business object extender for a given object tag. @returns A pointer to the Business Object Extender */ B* findExtenderObject ( tag_t objTag /**< (I) The input Object tag */ ) const { return dynamic_cast ( findExtenderInterfaceObject ( B::getExtenderInterfaceName(), objTag ) ); } }; } /** @} */ #include #endif //TEAMCENTER_BUSINESSOBJECTEXTENDERREGISTRY_HXX