summaryrefslogtreecommitdiffstats
path: root/sca-cpp
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-03-13 19:24:02 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2011-03-13 19:24:02 +0000
commitd1d9ba0e29baed02a052dae81b049d00a1454bf8 (patch)
tree722f36446ddb5acc51b4f3a3047f64b988fa99a4 /sca-cpp
parent6ecf9ca142893fe27ae9a2e269f7dff73fb6d7c6 (diff)
Add a reusable component that returns the contents of a configured url.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1081203 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp')
-rw-r--r--sca-cpp/trunk/README18
-rw-r--r--sca-cpp/trunk/components/Makefile.am2
-rw-r--r--sca-cpp/trunk/components/filedb/Makefile.am2
-rw-r--r--sca-cpp/trunk/components/http/Makefile.am36
-rw-r--r--sca-cpp/trunk/components/http/client-test.cpp84
-rw-r--r--sca-cpp/trunk/components/http/http.composite40
-rw-r--r--sca-cpp/trunk/components/http/httpget.componentType28
-rw-r--r--sca-cpp/trunk/components/http/httpget.cpp90
-rwxr-xr-xsca-cpp/trunk/components/http/server-test39
-rw-r--r--sca-cpp/trunk/components/http/url-test.scm23
-rw-r--r--sca-cpp/trunk/configure.ac1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testget/app.composite65
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testget/app.html20
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testlogic/app.composite12
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/joe@localhost2
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com2
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/main.html6
-rwxr-xr-xsca-cpp/trunk/modules/edit/mkapplinks6
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/url/palette.composite14
19 files changed, 463 insertions, 27 deletions
diff --git a/sca-cpp/trunk/README b/sca-cpp/trunk/README
index aa55d25f34..d78c41808f 100644
--- a/sca-cpp/trunk/README
+++ b/sca-cpp/trunk/README
@@ -12,13 +12,15 @@ implemented using OpenID and OAuth.
Several useful SCA components are provided on top of the SCA runtime, which
can be used to help assemble distributed SCA composite applications:
-Cache: Key/value memory cache, using Memcached;
+Cache: key/value memory cache, using Memcached;
Chat: XMPP chat, using Apache Vysper and Libstrophe;
-Log: distributed logger, using Facebook Scribe.
-Nosqldb: Key/value 'NoSQL' persistent store, using TinyCDB;
+Filedb: key/value 'NoSQL' persistent store, using plain files;
+Http: HTTP client, using Libcurl;
+Log: distributed logger, using Facebook Scribe;
+Nosqldb: key/value 'NoSQL' persistent store, using TinyCDB;
Queue: AMQP queuing, using Apache Qpid/C;
Sqldb: SQL database, using PostgreSQL;
-Webservice: Web service gateway, using Apache Axis2/C;
+Webservice: Web service gateway, using Apache Axis2/C.
These components present a simple ATOMPub REST interface, allowing you to send
a message to a queue, a chat connection, or add an entry to a cache or a
@@ -55,13 +57,15 @@ Here's a rough guide to the Tuscany SCA source tree:
| |-- kernel SCA runtime kernel
| |
| |-- modules Modules that plug into the runtime
- | | |-- atom AtomPub encoding
+ | | |-- atom AtomPub data encoding
+ | | |-- edit Composite app editor
| | |-- http HTTP protocol
| | |-- java Support for Java components
- | | |-- json JSON-RPC encoding
+ | | |-- json JSON data encoding
| | |-- oauth User signin using OAuth
| | |-- openid User signin using OpenID
| | |-- python Support for Python components
+ | | |-- rss RSS data encoding
| | |-- scheme Support for Scheme components
| | |-- server Apache HTTPD server integration
| | |-- wsgi Python WSGI server integration
@@ -69,6 +73,8 @@ Here's a rough guide to the Tuscany SCA source tree:
| |-- components Useful SCA components
| | |-- cache Memcached key/value cache
| | |-- chat XMPP chat
+ | | |-- filedb Plain file NoSQL database
+ | | |-- http HTTP client
| | |-- log Scribe logger
| | |-- nosqldb TinyCDB NoSQL database
| | |-- queue AMQP message queue
diff --git a/sca-cpp/trunk/components/Makefile.am b/sca-cpp/trunk/components/Makefile.am
index 55f14a4ea8..f3116a9c45 100644
--- a/sca-cpp/trunk/components/Makefile.am
+++ b/sca-cpp/trunk/components/Makefile.am
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-SUBDIRS = cache chat log nosqldb filedb queue sqldb webservice
+SUBDIRS = cache chat http log nosqldb filedb queue sqldb webservice
diff --git a/sca-cpp/trunk/components/filedb/Makefile.am b/sca-cpp/trunk/components/filedb/Makefile.am
index 90c8b4207d..359ad68a2f 100644
--- a/sca-cpp/trunk/components/filedb/Makefile.am
+++ b/sca-cpp/trunk/components/filedb/Makefile.am
@@ -15,8 +15,6 @@
# specific language governing permissions and limitations
# under the License.
-INCLUDES = -I${TINYCDB_INCLUDE}
-
incl_HEADERS = *.hpp
incldir = $(prefix)/include/components/filedb
diff --git a/sca-cpp/trunk/components/http/Makefile.am b/sca-cpp/trunk/components/http/Makefile.am
new file mode 100644
index 0000000000..05e41bb9e1
--- /dev/null
+++ b/sca-cpp/trunk/components/http/Makefile.am
@@ -0,0 +1,36 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+compdir=$(prefix)/components/http
+
+EXTRA_DIST = http.composite httpget.componentType *.scm
+
+comp_LTLIBRARIES = libhttpget.la
+noinst_DATA = libhttpget.so
+
+libhttpget_la_SOURCES = httpget.cpp
+libhttpget_la_LDFLAGS = -lxml2 -lmozjs -curl
+libhttpget.so:
+ ln -s .libs/libhttpget.so
+
+client_test_SOURCES = client-test.cpp
+client_test_LDFLAGS = -lxml2 -lcurl -lmozjs
+
+dist_noinst_SCRIPTS = server-test
+noinst_PROGRAMS = client-test
+TESTS = server-test
+
diff --git a/sca-cpp/trunk/components/http/client-test.cpp b/sca-cpp/trunk/components/http/client-test.cpp
new file mode 100644
index 0000000000..eb8162b834
--- /dev/null
+++ b/sca-cpp/trunk/components/http/client-test.cpp
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+/**
+ * Test file database component.
+ */
+
+#include <assert.h>
+#include "stream.hpp"
+#include "string.hpp"
+
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "perf.hpp"
+#include "../../modules/http/http.hpp"
+
+namespace tuscany {
+namespace http {
+
+const string uri("http://localhost:8090/httpget");
+
+bool testGet() {
+ http::CURLSession cs("", "", "");
+
+ const failable<value> val = http::get(uri, cs);
+ assert(hasContent(val));
+ assert(contains(string(car<value>(cadr<value>(content(val)))), "It works"));
+
+ return true;
+}
+
+struct getLoop {
+ http::CURLSession cs;
+ getLoop(http::CURLSession cs) : cs(cs) {
+ }
+ const bool operator()() const {
+ const failable<value> val = http::get(uri, cs);
+ assert(hasContent(val));
+ assert(contains(string(car<value>(cadr<value>(content(val)))), "It works"));
+ return true;
+ }
+};
+
+bool testGetPerf() {
+ http::CURLSession cs("", "", "");
+
+ const lambda<bool()> gl = getLoop(cs);
+ cout << "HTTP get test " << time(gl, 5, 200) << " ms" << endl;
+
+ return true;
+}
+
+}
+}
+
+int main() {
+ tuscany::cout << "Testing..." << tuscany::endl;
+
+ tuscany::http::testGet();
+ tuscany::http::testGetPerf();
+
+ tuscany::cout << "OK" << tuscany::endl;
+
+ return 0;
+}
diff --git a/sca-cpp/trunk/components/http/http.composite b/sca-cpp/trunk/components/http/http.composite
new file mode 100644
index 0000000000..53f574a0e0
--- /dev/null
+++ b/sca-cpp/trunk/components/http/http.composite
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1"
+ targetNamespace="http://tuscany.apache.org/xmlns/sca/components"
+ name="http">
+
+ <component name="httpget">
+ <implementation.cpp path="." library="libhttpget"/>
+ <service name="httpget">
+ <t:binding.http uri="httpget"/>
+ </service>
+ <reference name="url" target="url-test"/>
+ </component>
+
+ <component name="url-test">
+ <t:implementation.scheme script="url-test.scm"/>
+ <service name="url-test">
+ <t:binding.http uri="url-test"/>
+ </service>
+ </component>
+
+</composite>
diff --git a/sca-cpp/trunk/components/http/httpget.componentType b/sca-cpp/trunk/components/http/httpget.componentType
new file mode 100644
index 0000000000..620f549e21
--- /dev/null
+++ b/sca-cpp/trunk/components/http/httpget.componentType
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1"
+ targetNamespace="http://tuscany.apache.org/xmlns/sca/components">
+
+ <service name="http"/>
+ <reference name="url"/>
+
+</composite>
diff --git a/sca-cpp/trunk/components/http/httpget.cpp b/sca-cpp/trunk/components/http/httpget.cpp
new file mode 100644
index 0000000000..e64761714c
--- /dev/null
+++ b/sca-cpp/trunk/components/http/httpget.cpp
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* $Rev$ $Date$ */
+
+/**
+ * HTTP client component implementation.
+ */
+
+#include "string.hpp"
+#include "function.hpp"
+#include "list.hpp"
+#include "value.hpp"
+#include "monad.hpp"
+#include "../../modules/http/http.hpp"
+
+namespace tuscany {
+namespace httpget {
+
+/**
+ * Evaluate an HTTP get.
+ */
+const failable<value> get(const lambda<value(const list<value>&)> url, http::CURLSession& ch) {
+ debug("httpget::get");
+ const value u = url(mklist<value>("get", list<value>()));
+ debug(u, "httpget::get::url");
+ return http::get(u, ch);
+}
+
+/**
+ * Component implementation lambda function.
+ */
+class applyhttp {
+public:
+ applyhttp(const lambda<value(const list<value>&)> url, http::CURLSession& ch) : url(url), ch(ch) {
+ }
+
+ const value operator()(const list<value>& params) const {
+ debug(params, "httpget::applyhttp::params");
+ const value func(car(params));
+ if (func == "get")
+ return get(url, ch);
+ return tuscany::mkfailure<tuscany::value>();
+ }
+
+private:
+ const lambda<value(const list<value>&)> url;
+ http::CURLSession& ch;
+};
+
+/**
+ * Start the component.
+ */
+const failable<value> start(const list<value>& params) {
+ // Create a CURL session
+ http::CURLSession& ch = *(new (gc_new<http::CURLSession>()) http::CURLSession("", "", ""));
+
+ // Return the component implementation lambda function
+ return value(lambda<value(const list<value>&)>(applyhttp(car(params), ch)));
+}
+
+}
+}
+
+extern "C" {
+
+const tuscany::value apply(const tuscany::list<tuscany::value>& params) {
+ const tuscany::value func(car(params));
+ if (func == "start")
+ return tuscany::httpget::start(cdr(params));
+ return tuscany::mkfailure<tuscany::value>();
+}
+
+}
diff --git a/sca-cpp/trunk/components/http/server-test b/sca-cpp/trunk/components/http/server-test
new file mode 100755
index 0000000000..edfeb5d189
--- /dev/null
+++ b/sca-cpp/trunk/components/http/server-test
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Setup
+../../modules/http/httpd-conf tmp localhost 8090 ../../modules/http/htdocs
+../../modules/server/server-conf tmp
+../../modules/server/scheme-conf tmp
+cat >>tmp/conf/httpd.conf <<EOF
+SCAContribution `pwd`/
+SCAComposite http.composite
+EOF
+
+../../modules/http/httpd-start tmp
+sleep 2
+
+# Test
+./client-test 2>/dev/null
+rc=$?
+
+# Cleanup
+../../modules/http/httpd-stop tmp
+sleep 2
+return $rc
diff --git a/sca-cpp/trunk/components/http/url-test.scm b/sca-cpp/trunk/components/http/url-test.scm
new file mode 100644
index 0000000000..29e6629aa5
--- /dev/null
+++ b/sca-cpp/trunk/components/http/url-test.scm
@@ -0,0 +1,23 @@
+; Licensed to the Apache Software Foundation (ASF) under one
+; or more contributor license agreements. See the NOTICE file
+; distributed with this work for additional information
+; regarding copyright ownership. The ASF licenses this file
+; to you under the Apache License, Version 2.0 (the
+; "License"); you may not use this file except in compliance
+; with the License. You may obtain a copy of the License at
+;
+; http://www.apache.org/licenses/LICENSE-2.0
+;
+; Unless required by applicable law or agreed to in writing,
+; software distributed under the License is distributed on an
+; "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+; KIND, either express or implied. See the License for the
+; specific language governing permissions and limitations
+; under the License.
+
+; URL test case
+
+(define (get id)
+ "http://localhost:8090/index.html"
+)
+
diff --git a/sca-cpp/trunk/configure.ac b/sca-cpp/trunk/configure.ac
index e44bc181ec..9a64c78fb6 100644
--- a/sca-cpp/trunk/configure.ac
+++ b/sca-cpp/trunk/configure.ac
@@ -907,6 +907,7 @@ AC_CONFIG_FILES([Makefile
components/chat/Makefile
components/nosqldb/Makefile
components/filedb/Makefile
+ components/http/Makefile
components/queue/Makefile
components/sqldb/Makefile
components/webservice/Makefile
diff --git a/sca-cpp/trunk/modules/edit/apps/testget/app.composite b/sca-cpp/trunk/modules/edit/apps/testget/app.composite
new file mode 100644
index 0000000000..9f841afed6
--- /dev/null
+++ b/sca-cpp/trunk/modules/edit/apps/testget/app.composite
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" targetNamespace="http://testget" name="testget">
+ <service name="get" promote="get"/>
+ <component t:x="25" t:y="25" name="get" t:title="http get" t:color="green1">
+ <implementation.cpp path="lib/http" library="libhttpget"/>
+ <service name="get"/>
+ <reference target="text" name="url"/>
+ </component>
+ <component t:x="89" t:y="25" name="text" t:title="text" t:color="orange1">
+ <t:implementation.python script="nuvem/text.py"/>
+ <service name="text"/>
+ <property>http://www.google.com</property>
+ </component>
+ <service name="get2" promote="get2"/>
+ <component t:x="24" t:y="91" name="get2" t:title="http get" t:color="green1">
+ <implementation.cpp path="lib/http" library="libhttpget"/>
+ <service name="get"/>
+ <reference target="text2" name="url"/>
+ </component>
+ <service name="get3" promote="get3"/>
+ <component t:x="23" t:y="175" name="get3" t:title="http get" t:color="green1">
+ <implementation.cpp path="lib/http" library="libhttpget"/>
+ <service name="get"/>
+ <reference target="text3" name="url"/>
+ </component>
+ <component t:x="87" t:y="175" name="text3" t:title="text" t:color="orange1">
+ <t:implementation.python script="nuvem/text.py"/>
+ <service name="text"/>
+ <property>http://www.weather.gov/forecasts/xml/sample_products/browser_interface/ndfdXMLclient.php?whichClient=NDFDgen&amp;lat=38.99&amp;lon=-77.01&amp;listLatLon=&amp;lat1=&amp;lon1=&amp;lat2=&amp;lon2=&amp;resolutionSub=&amp;listLat1=&amp;listLon1=&amp;listLat2=&amp;listLon2=&amp;resolutionList=&amp;endPoint1Lat=&amp;endPoint1Lon=&amp;endPoint2Lat=&amp;endPoint2Lon=&amp;listEndPoint1Lat=&amp;listEndPoint1Lon=&amp;listEndPoint2Lat=&amp;listEndPoint2Lon=&amp;zipCodeList=&amp;listZipCodeList=&amp;centerPointLat=&amp;centerPointLon=&amp;distanceLat=&amp;distanceLon=&amp;resolutionSquare=&amp;listCenterPointLat=&amp;listCenterPointLon=&amp;listDistanceLat=&amp;listDistanceLon=&amp;listResolutionSquare=&amp;citiesLevel=&amp;listCitiesLevel=&amp;sector=&amp;gmlListLatLon=&amp;featureType=&amp;requestedTime=&amp;startTime=&amp;endTime=&amp;compType=&amp;propertyName=&amp;product=time-series&amp;begin=2004-01-01T00%3A00%3A00&amp;end=2015-03-10T00%3A00%3A00&amp;maxt=maxt&amp;Submit=Submit</property>
+ </component>
+ <component t:x="88" t:y="91" name="text2" t:title="text" t:color="orange1">
+ <t:implementation.python script="nuvem/text.py"/>
+ <service name="text"/>
+ <property>http://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&amp;destination=Concord,MA&amp;waypoints=Charlestown,MA|Lexington,MA&amp;sensor=false</property>
+ </component>
+ <service name="get4" promote="get4"/>
+ <component t:x="26" t:y="267" name="get4" t:title="http get" t:color="green1">
+ <implementation.cpp path="lib/http" library="libhttpget"/>
+ <service name="get"/>
+ <reference target="text4" name="url"/>
+ </component>
+ <component t:x="90" t:y="267" name="text4" t:title="text" t:color="orange1">
+ <t:implementation.python script="nuvem/text.py"/>
+ <service name="text"/>
+ <property>http://feedproxy.google.com/TechCrunch</property>
+ </component>
+</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testget/app.html b/sca-cpp/trunk/modules/edit/apps/testget/app.html
new file mode 100644
index 0000000000..5c7c7219bb
--- /dev/null
+++ b/sca-cpp/trunk/modules/edit/apps/testget/app.html
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<DIV id="page"/>
diff --git a/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite b/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite
index 242a49c013..415de6a677 100644
--- a/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite
+++ b/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite
@@ -26,15 +26,10 @@
<reference target="text" name="then"/>
<reference target="text2" name="else"/>
</component>
- <component t:x="123" t:y="21" name="item" t:title="item" t:color="yellow1">
- <t:implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <property>item</property>
- </component>
<component t:x="75" t:y="24" name="greater" t:title="gt" t:color="magenta1">
<t:implementation.python script="nuvem/greater.py"/>
<service name="greater"/>
- <reference target="item" name="value1"/>
+ <reference target="number2" name="value1"/>
<reference target="number" name="value2"/>
</component>
<component t:x="118" t:y="66" name="number" t:title="number" t:color="orange1">
@@ -52,4 +47,9 @@
<service name="text"/>
<property>not greater than 5</property>
</component>
+ <component t:x="88" t:y="25" name="number2" t:title="number" t:color="orange1">
+ <t:implementation.python script="nuvem/number.py"/>
+ <service name="number"/>
+ <property>3</property>
+ </component>
</composite>
diff --git a/sca-cpp/trunk/modules/edit/dashboards/joe@localhost b/sca-cpp/trunk/modules/edit/dashboards/joe@localhost
index 5771c2f9de..9c40c7bd58 100644
--- a/sca-cpp/trunk/modules/edit/dashboards/joe@localhost
+++ b/sca-cpp/trunk/modules/edit/dashboards/joe@localhost
@@ -1 +1 @@
-((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")))
+((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 "Test HTTP Get Component") (id "testget")) (entry (title "An App that shows my Social Profiles") (id "me360")) (entry (title "An App that shows Friends Near Me") (id "nearme")))
diff --git a/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com b/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com
index 5771c2f9de..9c40c7bd58 100644
--- a/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com
+++ b/sca-cpp/trunk/modules/edit/dashboards/joe@sca-store.com
@@ -1 +1 @@
-((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")))
+((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 "Test HTTP Get Component") (id "testget")) (entry (title "An App that shows my Social Profiles") (id "me360")) (entry (title "An App that shows Friends Near Me") (id "nearme")))
diff --git a/sca-cpp/trunk/modules/edit/htdocs/main.html b/sca-cpp/trunk/modules/edit/htdocs/main.html
index b219c27e50..ddd89b6bab 100644
--- a/sca-cpp/trunk/modules/edit/htdocs/main.html
+++ b/sca-cpp/trunk/modules/edit/htdocs/main.html
@@ -34,13 +34,13 @@
<p>Try the <a href="dash" target="_parent">App Dashboard</a> to manage your collection of apps.</p>
<h2>Composition Editor</h2>
-<p>Try the <a href="graph/?app=myprofile" target="_parent">Composition Editor</a> to compose the logic of an app.</p>
+<p>Try the <a href="graph/?app=testvalues" target="_parent">Composition Editor</a> to compose the logic of an app.</p>
<h2>Page Editor</h2>
-<p>Try the <a href="page/?app=myprofile" target="_parent">Page Editor</a> to draw an app page.</p>
+<p>Try the <a href="page/?app=testvalues" target="_parent">Page Editor</a> to draw an app page.</p>
<h2>App Settings Editor</h2>
-<p>Try the <a href="app/?app=myprofile" target="_parent">App Settings Editor</a> to edit the settings of app.</p>
+<p>Try the <a href="app/?app=testvalues" target="_parent">App Settings Editor</a> to edit the settings of app.</p>
</div>
diff --git a/sca-cpp/trunk/modules/edit/mkapplinks b/sca-cpp/trunk/modules/edit/mkapplinks
index 66becf1618..3a9cd67e60 100755
--- a/sca-cpp/trunk/modules/edit/mkapplinks
+++ b/sca-cpp/trunk/modules/edit/mkapplinks
@@ -24,6 +24,12 @@ for n in `ls apps | awk '{ printf "apps/%s/nuvem\n", $1 }'`; do
fi
done
+for n in `ls apps | awk '{ printf "apps/%s/lib\n", $1 }'`; do
+ if [ ! -e "$n" ]; then
+ ln -s ../../../../components "$n"
+ fi
+done
+
for n in `ls apps | awk '{ printf "apps/%s/htdocs\n", $1 }'`; do
if [ ! -e "$n" ]; then
mkdir "$n"
diff --git a/sca-cpp/trunk/modules/edit/palettes/url/palette.composite b/sca-cpp/trunk/modules/edit/palettes/url/palette.composite
index 3a85322e51..dc3b40e6a7 100644
--- a/sca-cpp/trunk/modules/edit/palettes/url/palette.composite
+++ b/sca-cpp/trunk/modules/edit/palettes/url/palette.composite
@@ -26,8 +26,8 @@
<service name="path" promote="path"/>
<service name="params" promote="params"/>
<service name="user" promote="user"/>
- <service name="realm" promote="realm"/>
<service name="email" promote="email"/>
+ <service name="get" promote="get"/>
<component name="host" t:title="host" t:color="green1">
<t:implementation.python script="nuvem/host.py"/>
@@ -53,16 +53,16 @@
<property name="user"></property>
</component>
- <component name="realm" t:title="realm" t:color="green1">
- <t:implementation.python script="nuvem/realm.py"/>
- <service name="realm"/>
- <property name="realm"></property>
- </component>
-
<component name="email" t:title="email" t:color="green1">
<t:implementation.python script="nuvem/email.py"/>
<service name="email"/>
<property name="email"></property>
</component>
+ <component name="get" t:title="http get" t:color="green1">
+ <implementation.cpp path="lib/http" library="libhttpget"/>
+ <service name="get"/>
+ <reference name="url"/>
+ </component>
+
</composite>