/*================================================================================================== Copyright (c) 2007 UGS Unpublished - All rights reserved ==================================================================================================== File description: Filename: BusinessObjectRegistry.hxx Module : metaframework This is the interface class to handle all the business object registration and module initializer registration. ==================================================================================================== Date Name Description of Change $HISTORY$ ==================================================================================================*/ #ifndef BUSINESSOBJECTREGISTRY_HXX #define BUSINESSOBJECTREGISTRY_HXX #include #include #include #include #include #include #include #include #include #include #include #include #define OPERATIONINPUT_CREATE "Create" #define OPERATIONINPUT_REVISE "Revise" #define OPERATIONINPUT_SAVEAS "SaveAs" #define OPERATIONINPUT_DEEPCOPYDATA "DeepCopyData" #define OPERATIONINPUT_ANY "OperationInput" #define OPERATIONINPUT_BULKINPUT "BulkInput" namespace Teamcenter { class OperationInput; class CreateInput; class SaveAsInput; class ReviseInput; class BulkInput; class BulkData; class BusinessObjectRegistry; class RootObject; class BusinessObject; class RuntimeBusinessObject; class BusinessObjectTagManager; struct BusinessObjectRegEntry; typedef RootObject* (*BusinessObjectConstructor)(); typedef int (*BusinessObjectInitializer)(); typedef int (*BusinessObjectPropFnRegister)(); } class METAFRAMEWORK_API Teamcenter::BusinessObjectRegistry { public: // get singleton object static BusinessObjectRegistry& instance(); // given a object tag, get the object virtual RootObject* getObject( tag_t objTag ) = 0; // load the object virtual BusinessObject* load( tag_t objTag ) = 0; // regisiter business object constructor and initializer virtual void initializeRegister( const std::string& name, BusinessObjectConstructor ctr, BusinessObjectInitializer initilaizer = 0, BusinessObjectInitializer reinitilaizer = 0, BusinessObjectInitializer uninitilaizer = 0 ) = 0; // initialize a business object by name. virtual int initialize( const std::string& boName ) = 0; // delete the operation input object virtual void deleteInputObject( OperationInput* input ) = 0; // create a BusinessObject by name virtual RootObject* createBusinessObject( const std::string& name ) = 0; virtual BusinessObject* createBusinessObject( CreateInput* pCreateInput ) = 0; virtual int createBusinessObjects( std::vector< Teamcenter::BulkInput* >* inputs, Teamcenter::BulkData* bd ) = 0; virtual OperationInput* createInputObject( const std::string& strBOName, const std::string& strOperationInputName ) = 0; //create a Shadow BusinessObject virtual BusinessObject* createShadowBusinessObject( CreateInput* pCreateInput ) = 0; //property related registration virtual int initializePropertyFnRegister( const std::string& boName, BusinessObjectPropFnRegister propFnRegister ) = 0; // load library virtual void registerLoadedLibrary( const std::string& libName ) = 0; //license registry handling virtual int registerFeatureKey( const std::string& BOname, FeatureKeyCheck* authorFeatureKey, FeatureKeyCheck* consumerFeatureKey = NULL ) = 0; virtual int getAuthorFeatureKey( BusinessObjectRegEntry* regEntry, FeatureKeyCheck** featureKey, bool& didCheckedLic, int& checkLicResult ) const = 0; virtual int getConsumerFeatureKey( BusinessObjectRegEntry* regEntry, FeatureKeyCheck** featureKey, bool& didCheckedLic, int& checkLicResult ) const = 0; virtual int updateAuthorFeatureKeyStatus( BusinessObjectRegEntry* regEntry, int checkLicResult ) = 0; virtual int updateConsumerFeatureKeyStatus( BusinessObjectRegEntry* regEntry, int checkLicResult ) = 0; virtual int checkAuthorLicense( const std::string& BOname, int& checkLicResult ) = 0; virtual int checkConsumerLicense( const std::string& BOname, int& checkLicResult ) = 0; // delete a BusinessObject virtual void deleteObject( RootObject* obj ) = 0; /** Loads the libraries required by all extenders defined for the given business object during extender object initialization. */ virtual void loadBusinessObjectExtenderLibrary( const std::string& boName ) = 0; /** Initializes all the extender objects for the type and operation. */ virtual void initializeExtenderBO( tag_t typeTag, int operationIdInteger ) = 0; protected: // constructor BusinessObjectRegistry(); // destructor virtual ~BusinessObjectRegistry(); }; namespace Teamcenter { template <> struct scoped_ptr_default_deallocator < CreateInput > { void operator()(CreateInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_ptr_default_deallocator < SaveAsInput > { void operator()(SaveAsInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_ptr_default_deallocator < ReviseInput > { void operator()(ReviseInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_ptr_default_deallocator < RuntimeBusinessObject > { void operator()(RuntimeBusinessObject* bucket) { BusinessObjectRegistry::instance().deleteObject(bucket); } }; template <> struct scoped_ptr_default_deallocator < Fnd0BaseProvider > { void operator()(Fnd0BaseProvider * bucket) { BusinessObjectRegistry::instance().deleteObject(bucket); } }; template <> struct scoped_ptr_default_deallocator < OperationInput > { void operator()(OperationInput * bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < CreateInput > { void operator() (CreateInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < SaveAsInput > { void operator() (SaveAsInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < ReviseInput > { void operator() (ReviseInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < RuntimeBusinessObject > { void operator() (RuntimeBusinessObject* bucket) { BusinessObjectRegistry::instance().deleteObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < Fnd0BaseProvider > { void operator() (Fnd0BaseProvider* bucket) { BusinessObjectRegistry::instance().deleteObject(bucket); } }; template <> struct scoped_smptr_my_deallocator < OperationInput > { void operator() (OperationInput* bucket) { BusinessObjectRegistry::instance().deleteInputObject(bucket); } }; } #include #endif //BUSINESSOBJECTREGISTRY__HXX