CCAFFEINE  0.8.8
ConnectionFramework.h
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__