Author: jsdelfino
Date: Sun Jan 17 09:02:29 2010
New Revision: 900071

URL: http://svn.apache.org/viewvc?rev=900071&view=rev
Log:
Cleaned up test composite files. Adjusted C++ implementation elements to match 
the spec. Minor refactoring/terminology cleanup in HTTPD modules, renamed 
readImplementation to evalImplementation and evalImplementation to 
applyImplementation.

Added:
    
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-scheme.xsd
      - copied, changed from r900070, 
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-eval.xsd
Removed:
    tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-eval.xsd
    tuscany/sca-cpp/trunk/test/store-python/currency.composite
    tuscany/sca-cpp/trunk/test/store-scheme/currency.composite
Modified:
    tuscany/sca-cpp/trunk/components/cache/mcache.composite
    tuscany/sca-cpp/trunk/components/cache/mcache.cpp
    tuscany/sca-cpp/trunk/components/webservice/webservice.composite
    tuscany/sca-cpp/trunk/components/webservice/webservice.cpp
    tuscany/sca-cpp/trunk/modules/python/domain-test.composite
    tuscany/sca-cpp/trunk/modules/python/mod-python.cpp
    tuscany/sca-cpp/trunk/modules/python/mod-python.hpp
    
tuscany/sca-cpp/trunk/modules/python/tuscany-sca-1.1-implementation-python.xsd
    tuscany/sca-cpp/trunk/modules/scdl/scdl-test.cpp
    tuscany/sca-cpp/trunk/modules/scdl/test.composite
    tuscany/sca-cpp/trunk/modules/server/domain-test.composite
    tuscany/sca-cpp/trunk/modules/server/impl-test.cpp
    tuscany/sca-cpp/trunk/modules/server/mod-cpp.hpp
    tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp
    tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
    tuscany/sca-cpp/trunk/modules/server/mod-scheme.hpp
    tuscany/sca-cpp/trunk/test/store-python/store.composite
    tuscany/sca-cpp/trunk/test/store-scheme/store.composite

Modified: tuscany/sca-cpp/trunk/components/cache/mcache.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/mcache.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/mcache.composite (original)
+++ tuscany/sca-cpp/trunk/components/cache/mcache.composite Sun Jan 17 09:02:29 
2010
@@ -23,7 +23,7 @@
   name="mcache">
         
     <component name="mcache">
-        <t:implementation.cpp uri=".libs/libmcache"/>
+        <implementation.cpp path=".libs" library="libmcache"/>
         <service name="mcache">
             <t:binding.http uri="mcache"/>
         </service>

