You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2006/09/10 19:07:49 UTC

svn commit: r441974 - in /incubator/tuscany/cpp/sca/runtime: core/src/tuscany/sca/model/ extensions/cpp/src/tuscany/sca/cpp/ extensions/cpp/src/tuscany/sca/cpp/model/ extensions/php/src/tuscany/sca/php/ extensions/php/src/tuscany/sca/php/model/ extensi...

Author: jsdelfino
Date: Sun Sep 10 10:07:48 2006
New Revision: 441974

URL: http://svn.apache.org/viewvc?view=rev&rev=441974
Log:
Pass composite to component implementation objects, allow component implementation model class to load the implementation artifact to perform any necessary introspection, implemented that new scheme in the Ruby implementation extension

Modified:
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
    incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
    incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
    incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
    incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
    incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
    incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.cpp Sun Sep 10 10:07:48 2006
@@ -24,6 +24,7 @@
 #include "tuscany/sca/model/ServiceType.h"
 #include "tuscany/sca/model/ReferenceType.h"
 #include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
 #include "tuscany/sca/model/Service.h"
 #include "tuscany/sca/model/Reference.h"
 
@@ -40,8 +41,8 @@
         {
             
            // Constructor
-            ComponentType::ComponentType(const string& name)
-            : name(name)
+            ComponentType::ComponentType(Composite* composite, const string& name)
+            : composite(composite), name(name)
             {
                 LOGENTRY(1, "ComponentType::constructor");
                 LOGEXIT(1, "ComponentType::constructor");

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/ComponentType.h Sun Sep 10 10:07:48 2006
@@ -39,6 +39,7 @@
             class ReferenceType;
             class Interface;
             class Component;
+            class Composite;
 
             /**
              * Component type represents the configurable aspects of an implementation.
@@ -54,7 +55,7 @@
                 /**
                  * Constructor
                  */
-                SCA_API ComponentType(const string& name);
+                SCA_API ComponentType(Composite* composite, const string& name);
 
                 /**
                  * Destructor.
@@ -64,7 +65,12 @@
                 /**
                  * Returns the name of the component type
                  */
-                SCA_API const string& getName() { return name; };
+                SCA_API const string& getName() const { return name; };
+                
+                /**
+                 * Returns the composite containing this component type
+                 */
+                SCA_API Composite* getComposite() const { return composite; };
 
                 /**
                  * Add a new service type to this component type.
@@ -141,6 +147,11 @@
                  * The name of the component type
                  */
                 string name;
+                
+                /**
+                 * The composite containing this component type
+                 */
+                 Composite* composite;
                 
                 /**
                  * Map of all the service types defined on this component.

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/Composite.cpp Sun Sep 10 10:07:48 2006
@@ -38,7 +38,7 @@
             
             // Constructor
             Composite::Composite(const string& name, const string& root) 
-                : ComponentType(name), root(root)
+                : ComponentType(this, name), root(root)
             {
                 LOGENTRY(1, "Composite::constructor");
                 LOGEXIT(1, "Composite::constructor");

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeReference.cpp Sun Sep 10 10:07:48 2006
@@ -37,7 +37,7 @@
             // Constructor
             CompositeReference::CompositeReference(Composite* composite, const string& name,
                     Interface* intface, Interface* callbackInterface, bool conversational, ReferenceType::Multiplicity multiplicity) :
-                Component(composite, name, new ComponentType(name))
+                Component(composite, name, new ComponentType(composite, name))
             {
                 LOGENTRY(1, "CompositeReference::constructor");
                 LOGINFO_1(2, "CompositeReference::constructor: CompositeReference name: %s", name.c_str());

Modified: incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/core/src/tuscany/sca/model/CompositeService.cpp Sun Sep 10 10:07:48 2006
@@ -40,7 +40,7 @@
             CompositeService::CompositeService(Composite* composite, const string& name,
                     Interface* intface, Interface* callbackInterface, bool conversational,
                     ReferenceType::Multiplicity multiplicity) :
-                Component(composite, name, new ComponentType(name))
+                Component(composite, name, new ComponentType(composite, name))
             {
                 LOGENTRY(1, "CompositeService::constructor");
                 LOGINFO_1(2, "CompositeService::constructor: CompositeService name: %s", name.c_str());

Modified: incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/CPPImplementationExtension.cpp Sun Sep 10 10:07:48 2006
@@ -88,7 +88,7 @@
                     Utils::rTokeniseString(".h", headerStub, headerStub, tmp);
                     
                     CPPImplementation* cppImpl = new CPPImplementation(
-                                    library, header, headerPath, headerStub, className, scope);
+                                    composite, library, header, headerPath, headerStub, className, scope);
                     
                     return cppImpl;
                 }

Modified: incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.cpp Sun Sep 10 10:07:48 2006
@@ -22,6 +22,7 @@
 #include "tuscany/sca/cpp/model/CPPServiceBinding.h"
 #include "tuscany/sca/cpp/model/CPPReferenceBinding.h"
 #include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
 #include "tuscany/sca/model/Service.h"
 #include "tuscany/sca/model/Reference.h"
 #include "tuscany/sca/util/Utils.h"
@@ -35,9 +36,9 @@
         {
 
             // Constructor
-            CPPImplementation::CPPImplementation(const string& library, const string& header,
+            CPPImplementation::CPPImplementation(Composite* composite, const string& library, const string& header,
                     const string&headerPath, const string& headerStub, const string& className, Scope scope)
-                : ComponentType(headerPath + headerStub),
+                : ComponentType(composite, headerPath + headerStub),
                     library(library), header(header), headerPath(headerPath),
                     headerStub(headerStub), className(className), scope(scope)
             {

Modified: incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/cpp/src/tuscany/sca/cpp/model/CPPImplementation.h Sun Sep 10 10:07:48 2006
@@ -58,7 +58,7 @@
                  * @param className Name of the class in the header file (could be a blank string
                  * if this is not specified).
                  */
-                CPPImplementation(const string& library, const string& header, const string&headerPath,
+                CPPImplementation(Composite* composite, const string& library, const string& header, const string&headerPath,
                         const string& headerStub, const string& className, Scope scope);
                 
                 /**

Modified: incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/PHPImplementationExtension.cpp Sun Sep 10 10:07:48 2006
@@ -61,7 +61,7 @@
                     string module = scdlImplementation->getCString("module");
                     string className = scdlImplementation->getCString("class");
                     
-                    PHPImplementation* phpImpl = new PHPImplementation(module, className);
+                    PHPImplementation* phpImpl = new PHPImplementation(composite, module, className);
                     
                     return phpImpl;
                 }

Modified: incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.cpp Sun Sep 10 10:07:48 2006
@@ -35,8 +35,8 @@
         {
 
             // Constructor
-            PHPImplementation::PHPImplementation(const string& module, const string& className)
-                : ComponentType(module),
+            PHPImplementation::PHPImplementation(Composite* composite, const string& module, const string& className)
+                : ComponentType(composite, module),
                     module(module), className(className)
             {
                 LOGENTRY(1,"PHPImplementation::constructor");

Modified: incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/php/src/tuscany/sca/php/model/PHPImplementation.h Sun Sep 10 10:07:48 2006
@@ -43,13 +43,14 @@
             public:
                 /**
                  * Constructor.
+                 * @param composite Composite containing this implementation.
                  * @param module Name of the module.
                  * @param modulePath Path to the module (could be a blank string
                  * if this is not specified).
                  * @param className Name of the class in the module (could be a blank string
                  * if this is not specified).
                  */
-                PHPImplementation(const string& module, const string& className);
+                PHPImplementation(Composite* composite, const string& module, const string& className);
                 
                 /**
                  * Destructor

Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/PythonImplementationExtension.cpp Sun Sep 10 10:07:48 2006
@@ -73,7 +73,7 @@
                         scope = PythonImplementation::STATELESS;
                     }
 
-                    PythonImplementation* pythonImpl = new PythonImplementation(module, path, className, scope);
+                    PythonImplementation* pythonImpl = new PythonImplementation(composite, module, path, className, scope);
                     
                     return pythonImpl;
                 }

Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.cpp Sun Sep 10 10:07:48 2006
@@ -36,8 +36,8 @@
 
             // Constructor
             PythonImplementation::PythonImplementation(
-                const string& module, const string& modulePath, const string& className, Scope scope)
-                : ComponentType(modulePath + "/" + module),
+                Composite* composite, const string& module, const string& modulePath, const string& className, Scope scope)
+                : ComponentType(composite, modulePath + "/" + module),
                     module(module), modulePath(modulePath), className(className), scope(scope)
             {
                 LOGENTRY(1,"PythonImplementation::constructor");

Modified: incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/python/src/tuscany/sca/python/model/PythonImplementation.h Sun Sep 10 10:07:48 2006
@@ -52,13 +52,14 @@
 
                 /**
                  * Constructor.
+                 * @param composite The composite containing this implementation.
                  * @param module Name of the module.
                  * @param modulePath Path to the module (could be a blank string
                  * if this is not specified).
                  * @param className Name of the class in the module (could be a blank string
                  * if this is not specified).
                  */
-                PythonImplementation(const string& module, const string& modulePath, const string& className, Scope scope);
+                PythonImplementation(Composite* composite, const string& module, const string& modulePath, const string& className, Scope scope);
                 
                 /**
                  * Destructor

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyImplementationExtension.cpp Sun Sep 10 10:07:48 2006
@@ -62,7 +62,7 @@
                     string className = scdlImplementation->getCString("class");
                     string script = scdlImplementation->getCString("script");
 
-                    RubyImplementation* rubyImpl = new RubyImplementation(module, className, script);
+                    RubyImplementation* rubyImpl = new RubyImplementation(composite, module, className, script);
                     
                     return rubyImpl;
                 }

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.cpp Sun Sep 10 10:07:48 2006
@@ -44,22 +44,12 @@
                 : ServiceWrapper(service)
             {
                 LOGENTRY(1,"RubyServiceWrapper::constructor");
-    
+                
                 component = service->getComponent();
+                implementation = (RubyImplementation*)component->getType();
                 interf = service->getType()->getInterface();
                 remotable = interf->isRemotable();
                 
-                // Initialize the Ruby runtime
-                ruby_init();
-                
-                // Execute the specified Ruby script
-                RubyImplementation* impl = (RubyImplementation*)component->getType();
-                if (impl->getScript() != "")
-                {
-                    string script = component->getComposite()->getRoot() + '/' + impl->getScript();
-                    rb_require((char *)script.c_str());
-                }
-                
                 LOGEXIT(1,"RubyServiceWrapper::constructor");
                 
             }
@@ -85,12 +75,10 @@
                 
                 try
                 {
-                    // Create a new instance of the component implementation class
-                    RubyImplementation* impl = (RubyImplementation*)component->getType();
-                    
-                    string expr = impl->getClass() + ".new";
-                    VALUE instance = rb_eval_string(expr.c_str());
 
+                    // Create a new instance of the Ruby implementation class
+                    VALUE instance = rb_class_new_instance(0, NULL, implementation->getImplementationClass());
+                    
                     // Get the ID of the specified method
                     ID method = rb_intern(operation.getName().c_str());
 

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/RubyServiceWrapper.h Sun Sep 10 10:07:48 2006
@@ -25,6 +25,7 @@
 #include "tuscany/sca/core/Operation.h"
 #include "tuscany/sca/model/Component.h"
 #include "tuscany/sca/model/Interface.h"
+#include "tuscany/sca/ruby/model/RubyImplementation.h"
 
 #include <ruby.h>
 
@@ -83,6 +84,11 @@
                  * A pointer to the interface which the service exposes.
                  */
                 Interface* interf;
+
+                /**
+                 * The Ruby implementation
+                 */
+                 RubyImplementation* implementation;
 
             };
             

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.cpp Sun Sep 10 10:07:48 2006
@@ -22,6 +22,7 @@
 #include "tuscany/sca/ruby/model/RubyServiceBinding.h"
 #include "tuscany/sca/ruby/model/RubyReferenceBinding.h"
 #include "tuscany/sca/model/Component.h"
+#include "tuscany/sca/model/Composite.h"
 #include "tuscany/sca/model/Service.h"
 #include "tuscany/sca/model/Reference.h"
 #include "tuscany/sca/util/Utils.h"
@@ -34,11 +35,30 @@
         namespace ruby
         {
 
+            bool RubyImplementation::initialized = false;
+            
             // Constructor
-            RubyImplementation::RubyImplementation(const string& module, const string& className, const string& script)
-                : ComponentType(script.substr(0, script.find_last_of('.'))),
+            RubyImplementation::RubyImplementation(Composite* composite, const string& module, const string& className, const string& script)
+                : ComponentType(composite, script.substr(0, script.find_last_of('.'))),
                     module(module), className(className), script(script)
             {
+                // Initialize the Ruby runtime
+                if (!initialized)
+                {
+                    ruby_init();
+                    initialized = true;
+                }
+    
+                // Load the specified Ruby script
+                if (script != "")
+                {
+                    string path = composite->getRoot() + '/' + script;
+                    rb_require((char *)path.c_str());
+                }
+
+                // Load the Ruby implementation class                
+                implementationClass = rb_path2class(className.c_str());
+                
             }
 
             RubyImplementation::~RubyImplementation()

Modified: incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h
URL: http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h?view=diff&rev=441974&r1=441973&r2=441974
==============================================================================
--- incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h (original)
+++ incubator/tuscany/cpp/sca/runtime/extensions/ruby/src/tuscany/sca/ruby/model/RubyImplementation.h Sun Sep 10 10:07:48 2006
@@ -26,6 +26,8 @@
 #include <string>
 using std::string;
 
+#include <ruby.h>
+
 using namespace tuscany::sca::model;
 
 namespace tuscany
@@ -43,11 +45,12 @@
             public:
                 /**
                  * Constructor.
+                 * @param composite The composite containing this implementation.
                  * @param module Name of the Ruby module.
                  * @param className Name of the Ruby implementation class.
                  * @param script Path of the Ruby script.
                  */
-                RubyImplementation(const string& module, const string& className, const string& script);
+                RubyImplementation(Composite* composite, const string& module, const string& className, const string& script);
                 
                 /**
                  * Destructor
@@ -77,6 +80,11 @@
                  * @return The path of the Ruby script.
                  */
                 const string& getScript() const { return script; }
+                
+                /**
+                 * Returns the Ruby implementation class
+                 */
+                VALUE getImplementationClass() const { return implementationClass; }
 
             private:
                 
@@ -94,6 +102,16 @@
                  * Path of the Ruby script.
                  */
                 string script;
+
+                /**
+                 * True if the Ruby runtime has been initialized
+                 */
+                static bool initialized;
+
+                /**
+                 * The Ruby implementation class
+                 */                
+                VALUE implementationClass;
 
             };
             



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org