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 2011/03/08 09:18:09 UTC

svn commit: r1079292 [1/2] - in /tuscany/sca-cpp/trunk: components/cache/ components/chat/ components/filedb/ components/log/ components/nosqldb/ components/queue/ components/sqldb/ kernel/ modules/atom/ modules/edit/ modules/edit/apps/me360/ modules/e...

Author: jsdelfino
Date: Tue Mar  8 08:18:07 2011
New Revision: 1079292

URL: http://svn.apache.org/viewvc?rev=1079292&view=rev
Log:
Change ATOM and RSS feed representations to use name value pairs instead of just strings, to allow support for all ATOM and RSS attributes and avoid confusion with non-feed string results.

Added:
    tuscany/sca-cpp/trunk/modules/edit/apps/me360/
    tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.composite
      - copied, changed from r1079291, tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.composite
    tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.html
      - copied, changed from r1079291, tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.html
Removed:
    tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/
    tuscany/sca-cpp/trunk/modules/edit/apps/myprofile2/
    tuscany/sca-cpp/trunk/modules/edit/apps/nearme2/
    tuscany/sca-cpp/trunk/modules/edit/apps/store/
    tuscany/sca-cpp/trunk/modules/edit/apps/store2/
    tuscany/sca-cpp/trunk/modules/edit/apps/store3/
    tuscany/sca-cpp/trunk/modules/edit/apps/travel/
Modified:
    tuscany/sca-cpp/trunk/components/cache/client-test.cpp
    tuscany/sca-cpp/trunk/components/chat/client-test.cpp
    tuscany/sca-cpp/trunk/components/filedb/client-test.cpp
    tuscany/sca-cpp/trunk/components/log/client-test.cpp
    tuscany/sca-cpp/trunk/components/nosqldb/client-test.cpp
    tuscany/sca-cpp/trunk/components/queue/client-test.cpp
    tuscany/sca-cpp/trunk/components/sqldb/client-test.cpp
    tuscany/sca-cpp/trunk/kernel/element.hpp
    tuscany/sca-cpp/trunk/modules/atom/atom-test.cpp
    tuscany/sca-cpp/trunk/modules/atom/atom.hpp
    tuscany/sca-cpp/trunk/modules/edit/apps.py
    tuscany/sca-cpp/trunk/modules/edit/dashboard.py
    tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@localhost
    tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com
    tuscany/sca-cpp/trunk/modules/edit/htdocs/app/app.html
    tuscany/sca-cpp/trunk/modules/edit/htdocs/dash/dashboard.html
    tuscany/sca-cpp/trunk/modules/edit/htdocs/graph/graph.html
    tuscany/sca-cpp/trunk/modules/edit/htdocs/page/page.html
    tuscany/sca-cpp/trunk/modules/edit/pages.py
    tuscany/sca-cpp/trunk/modules/edit/palettes.py
    tuscany/sca-cpp/trunk/modules/edit/util.py
    tuscany/sca-cpp/trunk/modules/http/http.hpp
    tuscany/sca-cpp/trunk/modules/java/org/apache/tuscany/IterableUtil.java
    tuscany/sca-cpp/trunk/modules/java/test/ServerImpl.java
    tuscany/sca-cpp/trunk/modules/js/htdocs/atomutil.js
    tuscany/sca-cpp/trunk/modules/js/htdocs/component.js
    tuscany/sca-cpp/trunk/modules/js/htdocs/util.js
    tuscany/sca-cpp/trunk/modules/python/eval.hpp
    tuscany/sca-cpp/trunk/modules/python/server-test.py
    tuscany/sca-cpp/trunk/modules/rss/rss-test.cpp
    tuscany/sca-cpp/trunk/modules/rss/rss.hpp
    tuscany/sca-cpp/trunk/modules/scheme/json-value.cpp
    tuscany/sca-cpp/trunk/modules/scheme/primitive.hpp
    tuscany/sca-cpp/trunk/modules/scheme/value-json.cpp
    tuscany/sca-cpp/trunk/modules/scheme/value-xml.cpp
    tuscany/sca-cpp/trunk/modules/scheme/xml-value.cpp
    tuscany/sca-cpp/trunk/modules/server/client-test.hpp
    tuscany/sca-cpp/trunk/modules/server/mod-eval.hpp
    tuscany/sca-cpp/trunk/modules/server/server-test.scm
    tuscany/sca-cpp/trunk/modules/wsgi/atom-test.py
    tuscany/sca-cpp/trunk/modules/wsgi/atomutil.py
    tuscany/sca-cpp/trunk/modules/wsgi/composite.py
    tuscany/sca-cpp/trunk/modules/wsgi/server-test.py
    tuscany/sca-cpp/trunk/modules/wsgi/util.py
    tuscany/sca-cpp/trunk/samples/store-cluster/domains/jane/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-cluster/domains/jane/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-cluster/domains/joe/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-cluster/domains/joe/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-cpp/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-cpp/shopping-cart.cpp
    tuscany/sca-cpp/trunk/samples/store-gae/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-gae/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-java/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-java/store/ShoppingCartImpl.java
    tuscany/sca-cpp/trunk/samples/store-nosql/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-nosql/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-python/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-python/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-scheme/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-scheme/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-sql/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-sql/shopping-cart.scm
    tuscany/sca-cpp/trunk/samples/store-vhost/domains/jane/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-vhost/domains/jane/shopping-cart.py
    tuscany/sca-cpp/trunk/samples/store-vhost/domains/joe/htdocs/index.html
    tuscany/sca-cpp/trunk/samples/store-vhost/domains/joe/shopping-cart.py

Modified: tuscany/sca-cpp/trunk/components/cache/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/cache/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/cache/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/cache/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -43,10 +43,13 @@ const string memocacheuri("http://localh
 bool testCache(const string& uri) {
     http::CURLSession cs("", "", "");
 
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     const failable<value> id = http::post(a, uri, cs);
     assert(hasContent(id));
@@ -58,10 +61,13 @@ bool testCache(const string& uri) {
         assert(content(val) == a);
     }
 
-    const list<value> j = list<value>()
+    const list<value> j = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$3.55"));
-    const list<value> b = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), j);
+            + (list<value>() + "price" + string("$3.55")));
+    const list<value> b = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + j);
 
     {
         const failable<value> r = http::put(b, uri + p, cs);
@@ -123,10 +129,13 @@ struct getLoop {
 };
 
 bool testGetPerf() {
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$4.55"));
-    const value a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$4.55")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     http::CURLSession cs("", "", "");
     const failable<value> id = http::post(a, memcacheuri, cs);

Modified: tuscany/sca-cpp/trunk/components/chat/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/chat/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/chat/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/chat/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -45,10 +45,13 @@ const value pass2("sca2");
 const value jid3("sca3@localhost");
 const value pass3("sca3");
 
-const list<value> item = list<value>()
-        + (list<value>() + "name" + string("Apple"))
-        + (list<value>() + "price" + string("$2.99"));
-const list<value> entry = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), item);
+const list<value> item = list<value>() + "content" + (list<value>() + "item" 
+    + (list<value>() + "name" + string("Apple"))
+    + (list<value>() + "price" + string("$2.99")));
+const list<value> entry = list<value>() + (list<value>() + "entry" 
+    + (list<value>() + "title" + string("item"))
+    + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+    + item);
 
 worker w(2);
 bool received;