Modified: tuscany/sca-cpp/trunk/components/cache/mcache.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/mcache.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/mcache.cpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/mcache.cpp Sun Jan 17 09:02:29 2010
@@ -89,7 +89,7 @@
 
 extern "C" {
 
-const tuscany::value eval(const tuscany::list<tuscany::value>& params) {
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
     const tuscany::value func(car(params));
     if (func == "get")
         return tuscany::cache::get(cdr(params));

Modified: tuscany/sca-cpp/trunk/components/webservice/webservice.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/webservice/webservice.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/webservice/webservice.composite (original)
+++ tuscany/sca-cpp/trunk/components/webservice/webservice.composite Sun Jan 17 
09:02:29 2010
@@ -23,7 +23,7 @@
   name="webservice">
         
     <component name="webservice">
-        <t:implementation.cpp uri=".libs/libwebservice"/>
+        <implementation.cpp path=".libs" library="libwebservice"/>
         <service name="webservice">
             <t:binding.http uri="webservice"/>
         </service>

Modified: tuscany/sca-cpp/trunk/components/webservice/webservice.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/webservice/webservice.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/webservice/webservice.cpp (original)
+++ tuscany/sca-cpp/trunk/components/webservice/webservice.cpp Sun Jan 17 
09:02:29 2010
@@ -34,9 +34,9 @@
 namespace webservice {
 
 /**
- * Evaluate a Web service function / operation.
+ * Apply a Web service function / operation.
  */
-const failable<value> eval(const value& func, unused const list<value>& 
params) {
+const failable<value> apply(const value& func, unused const list<value>& 
params) {
     return tuscany::mkfailure<tuscany::value>(tuscany::string("Function not 
supported: ") + func);
 }
 
@@ -45,8 +45,8 @@
 
 extern "C" {
 
-const tuscany::value eval(const tuscany::list<tuscany::value>& params) {
-    return tuscany::webservice::eval(car(params), cdr(params));
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+    return tuscany::webservice::apply(car(params), cdr(params));
 }
 
 }

Modified: tuscany/sca-cpp/trunk/modules/python/domain-test.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/domain-test.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/python/domain-test.composite (original)
+++ tuscany/sca-cpp/trunk/modules/python/domain-test.composite Sun Jan 17 
09:02:29 2010
@@ -23,14 +23,14 @@
   name="domain-test">
         
     <component name="python-test">
-        <t:implementation.python uri="server-test.py"/>
+        <t:implementation.python script="server-test.py"/>
         <service name="test">
             <t:binding.http uri="python"/>
         </service>
     </component>     
 
     <component name="client-test">
-        <t:implementation.python uri="client-test.py"/>
+        <t:implementation.python script="client-test.py"/>
         <service name="client">
             <t:binding.http uri="client"/>
         </service>

Modified: tuscany/sca-cpp/trunk/modules/python/mod-python.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/mod-python.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/python/mod-python.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/python/mod-python.cpp Sun Jan 17 09:02:29 2010
@@ -37,14 +37,15 @@
 namespace modeval {
 
 /**
- * Return a configured component implementation.
- * For now only Scheme and C++ implementations are supported.
+ * Evaluate a Python component implementation and convert it to an applicable
+ * lambda function.
  */
-const failable<lambda<value(const list<value>&)> > readImplementation(const 
string& itype, const string& path, const list<value>& px) {
+const failable<lambda<value(const list<value>&)> > evalImplementation(const 
string& path, const value& impl, const list<value>& px) {
+    const string itype(elementName(impl));
     if (contains(itype, ".python"))
-        return modpython::readImplementation(path, px);
+        return modpython::evalImplementation(path, impl, px);
     if (contains(itype, ".cpp"))
-        return modcpp::readImplementation(path, px);
+        return modcpp::evalImplementation(path, impl, px);
     return mkfailure<lambda<value(const list<value>&)> >(string("Unsupported 
implementation type: ") + itype);
 }
 

Modified: tuscany/sca-cpp/trunk/modules/python/mod-python.hpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/mod-python.hpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/python/mod-python.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/python/mod-python.hpp Sun Jan 17 09:02:29 2010
@@ -23,7 +23,7 @@
 #define tuscany_modpython_hpp
 
 /**
- * Evaluation functions used by mod-eval to evaluate implementation.python
+ * Evaluation functions used by mod-eval to evaluate Python
  * component implementations.
  */
 
@@ -41,18 +41,18 @@
 namespace modpython {
 
 /**
- * Evaluate a script component implementation function.
+ * Apply a Python component implementation function.
  */
-struct evalImplementation {
+struct applyImplementation {
     PyObject* impl;
     const list<value> px;
-    evalImplementation(PyObject* impl, const list<value>& px) : impl(impl), 
px(px) {
+    applyImplementation(PyObject* impl, const list<value>& px) : impl(impl), 
px(px) {
     }
     const value operator()(const list<value>& params) const {
         const value expr = append<value>(params, px);
-        debug(expr, "modeval::python::evalImplementation::input");
+        debug(expr, "modeval::python::applyImplementation::input");
         const failable<value> val = python::evalScript(expr, impl);
-        debug(val, "modeval::python::evalImplementation::result");
+        debug(val, "modeval::python::applyImplementation::result");
         if (!hasContent(val))
             return mklist<value>(value(), reason(val));
         return mklist<value>(content(val));
@@ -60,16 +60,18 @@
 };
 
 /**
- * Read a script component implementation.
+ * Evaluate a Python component implementation and convert it to an applicable
+ * lambda function.
  */
-const failable<lambda<value(const list<value>&)> > readImplementation(const 
string& path, const list<value>& px) {
-    ifstream is(path);
+const failable<lambda<value(const list<value>&)> > evalImplementation(const 
string& path, const value& impl, const list<value>& px) {
+    const string fpath(path + attributeValue("script", impl));
+    ifstream is(fpath);
     if (fail(is))
-        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + path);
-    const failable<PyObject*> impl = python::readScript(path, is);
-    if (!hasContent(impl))
-        return mkfailure<lambda<value(const list<value>&)> >(reason(impl));
-    return lambda<value(const list<value>&)>(evalImplementation(content(impl), 
px));
+        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + fpath);
+    const failable<PyObject*> script = python::readScript(fpath, is);
+    if (!hasContent(script))
+        return mkfailure<lambda<value(const list<value>&)> >(reason(script));
+    return lambda<value(const 
list<value>&)>(applyImplementation(content(script), px));
 }
 
 }

Modified: 
tuscany/sca-cpp/trunk/modules/python/tuscany-sca-1.1-implementation-python.xsd
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/tuscany-sca-1.1-implementation-python.xsd?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- 
tuscany/sca-cpp/trunk/modules/python/tuscany-sca-1.1-implementation-python.xsd 
(original)
+++ 
tuscany/sca-cpp/trunk/modules/python/tuscany-sca-1.1-implementation-python.xsd 
Sun Jan 17 09:02:29 2010
@@ -34,7 +34,7 @@
                     <any namespace="##targetNamespace" processContents="lax" 
                        minOccurs="0" maxOccurs="unbounded"/>
                 </sequence>
-                <attribute name="location" type="anyURI" use="required"/>
+                <attribute name="script" type="anyURI" use="required"/>
                 <anyAttribute namespace="##any" processContents="lax"/>
             </extension>
         </complexContent>

Modified: tuscany/sca-cpp/trunk/modules/scdl/scdl-test.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/scdl/scdl-test.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/scdl/scdl-test.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/scdl/scdl-test.cpp Sun Jan 17 09:02:29 2010
@@ -48,7 +48,7 @@
     assert(name(store) == string("Store"));
     const value impl = implementation(store);
     assert(uri(impl) == string("store.html"));
-    assert(implementationType(impl) == "t:implementation.widget");
+    assert(implementationType(impl) == "t:implementation.scheme");
 
     const value catalog = named(string("Catalog"), c);
     assert(name(catalog) == string("Catalog"));

Modified: tuscany/sca-cpp/trunk/modules/scdl/test.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/scdl/test.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/scdl/test.composite (original)
+++ tuscany/sca-cpp/trunk/modules/scdl/test.composite Sun Jan 17 09:02:29 2010
@@ -23,7 +23,7 @@
   name="store">
         
     <component name="Store">
-        <t:implementation.widget uri="store.html"/>
+        <t:implementation.scheme script="store.scm"/>
         <service name="Widget">
             <t:binding.http uri="/store"/>
         </service>
@@ -39,7 +39,7 @@
     </component>
     
     <component name="Catalog">
-        <t:implementation.scheme uri="fruits-catalog.scm"/> 
+        <t:implementation.scheme script="fruits-catalog.scm"/> 
         <property name="currencyCode">USD</property>
         <service name="Catalog">
             <t:binding.jsonrpc/>
@@ -48,20 +48,17 @@
     </component> 
      
     <component name="ShoppingCart">
-        <t:implementation.scheme uri="shopping-cart.scm"/>
+        <t:implementation.scheme script="shopping-cart.scm"/>
         <service name="Cart">
             <t:binding.atom uri="/ShoppingCart"/>
         </service>        
         <service name="Total">
             <t:binding.jsonrpc/>
         </service>        
-        <reference name="cache">
-            <binding.memcached uri="localhost:11311"/>
-        </reference>
     </component>
     
     <component name="CurrencyConverter">
-        <t:implementation.scheme uri="currency-converter.scm"/>
+        <t:implementation.scheme script="currency-converter.scm"/>
     </component>     
 
 </composite>

Copied: 
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-scheme.xsd 
(from r900070, 
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-eval.xsd)
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-scheme.xsd?p2=tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-scheme.xsd&p1=tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-eval.xsd&r1=900070&r2=900071&rev=900071&view=diff
==============================================================================
--- 
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-eval.xsd 
(original)
+++ 
tuscany/sca-cpp/trunk/modules/scheme/tuscany-sca-1.1-implementation-scheme.xsd 
Sun Jan 17 09:02:29 2010
@@ -25,16 +25,16 @@
 
     <import namespace="http://docs.oasis-open.org/ns/opencsa/sca/200903"; 
schemaLocation="sca-1.1-cd04.xsd"/>
 
-    <element name="implementation.eval" type="t:EvalImplementation" 
substitutionGroup="sca:implementation"/>
+    <element name="implementation.scheme" type="t:SchemeImplementation" 
substitutionGroup="sca:implementation"/>
        
-    <complexType name="EvalImplementation">
+    <complexType name="SchemeImplementation">
         <complexContent>
             <extension base="sca:Implementation">
                 <sequence>
                     <any namespace="##targetNamespace" processContents="lax" 
                        minOccurs="0" maxOccurs="unbounded"/>
                 </sequence>
-                <attribute name="location" type="anyURI" use="required"/>
+                <attribute name="script" type="anyURI" use="required"/>
                 <anyAttribute namespace="##any" processContents="lax"/>
             </extension>
         </complexContent>

Modified: tuscany/sca-cpp/trunk/modules/server/domain-test.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/domain-test.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/domain-test.composite (original)
+++ tuscany/sca-cpp/trunk/modules/server/domain-test.composite Sun Jan 17 
09:02:29 2010
@@ -23,21 +23,21 @@
   name="domain-test">
         
     <component name="scheme-test">
-        <t:implementation.scheme uri="server-test.scm"/>
+        <t:implementation.scheme script="server-test.scm"/>
         <service name="test">
             <t:binding.http uri="test"/>
         </service>
     </component>     
 
     <component name="cpp-test">
-        <t:implementation.cpp uri=".libs/libimpl-test"/>
+        <implementation.cpp path=".libs" library="libimpl-test"/>
         <service name="cpp">
             <t:binding.http uri="cpp"/>
         </service>
     </component>
 
     <component name="client-test">
-        <t:implementation.scheme uri="client-test.scm"/>
+        <t:implementation.scheme script="client-test.scm"/>
         <service name="client">
             <t:binding.http uri="client"/>
         </service>

Modified: tuscany/sca-cpp/trunk/modules/server/impl-test.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/impl-test.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/impl-test.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/impl-test.cpp Sun Jan 17 09:02:29 2010
@@ -58,7 +58,7 @@
 
 extern "C" {
 
-const tuscany::value eval(const tuscany::list<tuscany::value>& params) {
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
     const tuscany::value func(car(params));
     if (func == "get")
         return tuscany::server::get(cdr(params));

Modified: tuscany/sca-cpp/trunk/modules/server/mod-cpp.hpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-cpp.hpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-cpp.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-cpp.hpp Sun Jan 17 09:02:29 2010
@@ -23,7 +23,7 @@
 #define tuscany_modcpp_hpp
 
 /**
- * Evaluation functions used by mod-eval to evaluate implementation.cpp
+ * Evaluation functions used by mod-eval to evaluate C++
  * component implementations.
  */
 
@@ -32,6 +32,7 @@
 
 #include "function.hpp"
 #include "list.hpp"
+#include "element.hpp"
 #include "value.hpp"
 #include "monad.hpp"
 #include "dynlib.hpp"
@@ -43,31 +44,35 @@
 namespace modcpp {
 
 /**
- * Evaluate a C++ component implementation function.
+ * Apply a C++ component implementation function.
  */
-struct evalImplementation {
+struct applyImplementation {
     const lib ilib;
     const lambda<value(const list<value>&)> impl;
     const list<value> px;
-    evalImplementation(const lib& ilib, const lambda<value(const 
list<value>&)>& impl, const list<value>& px) : ilib(ilib), impl(impl), px(px) {
+    applyImplementation(const lib& ilib, const lambda<value(const 
list<value>&)>& impl, const list<value>& px) : ilib(ilib), impl(impl), px(px) {
     }
     const value operator()(const list<value>& params) const {
-        debug(params, "modeval::cpp::evalImplementation::input");
+        debug(params, "modeval::cpp::applyImplementation::input");
         const value val = impl(append(params, px));
-        debug(val, "modeval::cpp::evalImplementation::result");
+        debug(val, "modeval::cpp::applyImplementation::result");
         return val;
     }
 };
 
 /**
- * Read a C++ component implementation.
+ * Evaluate a C++ component implementation and convert it to
+ * an applicable lambda function.
  */
-const failable<lambda<value(const list<value>&)> > readImplementation(const 
string& path, const list<value>& px) {
-    const lib ilib(*(new (gc_new<lib>()) lib(path + dynlibExt)));
-    const failable<lambda<value(const list<value>&)> > 
impl(dynlambda<value(const list<value>&)>("eval", ilib));
-    if (!hasContent(impl))
-        return impl;
-    return lambda<value(const list<value>&)>(evalImplementation(ilib, 
content(impl), px));
+const failable<lambda<value(const list<value>&)> > evalImplementation(const 
string& path, const value& impl, const list<value>& px) {
+    const value ipath(attributeValue("path", impl));
+    const value iname(attributeValue("library", impl));
+    const string fpath(isNil(ipath)? path + iname : path + ipath + "/" + 
iname);
+    const lib ilib(*(new (gc_new<lib>()) lib(fpath + dynlibExt)));
+    const failable<lambda<value(const list<value>&)> > 
evalf(dynlambda<value(const list<value>&)>("apply", ilib));
+    if (!hasContent(evalf))
+        return evalf;
+    return lambda<value(const list<value>&)>(applyImplementation(ilib, 
content(evalf), px));
 }
 
 }

Modified: tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-eval.cpp Sun Jan 17 09:02:29 2010
@@ -37,14 +37,15 @@
 namespace modeval {
 
 /**
- * Return a configured component implementation.
- * For now only Scheme and C++ implementations are supported.
+ * Evaluate a Scheme or C++ component implementation and convert it to an
+ * applicable lambda function.
  */
-const failable<lambda<value(const list<value>&)> > readImplementation(const 
string& itype, const string& path, const list<value>& px) {
+const failable<lambda<value(const list<value>&)> > evalImplementation(const 
string& path, const value& impl, const list<value>& px) {
+    const string itype(elementName(impl));
     if (contains(itype, ".scheme"))
-        return modscheme::readImplementation(path, px);
+        return modscheme::evalImplementation(path, impl, px);
     if (contains(itype, ".cpp"))
-        return modcpp::readImplementation(path, px);
+        return modcpp::evalImplementation(path, impl, px);
     return mkfailure<lambda<value(const list<value>&)> >(string("Unsupported 
implementation type: ") + itype);
 }
 

Modified: tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp Sun Jan 17 09:02:29 2010
@@ -279,11 +279,10 @@
     return cons(mkproxy(car(refs), base), proxies(cdr(refs), base));
 }
 
-extern const failable<lambda<value(const list<value>&)> > 
readImplementation(const string& itype, const string& path, const list<value>& 
px);
+extern const failable<lambda<value(const list<value>&)> > 
evalImplementation(const string& cpath, const value& impl, const list<value>& 
px);
 
 const value confImplementation(DirConf& dc, ServerConf& sc, server_rec& 
server, const value& comp) {
     const value impl = scdl::implementation(comp);
-    const string path = dc.contributionPath + string(scdl::uri(impl));
 
     // Convert component references to configured proxy lambdas
     ostringstream base;
@@ -296,8 +295,9 @@
         base << sc.wiringServerName << "/references/" << 
string(scdl::name(comp)) << "/";
     const list<value> px(proxies(scdl::references(comp), str(base)));
 
-    // Read and configure the implementation
-    const failable<lambda<value(const list<value>&)> > 
cimpl(readImplementation(elementName(impl), path, px));
+    // Evaluate the component implementation and convert it to an
+    // applicable lambda function
+    const failable<lambda<value(const list<value>&)> > 
cimpl(evalImplementation(dc.contributionPath, impl, px));
     if (!hasContent(cimpl))
         return reason(cimpl);
     return content(cimpl);

Modified: tuscany/sca-cpp/trunk/modules/server/mod-scheme.hpp
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/server/mod-scheme.hpp?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/server/mod-scheme.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/server/mod-scheme.hpp Sun Jan 17 09:02:29 2010
@@ -23,7 +23,7 @@
 #define tuscany_modscheme_hpp
 
 /**
- * Evaluation functions used by mod-eval to evaluate implementation.scheme
+ * Evaluation functions used by mod-eval to evaluate Scheme
  * component implementations.
  */
 
@@ -50,19 +50,19 @@
 }
 
 /**
- * Evaluate a scheme component implementation function.
+ * Apply a Scheme component implementation function.
  */
-struct evalImplementation {
+struct applyImplementation {
     const value impl;
     const list<value> px;
-    evalImplementation(const value& impl, const list<value>& px) : impl(impl), 
px(scheme::quotedParameters(primitiveProcedures(px))) {
+    applyImplementation(const value& impl, const list<value>& px) : 
impl(impl), px(scheme::quotedParameters(primitiveProcedures(px))) {
     }
     const value operator()(const list<value>& params) const {
         const value expr = cons<value>(car(params), 
append(scheme::quotedParameters(cdr(params)), px));
-        debug(expr, "modeval::scheme::evalImplementation::input");
+        debug(expr, "modeval::scheme::applyImplementation::input");
         scheme::Env env = scheme::setupEnvironment();
         const value val = scheme::evalScript(expr, impl, env);
-        debug(val, "modeval::scheme::evalImplementation::result");
+        debug(val, "modeval::scheme::applyImplementation::result");
         if (isNil(val))
             return mklist<value>(value(), string("Could not evaluate 
expression"));
         return mklist<value>(val);
@@ -70,16 +70,18 @@
 };
 
 /**
- * Read a scheme component implementation.
+ * Evaluate a Scheme component implementation and convert it to an
+ * applicable lambda function.
  */
-const failable<lambda<value(const list<value>&)> > readImplementation(const 
string& path, const list<value>& px) {
-    ifstream is(path);
+const failable<lambda<value(const list<value>&)> > evalImplementation(const 
string& path, const value& impl, const list<value>& px) {
+    const string fpath(path + attributeValue("script", impl));
+    ifstream is(fpath);
     if (fail(is))
-        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + path);
-    const value impl = scheme::readScript(is);
-    if (isNil(impl))
-        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + path);
-    return lambda<value(const list<value>&)>(evalImplementation(impl, px));
+        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + fpath);
+    const value script = scheme::readScript(is);
+    if (isNil(script))
+        return mkfailure<lambda<value(const list<value>&)> >(string("Could not 
read implementation: ") + fpath);
+    return lambda<value(const list<value>&)>(applyImplementation(script, px));
 }
 
 }

Modified: tuscany/sca-cpp/trunk/test/store-python/store.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/test/store-python/store.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/test/store-python/store.composite (original)
+++ tuscany/sca-cpp/trunk/test/store-python/store.composite Sun Jan 17 09:02:29 
2010
@@ -23,8 +23,7 @@
   name="store">
         
     <component name="Store">
-           <!-- <t:implementation.widget location="store.html"/> -->
-        <t:implementation.python uri="store.py"/>
+        <t:implementation.python script="store.py"/>
         <service name="Widget">
             <t:binding.http uri="store"/>
         </service>
@@ -34,7 +33,7 @@
     </component>
     
     <component name="Catalog">
-        <t:implementation.python uri="fruits-catalog.py"/> 
+        <t:implementation.python script="fruits-catalog.py"/> 
         <property name="currencyCode">USD</property>
         <service name="Catalog">
             <t:binding.jsonrpc uri="catalog"/>
@@ -43,7 +42,7 @@
     </component> 
      
     <component name="ShoppingCart">
-        <t:implementation.python uri="shopping-cart.py"/>
+        <t:implementation.python script="shopping-cart.py"/>
         <service name="ShoppingCart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
@@ -54,14 +53,14 @@
     </component>
     
     <component name="CurrencyConverter">
-        <t:implementation.python uri="currency-converter.py"/>
+        <t:implementation.python script="currency-converter.py"/>
         <service name="CurrencyConverter">
             <t:binding.jsonrpc uri="currencyConverter"/>
         </service>        
     </component>     
 
     <component name="Cache">
-        <t:implementation.cpp uri="../../components/cache/.libs/libmcache"/>
+        <implementation.cpp path="../../components/cache/.libs" 
library="libmcache"/>
         <service name="Cache">
             <t:binding.atom uri="cache"/>
         </service>

Modified: tuscany/sca-cpp/trunk/test/store-scheme/store.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/test/store-scheme/store.composite?rev=900071&r1=900070&r2=900071&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/test/store-scheme/store.composite (original)
+++ tuscany/sca-cpp/trunk/test/store-scheme/store.composite Sun Jan 17 09:02:29 
2010
@@ -23,8 +23,7 @@
   name="store">
         
     <component name="Store">
-           <!-- <t:implementation.widget location="store.html"/> -->
-        <t:implementation.scheme uri="store.scm"/>
+        <t:implementation.scheme script="store.scm"/>
         <service name="Widget">
             <t:binding.http uri="store"/>
         </service>
@@ -34,7 +33,7 @@
     </component>
     
     <component name="Catalog">
-        <t:implementation.scheme uri="fruits-catalog.scm"/> 
+        <t:implementation.scheme script="fruits-catalog.scm"/> 
         <property name="currencyCode">USD</property>
         <service name="Catalog">
             <t:binding.jsonrpc uri="catalog"/>
@@ -43,7 +42,7 @@
     </component> 
      
     <component name="ShoppingCart">
-        <t:implementation.scheme uri="shopping-cart.scm"/>
+        <t:implementation.scheme script="shopping-cart.scm"/>
         <service name="ShoppingCart">
             <t:binding.atom uri="shoppingCart"/>
         </service>        
@@ -54,14 +53,14 @@
     </component>
     
     <component name="CurrencyConverter">
-        <t:implementation.scheme uri="currency-converter.scm"/>
+        <t:implementation.scheme script="currency-converter.scm"/>
         <service name="CurrencyConverter">
             <t:binding.jsonrpc uri="currencyConverter"/>
         </service>        
     </component>     
 
     <component name="Cache">
-        <t:implementation.cpp uri="../../components/cache/.libs/libmcache"/>
+        <implementation.cpp path="../../components/cache/.libs" 
library="libmcache"/>
         <service name="Cache">
             <t:binding.atom uri="cache"/>
         </service>


Reply via email to