CCAFFEINE
0.8.8
|
00001 #ifndef __CONNECTIONFRAMEWORK_H__ 00002 #define __CONNECTIONFRAMEWORK_H__ 00003 00004 #include "dc/framework/XCmptFactory.hh" 00005 #include <string> 00006 00007 #include "dc/framework/CmpBox.h" 00008 00009 namespace ccafe { 00010 class Frame; 00011 } ENDSEMI 00012 00013 class OpqGUIService; 00014 class OpqServiceRegistry; 00015 class OpqBuilderService; 00016 class DefaultJPrintfPort; 00017 class ClassicOpaquePort; 00018 namespace ccafeopq { 00019 namespace event { 00020 class ContextEventManager; 00021 } ENDSEMI 00022 } ENDSEMI 00023 00024 typedef boost::shared_ptr< ccafeopq::ComponentFactory > ComponentFactory_shared; 00056 class ConnectionFramework : public virtual ComponentChangedListener { 00057 00058 private: 00059 00061 void nullPortMessage(std::string name, ccafeopq::ExceptionType et); 00062 00071 Gizzard *wall; 00072 00077 ComponentFactory_shared ocf; 00078 00079 std::vector< std::string > pallet; 00080 00084 ::std::map< ::std::string, ::ccafe::CmpBox_shared > instances; 00085 00091 ::ccafe::CmpBox_shared getInstance( const ::std::string & name); 00092 00094 std::vector< ComponentChangedListener * > cmptChgLsnrs; 00095 00096 OpqServiceRegistry *osr; 00097 OpqBuilderService *obs; 00098 OpqGUIService *ogs; 00099 DefaultJPrintfPort *jpfp; 00100 #ifdef HAVE_CLASSIC 00101 ClassicOpaquePort *cbs; 00102 #endif // HAVE_CLASSIC 00103 ccafeopq::event::ContextEventManager *cem; 00104 00106 std::vector< XCmptFactory_shared > xCmptFactories; 00107 00108 00109 #ifdef CCAFE_THREADS 00110 00112 std::map< std::string, GoThread_shared > goThreads; 00113 #endif 00114 00115 bool debug; 00116 00117 // This informs the framework that we are in the intantiate() 00118 // routine. This prevents us from sending out 00119 // ComponentChangedEvent's before the component actually exists. 00120 bool instantiatingComponent; 00121 00122 std::map< std::string, void * > frameItems; 00123 00125 Gizzard *getGizzard(const char *instanceName); 00126 Gizzard *getGizzard(const ::std::string & instanceName); 00127 00128 void initInternals(int64_t fComm, bool useComm); 00129 std::string deriveConfigurationString(const ::std::string & prefix, ::ccafeopq::TypeMap_shared tm); 00130 std::string deriveConfigurationString(const ::std::string & prefix, ::ccafeopq::TypeMap_shared tm, const ::std::string & key); 00131 int insertConfigurationString( ::ccafeopq::TypeMap_shared pptm, const std::string & fieldName, const std::string & configuration); 00132 00133 friend class OpqBuilderService; 00134 friend class ccafe::Frame; 00135 00136 int64_t fortranMPIComm; 00137 bool hasComm; 00138 00139 public: 00140 00142 ConnectionFramework(int64_t fComm, bool useComm) ; 00144 ConnectionFramework(int64_t fComm, bool useComm, int & status) ; 00145 virtual ~ConnectionFramework(); 00146 int setDebug(bool tf) { debug = tf; return -1; } 00151 void initStaticFactory(StaticFactory *sf); 00152 00154 ComponentFactory_shared getBaseComponentFactory(); 00155 00156 std::vector< ::ccafeopq::ComponentID_shared > 00157 getComponentsThatUse(const std::string& portType); 00158 00159 std::vector< ::ccafeopq::ComponentID_shared > 00160 getComponentsThatProvide(const std::string& portType); 00161 00163 void putFrameItem(std::string s, void *item); 00164 void *getFrameItem(std::string s); 00165 00167 std::vector< std::string > getComponentClasses() ; 00168 00173 ComponentInfo_shared instantiate( char* className, char* instanceName) ; 00174 ComponentInfo_shared instantiate(const ::std::string & className, const ::std::string & instanceName, ::ccafeopq::TypeMap_shared tm) ; 00175 00177 ComponentInfo_shared addExternalComponent(const ::std::string & className, const ::std::string & instanceName, ::ccafeopq::TypeMap_shared tm); 00178 00180 void removeExternalComponent(const ::std::string & instanceName); 00181 00183 void removeInstantiatedComponent(const std::string & instanceName); 00184 00190 int connect(const char* fromName, const char* fromPortName, 00191 const char* toName, const char* toPortName) ; 00192 00193 00197 int directConnect(const char* fromName, const char* fromPortName, 00198 const char* toName, const char* toPortName) ; 00199 00206 int disconnect(const char* fromName, const char* fromPortName, 00207 const char* toName, const char* toPortName) ; 00208 int disconnect( const ::std::string & fromName, 00209 const ::std::string & fromPortName, 00210 const ::std::string & toName, 00211 const ::std::string & toPortName); 00212 int disconnect(const ::ccafeopq::ComponentID_shared fromC, 00213 const ::std::string & fromPortName, 00214 const ::ccafeopq::ComponentID_shared toC, 00215 const ::std::string & toPortName); 00216 00218 int disconnectAll(const char* componentInstanceName); 00219 00224 int directDisconnect(const char* fromName, const char* fromPortName, 00225 const char* toName, const char* toPortName) ; 00226 00230 std::vector< std::string>getComponentProperties(const std::string & instanceName); 00231 00234 const std::string getComponentProperty(const std::string & instanceName, 00235 const std::string & key); 00236 00241 void setComponentProperty(const std::string & instanceName, const std::string & key, const std::string & value); 00242 00243 00246 int goOne(const char * instanceName, const char * portInstanceName); 00247 00251 char * getConfiguration(const char * instanceName, const char * portInstanceName) ; 00252 00255 char * getConfiguration(const char * instanceName, const char * portInstanceName, const char *fieldName) ; 00256 00260 char * setConfiguration(const char * instanceName, const char * portInstanceName, const char *fieldName, const char * configuration) ; 00261 00265 virtual void componentChanged(ComponentChangedEvent* evt) ; 00266 00268 void addXCmptFactory(XCmptFactory_shared xs); 00269 00271 virtual void addComponentChangedListener(ComponentChangedListener* l); 00272 00273 00275 ::std::vector< ::std::string > instanceNames(); 00276 00277 ::std::map< ::std::string, ::ccafe::CmpBox_shared > getInstances(); 00278 00285 ::ccafeopq::ConnectionID_shared getConnectionID(const char* uc, const char* up, const char* pc, const char* pp); 00286 00288 ::ccafeopq::TypeMap_shared getConnectionProperties( ::ccafeopq::ConnectionID_shared & conn); 00289 00290 void setConnectionProperties( ::ccafeopq::ConnectionID_shared & connID, ::ccafeopq::TypeMap_shared & map) throw ( ::ccafeopq::Exception ); 00291 00293 ::std::vector< ::ccafeopq::ConnectionID_shared > getConnectionIDs( ::std::vector< ::ccafeopq::ComponentID_shared> & clist); 00294 00295 ::std::vector < ::ccafeopq::ConnectionID_shared > getConnectionIDs( const ::std::string & userName, const ::std::string & usingPortName, const ::std::string & providerName, const ::std::string & providingPortName) throw (::ccafeopq::Exception ); 00296 00297 00299 void setPortProperties( ::ccafeopq::ComponentID_shared & cid, const ::std::string & portname, ::ccafeopq::TypeMap_shared & map) throw (::ccafeopq::Exception ); 00300 00303 int setPortProperty(const ::std::string & instanceName, const std::string & portName, 00304 const std::string & key, const std::string & valueType, const std::string & value); 00305 00307 ::ccafeopq::TypeMap_shared getPortProperties( ::ccafeopq::ComponentID_shared & cid, const ::std::string & portname) throw ( ::ccafeopq::Exception ); 00308 00310 ::ccafeopq::TypeMap_shared getPortProperties( const ::std::string & cName, const ::std::string & portname) throw (); 00311 00312 ::ccafeopq::TypeMap_shared getComponentPropertyTypeMap(const ::std::string & instanceName); 00313 bool setComponentPropertyTypeMap( const ::std::string & instanceName, ::ccafeopq::TypeMap_shared & tm); 00314 00315 00319 virtual int setRepositoryPath(char **argv, int argc); 00320 virtual int setRepositoryPath(const std::vector< std::string > & p); 00321 00324 virtual std::vector< std::string > getRepositoryPath(); 00325 00332 virtual std::vector< std::string > getRepositoryClasses(); 00333 00338 virtual int loadRepositoryClass(const char *className, bool global, bool lazy); 00339 00341 virtual void refreshPallet(); 00342 00344 virtual int loadPorts(const std::string & libPathName); 00345 00346 }; 00347 00348 #endif // __CONNECTIONFRAMEWORK_H__