Modified: tuscany/sca-cpp/trunk/components/filedb/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/filedb/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/filedb/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/filedb/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -41,10 +41,13 @@ const string uri("http://localhost:8090/
 bool testFileDB() {
     http::CURLSession cs("", "", "");
 
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     const failable<value> id = http::post(a, uri, cs);
     assert(hasContent(id));
@@ -56,10 +59,13 @@ bool testFileDB() {
         assert(content(val) == a);
     }
 
-    const list<value> j = list<value>()
+    const list<value> j = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$3.55"));
-    const list<value> b = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), j);
+            + (list<value>() + "price" + string("$3.55")));
+    const list<value> b = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + j);
 
     {
         const failable<value> r = http::put(b, uri + p, cs);
@@ -99,10 +105,13 @@ struct getLoop {
 };
 
 bool testGetPerf() {
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$4.55"));
-    const value a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$4.55")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     http::CURLSession cs("", "", "");
     const failable<value> id = http::post(a, uri, cs);

Modified: tuscany/sca-cpp/trunk/components/log/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/log/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/log/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/log/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -41,10 +41,13 @@ const string uri("http://localhost:8090/
 bool testLog() {
     http::CURLSession cs("", "", "");
 
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     const failable<value> id = http::post(a, uri, cs);
     assert(hasContent(id));
@@ -66,10 +69,13 @@ struct logLoop {
 };
 
 bool testLogPerf() {
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const value a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     http::CURLSession cs("", "", "");
     const failable<value> id = http::post(a, uri, cs);

Modified: tuscany/sca-cpp/trunk/components/nosqldb/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/nosqldb/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/nosqldb/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/nosqldb/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -41,10 +41,13 @@ const string uri("http://localhost:8090/
 bool testNoSqlDb() {
     http::CURLSession cs("", "", "");
 
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     const failable<value> id = http::post(a, uri, cs);
     assert(hasContent(id));
@@ -56,10 +59,13 @@ bool testNoSqlDb() {
         assert(content(val) == a);
     }
 
-    const list<value> j = list<value>()
+    const list<value> j = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$3.55"));
-    const list<value> b = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), j);
+            + (list<value>() + "price" + string("$3.55")));
+    const list<value> b = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + j);
 
     {
         const failable<value> r = http::put(b, uri + p, cs);
@@ -99,10 +105,13 @@ struct getLoop {
 };
 
 bool testGetPerf() {
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$4.55"));
-    const value a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$4.55")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     http::CURLSession cs("", "", "");
     const failable<value> id = http::post(a, uri, cs);

Modified: tuscany/sca-cpp/trunk/components/queue/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/queue/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/queue/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/queue/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -46,10 +46,13 @@ namespace queue {
 const value key(mklist<value>(string("report")));
 const string qname("reportq");
 
-const list<value> item = list<value>()
-        + (list<value>() + "name" + string("Apple"))
-        + (list<value>() + "price" + string("$2.99"));
-const list<value> entry = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), item);
+const list<value> item = list<value>() + "content" + (list<value>() + "item" 
+    + (list<value>() + "name" + string("Apple"))
+    + (list<value>() + "price" + string("$2.99")));
+const list<value> entry = list<value>() + (list<value>() + "entry" 
+    + (list<value>() + "title" + string("item"))
+    + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+    + item);
 
 bool testDeclareQueue() {
     QpidConnection qc;

Modified: tuscany/sca-cpp/trunk/components/sqldb/client-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/components/sqldb/client-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/components/sqldb/client-test.cpp (original)
+++ tuscany/sca-cpp/trunk/components/sqldb/client-test.cpp Tue Mar  8 08:18:07 2011
@@ -41,10 +41,13 @@ const string uri("http://localhost:8090/
 bool testSqlDb() {
     http::CURLSession cs("", "", "");
 
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$2.99"));
-    const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$2.99")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     const failable<value> id = http::post(a, uri, cs);
     assert(hasContent(id));
@@ -56,10 +59,13 @@ bool testSqlDb() {
         assert(content(val) == a);
     }
 
-    const list<value> j = list<value>()
+    const list<value> j = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$3.55"));
-    const list<value> b = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), j);
+            + (list<value>() + "price" + string("$3.55")));
+    const list<value> b = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + j);
 
     {
         const failable<value> r = http::put(b, uri + p, cs);
@@ -99,10 +105,13 @@ struct getLoop {
 };
 
 bool testGetPerf() {
-    const list<value> i = list<value>()
+    const list<value> i = list<value>() + "content" + (list<value>() + "item" 
             + (list<value>() + "name" + string("Apple"))
-            + (list<value>() + "price" + string("$4.55"));
-    const value a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+            + (list<value>() + "price" + string("$4.55")));
+    const list<value> a = list<value>() + (list<value>() + "entry" 
+            + (list<value>() + "title" + string("item"))
+            + (list<value>() + "id" + string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))
+            + i);
 
     http::CURLSession cs("", "", "");
     const failable<value> id = http::post(a, uri, cs);

Modified: tuscany/sca-cpp/trunk/kernel/element.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/kernel/element.hpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/kernel/element.hpp (original)
+++ tuscany/sca-cpp/trunk/kernel/element.hpp Tue Mar  8 08:18:07 2011
@@ -95,7 +95,7 @@ const list<value> elementChildren(const 
 /**
  * Returns true if an element has a value.
  */
-const value elementHasValue(const list<value>& l) {
+const bool elementHasValue(const list<value>& l) {
     const list<value> r = reverse(l);
     if (isSymbol(car(r)))
         return false;

Modified: tuscany/sca-cpp/trunk/modules/atom/atom-test.cpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/atom/atom-test.cpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/atom/atom-test.cpp (original)
+++ tuscany/sca-cpp/trunk/modules/atom/atom-test.cpp Tue Mar  8 08:18:07 2011
@@ -93,19 +93,27 @@ bool testEntry() {
         const list<value> i = list<value>() + element + value("item")
                 + value(list<value>() + element + value("name") + value(string("Apple")))
                 + value(list<value>() + element + value("price") + value(string("$2.99")));
-        const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), i);
+        const list<value> a = list<value>() + (list<value>() + element + value("entry")
+                + value(list<value>() + element + value("title") + value(string("item")))
+                + value(list<value>() + element + value("id") + value(string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")))
+                + value(list<value>() + element + value("content") + value(i)));
         ostringstream os;
         writeATOMEntry<ostream*>(writer, &os, a);
         assert(str(os) == itemEntry);
     }
     {
-        const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), string("Apple"));
+        const list<value> a = list<value>() + (list<value>() + element + value("entry")
+                + value(list<value>() + element + value("title") + value(string("item")))
+                + value(list<value>() + element + value("id") + value(string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")))
+                + value(list<value>() + element + value("content") + value(string("Apple"))));
         ostringstream os;
         writeATOMEntry<ostream*>(writer, &os, a);
         assert(str(os) == itemTextEntry);
     }
     {
-        const list<value> a = mklist<value>(string("item"), string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"), list<value>());
+        const list<value> a = list<value>() + (list<value>() + element + value("entry")
+                + value(list<value>() + element + value("title") + value(string("item")))
+                + value(list<value>() + element + value("id") + value(string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"))));
         ostringstream os;
         writeATOMEntry<ostream*>(writer, &os, a);
         assert(str(os) == itemNoContentEntry);
@@ -173,8 +181,11 @@ const string itemFeed("<?xml version=\"1
 
 bool testFeed() {
     {
+        const list<value> a = list<value>() + (list<value>() + element + value("feed")
+                + value(list<value>() + element + value("title") + value(string("Feed")))
+                + value(list<value>() + element + value("id") + value(string("1234"))));
         ostringstream os;
-        writeATOMFeed<ostream*>(writer, &os, mklist<value>("Feed", "1234"));
+        writeATOMFeed<ostream*>(writer, &os, a);
         assert(str(os) == emptyFeed);
     }
     {
@@ -184,39 +195,43 @@ bool testFeed() {
         assert(str(os) == emptyFeed);
     }
     {
-        const list<value> i = list<value>()
-                + (list<value>() + "item" + "cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"
-                    + (list<value>() + element + "item"
+        const list<value> i1 = list<value>() + element + "item"
                         + (list<value>() + element + "name" + "Apple")
-                        + (list<value>() + element + "price" + "$2.99")))
-                + (list<value>() + "item" + "cart-53d67a61-aa5e-4e5e-8401-39edeba8b83c"
-                    + (list<value>() + element + "item"
+                        + (list<value>() + element + "price" + "$2.99");
+
+        const list<value> i2 = list<value>() + element + "item"
                         + (list<value>() + element + "name" + "Orange")
-                        + (list<value>() + element + "price" + "$3.55")));
-        const list<value> a = cons<value>("Feed", cons<value>("1234", i));
+                        + (list<value>() + element + "price" + "$3.55");
+
+        const list<value> i = list<value>()
+            + value(list<value>() + element + value("entry")
+                + value(list<value>() + element + value("title") + value(string("item")))
+                + value(list<value>() + element + value("id") + value(string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b")))
+                + value(list<value>() + element + value("content") + value(i1)))
+            + value(list<value>() + element + value("entry")
+                + value(list<value>() + element + value("title") + value(string("item")))
+                + value(list<value>() + element + value("id") + value(string("cart-53d67a61-aa5e-4e5e-8401-39edeba8b83c")))
+                + value(list<value>() + element + value("content") + value(i2)));
+        
+        const list<value> a = list<value>() + (append<value>(list<value>() + element + value("feed")
+                + value(list<value>() + element + value("title") + value(string("Feed")))
+                + value(list<value>() + element + value("id") + value("1234")),
+                i));
+
         ostringstream os;
         writeATOMFeed<ostream*>(writer, &os, a);
         assert(str(os) == itemFeed);
     }
     {
-        const list<value> i = list<value>()
-                + (list<value>() + "item" + "cart-53d67a61-aa5e-4e5e-8401-39edeba8b83b"
-                    + valueToElement(list<value>() + "item"
-                        + (list<value>() + "name" + "Apple")
-                        + (list<value>() + "price" + "$2.99")))
-                + (list<value>() + "item" + "cart-53d67a61-aa5e-4e5e-8401-39edeba8b83c"
-                    + valueToElement(list<value>() + "item"
-                        + (list<value>() + "name" + "Orange")
-                        + (list<value>() + "price" + "$3.55")));
-        const list<value> a = cons<value>("Feed", cons<value>("1234", i));
+        const list<value> a = content(readATOMFeed(mklist(itemFeed)));
         ostringstream os;
         writeATOMFeed<ostream*>(writer, &os, a);
         assert(str(os) == itemFeed);
     }
     {
-        const list<value> a = content(readATOMFeed(mklist(itemFeed)));
+        const list<value> a = elementsToValues(content(readATOMFeed(mklist(itemFeed))));
         ostringstream os;
-        writeATOMFeed<ostream*>(writer, &os, a);
+        writeATOMFeed<ostream*>(writer, &os, valuesToElements(a));
         assert(str(os) == itemFeed);
     }
     return true;

Modified: tuscany/sca-cpp/trunk/modules/atom/atom.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/atom/atom.hpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/atom/atom.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/atom/atom.hpp Tue Mar  8 08:18:07 2011
@@ -36,24 +36,33 @@ namespace tuscany {
 namespace atom {
 
 /**
- * Convert a list of elements to a list of values representing an ATOM entry.
+ * Tags used to tag feed and entry elements.
  */
-const list<value> entryElementsToValues(const list<value>& e) {
+const value feed("feed");
+const value entry("entry");
+
+/**
+ * Convert a list of elements to a list of element values representing an ATOM entry.
+ */
+const list<value> entryElementValues(const list<value>& e) {
     const list<value> lt = filter<value>(selector(mklist<value>(element, "title")), e);
     const value t = isNil(lt)? value(emptyString) : elementValue(car(lt));
     const list<value> li = filter<value>(selector(mklist<value>(element, "id")), e);
     const value i = isNil(li)? value(emptyString) : elementValue(car(li));
     const list<value> lc = filter<value>(selector(mklist<value>(element, "content")), e);
-    return mklist<value>(t, i, isNil(lc)? (value)list<value>() : elementValue(car(lc)));
+    return append<value>(list<value>() + element + entry 
+                + value(list<value>() + element + value("title") + t)
+                + value(list<value>() + element + value("id") + i),
+                isNil(lc)? list<value>() : mklist<value>(value(list<value>() + element + value("content") + elementValue(car(lc)))));
 }
 
 /**
- * Convert a list of elements to a list of values representing ATOM entries.
+ * Convert a list of elements to a list of element values representing ATOM entries.
  */
-const list<value> entriesElementsToValues(const list<value>& e) {
+const list<value> entriesElementValues(const list<value>& e) {
     if (isNil(e))
         return e;
-    return cons<value>(entryElementsToValues(car(e)), entriesElementsToValues(cdr(e)));
+    return cons<value>(entryElementValues(car(e)), entriesElementValues(cdr(e)));
 }
 
 /**
@@ -81,15 +90,7 @@ const failable<list<value> > readATOMEnt
     const list<value> e = readXML(ilist);
     if (isNil(e))
         return mkfailure<list<value> >("Empty entry");
-    return entryElementsToValues(car(e));
-}
-
-/**
- * Convert a list of values representing an ATOM entry to a value.
- */
-const value entryValue(const list<value>& e) {
-    const list<value> v = elementsToValues(mklist<value>(caddr(e)));
-    return cons(car(e), mklist<value>(cadr(e), isList(car(v))? (isNil((list<value>)car(v))? car(v) : (value)cdr<value>(car(v))) : car(v)));
+    return mklist<value>(entryElementValues(car(e)));
 }
 
 /**
@@ -101,42 +102,34 @@ const failable<list<value> > readATOMFee
         return mkfailure<list<value> >("Empty feed");
     const list<value> t = filter<value>(selector(mklist<value>(element, "title")), car(f));
     const list<value> i = filter<value>(selector(mklist<value>(element, "id")), car(f));
-    const list<value> e = filter<value>(selector(mklist<value>(element, "entry")), car(f));
-    if (isNil(e))
-        return mklist<value>(elementValue(car(t)), elementValue(car(i)));
-    return cons<value>(elementValue(car(t)), cons(elementValue(car(i)), entriesElementsToValues(e)));
-}
-
-/**
- * Convert an ATOM feed containing elements to an ATOM feed containing values.
- */
-const list<value> feedValuesLoop(const list<value> e) {
-    if (isNil(e))
-        return e;
-    return cons<value>(entryValue(car(e)), feedValuesLoop(cdr(e)));
-}
-
-const list<value> feedValues(const list<value>& e) {
-    return cons(car<value>(e), cons<value>(cadr<value>(e), feedValuesLoop(cddr<value>(e))));
+    const list<value> e = filter<value>(selector(mklist<value>(element, entry)), car(f));
+    return mklist<value>(append<value>(list<value>() + element + feed 
+                + value(list<value>() + element + value("title") + elementValue(car(t)))
+                + value(list<value>() + element + value("id") + elementValue(car(i))),
+                entriesElementValues(e)));
 }
 
 /**
- * Convert a list of values representing an ATOM entry to a list of elements.
- * The first two values in the list are the entry title and id.
+ * Convert a list of element values representing an ATOM entry to a list of elements.
  */
 const list<value> entryElement(const list<value>& l) {
+    const value title = elementValue(elementChild("title", l));
+    const value id = elementValue(elementChild("id", l));
+    const value content = elementChild("content", l);
+    const bool text = isNil(content)? false : elementHasValue(content);
     return list<value>()
-        + element + "entry" + (list<value>() + attribute + "xmlns" + "http://www.w3.org/2005/Atom")
-        + (list<value>() + element + "title" + (list<value>() + attribute + "type" + "text") + car(l))
-        + (list<value>() + element + "id" + cadr(l))
-        + (isNil(cddr(l))?
+        + element + entry + (list<value>() + attribute + "xmlns" + "http://www.w3.org/2005/Atom")
+        + (list<value>() + element + "title" + (list<value>() + attribute + "type" + "text") + title)
+        + (list<value>() + element + "id" + id)
+        + (isNil(content)?
             list<value>() :
-            list<value>() + element + "content" + (list<value>() + attribute + "type" + (isList(caddr(l))? "application/xml" : "text")) + caddr(l))
-        + (list<value>() + element + "link" + (list<value>() + attribute + "href" + cadr(l)));
+            append<value>(list<value>() + element + "content" + (list<value>() + attribute + "type" + (text? "text" : "application/xml")),
+                text? mklist<value>(elementValue(content)) : elementChildren(content)))
+        + (list<value>() + element + "link" + (list<value>() + attribute + "href" + id));
 }
 
 /**
- * Convert a list of values representing ATOM entries to a list of elements.
+ * Convert a list of element values representing ATOM entries to a list of elements.
  */
 const list<value> entriesElements(const list<value>& l) {
     if (isNil(l))
@@ -145,10 +138,10 @@ const list<value> entriesElements(const 
 }
 
 /**
- * Convert a list of values representing an ATOM entry to an ATOM entry.
- * The first two values in the list are the entry id and title.
+ * Convert a list of element values representing an ATOM entry to an ATOM entry.
  */
-template<typename R> const failable<R> writeATOMEntry(const lambda<R(const string&, const R)>& reduce, const R& initial, const list<value>& l) {
+template<typename R> const failable<R> writeATOMEntry(const lambda<R(const string&, const R)>& reduce, const R& initial, const list<value>& ll) {
+    const list<value> l = isNil(ll)? ll : (list<value>)car(ll);
     return writeXML<R>(reduce, initial, mklist<value>(entryElement(l)));
 }
 
@@ -160,23 +153,37 @@ const failable<list<string> > writeATOME
 }
 
 /**
- * Convert a list of values representing an ATOM feed to an ATOM feed.
- * The first two values in the list are the feed id and title.
+ * Convert a list of element values representing an ATOM feed to an ATOM feed.
  */
-template<typename R> const failable<R> writeATOMFeed(const lambda<R(const string&, const R)>& reduce, const R& initial, const list<value>& l) {
+template<typename R> const failable<R> writeATOMFeed(const lambda<R(const string&, const R)>& reduce, const R& initial, const list<value>& ll) {
+    const list<value> l = isNil(ll)? ll : (list<value>)car(ll);
+    const list<value> lt = filter<value>(selector(mklist<value>(element, "title")), l);
+    const value t = isNil(lt)? value(emptyString) : elementValue(car(lt));
+    const list<value> li = filter<value>(selector(mklist<value>(element, "id")), l);
+    const value i = isNil(li)? value(emptyString) : elementValue(car(li));
     const list<value> f = list<value>()
-        + element + "feed" + (list<value>() + attribute + "xmlns" + "http://www.w3.org/2005/Atom")
-        + (list<value>() + element + "title" + (list<value>() + attribute + "type" + "text") + car(l))
-        + (list<value>() + element + "id" + cadr(l));
-    if (isNil(cddr(l)))
+        + element + feed + (list<value>() + attribute + "xmlns" + "http://www.w3.org/2005/Atom")
+        + (list<value>() + element + "title" + (list<value>() + attribute + "type" + "text") + t)
+        + (list<value>() + element + "id" + i);
+
+    // Write ATOM entries
+    const list<value> le = filter<value>(selector(mklist<value>(element, entry)), l);
+    if (isNil(le))
         return writeXML<R>(reduce, initial, mklist<value>(f));
-    const list<value> fe = append(f, entriesElements(cddr(l)));
+
+    // Write a single ATOM entry element with a list of values
+    if (!isNil(le) && !isNil(car(le)) && isList(car<value>(caddr<value>(car(le))))) {
+        const list<value> fe = append(f, entriesElements(caddr<value>(car(le))));
+        return writeXML<R>(reduce, initial, mklist<value>(fe));
+    }
+
+    // Write separate ATOM entry elements
+    const list<value> fe = append(f, entriesElements(le));
     return writeXML<R>(reduce, initial, mklist<value>(fe));
 }
 
 /**
- * Convert a list of values representing an ATOM feed to a list of strings.
- * The first two values in the list are the feed id and title.
+ * Convert a list of element values representing an ATOM feed to a list of strings.
  */
 const failable<list<string> > writeATOMFeed(const list<value>& l) {
     const failable<list<string> > ls = writeATOMFeed<list<string>>(rcons<string>, list<string>(), l);
@@ -185,28 +192,6 @@ const failable<list<string> > writeATOMF
     return reverse(list<string>(content(ls)));
 }
 
-/**
- * Convert an ATOM entry containing a value to an ATOM entry containing an item element.
- */
-const list<value> entryValuesToElements(const list<value> val) {
-    if (isList(caddr(val)))
-        return cons(car(val), cons(cadr(val), valuesToElements(mklist<value>(cons<value>("item", (list<value>)caddr(val))))));
-    return cons(car(val), cons(cadr(val), valuesToElements(mklist<value>(mklist<value>("item", caddr(val))))));
-}
-
-/**
- * Convert an ATOM feed containing values to an ATOM feed containing elements.
- */
-const list<value> feedValuesToElementsLoop(const list<value> val) {
-    if (isNil(val))
-        return val;
-    return cons<value>(entryValuesToElements(car(val)), feedValuesToElementsLoop(cdr(val)));
-}
-
-const list<value> feedValuesToElements(const list<value>& val) {
-    return cons(car<value>(val), cons<value>(cadr<value>(val), feedValuesToElementsLoop(cddr<value>(val))));
-}
-
 }
 }
 

Modified: tuscany/sca-cpp/trunk/modules/edit/apps.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/apps.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/apps.py (original)
+++ tuscany/sca-cpp/trunk/modules/edit/apps.py Tue Mar  8 08:18:07 2011
@@ -39,14 +39,14 @@ def mkapplink(id):
 # Post a new app to the apps db
 def post(collection, app, cache):
     id = appid((str(uuid.uuid1()),))
-    comp = caddr(app)
+    comp = cdr(cadddr(car(app)))
     cache.put((id,), comp)
     mkapplink((id,))
     return id
 
 # Put an app into the apps db
 def put(id, app, cache):
-    comp = caddr(app)
+    comp = cdr(cadddr(car(app)))
     cache.put(appid(id), comp)
     mkapplink(id)
     return True
@@ -54,8 +54,11 @@ def put(id, app, cache):
 # Get an app from the apps db
 def get(id, cache):
     if isNil(id):
-        return ("Apps", "apps")
-    return (car(id), car(id), cache.get(appid(id)))
+        return (("'feed", ("'title", "Apps"), ("'id", "apps")),)
+    app = cache.get(appid(id));
+    if (isNil(app) or app is None):
+        return (("'entry", ("'title", car(id)), ("'id", car(id))),)
+    return (("'entry", ("'title", car(id)), ("'id", car(id)), ("'content", car(app))),)
 
 # Delete an app from the apps db
 def delete(id, cache):

Copied: tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.composite (from r1079291, tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.composite)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.composite?p2=tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.composite&p1=tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.composite&r1=1079291&r2=1079292&rev=1079292&view=diff
==============================================================================
    (empty)

Copied: tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.html (from r1079291, tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.html)
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.html?p2=tuscany/sca-cpp/trunk/modules/edit/apps/me360/app.html&p1=tuscany/sca-cpp/trunk/modules/edit/apps/myprofile/app.html&r1=1079291&r2=1079292&rev=1079292&view=diff
==============================================================================
    (empty)

Modified: tuscany/sca-cpp/trunk/modules/edit/dashboard.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/dashboard.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/dashboard.py (original)
+++ tuscany/sca-cpp/trunk/modules/edit/dashboard.py Tue Mar  8 08:18:07 2011
@@ -34,7 +34,8 @@ def getdashboard(id, cache):
 # Post a new app to the user's dashboard
 def post(collection, app, user, cache):
     id = (str(uuid.uuid1()),)
-    dashboard = cons((car(app), car(id), caddr(app)), getdashboard(dashboardid(user), cache))
+    newapp = list("'entry", cadr(car(app)), list("'id", id), cadddr(car(app)))
+    dashboard = cons(newapp, getdashboard(dashboardid(user), cache))
     cache.put(dashboardid(user), dashboard)
     return id
 
@@ -42,9 +43,9 @@ def post(collection, app, user, cache):
 def put(id, app, user, cache):
     def putapp(app, dashboard):
         if isNil(dashboard):
-            return (app,)
-        if cadr(app) == cadr(car(dashboard)):
-            return cons(app, cdr(dashboard))
+            return app
+        if cadr(caddr(car(app))) == cadr(caddr(car(dashboard))):
+            return cons(car(app), cdr(dashboard))
         return cons(car(dashboard), putapp(app, cdr(dashboard)))
 
     dashboard = putapp(app, getdashboard(dashboardid(user), cache))
@@ -56,12 +57,12 @@ def get(id, user, cache):
     def findapp(id, dashboard):
         if isNil(dashboard):
             return None
-        if car(id) == cadr(car(dashboard)):
-            return car(dashboard)
+        if car(id) == cadr(caddr(car(dashboard))):
+            return (car(dashboard),)
         return findapp(id, cdr(dashboard))
 
     if isNil(id):
-        return ("Your Apps", user.id()) + getdashboard(dashboardid(user), cache)
+        return ((("'feed", ("'title", "Your Apps"), ("'id", user.id())) + getdashboard(dashboardid(user), cache)),)
     return findapp(id, getdashboard(dashboardid(user), cache))
 
 # Delete apps from the user's dashboard
@@ -72,7 +73,7 @@ def delete(id, user, cache):
     def deleteapp(id, dashboard):
         if isNil(dashboard):
             return ()
-        if car(id) == cadr(car(dashboard)):
+        if car(id) == cadr(caddr(car(dashboard))):
             return cdr(dashboard)
         return cons(car(dashboard), deleteapp(id, cdr(dashboard)))
 

Modified: tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@localhost
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/dashboards/joe%40localhost?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@localhost (original)
+++ tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@localhost Tue Mar  8 08:18:07 2011
@@ -1 +1 @@
-(("An App that shows my Aggregated Social Profile" "myprofile" ()) ("An advanced version of the Aggregated Social Profile App" "myprofile2" ()) ("An App that shows Friends Near Me" "nearme" ()) ("An advanced version of the Friends Near Me App" "nearme2" ()) ("Sample Online Store App" "store" ()) ("Layout Variation of the Online Store App" "store2" ()) ("Another Variation of the Online Store App" "store3" ()) ("Travel Tutorial App" "travel" ()) ("An Empty Test App" "test" ()) ("Test Values and Lists" "testvalues" ()) ("Test Social Components" "testsocial" ()) ("Test URL Components" "testurl" ()) ("Test Logic Components" "testlogic" ()) ("Test Text Processing Components" "testtext" ()))
\ No newline at end of file
+((entry (title "An Empty Test App") (id "test")) (entry (title "Test Values and Lists") (id "testvalues")) (entry (title "Test Social Components") (id "testsocial")) (entry (title "Test URL Components") (id "testurl")) (entry (title "Test Logic Components") (id "testlogic")) (entry (title "Test Text Processing Components") (id "testtext")) (entry (title "An App that shows my Social Profiles") (id "me360")) (entry (title "An App that shows Friends Near Me") (id "nearme")))

Modified: tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/dashboards/joe%40sca-store.com?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com (original)
+++ tuscany/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com Tue Mar  8 08:18:07 2011
@@ -1 +1 @@
-(("An App that shows my Aggregated Social Profile" "myprofile" ()) ("An advanced version of the Aggregated Social Profile App" "myprofile2" ()) ("An App that shows Friends Near Me" "nearme" ()) ("An advanced version of the Friends Near Me App" "nearme2" ()) ("Sample Online Store App" "store" ()) ("Layout Variation of the Online Store App" "store2" ()) ("Another Variation of the Online Store App" "store3" ()) ("Travel Tutorial App" "travel" ()) ("An Empty Test App" "test" ()) ("Test Values and Lists" "testvalues" ()) ("Test Social Components" "testsocial" ()) ("Test URL Components" "testurl" ()) ("Test Logic Components" "testlogic" ()) ("Test Text Processing Components" "testtext" ()))
\ No newline at end of file
+((entry (title "An Empty Test App") (id "test")) (entry (title "Test Values and Lists") (id "testvalues")) (entry (title "Test Social Components") (id "testsocial")) (entry (title "Test URL Components") (id "testurl")) (entry (title "Test Logic Components") (id "testlogic")) (entry (title "Test Text Processing Components") (id "testtext")) (entry (title "An App that shows my Social Profiles") (id "me360")) (entry (title "An App that shows Friends Near Me") (id "nearme")))

Modified: tuscany/sca-cpp/trunk/modules/edit/htdocs/app/app.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/htdocs/app/app.html?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/htdocs/app/app.html (original)
+++ tuscany/sca-cpp/trunk/modules/edit/htdocs/app/app.html Tue Mar  8 08:18:07 2011
@@ -36,7 +36,6 @@
 <th class="thl thr">Settings</th>
 
 <th class="thl thr" style="padding-top: 0px; padding-bottom: 0px; padding-right: 0px; text-align: right;">
-<span id="source" style="font-weight: normal;">[atom]</span>
 <input type="button" id="saveButton" style="font-weight: bold;" Value="Saved"/>
 </th>
 </tr>
@@ -71,7 +70,6 @@ var dashboard = sca.reference(editWidget
  * The current app name.
  */
 var appname = ui.queryParams()['app'];
-$('source').innerHTML = '[<a href="/apps/' + appname + '">atom</a>]';
 
 /**
  * The current app entry and corresponding saved XML content.
@@ -92,12 +90,13 @@ var defdesc = 'Enter a short description
  */
 function getapp(name) {
     dashboard.get(name, function(doc) {
-        appentry = doc != null? atom.readATOMEntryDocument(doc) : mklist('', name);
-        $('appTitle').value = car(appentry) != ''? car(appentry) : deftitle;
+        appentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name));
+        var title = cadr(assoc("'title", cdr(appentry)));
+        $('appTitle').value = title != ''? title : deftitle;
         $('appCategory').value = defcategory;
         $('appUpdated').innerHTML = defdate;
         $('appDescription').innerHTML = defdesc;
-        savedappentryxml = car(atom.writeATOMEntry(appentry));
+        savedappentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
     });
 }
 
@@ -114,10 +113,10 @@ $('saveButton').onclick = function() {
 function save() {
     $('saveButton').value = 'Saving';
     var title = $('appTitle').value;
-    appentry = mklist(title != deftitle && title != ''? title : appname, appname, mklist());
-    savedappentryxml = car(atom.writeATOMEntry(appentry));
+    var appentry = mklist("'entry", mklist("'title", title != deftitle && title != ''? title : appname), mklist("'id", appname));
+    savedappentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
     dashboard.put(appname, savedappentryxml, function() {
-        if (savedappentryxml == car(atom.writeATOMEntry(appentry)))
+        if (savedappentryxml == car(atom.writeATOMEntry(valuesToElements(mklist(appentry)))))
             $('saveButton').value = 'Saved';
         return true;
     });
@@ -129,14 +128,14 @@ function save() {
  */
 function onappchange() {
     var title = $('appTitle').value;
-    appentry = mklist(title != deftitle && title != ''? title : appname, appname, mklist());
-    if (savedappentryxml == car(atom.writeATOMEntry(appentry)))
+    var appentry = mklist("'entry", mklist("'title", title != deftitle && title != ''? title : appname), mklist("'id", appname));
+    if (savedappentryxml == car(atom.writeATOMEntry(valuesToElements(mklist(appentry)))))
         return false;
     $('saveButton').value = 'Save now';
 
     // Autosave after 3 seconds
     setTimeout(function() {
-        if (savedappentryxml == car(atom.writeATOMEntry(appentry)))
+        if (savedappentryxml == car(atom.writeATOMEntry(valuesToElements(mklist(appentry)))))
             return false;
         return save();
     }, 3000);

Modified: tuscany/sca-cpp/trunk/modules/edit/htdocs/dash/dashboard.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/htdocs/dash/dashboard.html?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/htdocs/dash/dashboard.html (original)
+++ tuscany/sca-cpp/trunk/modules/edit/htdocs/dash/dashboard.html Tue Mar  8 08:18:07 2011
@@ -79,20 +79,14 @@ function getapps(sync) {
         var apps = '<table style="width: 100%;">';
         apps += '<tr><th class="thl thr">App</th>' +
             '<th class="thr thl">Title</th>' +
-            '<th class="thr thl" style="padding-top: 4px; padding-bottom: 4px; padding-right: 2px; text-align: right;">' +
-            '<span style="font-weight: normal;">' + 
-            '[<a href="/dashboard">atom</a> <a href="/dashboardcache/joe@localhost">json</a>]' +
-            '</span></th></tr>';
+            '<th class="thr thl" style="padding-top: 4px; padding-bottom: 4px; padding-right: 2px; text-align: right;"></th></tr>';
 
-        var entries = cddr(atom.readATOMFeedDocument(doc));
+        var feed = car(elementsToValues(atom.readATOMFeed(mklist(doc))));
+        var entries = cadr(assoc("'entry", cdr(feed)));
         for (var i = 0; i < length(entries); i++) {
             var entry = entries[i];
-            var item = caddr(entry);
-            var composite = cddr(item);
-            var comps = scdl.components(composite);
-
-            name = cadr(entry);
-            title = car(entry);
+            title = cadr(assoc("'title", entry))
+            name = cadr(assoc("'id", entry))
 
             apps += '<tr>';
             apps += '<td><a href=\"' + '/graph/?app=' + name + '\" target=\"_parent\">' + name + '</a></td>';
@@ -142,8 +136,8 @@ $('createAppOKButton').onclick = functio
     if (name == '')
         return false;
     var title = $('appTitle').value;
-    var app = mklist(title != deftitle && title != ''? title : name, name, mklist());
-    var entry = atom.writeATOMEntry(app);
+    var app = mklist(mklist("'entry", mklist("'title", title != deftitle && title != ''? title : name), mklist("'id", name)));
+    var entry = atom.writeATOMEntry(valuesToElements(app));
     dashboard.put(name, car(entry));
     getapps();
     $('newApp').style.visibility = 'hidden';

Modified: tuscany/sca-cpp/trunk/modules/edit/htdocs/graph/graph.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/htdocs/graph/graph.html?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/htdocs/graph/graph.html (original)
+++ tuscany/sca-cpp/trunk/modules/edit/htdocs/graph/graph.html Tue Mar  8 08:18:07 2011
@@ -43,7 +43,6 @@
 </th>
 
 <th class="thl thr" style="padding-top: 0px; padding-bottom: 0px; padding-right: 0px; text-align: right;">
-<span id="source" style="font-weight: normal;">[atom json]</span>
 <input type="button" id="saveButton" style="font-weight: bold;" Value="Saved"/>
 </th>
 </tr>
@@ -67,7 +66,6 @@ var apps = sca.reference(editWidget, "ap
  * The current app name.
  */
 var appname = ui.queryParams()['app'];
-$('source').innerHTML = '[<a href="/apps/' + appname + '">atom</a> <a href="/appcache/' + appname + '/app.composite">json</a>]';
 
 /**
  * The current app composite and corresponding saved XML content.
@@ -79,9 +77,13 @@ var composite;
  * Return the composite in an ATOM entry.
  */
 function atomcomposite(doc) {
-    var entry = atom.readATOMEntryDocument(doc);
-    var item = caddr(entry);
-    return cddr(item);
+    var entry = atom.readATOMEntry(mklist(doc));
+    if (isNil(entry))
+        return mklist();
+    var content = namedElementChild("'content", car(entry));
+    if (content == null)
+        return mklist();
+    return elementChildren(content);
 }
 
 /**
@@ -151,8 +153,8 @@ function save() {
     $('saveButton').value = 'Saving';
     savedcomposxml = car(writeXML(composite, false));
     var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
-        '<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml"><item>' +
-        savedcomposxml + '</item></content></entry>';
+        '<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml">' +
+        savedcomposxml + '</content></entry>';
     apps.put(appname, entry, function() {
         if (savedcomposxml == car(writeXML(composite, false)))
             $('saveButton').value = 'Saved';

Modified: tuscany/sca-cpp/trunk/modules/edit/htdocs/page/page.html
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/htdocs/page/page.html?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/htdocs/page/page.html (original)
+++ tuscany/sca-cpp/trunk/modules/edit/htdocs/page/page.html Tue Mar  8 08:18:07 2011
@@ -42,7 +42,6 @@
 </th>
 
 <th class="thl thr" style="padding-top: 0px; padding-bottom: 0px; padding-right: 0px; text-align: right;">
-<span id="source" style="font-weight: normal;">[atom json]</span>
 <input type="button" id="saveButton" style="font-weight: bold;" Value="Saved"/>
 </th>
 </tr>
@@ -80,15 +79,18 @@ var pages = sca.reference(editWidget, "p
  * The current app name.
  */
 var appname = ui.queryParams()['app'];
-$('source').innerHTML = '[<a href="/pages/' + appname + '">atom</a> <a href="/appcache/' + appname + '/app.html">json</a>]';
 
 /**
  * Return the page in an ATOM entry.
  */
 function atompage(doc) {
-    var entry = atom.readATOMEntryDocument(doc);
-    var item = caddr(entry);
-    return cddr(item);
+    var entry = atom.readATOMEntry(mklist(doc));
+    if (isNil(entry))
+        return mklist();
+    var content = namedElementChild("'content", car(entry));
+    if (content == null)
+        return mklist();
+    return elementChildren(content);
 }
 
 /**
@@ -180,8 +182,8 @@ function save() {
 
     // Update the page ATOM entry
     var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
-        '<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml"><item>' +
-        savedpagexhtml + '</item></content></entry>';
+        '<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml">' +
+        savedpagexhtml + '</content></entry>';
 
     pages.put(appname, entry, function(e) {
         if (savedpagexhtml == pagexhtml())

Modified: tuscany/sca-cpp/trunk/modules/edit/pages.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/pages.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/pages.py (original)
+++ tuscany/sca-cpp/trunk/modules/edit/pages.py Tue Mar  8 08:18:07 2011
@@ -28,21 +28,24 @@ def appid(id):
 # Post a new app page to the apps db
 def post(collection, app, cache):
     id = appid((str(uuid.uuid1()),))
-    xhtml = caddr(app);
+    xhtml = cdr(cadddr(car(app)))
     cache.put((id,), xhtml)
     return id
 
 # Put an app page into the apps db
 def put(id, app, cache):
-    xhtml = caddr(app);
+    xhtml = cdr(cadddr(car(app)))
     cache.put(appid(id), xhtml)
     return True
 
 # Get an app page from the apps db
 def get(id, cache):
     if isNil(id):
-        return ("Pages", "pages")
-    return (car(id), car(id), cache.get(appid(id)))
+        return (("'feed", ("'title", "Pages"), ("'id", "pages")),)
+    xhtml = cache.get(appid(id))
+    if (isNil(xhtml) or xhtml is None):
+        return (("'entry", ("'title", car(id)), ("'id", car(id))),)
+    return (("'entry", ("'title", car(id)), ("'id", car(id)), ("'content", car(xhtml))),)
 
 # Delete an app page from the apps db
 def delete(id, cache):

Modified: tuscany/sca-cpp/trunk/modules/edit/palettes.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/palettes.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/palettes.py (original)
+++ tuscany/sca-cpp/trunk/modules/edit/palettes.py Tue Mar  8 08:18:07 2011
@@ -27,6 +27,6 @@ def paletteid(id):
 # Get a palette from the palettes db
 def get(id, cache):
     if isNil(id):
-        return ("Palettes", "palettes")
-    return (car(id), car(id), cache.get(paletteid(id)))
+        return (("'feed", ("'title", "Palettes"), ("'id", "palettes")),)
+    return (("'entry", ("'title", car(id)), ("'id", car(id)), ("'content", car(cache.get(paletteid(id))))),)
 

Modified: tuscany/sca-cpp/trunk/modules/edit/util.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/edit/util.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/edit/util.py (original)
+++ tuscany/sca-cpp/trunk/modules/edit/util.py Tue Mar  8 08:18:07 2011
@@ -43,6 +43,12 @@ def cddr(l):
 def caddr(l):
     return car(cddr(l))
 
+def cdddr(l):
+    return cdr(cdr(cdr(l)))
+
+def cadddr(l):
+    return car(cdddr(l))
+
 def append(a, b):
     return a + b
 

Modified: tuscany/sca-cpp/trunk/modules/http/http.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/http/http.hpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/http/http.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/http/http.hpp Tue Mar  8 08:18:07 2011
@@ -407,19 +407,19 @@ const failable<value> get(const string& 
 
     if (atom::isATOMEntry(ls)) {
         // Read an ATOM entry
-        const value val(atom::entryValue(content(atom::readATOMEntry(ls))));
+        const value val(elementsToValues(content(atom::readATOMEntry(ls))));
         debug(val, "http::get::result");
         return val;
     }
     if (contains(ct, "application/atom+xml") || atom::isATOMFeed(ls)) {
         // Read an ATOM feed
-        const value val(atom::feedValues(content(atom::readATOMFeed(ls))));
+        const value val(elementsToValues(content(atom::readATOMFeed(ls))));
         debug(val, "http::get::result");
         return val;
     }
     if (contains(ct, "application/rss+xml") || rss::isRSSFeed(ls)) {
         // Read an RSS feed
-        const value val(rss::feedValues(content(rss::readRSSFeed(ls))));
+        const value val(elementsToValues(content(rss::readRSSFeed(ls))));
         debug(val, "http::get::result");
         return val;
     }
@@ -449,7 +449,7 @@ const failable<value> get(const string& 
 const failable<value> post(const value& val, const string& url, const CURLSession& cs) {
 
     // Convert value to an ATOM entry
-    const failable<list<string> > entry = atom::writeATOMEntry(atom::entryValuesToElements(val));
+    const failable<list<string> > entry = atom::writeATOMEntry(valuesToElements(val));
     if (!hasContent(entry))
         return mkfailure<value>(reason(entry));
     debug(url, "http::post::url");
@@ -474,7 +474,7 @@ const failable<value> post(const value& 
 const failable<value> put(const value& val, const string& url, const CURLSession& cs) {
 
     // Convert value to an ATOM entry
-    const failable<list<string> > entry = atom::writeATOMEntry(atom::entryValuesToElements(val));
+    const failable<list<string> > entry = atom::writeATOMEntry(valuesToElements(val));
     if (!hasContent(entry))
         return mkfailure<value>(reason(entry));
     debug(url, "http::put::url");

Modified: tuscany/sca-cpp/trunk/modules/java/org/apache/tuscany/IterableUtil.java
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/java/org/apache/tuscany/IterableUtil.java?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/java/org/apache/tuscany/IterableUtil.java (original)
+++ tuscany/sca-cpp/trunk/modules/java/org/apache/tuscany/IterableUtil.java Tue Mar  8 08:18:07 2011
@@ -117,6 +117,13 @@ public class IterableUtil {
     }
 
     /**
+     * Return the cdr of the cdr of the cdr of a list.
+     */
+    public static <T> Iterable<T> cdddr(final Object l) {
+        return cdr(cdr(cdr(l)));
+    }
+
+    /**
      * Return the car of the cdr of the cdr of a list.
      */
     @SuppressWarnings("unchecked")
@@ -125,6 +132,24 @@ public class IterableUtil {
     }
 
     /**
+     * Return the car of the cdr of the cdr of the cdr of a list.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> T cadddr(final Object l) {
+        return (T)car(cdddr(l));
+    }
+
+    /**
+     * Appends a list and another list.
+     */
+    @SuppressWarnings("unchecked")
+    public static <T> Iterable<T> append(final Object a, final Object b) {
+        if (isNil(a))
+            return (Iterable<T>)b;
+        return cons(car(a), append(cdr(a), b));
+    }
+
+    /**
      * Return the first pair matching a key from a list of key value pairs.
      */
     public static <T> Iterable<T> assoc(final Object k, final Object l) {
@@ -352,6 +377,11 @@ public class IterableUtil {
             assert car(al) == Integer.valueOf(1);
             assert cadr(al) == Integer.valueOf(2);
             assert caddr(al) == Integer.valueOf(3);
+
+            final Iterable<Object> a = list(0, 1, 2);
+            final Iterable<Object> b = list(3, 4);
+            final Iterable<Object> ab = append(a, b);
+            assert ab.toString().equals("[0, 1, 2, 3, 4]");
             return true;
         }
     }

Modified: tuscany/sca-cpp/trunk/modules/java/test/ServerImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/java/test/ServerImpl.java?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/java/test/ServerImpl.java (original)
+++ tuscany/sca-cpp/trunk/modules/java/test/ServerImpl.java Tue Mar  8 08:18:07 2011
@@ -29,12 +29,16 @@ public class ServerImpl {
 
     public Iterable<?> get(final Iterable<String> id) {
         if (isNil(id))
-            return list("Sample Feed", "123456789",
-                    list("Item", "111", list(list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99))),
-                    list("Item", "222", list(list("'name", "Orange"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 3.55))),
-                    list("Item", "333", list(list("'name", "Pear"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 1.55))));
-        final Iterable<?> entry = list(list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99));
-        return list("Item", car(id), entry);
+            return list(list("'feed", list("'title", "Sample Feed"), list("'id", "123456789"), list("'entry", list(
+                    list(list("'title", "Item"), list("'id", "111"),
+                        list("'content", list("'item", list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99)))),
+                    list(list("'title", "Item"), list("'id", "222"),
+                        list("'content", list("'item", list("'name", "Orange"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 3.55)))),
+                    list(list("'title", "Item"), list("'id", "333"),
+                        list("'content", list("'item", list("'name", "Pear"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 1.55))))))));
+
+        final Iterable<?> content = list("'content", list("'item", list("'name", "Apple"), list("'currencyCode", "USD"), list("'currencySymbol", "$"), list("'price", 2.99)));
+        return list(list("'entry", list("'title", "Item"), list("'id", car(id)), content));
     }
 
     public Iterable<String> post(final Iterable<String> collection, final Iterable<?> item) {

Modified: tuscany/sca-cpp/trunk/modules/js/htdocs/atomutil.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/atomutil.js?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/atomutil.js (original)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/atomutil.js Tue Mar  8 08:18:07 2011
@@ -25,22 +25,23 @@ var atom = {};
 /**
  * Convert a list of elements to a list of values representing an ATOM entry.
  */
-atom.entryElementsToValues = function(e) {
+atom.entryElementValues = function(e) {
     var lt = filter(selector(mklist(element, "'title")), e);
     var t = isNil(lt)? '' : elementValue(car(lt));
     var li = filter(selector(mklist(element, "'id")), e);
     var i = isNil(li)? '' : elementValue(car(li));
     var lc = filter(selector(mklist(element, "'content")), e);
-    return mklist(t, i, elementValue(car(lc)));
+    return append(mklist(element, "'entry", mklist(element, "'title", t), mklist(element, "'id", i)),
+            isNil(lc)? mklist() : mklist(mklist(element, "'content", elementValue(car(lc)))))
 };
 
 /**
  * Convert a list of elements to a list of values representing ATOM entries.
  */
-atom.entriesElementsToValues = function(e) {
+atom.entriesElementValues = function(e) {
     if (isNil(e))
         return e;
-    return cons(atom.entryElementsToValues(car(e)), atom.entriesElementsToValues(cdr(e)));
+    return cons(atom.entryElementValues(car(e)), atom.entriesElementValues(cdr(e)));
 };
 
 /**
@@ -59,7 +60,7 @@ atom.readATOMEntryDocument = function(do
     var e = readXMLDocument(doc);
     if (isNil(e))
         return mklist();
-    return atom.entryElementsToValues(car(e));
+    return mklist(atom.entryElementValues(car(e)));
 };
 
 /**
@@ -70,14 +71,6 @@ atom.readATOMEntry = function(l) {
 };
 
 /**
- * Convert a list of values representy an ATOM entry to a value.
- */
-atom.entryValue = function(e) {
-    var v = elementsToValues(mklist(caddr(e)));
-    return cons(car(e), (cadr(e), cdr(car(v))));
-};
-
-/**
  * Return true if a list of strings represents an ATOM feed.
  */
 atom.isATOMFeed = function(l) {
@@ -96,40 +89,32 @@ atom.readATOMFeedDocument = function(doc
     var t = filter(selector(mklist(element, "'title")), car(f));
     var i = filter(selector(mklist(element, "'id")), car(f));
     var e = filter(selector(mklist(element, "'entry")), car(f));
-    if (isNil(e))
-        return mklist(elementValue(car(t)), elementValue(car(i)));
-    return cons(elementValue(car(t)), cons(elementValue(car(i)), atom.entriesElementsToValues(e)));
+    return mklist(append(
+                mklist(element, "'feed", mklist(element, "'title", elementValue(car(t))), mklist(element, "'id", elementValue(car(i)))),
+                atom.entriesElementValues(e)));
 };
 
 /**
  * Convert a list of strings to a list of values representing an ATOM feed.
  */
 atom.readATOMFeed = function(l) {
-    return atom.readAtomFeedDocument(parseXML(l));
-};
-
-/**
- * Convert an ATOM feed containing elements to an ATOM feed containing values.
- */
-atom.feedValues = function(e) {
-    function feedValuesLoop(e) {
-        if (isNil(e))
-            return e;
-        return cons(entryValue(car(e)), feedValuesLoop(cdr(e)));
-    }
-
-    return cons(car(e), cons(cadr(e), feedValuesLoop(cddr(e))));
+    return atom.readATOMFeedDocument(parseXML(l));
 };
 
 /**
  * Convert a list of values representy an ATOM entry to a list of elements.
  */
 atom.entryElement = function(l) {
-    return mklist(element, "'entry", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
-            mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
-            mklist(element, "'id", cadr(l)),
-            mklist(element, "'content", mklist(attribute, "'type", (isList(caddr(l))? "application/xml" : "text")), caddr(l)),
-            mklist(element, "'link", mklist(attribute, "'href", cadr(l))));
+    var title = elementValue(namedElementChild("'title", l));
+    var id = elementValue(namedElementChild("'id", l));
+    var content = namedElementChild("'content", l);
+    var text = isNil(content)? false : elementHasValue(content);
+    return append(append(
+            mklist(element, "'entry", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
+            mklist(element, "'title", mklist(attribute, "'type", "text"), title), mklist(element, "'id", id)),
+            isNil(content)? mklist() :
+                append(mklist(element, "'content", mklist(attribute, "'type", text? "text" : "application/xml")), text? mklist(elementValue(content)) : elementChildren(content))),
+            mklist(element, "'link", mklist(attribute, "'href", id)));
 };
 
 /**
@@ -144,42 +129,37 @@ atom.entriesElements = function(l) {
 /**
  * Convert a list of values representing an ATOM entry to an ATOM entry.
  */
-atom.writeATOMEntry = function(l) {
+atom.writeATOMEntry = function(ll) {
+    var l = isNil(ll)? ll : car(ll);
     return writeXML(mklist(atom.entryElement(l)), true);
 };
 
 /**
  * Convert a list of values representing an ATOM feed to an ATOM feed.
  */
-atom.writeATOMFeed = function(l) {
+atom.writeATOMFeed = function(ll) {
+    var l = isNil(ll)? ll : car(ll);
+    var lt = filter(selector(mklist(element, "'title")), l);
+    var t = isNil(lt)? '' : elementValue(car(lt));
+    var li = filter(selector(mklist(element, "'id")), l);
+    var i = isNil(li)? '' : elementValue(car(li));
     var f = mklist(element, "'feed", mklist(attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
             mklist(element, "'title", mklist(attribute, "'type", "text"), car(l)),
             mklist(element, "'id", cadr(l)));
-    if (isNil(cddr(l)))
-        return writeXML(mklist(f), true);
-    var fe = append(f, atom.entriesElements(cddr(l)));
-    return writeXML(mklist(fe), true);
-};
 
-/**
- * Convert an ATOM entry containing a value to an ATOM entry containing an item element.
- */
-atom.entryValuesToElements = function(v) {
-    if (isList(caddr(v)))
-        return cons(car(v), cons(cadr(v), valuesToElements(mklist(cons("'item", caddr(v))))));
-    return cons(car(v), cons(cadr(v), valuesToElements(mklist(mklist("'item", caddr(v))))));
-};
+    // Write ATOM entries
+    var le = filter(selector(mklist(element, "'entry")), l);
+    if (isNil(le))
+        return writeXML(mklist(f), true);
 
-/**
- * Convert an ATOM feed containing values to an ATOM feed containing elements.
- */
-atom.feedValuesToElements = function(v) {
-    function feedValuesToElementsLoop(v) {
-        if (isNil(v))
-            return v;
-        return cons(atom.entryValuesToElements(car(v)), feedValuesToElementsLoop(cdr(v)));
+    // Write a single ATOM entry element with a list of values
+    if (!isNil(le) && !isNil(car(le)) && isList(car(caddr(car(le))))) {
+        var fe = append(f, atom.entriesElements(caddr(car(le))));
+        return writeXML(mklist(fe), true);
     }
 
-    return cons(car(v), cons(cadr(v), feedValuesToElementsLoop(cddr(v))));
+    // Write separate ATOM entry elements
+    var fe = append(f, atom.entriesElements(le));
+    return writeXML(mklist(fe), true);
 };
 

Modified: tuscany/sca-cpp/trunk/modules/js/htdocs/component.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/component.js?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/component.js (original)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/component.js Tue Mar  8 08:18:07 2011
@@ -174,9 +174,8 @@ HTTPBindingClient.jsonResult = function(
         HTTPBindingClient.charset = httpCharset(http);
 
     // Unmarshall the JSON response
-    var data = http.responseText;
     var obj;
-    eval("obj = " + data);
+    eval("obj = " + http.responseText);
     if(obj.error)
         throw new HTTPBindingClient.Exception(obj.error.code, obj.error.msg);
     var res = obj.result;
@@ -224,15 +223,6 @@ HTTPBindingClient.prototype.jsonApply = 
 };
 
 /**
- * Return the XML Document result from an XMLHTTPRequest.
- */
-HTTPBindingClient.xmlResult = function(http) {
-    if(!http.responseXML || http.responseXML.childNodes.length == 0)
-        return (new DOMParser()).parseFromString(http.responseText, "text/xml");
-    return http.responseXML;
-}
-
-/**
  * REST ATOMPub GET method.
  */
 HTTPBindingClient.prototype.get = function(id, cb) {
@@ -246,15 +236,9 @@ HTTPBindingClient.prototype.get = functi
         http.onreadystatechange = function() {
             if (http.readyState == 4) {
                 // Pass the result or exception
-                if (http.status == 200) {
-                    var res = null;
-                    try {
-                        res = HTTPBindingClient.xmlResult(http);
-                    } catch (e) {
-                        cb(null, e);
-                    }
-                    cb(res);
-                } else
+                if (http.status == 200)
+                    cb(http.responseText);
+                else
                     cb(null, new HTTPBindingClient.Exception(http.status, http.statusText));
             }
         };
@@ -267,7 +251,7 @@ HTTPBindingClient.prototype.get = functi
     // Send the request and return the result or exception
     http.send(null);
     if (http.status == 200)
-        return HTTPBindingClient.xmlResult(http);
+        return http.responseText;
     throw new HTTPBindingClient.Exception(http.status, http.statusText);
 };
 
@@ -286,15 +270,9 @@ HTTPBindingClient.prototype.post = funct
         http.onreadystatechange = function() {
             // Pass the result or exception
             if (http.readyState == 4) {
-                if (http.status == 201) {
-                    var res = null;
-                    try {
-                        res = HTTPBindingClient.xmlResult(http);
-                    } catch (e) {
-                        cb(null, e);
-                    }
-                    cb(res);
-                } else
+                if (http.status == 201)
+                    cb(http.responseText);
+                else
                     cb(null, new HTTPBindingClient.Exception(http.status, http.statusText));
             }
         };
@@ -306,7 +284,7 @@ HTTPBindingClient.prototype.post = funct
     // Send the request and return the result or exception
     http.send(entry);
     if (http.status == 201)
-        return HTTPBindingClient.xmlResult(http);
+        return http.responseText;
     throw new HTTPBindingClient.Exception(http.status, http.statusText);
 };
 
@@ -423,30 +401,6 @@ HTTPBindingClient.getHTTPRequest = funct
 };
 
 /**
- * DOM parser wrapper.
- */
-if (typeof DOMParser == "undefined") {
-    DOMParser = function() {}
-    
-    DOMParser.prototype.parseFromString = function (str, contentType) {
-        if (typeof ActiveXObject != "undefined") {
-            var d = new ActiveXObject("MSXML.DomDocument");
-            d.loadXML(str);
-            return d;
-        } else if (typeof XMLHttpRequest != "undefined") {
-            var req = new XMLHttpRequest;
-            req.open("GET", "data:" + (contentType || "application/xml") +
-                            ";charset=utf-8," + encodeURIComponent(str), false);
-            if (req.overrideMimeType) {
-                req.overrideMimeType(contentType);
-            }
-            req.send(null);
-            return req.responseXML;
-        }
-    }
-}
-
-/**
  * Public API.
  */
 

Modified: tuscany/sca-cpp/trunk/modules/js/htdocs/util.js
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/js/htdocs/util.js?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/js/htdocs/util.js (original)
+++ tuscany/sca-cpp/trunk/modules/js/htdocs/util.js Tue Mar  8 08:18:07 2011
@@ -52,14 +52,14 @@ function cddr(l) {
     return cdr(cdr(l));
 }
 
-function cdddr(l) {
-    return cdr(cdr(cdr(l)));
-}
-
 function caddr(l) {
     return car(cddr(l));
 }
 
+function cdddr(l) {
+    return cdr(cdr(cdr(l)));
+}
+
 function cadddr(l) {
     return car(cdddr(l));
 }
@@ -164,13 +164,22 @@ function tokens(path) {
 var rconsole;
 
 function log(v) {
-    if (rconsole) {
+    try {
+        var s = '';
+        for (i = 0; i < arguments.length; i++) {
+            s = s + writeValue(arguments[i]);
+            if (i < arguments.length)
+                s = s + ' ';
+        }
+
+        if (rconsole) {
+            try {
+                rconsole.log(s);
+            } catch (e) {}
+        }
         try {
-            rconsole.log(v);
+            console.log(s);
         } catch (e) {}
-    }
-    try {
-        console.log(v);
     } catch (e) {}
     return true;
 }

Modified: tuscany/sca-cpp/trunk/modules/python/eval.hpp
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/eval.hpp?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/python/eval.hpp (original)
+++ tuscany/sca-cpp/trunk/modules/python/eval.hpp Tue Mar  8 08:18:07 2011
@@ -66,17 +66,12 @@ const string lastError() {
             PyObject* sval = PyObject_Str(val);    
             string msg = string() + PyString_AsString(stype) + " : " + PyString_AsString(sval);
             Py_DECREF(stype);
-            Py_DECREF(sval);                                    
-            Py_DECREF(type);
-            Py_DECREF(val);
-            Py_XDECREF(trace);
+            Py_DECREF(sval);
+            PyErr_Restore(type, val, trace);
             PyErr_Print();
             return msg;
         }
-        PyErr_Print();
-        Py_XDECREF(type);
-        Py_XDECREF(val);
-        Py_XDECREF(trace);
+        PyErr_Restore(type, val, trace);
         PyErr_Print();
         return "Unknown Python error";
     }

Modified: tuscany/sca-cpp/trunk/modules/python/server-test.py
URL: http://svn.apache.org/viewvc/tuscany/sca-cpp/trunk/modules/python/server-test.py?rev=1079292&r1=1079291&r2=1079292&view=diff
==============================================================================
--- tuscany/sca-cpp/trunk/modules/python/server-test.py (original)
+++ tuscany/sca-cpp/trunk/modules/python/server-test.py Tue Mar  8 08:18:07 2011
@@ -24,13 +24,13 @@ def echo(x):
 
 def get(id):
     if id == ():
-        return ("Sample Feed", "123456789",
-            ("Item", "111", (("'name", "Apple"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 2.99))),
-            ("Item", "222", (("'name", "Orange"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 3.55))),
-            ("Item", "333", (("'name", "Pear"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 1.55))))
-        
-    entry = (("'name", "Apple"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 2.99))
-    return ("Item", id[0], entry)
+        return (("'feed", ("'title", "Sample Feed"), ("'id", "123456789"), ("'entry", 
+            ((("'title", "Item"), ("'id", "111"), ("'content", ("'item", ("'name", "Apple"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 2.99)))),
+             (("'title", "Item"), ("'id", "222"), ("'content", ("'item", ("'name", "Orange"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 3.55)))),
+             (("'title", "Item"), ("'id", "333"), ("'content", ("'item", ("'name", "Pear"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 1.55))))))),)
+
+    content = ("'content", ("'item", ("'name", "Apple"), ("'currencyCode", "USD"), ("'currencySymbol", "$"), ("'price", 2.99)))
+    return (("'entry", ("'title", "Item"), ("'id", id[0]), content),)
 
 def post(collection, item):
     return ("123456789",)