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
00118
00119
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__