summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/modules
diff options
context:
space:
mode:
authorjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2012-01-30 15:56:11 +0000
committerjsdelfino <jsdelfino@13f79535-47bb-0310-9956-ffa450edef68>2012-01-30 15:56:11 +0000
commitf4c4803ce0c14585e3c2af3641d94b651877e04c (patch)
tree9f10df32f2d34a3c697aaee897bad0b180922095 /sca-cpp/trunk/modules
parent1b10f18fce6baeb721a725661ded630614831304 (diff)
Refactor server hosting module, rename it and move it under a hosting dir, and refactor its datastore components into a single component.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1237740 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-cpp/trunk/modules')
-rw-r--r--sca-cpp/trunk/modules/Makefile.am2
-rw-r--r--sca-cpp/trunk/modules/edit/Makefile.am48
-rw-r--r--sca-cpp/trunk/modules/edit/accounts.py35
-rw-r--r--sca-cpp/trunk/modules/edit/accounts/jane@localhost/user.account1
-rw-r--r--sca-cpp/trunk/modules/edit/accounts/jane@sca-store.com/user.account1
-rw-r--r--sca-cpp/trunk/modules/edit/accounts/john@localhost/user.account1
-rw-r--r--sca-cpp/trunk/modules/edit/accounts/john@sca-store.com/user.account1
-rw-r--r--sca-cpp/trunk/modules/edit/apps.py69
-rw-r--r--sca-cpp/trunk/modules/edit/apps/me360/app.composite93
-rw-r--r--sca-cpp/trunk/modules/edit/apps/me360/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/me360/htdocs/app.html75
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme/app.composite444
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme/htdocs/app.html54
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme2/app.composite191
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme2/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/nearme2/htdocs/app.html30
-rw-r--r--sca-cpp/trunk/modules/edit/apps/new/app.composite52
-rw-r--r--sca-cpp/trunk/modules/edit/apps/new/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/new/htdocs/app.html27
-rw-r--r--sca-cpp/trunk/modules/edit/apps/ourphotos/app.composite163
-rw-r--r--sca-cpp/trunk/modules/edit/apps/ourphotos/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/ourphotos/htdocs/app.html36
-rw-r--r--sca-cpp/trunk/modules/edit/apps/shoppingcart/app.composite596
-rw-r--r--sca-cpp/trunk/modules/edit/apps/shoppingcart/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/shoppingcart/htdocs/app.html72
-rw-r--r--sca-cpp/trunk/modules/edit/apps/slice/app.composite504
-rw-r--r--sca-cpp/trunk/modules/edit/apps/slice/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/slice/htdocs/app.html68
-rw-r--r--sca-cpp/trunk/modules/edit/apps/test/app.composite63
-rw-r--r--sca-cpp/trunk/modules/edit/apps/test/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/test/htdocs/app.html33
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testanimation/app.composite169
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testanimation/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testanimation/htdocs/app.html27
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testdb/app.composite99
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testdb/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testdb/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testevents/app.composite195
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testevents/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testevents/htdocs/app.html57
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testhttp/app.composite273
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testhttp/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testhttp/htdocs/app.html31
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testlogic/app.composite201
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testlogic/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testlogic/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsearch/app.composite240
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsearch/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsearch/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsms/app.composite98
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsms/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsms/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsocial/app.composite179
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsocial/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testsocial/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testtext/app.composite216
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testtext/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testtext/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testurl/app.composite146
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testurl/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testurl/htdocs/app.html24
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testvalues/app.composite491
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testvalues/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testvalues/htdocs/app.html27
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets/app.composite189
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets/htdocs/app.html54
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets2/app.composite147
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets2/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets2/htdocs/app.html86
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets3/app.composite206
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets3/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/testwidgets3/htdocs/app.html39
-rw-r--r--sca-cpp/trunk/modules/edit/apps/twsms/app.composite129
-rw-r--r--sca-cpp/trunk/modules/edit/apps/twsms/app.stats1
-rw-r--r--sca-cpp/trunk/modules/edit/apps/twsms/htdocs/app.html33
-rw-r--r--sca-cpp/trunk/modules/edit/composites.py44
-rwxr-xr-xsca-cpp/trunk/modules/edit/config-backup22
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards.py80
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/jane@localhost/user.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/jane@sca-store.com/user.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/john@localhost/user.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/dashboards/john@sca-store.com/user.apps1
-rwxr-xr-xsca-cpp/trunk/modules/edit/data-backup22
-rw-r--r--sca-cpp/trunk/modules/edit/edit.composite275
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/account/index.html224
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/app/cache-manifest.cmf17
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/app/index.html906
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/cache-manifest.cmf18
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/clone/index.html146
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/create/index.html106
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/favicon.icobin2238 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/graph/index.html2178
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/home/home.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/home/home.pngbin9595 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/home/index.html68
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/index.html525
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/login/index.html156
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/page/index.html987
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/app.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/app.pngbin147 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/app.xcfbin1294 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/delete.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/delete.pngbin906 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/delete.xcfbin2008 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/grid72.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/grid72.pngbin138 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/iframe.html28
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/img.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/img.pngbin357 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/img.xcfbin1639 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/notauth/index.html166
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/notfound/index.html167
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/notyet/index.html167
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/oops/index.html166
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/touchicon.pngbin606 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/touchicon.xcfbin3400 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/user.b641
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/public/user.pngbin147 -> 0 bytes
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/robots.txt2
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/stats/index.html161
-rw-r--r--sca-cpp/trunk/modules/edit/htdocs/store/index.html168
-rw-r--r--sca-cpp/trunk/modules/edit/log.py24
-rwxr-xr-xsca-cpp/trunk/modules/edit/mkapplinks37
-rw-r--r--sca-cpp/trunk/modules/edit/pages.py44
-rw-r--r--sca-cpp/trunk/modules/edit/palettes.py36
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/animation/palette.composite103
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/control/palette.composite86
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/database/palette.composite72
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/http/palette.composite105
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/lists/palette.composite131
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/logic/palette.composite70
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/math/palette.composite138
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/python/palette.composite35
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/search/palette.composite100
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/social/palette.composite120
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/talk/palette.composite55
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/text/palette.composite76
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/transform/palette.composite59
-rw-r--r--sca-cpp/trunk/modules/edit/palettes/values/palette.composite79
-rwxr-xr-xsca-cpp/trunk/modules/edit/ssl-start170
-rwxr-xr-xsca-cpp/trunk/modules/edit/start121
-rwxr-xr-xsca-cpp/trunk/modules/edit/stop29
-rw-r--r--sca-cpp/trunk/modules/edit/store.py80
-rw-r--r--sca-cpp/trunk/modules/edit/store/all/store.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/store/featured/store.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/store/new/store.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/store/top/store.apps1
-rw-r--r--sca-cpp/trunk/modules/edit/user.py28
-rw-r--r--sca-cpp/trunk/modules/edit/util.py164
-rwxr-xr-xsca-cpp/trunk/modules/http/http-test2
-rw-r--r--sca-cpp/trunk/modules/http/httpd.hpp2
-rwxr-xr-xsca-cpp/trunk/modules/http/proxy-test2
-rw-r--r--sca-cpp/trunk/modules/server/Makefile.am9
-rw-r--r--sca-cpp/trunk/modules/server/client-test.cpp2
-rw-r--r--sca-cpp/trunk/modules/server/client-test.hpp2
-rw-r--r--sca-cpp/trunk/modules/server/domain-test.composite4
-rwxr-xr-xsca-cpp/trunk/modules/server/httpd-test12
-rw-r--r--sca-cpp/trunk/modules/server/mod-eval.hpp918
-rw-r--r--sca-cpp/trunk/modules/server/mod-wiring.cpp530
-rwxr-xr-xsca-cpp/trunk/modules/server/server-conf7
163 files changed, 610 insertions, 15838 deletions
diff --git a/sca-cpp/trunk/modules/Makefile.am b/sca-cpp/trunk/modules/Makefile.am
index f4195dc7e8..16fe2791f7 100644
--- a/sca-cpp/trunk/modules/Makefile.am
+++ b/sca-cpp/trunk/modules/Makefile.am
@@ -15,5 +15,5 @@
# specific language governing permissions and limitations
# under the License.
-SUBDIRS = scheme atom rss js json scdl http server python opencl java openid oauth wsgi edit
+SUBDIRS = scheme atom rss js json scdl http server python opencl java openid oauth wsgi
diff --git a/sca-cpp/trunk/modules/edit/Makefile.am b/sca-cpp/trunk/modules/edit/Makefile.am
deleted file mode 100644
index 6bf47676d1..0000000000
--- a/sca-cpp/trunk/modules/edit/Makefile.am
+++ /dev/null
@@ -1,48 +0,0 @@
-# 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.
-
-if WANT_PYTHON
-
-moddir = $(prefix)/modules/edit
-dist_mod_SCRIPTS = start stop ssl-start mkapplinks config-backup data-backup
-
-BUILT_SOURCES = htdocs/config.js htdocs/public/config.js
-htdocs/config.js:
- touch htdocs/config.js
-
-htdocs/public/config.js:
- touch htdocs/public/config.js
-
-not_minified = htdocs/public/iframe.html htdocs/create/index.html htdocs/page/index.html htdocs/login/index.html htdocs/public/notfound/index.html htdocs/public/oops/index.html htdocs/graph/index.html htdocs/public/notauth/index.html htdocs/account/index.html htdocs/home/index.html htdocs/index.html htdocs/public/notyet/index.html htdocs/clone/index.html htdocs/stats/index.html htdocs/app/index.html htdocs/store/index.html htdocs/config.js htdocs/public/config.js
-
-minified = htdocs/public/iframe-min.html htdocs/create/index-min.html htdocs/page/index-min.html htdocs/login/index-min.html htdocs/public/notfound/index-min.html htdocs/public/oops/index-min.html htdocs/graph/index-min.html htdocs/public/notauth/index-min.html htdocs/account/index-min.html htdocs/home/index-min.html htdocs/index-min.html htdocs/public/notyet/index-min.html htdocs/clone/index-min.html htdocs/stats/index-min.html htdocs/app/index-min.html htdocs/store/index-min.html htdocs/config-min.js htdocs/public/config-min.js
-
-resources = edit.composite *.py htdocs/*.cmf htdocs/*.ico htdocs/home/*.png htdocs/app/*.cmf htdocs/home/*.b64 htdocs/*.txt htdocs/public/*.png htdocs/public/*.b64 palettes/*/palette.composite accounts/*/*.account apps/*/app.composite apps/*/app.stats apps/*/htdocs/app.html dashboards/*/user.apps store/*/store.apps ${not_minified} ${minified}
-
-nobase_dist_mod_DATA = ${resources}
-EXTRA_DIST = ${resources}
-
-SUFFIXES = -min.html -min.js
-.html-min.html:
- ../http/minify-html $< $@
-
-.js-min.js:
- ../http/minify-js $< $@
-
-CLEANFILES = ${minified}
-
-endif
diff --git a/sca-cpp/trunk/modules/edit/accounts.py b/sca-cpp/trunk/modules/edit/accounts.py
deleted file mode 100644
index 4589f6c0cc..0000000000
--- a/sca-cpp/trunk/modules/edit/accounts.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# 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.
-
-# Accounts collection implementation
-from util import *
-
-# Convert a particular user id to an account id
-def accountid(user):
- return ("'" + user.id(), "'user.account")
-
-# Get the current user's account
-def get(id, user, cache):
- account = cache.get(accountid(user))
- if isNil(account) or account is None:
- return ()
- return account
-
-# Update the user's account
-def put(id, account, user, cache):
- return cache.put(accountid(user), account)
-
diff --git a/sca-cpp/trunk/modules/edit/accounts/jane@localhost/user.account b/sca-cpp/trunk/modules/edit/accounts/jane@localhost/user.account
deleted file mode 100644
index 5fca389f04..0000000000
--- a/sca-cpp/trunk/modules/edit/accounts/jane@localhost/user.account
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Jane Doe") (id "jane@localhost")))
diff --git a/sca-cpp/trunk/modules/edit/accounts/jane@sca-store.com/user.account b/sca-cpp/trunk/modules/edit/accounts/jane@sca-store.com/user.account
deleted file mode 100644
index e0d25671b6..0000000000
--- a/sca-cpp/trunk/modules/edit/accounts/jane@sca-store.com/user.account
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Jane Doe") (id "jane@sca-store.com") (content (account (description "This is Jane") (keys (key (((@name "key1") (@value "value1")) ((@name "key2") (@value "value2")) ((@name "key3") (@value "value3")) ((@name "") (@value "")) ((@name "") (@value ""))))))))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/accounts/john@localhost/user.account b/sca-cpp/trunk/modules/edit/accounts/john@localhost/user.account
deleted file mode 100644
index 35d6f30f0b..0000000000
--- a/sca-cpp/trunk/modules/edit/accounts/john@localhost/user.account
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "John Doe") (id "john@localhost")))
diff --git a/sca-cpp/trunk/modules/edit/accounts/john@sca-store.com/user.account b/sca-cpp/trunk/modules/edit/accounts/john@sca-store.com/user.account
deleted file mode 100644
index 273335e1c7..0000000000
--- a/sca-cpp/trunk/modules/edit/accounts/john@sca-store.com/user.account
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "John Doe") (id "john@sca-store.com") (content (account (description "This is John") (keys (key (((@name "key1") (@value "value1")) ((@name "key2") (@value "value2")) ((@name "key3") (@value "value3")) ((@name "key4") (@value "value4")) ((@name "key5") (@value "value5"))))))))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps.py b/sca-cpp/trunk/modules/edit/apps.py
deleted file mode 100644
index 35a4c79e33..0000000000
--- a/sca-cpp/trunk/modules/edit/apps.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# 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.
-
-# App collection implementation
-import os
-from util import *
-
-# Convert an id to an app id
-def appid(id):
- return ("'" + car(id), "'app.stats")
-
-# Link implementation resources into an app
-def mkapplink(id):
- try:
- os.symlink('../../../../../nuvem/nuvem-parallel/nuvem', 'apps/' + car(id) + '/nuvem')
- os.symlink('../../../../components', 'apps/' + car(id) + '/lib')
- os.mkdir('apps/' + car(id) + '/htdocs')
- except:
- pass
- return True
-
-# Put an app into the apps db
-def put(id, app, cache, store, composites, pages):
- eid = cadr(caddr(car(app)))
- appentry = (("'entry", cadr(car(app)), ("'id", car(id))),)
-
- # Update app in apps db
- if car(id) == eid:
- cache.put(appid(id), appentry)
- mkapplink(id)
- return True
-
- # Clone an app's composite and page
- cache.put(appid(id), appentry)
- mkapplink(id)
- composites.put(id, composites.get((eid,)))
- pages.put(id, pages.get((eid,)))
- return True
-
-# Get an app from the apps db
-def get(id, cache, store, composites, pages):
- if isNil(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 app
-
-# Delete an app from the apps db
-def delete(id, cache, store, composites, pages):
- cache.delete(appid(id))
- composites.delete(id)
- pages.delete(id)
- return True
-
diff --git a/sca-cpp/trunk/modules/edit/apps/me360/app.composite b/sca-cpp/trunk/modules/edit/apps/me360/app.composite
deleted file mode 100644
index c0fb6a425c..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/me360/app.composite
+++ /dev/null
@@ -1,93 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="start" promote="start"/>
- <component name="bzprofile" title="buzz profile" color="blue1">
- <implementation.python script="nuvem/bzprofile.py"/>
- <service name="bzprofile"/>
- <reference target="text4" name="id"/>
- <reference name="bz" visible="false">
- <binding.http uri="https://www.googleapis.com/buzz/v1/people"/>
- </reference>
- </component>
- <component x="130" y="30" name="fbprofile" title="facebook profile" color="blue1">
- <implementation.python script="nuvem/fbprofile.py"/>
- <service name="fbprofile"/>
- <reference target="text" name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component x="90" y="170" name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="fbprofile" name="value"/>
- <property>fbprofile</property>
- </component>
- <component x="90" y="190" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="twprofile" name="value"/>
- <property>twitprofile</property>
- </component>
- <component x="90" y="210" name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="bzprofile" name="value"/>
- <property>buzzprofile</property>
- </component>
- <component x="60" y="30" name="list31" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference target="item" name="first"/>
- <reference target="item2" name="second"/>
- <reference target="item3" name="third"/>
- </component>
- <component x="10" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list31" name="content"/>
- </component>
- <component x="220" y="170" name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component x="220" y="200" name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component x="220" y="230" name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="twprofile" title="twitter profile" color="blue1">
- <implementation.python script="nuvem/twprofile.py"/>
- <service name="twprofile"/>
- <reference target="text2" name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/users/show.json"/>
- </reference>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/me360/app.stats b/sca-cpp/trunk/modules/edit/apps/me360/app.stats
deleted file mode 100644
index a46c727280..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/me360/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Check my public social data") (id "me360"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/me360/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/me360/htdocs/app.html
deleted file mode 100644
index e57e246328..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/me360/htdocs/app.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Me360</H2>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 27px; width: 100%; left: 2px; ">
- <SPAN>Facebook</SPAN>
- </SPAN>
- <SPAN id="fbprofile" class="table" style="position: absolute; top: 63px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%;">
- <TBODY>
- <TR>
- <TD>=fbprofile</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 288px; width: 100%; left: 2px; ">
- <SPAN>Twitter</SPAN>
- </SPAN>
- <SPAN id="twitprofile" class="table" style="position: absolute; top: 324px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%;">
- <TBODY>
- <TR>
- <TD>=twitprofile</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 1368px; width: 100%; left: 2px; ">
- <SPAN>Buzz</SPAN>
- </SPAN>
- <SPAN id="buzzprofile" class="table" style="position: absolute; top: 1404px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=buzzprofile</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme/app.composite b/sca-cpp/trunk/modules/edit/apps/nearme/app.composite
deleted file mode 100644
index 51fc2791fb..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme/app.composite
+++ /dev/null
@@ -1,444 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="getlocs" promote="getlocs"/>
- <service name="location" promote="location"/>
- <service name="map" promote="map"/>
- <service name="nearme" promote="nearme"/>
- <service name="start2" promote="start2"/>
- <service name="timer" promote="timer"/>
- <component name="append" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference target="params" name="first"/>
- <reference target="call2" name="second"/>
- </component>
- <component x="130" y="530" name="call" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call2" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name2" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call3" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name4" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call4" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name3" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="filedb" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="210" y="120" name="filedb1" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb10" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb11" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component xmlns="" name="filedb4" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component xmlns="" name="filedb5" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component xmlns="" name="filedb6" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component xmlns="" name="filedb8" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component xmlns="" name="filedb9" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="190" y="120" name="get1" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb1" name="collection"/>
- <reference target="user4" name="id"/>
- </component>
- <component name="get10" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb11" name="collection"/>
- <reference target="param5" name="id"/>
- </component>
- <component xmlns="" name="get3" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb4" name="collection"/>
- <reference target="param3" name="id"/>
- </component>
- <component xmlns="" name="get4" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb5" name="collection"/>
- <reference target="param4" name="id"/>
- </component>
- <component xmlns="" name="get5" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb6" name="collection"/>
- <reference target="param2" name="id"/>
- </component>
- <component xmlns="" name="get7" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb8" name="collection"/>
- <reference target="param7" name="id"/>
- </component>
- <component xmlns="" name="get8" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb9" name="collection"/>
- <reference target="param6" name="id"/>
- </component>
- <component name="get9" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb10" name="collection"/>
- <reference target="user5" name="id"/>
- </component>
- <component x="310" y="270" name="getlocs" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list4" name="content"/>
- </component>
- <component x="80" y="610" name="gmap1" title="map" color="blue1">
- <implementation.python script="nuvem/gmap.py"/>
- <service name="gmap"/>
- <reference target="call" name="locations"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.google.com/maps/api/staticmap"/>
- </reference>
- </component>
- <component x="110" y="90" name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user3" name="value"/>
- <property>me</property>
- </component>
- <component x="110" y="390" name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="url" name="value"/>
- <property>mapimg</property>
- </component>
- <component x="660" y="350" name="item11" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="get9" name="value"/>
- <property>x</property>
- </component>
- <component x="660" y="400" name="item12" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="get10" name="value"/>
- <property>1</property>
- </component>
- <component x="660" y="460" name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="get3" name="value"/>
- <property>2</property>
- </component>
- <component x="660" y="530" name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="get4" name="value"/>
- <property>3</property>
- </component>
- <component x="110" y="330" name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="last4" name="value"/>
- <property>time3</property>
- </component>
- <component x="110" y="260" name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="last3" name="value"/>
- <property>time2</property>
- </component>
- <component x="100" y="200" name="item8" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="last2" name="value"/>
- <property>time1</property>
- </component>
- <component x="100" y="120" name="item9" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="last" name="value"/>
- <property>mytime</property>
- </component>
- <component name="last" title="last" color="yellow1">
- <implementation.python script="nuvem/last.py"/>
- <service name="last"/>
- <reference target="get1" name="list"/>
- </component>
- <component name="last2" title="last" color="yellow1">
- <implementation.python script="nuvem/last.py"/>
- <service name="last"/>
- <reference target="get5" name="list"/>
- </component>
- <component x="160" y="220" name="last3" title="last" color="yellow1">
- <implementation.python script="nuvem/last.py"/>
- <service name="last"/>
- <reference target="get8" name="list"/>
- </component>
- <component name="last4" title="last" color="yellow1">
- <implementation.python script="nuvem/last.py"/>
- <service name="last"/>
- <reference target="get7" name="list"/>
- </component>
- <component name="list1" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item" name="item" clonable="true"/>
- <reference target="item9" name="item" clonable="true"/>
- <reference target="item8" name="item" clonable="true"/>
- <reference target="item7" name="item" clonable="true"/>
- <reference target="item6" name="item" clonable="true"/>
- <reference target="item10" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text7" name="item" clonable="true"/>
- <reference target="param10" name="item" clonable="true"/>
- <reference target="param" name="item" clonable="true"/>
- <reference target="now" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list4" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item11" name="item" clonable="true"/>
- <reference target="item12" name="item" clonable="true"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="310" y="80" name="location" title="location" color="green1">
- <implementation.python script="nuvem/location.py"/>
- <service name="location" visible="false">
- <binding.http uri="location"/>
- </service>
- <reference target="put" name="content"/>
- </component>
- <component x="10" y="460" name="map" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="gmap1" name="content"/>
- </component>
- <component name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>getlocs</property>
- </component>
- <component name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>getlocs</property>
- </component>
- <component name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>nearme</property>
- </component>
- <component name="name4" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>nearme</property>
- </component>
- <component x="10" y="60" name="nearme" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list1" name="content"/>
- </component>
- <component x="500" y="250" name="now" title="now" color="orange1">
- <implementation.python script="nuvem/now.py"/>
- <service name="now"/>
- <reference target="text" name="format"/>
- </component>
- <component xmlns="" name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5000</property>
- </component>
- <component x="500" y="220" name="param" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>longitude</property>
- <property name="query" visible="false"/>
- </component>
- <component x="500" y="200" name="param10" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>latitude</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param2" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend1</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param3" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend2</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param4" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend3</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param5" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend1</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param6" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend2</property>
- <property name="query" visible="false"/>
- </component>
- <component name="param7" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>friend3</property>
- <property name="query" visible="false"/>
- </component>
- <component xmlns="" name="params" title="?params" color="green1">
- <implementation.python script="nuvem/params.py"/>
- <service name="params"/>
- <property name="query" visible="false"/>
- </component>
- <component xmlns="" name="put" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb" name="collection"/>
- <reference target="user" name="id"/>
- <reference target="list2" name="value"/>
- </component>
- <component x="10" y="10" name="start2" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="call4" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>%a %b %d, %I:%M %p</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>/components/map</property>
- </component>
- <component xmlns="" x="500" y="170" name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>green</property>
- </component>
- <component x="310" y="10" name="timer" title="timer" color="green1">
- <implementation.python script="nuvem/timer.py"/>
- <service name="timer" visible="false">
- <binding.http uri="timer"/>
- </service>
- <reference target="number" name="n"/>
- <reference target="call3" name="content"/>
- </component>
- <component name="url" title="url" color="green1">
- <implementation.python script="nuvem/url.py"/>
- <service name="url"/>
- <reference target="text2" name="address"/>
- <reference target="append" name="args"/>
- </component>
- <component xmlns="" name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component xmlns="" name="user3" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component xmlns="" x="210" y="150" name="user4" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component name="user5" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme/app.stats b/sca-cpp/trunk/modules/edit/apps/nearme/app.stats
deleted file mode 100644
index a072636788..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "nearme") (id "nearme"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/nearme/htdocs/app.html
deleted file mode 100644
index fba4b0464c..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme/htdocs/app.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Nearme</H2>
- </SPAN>
- <SPAN id="me" class="h2" style="position: absolute; top: 0px; left: 101px; ">
- <H2>=me</H2>
- </SPAN>
- <SPAN style="position: absolute; top: 0px; left: 182px; " class="text" id="mytime">
- <SPAN>=mytime</SPAN>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 27px; width: 100%; left: 2px; ">
- <SPAN>My friends</SPAN>
- </SPAN>
- <SPAN style="position: absolute; top: 54px; left: 2px; " class="entry" id="friend1">
- <INPUT type="text" size="20" value="=friend1" autocapitalize="off"/>
- </SPAN>
- <SPAN style="position: absolute; top: 54px; left: 182px; " class="text" id="time1">
- <SPAN>=time1</SPAN>
- </SPAN>
- <SPAN style="position: absolute; top: 81px; left: 2px; " class="entry" id="friend2">
- <INPUT type="text" size="20" value="=friend2" autocapitalize="off"/>
- </SPAN>
- <SPAN style="position: absolute; top: 81px; left: 182px; " class="text" id="time2">
- <SPAN>=time2</SPAN>
- </SPAN>
- <SPAN style="position: absolute; top: 108px; left: 2px; " class="entry" id="friend3">
- <INPUT type="text" size="20" value="=friend3" autocapitalize="off"/>
- </SPAN>
- <SPAN style="position: absolute; top: 108px; left: 182px; " class="text" id="time3">
- <SPAN>=time3</SPAN>
- </SPAN>
- <SPAN style="position: absolute; top: 135px; left: 2px; " class="img" id="mapimg">
- <IMG src="/public/img.png"/>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme2/app.composite b/sca-cpp/trunk/modules/edit/apps/nearme2/app.composite
deleted file mode 100644
index d75af57321..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme2/app.composite
+++ /dev/null
@@ -1,191 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="location" promote="location"/>
- <service name="start1" promote="start1"/>
- <service name="timer" promote="timer"/>
- <component x="250" y="230" name="append1" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference target="text5" name="first"/>
- <reference target="get3" name="second"/>
- </component>
- <component x="250" y="330" name="append2" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference target="text6" name="first"/>
- <reference target="get4" name="second"/>
- </component>
- <component x="120" y="10" name="filedb2" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="410" y="260" name="filedb4" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="400" y="370" name="filedb5" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="270" y="260" name="get3" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb4" name="collection"/>
- <reference target="text2" name="id"/>
- </component>
- <component x="270" y="350" name="get4" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb5" name="collection"/>
- <reference target="text8" name="id"/>
- </component>
- <component x="200" y="230" name="gmap1" title="map" color="blue1">
- <implementation.python script="nuvem/gmap.py"/>
- <service name="gmap"/>
- <reference target="list21" name="locations"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.google.com/maps/api/staticmap"/>
- </reference>
- </component>
- <component x="150" y="230" name="htinline2" title="inline" color="white1">
- <implementation.python script="nuvem/htinline.py"/>
- <service name="htinline"/>
- <reference target="gmap1" name="value"/>
- </component>
- <component x="40" y="150" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user1" name="value"/>
- <property>me</property>
- </component>
- <component x="50" y="210" name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htinline2" name="value"/>
- <property>img</property>
- </component>
- <component x="290" y="90" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="append1" name="value"/>
- <property>S</property>
- </component>
- <component x="290" y="190" name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="append2" name="value"/>
- <property>C</property>
- </component>
- <component x="190" y="240" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item2" name="first"/>
- <reference target="item3" name="second"/>
- </component>
- <component x="100" y="110" name="list24" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="param10" name="first"/>
- <reference target="param" name="second"/>
- </component>
- <component x="10" y="50" name="location" title="location" color="green1">
- <implementation.python script="nuvem/location.py"/>
- <service name="location" visible="false">
- <binding.http uri="location"/>
- </service>
- <reference target="put1" name="content"/>
- </component>
- <component xmlns="" name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>10000</property>
- </component>
- <component x="280" y="90" name="param" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>longitude</property>
- <property name="query" visible="false"/>
- </component>
- <component x="280" y="70" name="param10" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>latitude</property>
- <property name="query" visible="false"/>
- </component>
- <component x="70" y="60" name="put1" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb2" name="collection"/>
- <reference target="user" name="id"/>
- <reference target="list24" name="value"/>
- </component>
- <component x="10" y="10" name="start1" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="item1" name="content"/>
- </component>
- <component x="410" y="290" name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>john</property>
- </component>
- <component x="270" y="230" name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>blue</property>
- </component>
- <component x="270" y="320" name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>pink</property>
- </component>
- <component x="410" y="400" name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jane</property>
- </component>
- <component x="10" y="170" name="timer" title="timer" color="green1">
- <implementation.python script="nuvem/timer.py"/>
- <service name="timer" visible="false">
- <binding.http uri="timer"/>
- </service>
- <reference target="number" name="n"/>
- <reference target="item10" name="content"/>
- </component>
- <component xmlns="" x="120" y="30" name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="80" y="20" name="user1" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme2/app.stats b/sca-cpp/trunk/modules/edit/apps/nearme2/app.stats
deleted file mode 100644
index 9eb239d22c..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme2/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "nearme2") (id "nearme2")))
diff --git a/sca-cpp/trunk/modules/edit/apps/nearme2/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/nearme2/htdocs/app.html
deleted file mode 100644
index a4c407a7a4..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/nearme2/htdocs/app.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Hello</H1>
- </SPAN>
- <SPAN id="me" class="h1" style="position: absolute; top: 0px; left: 56px; ">
- <H1>=me</H1>
- </SPAN>
- <SPAN id="img" class="img" style="position: absolute; top: 36px; left: 2px; ">
- <IMG src="/public/img.png"/>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/new/app.composite b/sca-cpp/trunk/modules/edit/apps/new/app.composite
deleted file mode 100644
index 4beacfdf77..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/new/app.composite
+++ /dev/null
@@ -1,52 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="comment1" promote="comment1"/>
- <service name="start1" promote="start1"/>
- <component x="10" y="0" name="comment1" title="{propval}" color="white">
- <implementation.python script="nuvem/comment.py"/>
- <service name="comment" visible="false"/>
- <property>Change this example to do what you want</property>
- </component>
- <component x="80" y="40" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user1" name="value"/>
- <property>me</property>
- </component>
- <component name="list1" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item1" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="10" y="40" name="start1" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list1" name="content"/>
- </component>
- <component name="user1" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/new/app.stats b/sca-cpp/trunk/modules/edit/apps/new/app.stats
deleted file mode 100644
index 513c902468..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/new/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty app template") (id "new")))
diff --git a/sca-cpp/trunk/modules/edit/apps/new/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/new/htdocs/app.html
deleted file mode 100644
index eeb7becae5..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/new/htdocs/app.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 0px; ">
- <H1>Hello</H1>
- </SPAN>
- <SPAN id="me" class="h1" style="position: absolute; top: 0px; left: 56px; ">
- <H1>=me</H1>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/ourphotos/app.composite b/sca-cpp/trunk/modules/edit/apps/ourphotos/app.composite
deleted file mode 100644
index 2a7ce11f1f..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/ourphotos/app.composite
+++ /dev/null
@@ -1,163 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="start" promote="start"/>
- <component name="append" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference target="values" name="first"/>
- <reference target="values2" name="second"/>
- </component>
- <component name="flkalbum" title="flicker album" color="blue1">
- <implementation.python script="nuvem/flkalbum.py"/>
- <service name="flkalbum"/>
- <reference target="text7" name="id"/>
- <reference name="flk" visible="false">
- <binding.http uri="http://api.flickr.com/services/feeds/photos_public.gne"/>
- </reference>
- </component>
- <component x="200" y="70" name="htattrs1" title="attrs:" color="white1">
- <implementation.python script="nuvem/htattrs.py"/>
- <service name="htattrs"/>
- <reference target="list12" name="value"/>
- </component>
- <component x="140" y="40" name="htimg2" title="img" color="white1">
- <implementation.python script="nuvem/htimg.py"/>
- <service name="htimg"/>
- <reference target="list21" name="value"/>
- </component>
- <component x="260" y="70" name="htstyle2" title="style" color="white1">
- <implementation.python script="nuvem/htstyle.py"/>
- <service name="htstyle"/>
- <reference target="item1" name="value"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="map2" name="value"/>
- <property>images</property>
- </component>
- <component x="310" y="70" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="pixels1" name="value"/>
- <property>width</property>
- </component>
- <component x="240" y="70" name="list12" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference target="htstyle2" name="value"/>
- </component>
- <component x="170" y="40" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="valueof2" name="first"/>
- <reference target="htattrs1" name="second"/>
- </component>
- <component name="map2" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name5" name="item"/>
- <reference target="htimg2" name="transform"/>
- <reference target="shuffle" name="list"/>
- </component>
- <component name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>src</property>
- </component>
- <component name="name4" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>m</property>
- </component>
- <component name="name5" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>image</property>
- </component>
- <component x="420" y="70" name="number1" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>320</property>
- </component>
- <component name="picalbum" title="picasa album" color="blue1">
- <implementation.python script="nuvem/picalbum.py"/>
- <service name="picalbum"/>
- <reference target="text5" name="id"/>
- <reference name="pic" visible="false">
- <binding.http uri="https://picasaweb.google.com/data/feed/api/user"/>
- </reference>
- </component>
- <component x="280" y="70" name="pixels1" title="pixels" color="white1">
- <implementation.python script="nuvem/pixels.py"/>
- <service name="pixels"/>
- <reference target="number1" name="value"/>
- </component>
- <component name="select" title="select" color="yellow1">
- <implementation.python script="nuvem/select.py"/>
- <service name="select"/>
- <reference target="name3" name="path"/>
- <reference target="picalbum" name="list"/>
- </component>
- <component name="select2" title="select" color="yellow1">
- <implementation.python script="nuvem/select.py"/>
- <service name="select"/>
- <reference target="name4" name="path"/>
- <reference target="flkalbum" name="list"/>
- </component>
- <component x="180" y="180" name="shuffle" title="shuffle" color="yellow1">
- <implementation.python script="nuvem/shuffle_.py"/>
- <service name="shuffle"/>
- <reference target="append" name="list"/>
- </component>
- <component x="10" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="item" name="content"/>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>61049883@N06</property>
- </component>
- <component x="470" y="30" name="valueof2" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>image</property>
- </component>
- <component name="values" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference target="select" name="list"/>
- </component>
- <component name="values2" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference target="select2" name="list"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/ourphotos/app.stats b/sca-cpp/trunk/modules/edit/apps/ourphotos/app.stats
deleted file mode 100644
index e685d930dd..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/ourphotos/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Our photos of an event") (id "ourphotos"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/ourphotos/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/ourphotos/htdocs/app.html
deleted file mode 100644
index 1ddb89fa30..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/ourphotos/htdocs/app.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Our Photos</H2>
- </SPAN>
- <SPAN id="images" class="list" style="position: absolute; top: 27px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=images</TD>
- </TR>
- <TR>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.composite b/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.composite
deleted file mode 100644
index 15da95cdcc..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.composite
+++ /dev/null
@@ -1,596 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="Add to cart" promote="Add to cart"/>
- <service name="Check out" promote="Check out"/>
- <service name="Empty" promote="Empty"/>
- <service name="carthtml" promote="carthtml"/>
- <service name="catalog" promote="catalog"/>
- <service name="cataloghtml" promote="cataloghtml"/>
- <service name="getcart" promote="getcart"/>
- <service name="order" promote="order"/>
- <service name="start" promote="start"/>
- <service name="total" promote="total"/>
- <component x="290" y="290" name="Add to cart" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list33" name="content"/>
- </component>
- <component x="10" y="590" name="Check out" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list3" name="content"/>
- </component>
- <component x="10" y="450" name="Empty" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list32" name="content"/>
- </component>
- <component name="append" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference target="call2" name="first"/>
- <reference target="lookup" name="second"/>
- </component>
- <component name="call10" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name12" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call11" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name16" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call12" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name13" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call13" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name17" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call14" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name19" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call15" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name20" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="250" y="630" name="call16" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name21" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call17" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name4" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call2" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name5" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call3" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name6" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="370" y="590" name="call4" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name15" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="call5" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name8" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="370" y="620" name="call6" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name10" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="250" y="590" name="call7" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name9" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="500" y="690" name="call8" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name11" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="210" y="280" name="call9" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name2" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="10" y="320" name="carthtml" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="item6" name="content"/>
- </component>
- <component x="290" y="10" name="catalog" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list31" name="content"/>
- </component>
- <component x="10" y="160" name="cataloghtml" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="item" name="content"/>
- </component>
- <component name="delete2" title="delete" color="pink1">
- <implementation.python script="nuvem/delete.py"/>
- <service name="delete"/>
- <reference target="filedb2" name="collection"/>
- <reference target="user2" name="id"/>
- </component>
- <component name="filedb" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb2" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb3" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="130" y="420" name="format1" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text6" name="pattern"/>
- <reference target="valueof2" name="values"/>
- </component>
- <component x="280" y="350" name="format2" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text5" name="pattern"/>
- <reference target="valueof" name="values"/>
- </component>
- <component x="300" y="610" name="format3" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text4" name="pattern"/>
- <reference target="call8" name="values"/>
- </component>
- <component name="get" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb" name="collection"/>
- <reference target="user" name="id"/>
- </component>
- <component x="470" y="10" name="getcart" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="get" name="content"/>
- </component>
- <component x="160" y="250" name="htcheck2" title="checkbox" color="white1">
- <implementation.python script="nuvem/htcheck.py"/>
- <service name="htcheck"/>
- <reference target="list22" name="value"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="map" name="value"/>
- <property>catalog</property>
- </component>
- <component x="410" y="170" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference name="value" target="total1"/>
- <property>total</property>
- </component>
- <component x="530" y="80" name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number4" name="value"/>
- <property>Kiwi</property>
- </component>
- <component x="250" y="530" name="item11" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="delete2" name="value"/>
- <property>delresult</property>
- </component>
- <component name="item12" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="sendgtalk" name="value"/>
- <property>sendresult</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="call11" name="value"/>
- <property>message</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>message</property>
- </component>
- <component name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="map2" name="value"/>
- <property>cart</property>
- </component>
- <component x="380" y="390" name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="put" name="value"/>
- <property>putresult</property>
- </component>
- <component x="530" y="20" name="item8" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number" name="value"/>
- <property>Mango</property>
- </component>
- <component x="540" y="50" name="item9" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number2" name="value"/>
- <property>Passion</property>
- </component>
- <component x="220" y="250" name="list22" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="text8" name="first"/>
- <reference target="format2" name="second"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item12" name="item" clonable="true"/>
- <reference target="call3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="360" y="20" name="list31" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference target="item8" name="first"/>
- <reference target="item9" name="second"/>
- <reference target="item10" name="third"/>
- </component>
- <component x="50" y="540" name="list32" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference target="item11" name="first"/>
- <reference target="call7" name="second"/>
- <reference target="call16" name="third"/>
- </component>
- <component x="350" y="390" name="list33" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference target="item7" name="first"/>
- <reference target="call4" name="second"/>
- <reference target="call6" name="third"/>
- </component>
- <component name="list4" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference target="call5" name="item" clonable="true"/>
- <reference target="call13" name="item" clonable="true"/>
- <reference target="call14" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="lookup" title="lookup" color="yellow1">
- <implementation.python script="nuvem/lookup.py"/>
- <service name="lookup"/>
- <reference target="second1" name="name"/>
- <reference target="call15" name="list"/>
- </component>
- <component name="map" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name" name="item"/>
- <reference target="htcheck2" name="transform"/>
- <reference target="call9" name="list"/>
- </component>
- <component name="map2" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name3" name="item"/>
- <reference target="format1" name="transform"/>
- <reference target="call10" name="list"/>
- </component>
- <component name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>fruit</property>
- </component>
- <component name="name10" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>total</property>
- </component>
- <component name="name11" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>total</property>
- </component>
- <component name="name12" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>getcart</property>
- </component>
- <component name="name13" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>order</property>
- </component>
- <component name="name15" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>carthtml</property>
- </component>
- <component name="name16" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>order</property>
- </component>
- <component name="name17" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>carthtml</property>
- </component>
- <component name="name19" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>total</property>
- </component>
- <component name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>catalog</property>
- </component>
- <component name="name20" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>catalog</property>
- </component>
- <component name="name21" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>total</property>
- </component>
- <component name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>fruit</property>
- </component>
- <component name="name4" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>getcart</property>
- </component>
- <component name="name5" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>getcart</property>
- </component>
- <component name="name6" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>emptyCart</property>
- </component>
- <component name="name8" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>cataloghtml</property>
- </component>
- <component name="name9" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>carthtml</property>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>2.99</property>
- </component>
- <component name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3.55</property>
- </component>
- <component x="650" y="340" name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>2</property>
- </component>
- <component name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>1.55</property>
- </component>
- <component x="300" y="550" name="order" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="format3" name="content"/>
- </component>
- <component x="580" y="370" name="param" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>fruit</property>
- <property name="query" visible="false"/>
- </component>
- <component name="put" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb3" name="collection"/>
- <reference target="user3" name="id"/>
- <reference target="append" name="value"/>
- </component>
- <component x="650" y="450" name="second1" title="second" color="yellow1">
- <implementation.python script="nuvem/second.py"/>
- <service name="second"/>
- <reference target="split2" name="list"/>
- </component>
- <component name="sendgtalk" title="gtalk" color="blue1">
- <implementation.cpp path="lib/chat" library="libchat-sender2"/>
- <service name="sendgtalk"/>
- <reference target="text" name="jid"/>
- <reference target="text7" name="pass"/>
- <reference target="text3" name="to"/>
- <reference target="call12" name="msg"/>
- </component>
- <component x="580" y="480" name="split2" title="split" color="cyan1">
- <implementation.python script="nuvem/split.py"/>
- <service name="split"/>
- <reference target="text1" name="separator"/>
- <reference target="param" name="string"/>
- </component>
- <component x="10" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list4" name="content"/>
- </component>
- <component x="650" y="360" name="sum1" title="sum" color="cyan1">
- <implementation.python script="nuvem/sum_.py"/>
- <service name="sum"/>
- <reference target="values" name="l"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xmppsca.1@gmail.com</property>
- </component>
- <component x="580" y="330" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property> - </property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Welcome to my online store</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino@gmail.com</property>
- </component>
- <component x="500" y="660" name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Your order has been processed. Your total: ${1}</property>
- </component>
- <component x="450" y="280" name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>${1} - {0}</property>
- </component>
- <component x="220" y="550" name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>${1} - {0}</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xmpp4sca</property>
- </component>
- <component x="280" y="320" name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>fruit</property>
- </component>
- <component x="330" y="120" name="total" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="item1" name="content"/>
- </component>
- <component name="total1" x="600" y="130" title="round" color="cyan1">
- <implementation.python script="nuvem/round_.py"/>
- <service name="round"/>
- <reference target="number3" name="n"/>
- <reference target="sum1" name="x"/>
- </component>
- <component name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component name="user2" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component name="user3" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="440" y="310" name="valueof" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>fruit</property>
- </component>
- <component x="210" y="580" name="valueof2" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>fruit</property>
- </component>
- <component x="790" y="320" name="values" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference target="call17" name="list"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.stats b/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.stats
deleted file mode 100644
index 4529005b54..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/shoppingcart/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "My online store") (id "shoppingcart"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/shoppingcart/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/shoppingcart/htdocs/app.html
deleted file mode 100644
index 0464f3e4c4..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/shoppingcart/htdocs/app.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Shopping Cart</H2>
- </SPAN>
- <SPAN id="message" class="text" style="position: absolute; top: 36px; left: 2px; ">
- <SPAN>Welcome</SPAN>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 63px; width: 100%; left: 2px; ">
- <SPAN>Catalog</SPAN>
- </SPAN>
- <SPAN id="page:button" class="button" style="position: absolute; top: 63px; left: 146px; ">
- <INPUT type="button" value="Add to cart" class="graybutton"/>
- </SPAN>
- <SPAN id="catalog" class="list" style="position: absolute; top: 99px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=catalog</TD>
- </TR>
- <TR>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="page:section" class="section" style="position: absolute; top: 180px; width: 100%; left: 2px; ">
- <SPAN>Your cart:</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 180px; left: 83px; ">
- <SPAN>$</SPAN>
- </SPAN>
- <SPAN id="total" class="text" style="position: absolute; top: 180px; left: 92px; ">
- <SPAN>=total</SPAN>
- </SPAN>
- <SPAN id="page:button" class="button" style="position: absolute; top: 180px; left: 146px; ">
- <INPUT type="button" value="Check out" class="graybutton"/>
- </SPAN>
- <SPAN id="page:button" class="button" style="position: absolute; top: 180px; left: 245px; ">
- <INPUT type="button" value="Empty" class="graybutton"/>
- </SPAN>
- <SPAN id="cart" class="list" style="position: absolute; top: 216px; width: 100%; left: 2px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=cart</TD>
- </TR>
- <TR>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/slice/app.composite b/sca-cpp/trunk/modules/edit/apps/slice/app.composite
deleted file mode 100644
index 9680b52008..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/slice/app.composite
+++ /dev/null
@@ -1,504 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="animation1" promote="animation1"/>
- <service name="bounce" promote="bounce"/>
- <service name="feather" promote="feather"/>
- <service name="gnu" promote="gnu"/>
- <service name="score" promote="score"/>
- <service name="sprite" promote="sprite"/>
- <service name="start" promote="start"/>
- <component x="350" y="120" name="add1" title="+" color="cyan1">
- <implementation.python script="nuvem/add.py"/>
- <service name="add">
- <documentation>+</documentation>
- </service>
- <reference target="number10" name="value1"/>
- <reference target="get1" name="value2"/>
- </component>
- <component x="10" y="90" name="animation1" title="animation" color="green1">
- <implementation.python script="nuvem/animation.py"/>
- <service name="animation" visible="false">
- <binding.http uri="animation"/>
- </service>
- <reference target="number6" name="n"/>
- <reference target="true2" name="loop"/>
- <reference target="map1" name="content"/>
- </component>
- <component x="360" y="10" name="bounce" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list1" name="content"/>
- </component>
- <component x="170" y="150" name="call1" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name5" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="820" y="360" name="call2" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name9" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="750" y="210" name="call3" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name4" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="750" y="330" name="call4" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name10" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="200" y="80" name="call5" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name11" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="10" y="360" name="feather" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list22" name="content"/>
- </component>
- <component x="240" y="100" name="filedb1" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="270" y="150" name="filedb2" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="890" y="350" name="filedb3" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="1100" y="190" name="filedb4" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="710" y="160" name="frames1" title="frames" color="white1">
- <implementation.python script="nuvem/frames.py"/>
- <service name="frames"/>
- <reference target="number1" name="msec"/>
- <reference target="number12" name="loop"/>
- <reference target="call3" name="content"/>
- </component>
- <component x="380" y="140" name="get1" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb2" name="collection"/>
- <reference target="user2" name="id"/>
- </component>
- <component x="860" y="360" name="get2" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb3" name="collection"/>
- <reference target="user4" name="id"/>
- </component>
- <component x="10" y="550" name="gnu" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list23" name="content"/>
- </component>
- <component x="360" y="160" name="htstyle2" title="style" color="white1">
- <implementation.python script="nuvem/htstyle.py"/>
- <service name="htstyle"/>
- <reference target="frames1" name="value"/>
- </component>
- <component x="950" y="180" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="put1" name="value"/>
- <property>r</property>
- </component>
- <component x="210" y="40" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user3" name="value"/>
- <property>me</property>
- </component>
- <component x="930" y="400" name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="get2" name="value"/>
- <property>score</property>
- </component>
- <component x="1050" y="210" name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="put2" name="value"/>
- <property>r</property>
- </component>
- <component name="list1" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="list28" name="item" clonable="true"/>
- <reference target="list21" name="item" clonable="true"/>
- <reference target="list29" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="120" y="160" name="list11" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference target="list27" name="value"/>
- </component>
- <component x="620" y="110" name="list14" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference target="htstyle2" name="value"/>
- </component>
- <component name="list2" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="name6" name="item" clonable="true"/>
- <reference target="name7" name="item" clonable="true"/>
- <reference target="name2" name="item" clonable="true"/>
- <reference target="name8" name="item" clonable="true"/>
- <reference target="name3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="670" y="130" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="number5" name="first"/>
- <reference target="transform1" name="second"/>
- </component>
- <component x="780" y="200" name="list22" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item1" name="first"/>
- <reference target="call2" name="second"/>
- </component>
- <component x="1030" y="210" name="list23" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item4" name="first"/>
- <reference target="call4" name="second"/>
- </component>
- <component x="60" y="10" name="list24" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item2" name="first"/>
- <reference target="call5" name="second"/>
- </component>
- <component x="140" y="210" name="list27" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="call1" name="first"/>
- <reference target="list14" name="second"/>
- </component>
- <component x="110" y="270" name="list28" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="number20" name="first"/>
- <reference target="transform2" name="second"/>
- </component>
- <component x="670" y="250" name="list29" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="number24" name="first"/>
- <reference target="transform3" name="second"/>
- </component>
- <component x="80" y="140" name="map1" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name1" name="item"/>
- <reference target="list11" name="transform"/>
- <reference target="range1" name="list"/>
- </component>
- <component x="110" y="140" name="name1" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>i</property>
- </component>
- <component x="780" y="330" name="name10" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>score</property>
- </component>
- <component x="230" y="80" name="name11" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>score</property>
- </component>
- <component x="840" y="70" name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>feather2</property>
- </component>
- <component x="850" y="120" name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>feather3</property>
- </component>
- <component x="780" y="220" name="name4" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>bounce</property>
- </component>
- <component x="200" y="160" name="name5" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>sprite</property>
- </component>
- <component x="400" y="90" name="name6" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>feather1</property>
- </component>
- <component x="390" y="180" name="name7" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>gnu1</property>
- </component>
- <component x="840" y="90" name="name8" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>gnu2</property>
- </component>
- <component x="840" y="360" name="name9" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>score</property>
- </component>
- <component x="770" y="170" name="number1" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3000</property>
- </component>
- <component x="380" y="110" name="number10" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>1</property>
- </component>
- <component x="710" y="240" name="number11" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>200</property>
- </component>
- <component x="280" y="230" name="number12" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>10</property>
- </component>
- <component x="1120" y="250" name="number13" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="930" y="170" name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>100</property>
- </component>
- <component x="820" y="230" name="number20" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="940" y="80" name="number22" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="950" y="110" name="number23" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="890" y="220" name="number24" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>100</property>
- </component>
- <component x="940" y="250" name="number25" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>240</property>
- </component>
- <component x="940" y="280" name="number26" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="940" y="310" name="number27" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>720</property>
- </component>
- <component x="670" y="210" name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>-400</property>
- </component>
- <component x="920" y="230" name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>360</property>
- </component>
- <component x="700" y="130" name="number5" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>50</property>
- </component>
- <component x="80" y="150" name="number6" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>4000</property>
- </component>
- <component x="150" y="300" name="number7" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="150" y="330" name="number8" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>20</property>
- </component>
- <component x="580" y="40" name="number9" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>-200</property>
- </component>
- <component x="880" y="260" name="put1" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb1" name="collection"/>
- <reference target="user1" name="id"/>
- <reference target="add1" name="value"/>
- </component>
- <component x="1080" y="210" name="put2" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb4" name="collection"/>
- <reference target="user5" name="id"/>
- <reference target="number13" name="value"/>
- </component>
- <component x="720" y="60" name="random1" title="rand" color="cyan1">
- <implementation.python script="nuvem/random_.py"/>
- <service name="random"/>
- <reference target="list2" name="range"/>
- </component>
- <component x="540" y="40" name="random2" title="rand" color="cyan1">
- <implementation.python script="nuvem/random_.py"/>
- <service name="random"/>
- <reference target="number9" name="range"/>
- </component>
- <component x="670" y="240" name="random3" title="rand" color="cyan1">
- <implementation.python script="nuvem/random_.py"/>
- <service name="random"/>
- <reference target="number11" name="range"/>
- </component>
- <component x="120" y="300" name="range1" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number7" name="first"/>
- <reference target="number8" name="last"/>
- </component>
- <component x="180" y="10" name="score" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="item3" name="content"/>
- </component>
- <component x="360" y="400" name="sprite" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="random1" name="content"/>
- </component>
- <component x="10" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list24" name="content"/>
- </component>
- <component x="550" y="190" name="subtract1" title="-" color="cyan1">
- <implementation.python script="nuvem/subtract.py"/>
- <service name="subtract">
- <documentation>-</documentation>
- </service>
- <reference target="number3" name="value1"/>
- <reference target="random3" name="value2"/>
- </component>
- <component x="700" y="160" name="transform1" title="transform" color="white1">
- <implementation.python script="nuvem/transform.py"/>
- <service name="transform"/>
- <reference target="number2" name="x"/>
- <reference target="subtract1" name="y"/>
- <reference target="number4" name="d"/>
- </component>
- <component x="820" y="250" name="transform2" title="transform" color="white1">
- <implementation.python script="nuvem/transform.py"/>
- <service name="transform"/>
- <reference target="random2" name="x"/>
- <reference target="number22" name="y"/>
- <reference target="number23" name="d"/>
- </component>
- <component x="890" y="250" name="transform3" title="transform" color="white1">
- <implementation.python script="nuvem/transform.py"/>
- <service name="transform"/>
- <reference target="number25" name="x"/>
- <reference target="number26" name="y"/>
- <reference target="number27" name="d"/>
- </component>
- <component x="80" y="110" name="true2" title="true" color="orange1">
- <implementation.python script="nuvem/true_.py"/>
- <service name="true"/>
- </component>
- <component x="240" y="130" name="user1" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="390" y="140" name="user2" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="110" y="40" name="user3" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="890" y="390" name="user4" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
- <component x="1110" y="210" name="user5" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/slice/app.stats b/sca-cpp/trunk/modules/edit/apps/slice/app.stats
deleted file mode 100644
index c7d1996716..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/slice/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Slice") (id "slice")))
diff --git a/sca-cpp/trunk/modules/edit/apps/slice/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/slice/htdocs/app.html
deleted file mode 100644
index b4bc5908f6..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/slice/htdocs/app.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Hello</H2>
- </SPAN>
- <SPAN id="me" class="h2" style="position: absolute; top: 0px; left: 47px; ">
- <H2>=me</H2>
- </SPAN>
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 227px; ">
- <H2>Score:</H2>
- </SPAN>
- <SPAN id="score" class="h2" style="position: absolute; top: 0px; left: 281px; ">
- <H2>0</H2>
- </SPAN>
- <SPAN id="feather2" class="link" style="position: absolute; top: 486px; left: 2px; ">
- <A href="link:feather">
- <SPAN>
- <IMG src="http://www.apache.org/images/feather-small.gif"/>
- </SPAN>
- </A>
- </SPAN>
- <SPAN id="gnu1" class="link" style="position: absolute; top: 549px; left: 2px; ">
- <A href="link:gnu">
- <SPAN>
- <IMG src="http://www.gnu.org/graphics/lgplv3-147x51.png"/>
- </SPAN>
- </A>
- </SPAN>
- <SPAN id="feather1" class="link" style="position: absolute; top: 612px; left: 2px; ">
- <A href="link:feather">
- <SPAN>
- <IMG src="http://www.apache.org/images/feather-small.gif"/>
- </SPAN>
- </A>
- </SPAN>
- <SPAN id="gnu2" class="link" style="position: absolute; top: 666px; left: 2px; ">
- <A href="link:gnu">
- <SPAN>
- <IMG src="http://www.gnu.org/graphics/lgplv3-147x51.png"/>
- </SPAN>
- </A>
- </SPAN>
- <SPAN id="feather3" class="link" style="position: absolute; top: 729px; left: 2px; ">
- <A href="link:feather">
- <SPAN>
- <IMG src="http://www.apache.org/images/feather-small.gif"/>
- </SPAN>
- </A>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/test/app.composite b/sca-cpp/trunk/modules/edit/apps/test/app.composite
deleted file mode 100644
index 83a9c51e80..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/test/app.composite
+++ /dev/null
@@ -1,63 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="comment1" promote="comment1"/>
- <service name="start1" promote="start1"/>
- <component x="10" y="10" name="comment1" title="{propval}" color="white">
- <implementation.python script="nuvem/comment.py"/>
- <service name="comment" visible="false"/>
- <property>Change this example to do what you want</property>
- </component>
- <component x="80" y="40" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user1" name="value"/>
- <property>me</property>
- </component>
- <component x="70" y="70" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="now1" name="value"/>
- <property>time</property>
- </component>
- <component x="50" y="40" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item1" name="first"/>
- <reference target="item2" name="second"/>
- </component>
- <component x="120" y="70" name="now1" title="now" color="orange1">
- <implementation.python script="nuvem/now.py"/>
- <service name="now"/>
- <reference name="format"/>
- </component>
- <component x="10" y="50" name="start1" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list21" name="content"/>
- </component>
- <component name="user1" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/test/app.stats b/sca-cpp/trunk/modules/edit/apps/test/app.stats
deleted file mode 100644
index 9adad8c1a6..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/test/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty test app") (id "test"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/test/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/test/htdocs/app.html
deleted file mode 100644
index d33d4d6da7..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/test/htdocs/app.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 0px; ">
- <H1>Hello</H1>
- </SPAN>
- <SPAN id="me" class="h1" style="position: absolute; top: 0px; left: 74px; ">
- <H1>=me</H1>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 36px; left: 2px; ">
- <SPAN>The time is:</SPAN>
- </SPAN>
- <SPAN id="time" class="text" style="position: absolute; top: 36px; left: 74px; ">
- <SPAN>=time</SPAN>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testanimation/app.composite b/sca-cpp/trunk/modules/edit/apps/testanimation/app.composite
deleted file mode 100644
index 5c8ebd59f3..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testanimation/app.composite
+++ /dev/null
@@ -1,169 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="animation1" promote="animation1"/>
- <service name="start1" promote="start1"/>
- <component x="10" y="60" name="animation1" title="animation" color="green1">
- <implementation.python script="nuvem/animation.py"/>
- <service name="animation" visible="false">
- <binding.http uri="animation"/>
- </service>
- <reference target="number4" name="n"/>
- <reference target="number6" name="loop"/>
- <reference target="map1" name="content"/>
- </component>
- <component x="220" y="180" name="htattrs2" title="attrs:" color="white1">
- <implementation.python script="nuvem/htattrs.py"/>
- <service name="htattrs"/>
- <reference target="htstyle2" name="value"/>
- </component>
- <component x="240" y="120" name="htstyle2" title="style" color="white1">
- <implementation.python script="nuvem/htstyle.py"/>
- <service name="htstyle"/>
- <reference target="list21" name="value"/>
- </component>
- <component x="160" y="180" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htattrs2" name="value"/>
- <property>testdynimg</property>
- </component>
- <component x="80" y="10" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text1" name="value"/>
- <property>testdynimg</property>
- </component>
- <component x="320" y="170" name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="pixels2" name="value"/>
- <property>width</property>
- </component>
- <component x="120" y="180" name="list11" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference target="item1" name="value"/>
- </component>
- <component x="290" y="180" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="item4" name="first"/>
- <reference target="transform1" name="second"/>
- </component>
- <component x="100" y="150" name="map1" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name1" name="item"/>
- <reference target="list11" name="transform"/>
- <reference target="range1" name="list"/>
- </component>
- <component x="400" y="190" name="multiply1" title="*" color="cyan1">
- <implementation.python script="nuvem/multiply.py"/>
- <service name="multiply">
- <documentation>*</documentation>
- </service>
- <reference target="valueof1" name="value1"/>
- <reference target="number3" name="value2"/>
- </component>
- <component x="380" y="290" name="multiply2" title="*" color="cyan1">
- <implementation.python script="nuvem/multiply.py"/>
- <service name="multiply">
- <documentation>*</documentation>
- </service>
- <reference target="valueof2" name="value1"/>
- <reference target="number5" name="value2"/>
- </component>
- <component x="150" y="110" name="name1" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>t</property>
- </component>
- <component x="140" y="110" name="number1" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="150" y="140" name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>121</property>
- </component>
- <component x="690" y="290" name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3</property>
- </component>
- <component x="100" y="90" name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>20</property>
- </component>
- <component x="680" y="340" name="number5" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>6</property>
- </component>
- <component x="110" y="120" name="number6" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component x="370" y="180" name="pixels2" title="pixels" color="white1">
- <implementation.python script="nuvem/pixels.py"/>
- <service name="pixels"/>
- <reference target="multiply1" name="value"/>
- </component>
- <component x="150" y="400" name="range1" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number1" name="first"/>
- <reference target="number2" name="last"/>
- </component>
- <component x="10" y="10" name="start1" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="item2" name="content"/>
- </component>
- <component x="150" y="10" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://tuscany.apache.org/images/TuscanyLogo.jpg</property>
- </component>
- <component x="300" y="240" name="transform1" title="transform" color="white1">
- <implementation.python script="nuvem/transform.py"/>
- <service name="transform"/>
- <reference name="x"/>
- <reference name="y"/>
- <reference target="multiply2" name="d"/>
- </component>
- <component x="680" y="260" name="valueof1" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>t</property>
- </component>
- <component x="680" y="310" name="valueof2" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>t</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testanimation/app.stats b/sca-cpp/trunk/modules/edit/apps/testanimation/app.stats
deleted file mode 100644
index 493ef39d1a..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testanimation/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test animation components") (id "testanimation"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testanimation/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testanimation/htdocs/app.html
deleted file mode 100644
index c9f9420eb0..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testanimation/htdocs/app.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test animation component</H2>
- </SPAN>
- <SPAN id="testdynimg" class="img" style="position: absolute; top: 36px; left: 11px; ">
- <IMG src="/public/img.png"/>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testdb/app.composite b/sca-cpp/trunk/modules/edit/apps/testdb/app.composite
deleted file mode 100644
index 51535b124c..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testdb/app.composite
+++ /dev/null
@@ -1,99 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="delete" promote="delete"/>
- <service name="get" promote="get"/>
- <service name="put" promote="put"/>
- <component x="150" y="10" name="delete" title="delete" color="pink1">
- <implementation.python script="nuvem/delete.py"/>
- <service name="delete"/>
- <reference target="filedb2" name="collection"/>
- <reference target="list3" name="id"/>
- </component>
- <component name="filedb" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb2" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component name="filedb3" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="20" y="120" name="get" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference target="filedb3" name="collection"/>
- <reference target="list2" name="id"/>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text4" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="13" y="1" name="put" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference target="filedb" name="collection"/>
- <reference target="list" name="id"/>
- <reference target="text2" name="value"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>testkey</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>testvalue</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>testkey</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>testkey</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testdb/app.stats b/sca-cpp/trunk/modules/edit/apps/testdb/app.stats
deleted file mode 100644
index 1128933dfd..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testdb/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test database components") (id "testdb"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testdb/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testdb/htdocs/app.html
deleted file mode 100644
index 856966ff50..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testdb/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test db components</H1>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testevents/app.composite b/sca-cpp/trunk/modules/edit/apps/testevents/app.composite
deleted file mode 100644
index 61cd17ec81..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testevents/app.composite
+++ /dev/null
@@ -1,195 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="Cancel" promote="Cancel"/>
- <service name="OK" promote="OK"/>
- <service name="call" promote="call"/>
- <service name="call2" promote="call2"/>
- <service name="call3" promote="call3"/>
- <service name="compabc" promote="compabc"/>
- <service name="compxyz" promote="compxyz"/>
- <service name="location" promote="location"/>
- <service name="start" promote="start"/>
- <service name="timer3" promote="timer3"/>
- <component x="190" y="10" name="Cancel" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="prop2" name="content"/>
- </component>
- <component x="190" y="60" name="OK" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="list" name="content"/>
- </component>
- <component name="abc" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abc</property>
- </component>
- <component x="190" y="150" name="call" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name2" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="20" y="180" name="call2" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="190" y="190" name="call3" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="text5" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="10" y="230" name="compabc" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="abc" name="content"/>
- </component>
- <component x="20" y="270" name="compxyz" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="text12" name="content"/>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text4" name="value"/>
- <property>status</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text" name="value"/>
- <property>status</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>status</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="param" name="value"/>
- <property>testtext</property>
- </component>
- <component name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="params2" name="value"/>
- <property>location</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="10" y="130" name="location" title="location" color="green1">
- <implementation.python script="nuvem/location.py"/>
- <service name="location" visible="false">
- <binding.http uri="location"/>
- </service>
- <reference target="item6" name="content"/>
- </component>
- <component name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>compxyz</property>
- </component>
- <component name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>https://testhttp.sca-store.com:8453/components/property</property>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3000</property>
- </component>
- <component name="param" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>testfield</property>
- <property name="query" visible="false"/>
- </component>
- <component name="params2" title="?params" color="green1">
- <implementation.python script="nuvem/params.py"/>
- <service name="params"/>
- <property name="query" visible="false"/>
- </component>
- <component name="prop2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text3" name="value"/>
- <property>status</property>
- </component>
- <component x="15" y="3" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="item3" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>page opens</property>
- </component>
- <component name="text12" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xyz</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>ok button clicked</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>cancel button clicked</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>timer fired</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>https://testhttp.sca-store.com:8453/components/property</property>
- </component>
- <component x="13" y="58" name="timer3" title="timer" color="green1">
- <implementation.python script="nuvem/timer.py"/>
- <service name="timer" visible="false">
- <binding.http uri="timer"/>
- </service>
- <reference target="number" name="n"/>
- <reference target="item2" name="content"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testevents/app.stats b/sca-cpp/trunk/modules/edit/apps/testevents/app.stats
deleted file mode 100644
index 51d6a0388e..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testevents/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test event components") (id "testevents"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testevents/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testevents/htdocs/app.html
deleted file mode 100644
index 6698c6faa8..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testevents/htdocs/app.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test events</H1>
- </SPAN>
- <SPAN id="testfield" class="entry" style="position: absolute; top: 54px; left: 11px; ">
- <INPUT type="text" value="=testfield" size="10" autocapitalize="off"/>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 90px; left: 11px; ">
- <SPAN>Status:</SPAN>
- </SPAN>
- <SPAN id="status" class="text" style="position: absolute; top: 90px; left: 92px; ">
- <SPAN>=status</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 117px; left: 11px; ">
- <SPAN>Field value:</SPAN>
- </SPAN>
- <SPAN id="testtext" class="text" style="position: absolute; top: 117px; left: 92px; ">
- <SPAN>=testtext</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 144px; left: 11px; ">
- <SPAN>Longitude:</SPAN>
- </SPAN>
- <SPAN id="longitude" class="text" style="position: absolute; top: 144px; left: 92px; ">
- <SPAN>=longitude</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 171px; left: 11px; ">
- <SPAN>Latitude:</SPAN>
- </SPAN>
- <SPAN id="latitude" class="text" style="position: absolute; top: 171px; left: 92px; ">
- <SPAN>=latitude</SPAN>
- </SPAN>
- <SPAN id="page:button" class="button" style="position: absolute; top: 207px; left: 2px; ">
- <INPUT type="button" value="OK" class="graybutton"/>
- </SPAN>
- <SPAN id="page:button" class="button" style="position: absolute; top: 207px; left: 47px; ">
- <INPUT type="button" value="Cancel" class="graybutton"/>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testhttp/app.composite b/sca-cpp/trunk/modules/edit/apps/testhttp/app.composite
deleted file mode 100644
index 6aabf6d4bb..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testhttp/app.composite
+++ /dev/null
@@ -1,273 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="call" promote="call"/>
- <service name="get" promote="get"/>
- <service name="get2" promote="get2"/>
- <service name="get3" promote="get3"/>
- <service name="get4" promote="get4"/>
- <service name="get5" promote="get5"/>
- <service name="get6" promote="get6"/>
- <service name="item" promote="property"/>
- <service name="parse" promote="parse"/>
- <component x="20" y="180" name="call" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference target="name" name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component name="first" title="first" color="yellow1">
- <implementation.python script="nuvem/first.py"/>
- <service name="first"/>
- <reference target="rest" name="list"/>
- </component>
- <component x="750" y="320" name="format1" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text12" name="pattern"/>
- <reference target="list2" name="values"/>
- </component>
- <component x="20" y="10" name="get" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text" name="url"/>
- </component>
- <component x="20" y="60" name="get2" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text2" name="url"/>
- </component>
- <component x="20" y="100" name="get3" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text3" name="url"/>
- </component>
- <component x="310" y="10" name="get4" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text4" name="url"/>
- </component>
- <component x="200" y="10" name="get5" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text5" name="url"/>
- </component>
- <component x="20" y="140" name="get6" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text6" name="url"/>
- </component>
- <component name="get7" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text7" name="url"/>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="user" name="value"/>
- <property>user</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="params" name="value"/>
- <property>name</property>
- </component>
- <component name="join" title="join" color="cyan1">
- <implementation.python script="nuvem/join.py"/>
- <service name="join"/>
- <reference target="text9" name="separator"/>
- <reference target="first" name="list"/>
- </component>
- <component x="570" y="350" name="keychain1" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name1" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="710" y="290" name="keychain2" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name2" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="720" y="310" name="keychain3" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name3" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list1" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="keychain1" name="item" clonable="true"/>
- <reference target="text10" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text11" name="item" clonable="true"/>
- <reference target="text13" name="item" clonable="true"/>
- <reference target="text14" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list4" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="format1" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>https://testhttp.sca-store.com:8453/components/property</property>
- </component>
- <component x="630" y="350" name="name1" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>twilliosid</property>
- </component>
- <component x="780" y="280" name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>twilliosid</property>
- </component>
- <component x="780" y="320" name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>twilliotoken</property>
- </component>
- <component name="params" title="?params" color="green1">
- <implementation.python script="nuvem/params.py"/>
- <service name="params"/>
- <property name="query" visible="false"/>
- </component>
- <component x="340" y="180" name="parse" title="parse" color="cyan1">
- <implementation.python script="nuvem/parse.py"/>
- <service name="parse"/>
- <reference target="text8" name="regexp"/>
- <reference target="join" name="string"/>
- </component>
- <component x="20" y="220" name="property" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list" name="value"/>
- <property>test</property>
- </component>
- <component name="rest" title="rest" color="yellow1">
- <implementation.python script="nuvem/rest.py"/>
- <service name="rest"/>
- <reference target="get7" name="list"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://www.google.com</property>
- </component>
- <component x="530" y="320" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>https://api.twilio.com/2010-04-01/Accounts/</property>
- </component>
- <component x="570" y="390" name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>SMS/Messages</property>
- </component>
- <component x="580" y="480" name="text11" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>+14155992671</property>
- </component>
- <component x="550" y="450" name="text12" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>From={0}&amp;To={1}&amp;Body={2}</property>
- </component>
- <component x="700" y="340" name="text13" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>+16508632924</property>
- </component>
- <component x="690" y="370" name="text14" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>This is a text message</property>
- </component>
- <component x="710" y="290" name="text15" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>application/x-www-form-urlencoded</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <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>
- <component name="text3" title=" '{propval}'" color="orange1">
- <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 name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://feedproxy.google.com/TechCrunch</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>cnn.com</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>https://chart.googleapis.com/chart?cht=p3&amp;chs=250x100&amp;chd=60,40&amp;chl=Hello|World</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>cnn.com</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>(CNN)</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property name="property"/>
- </component>
- <component name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testhttp/app.stats b/sca-cpp/trunk/modules/edit/apps/testhttp/app.stats
deleted file mode 100644
index be1fc6d254..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testhttp/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test HTTP components") (id "testhttp"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testhttp/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testhttp/htdocs/app.html
deleted file mode 100644
index b0c20ef5e6..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testhttp/htdocs/app.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test HTTP components</H1>
- </SPAN>
- <SPAN id="iframe" class="iframe" style="position: absolute; top: 234px; left: 11px; ">
- <A href="/public/iframe.html">
- <SPAN class="fakeframe">
- <SPAN>frame ...</SPAN>
- </SPAN>
- </A>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite b/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite
deleted file mode 100644
index 659fcbacba..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testlogic/app.composite
+++ /dev/null
@@ -1,201 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="cos" promote="cos"/>
- <service name="eval" promote="eval"/>
- <service name="eval2" promote="eval2"/>
- <service name="exec" promote="exec"/>
- <service name="exec2" promote="exec2"/>
- <service name="if" promote="if"/>
- <service name="random1" promote="random1"/>
- <service name="randoms1" promote="randoms1"/>
- <service name="randoms2" promote="randoms2"/>
- <service name="sin" promote="sin"/>
- <component x="20" y="170" name="cos" title="cos" color="cyan1">
- <implementation.python script="nuvem/cos_.py"/>
- <service name="cos"/>
- <reference target="number7" name="x"/>
- </component>
- <component x="150" y="10" name="eval" title="expr" color="cyan1">
- <implementation.python script="nuvem/eval_.py"/>
- <service name="eval"/>
- <reference target="text3" name="py"/>
- <reference name="ref"/>
- </component>
- <component x="170" y="70" name="eval2" title="expr" color="cyan1">
- <implementation.python script="nuvem/eval_.py"/>
- <service name="eval"/>
- <reference target="text4" name="py"/>
- <reference target="number3" name="ref"/>
- </component>
- <component x="150" y="210" name="exec" title="script" color="cyan1">
- <implementation.python script="nuvem/exec_.py"/>
- <service name="exec"/>
- <reference target="get" name="py"/>
- <reference target="number4" name="ref"/>
- </component>
- <component x="150" y="140" name="exec2" title="script" color="cyan1">
- <implementation.python script="nuvem/exec_.py"/>
- <service name="exec"/>
- <reference target="text6" name="py"/>
- <reference target="number5" name="ref"/>
- </component>
- <component name="get" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text5" name="url"/>
- </component>
- <component name="greater" title="gt" color="cyan1">
- <implementation.python script="nuvem/greater.py"/>
- <service name="greater"/>
- <reference target="number2" name="value1"/>
- <reference target="number" name="value2"/>
- </component>
- <component x="19" y="9" name="if" title="if" color="cyan1">
- <implementation.python script="nuvem/if_.py"/>
- <service name="if"/>
- <reference target="greater" name="condition"/>
- <reference target="text" name="then"/>
- <reference target="text2" name="else"/>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component x="390" y="10" name="number1" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3</property>
- </component>
- <component x="480" y="90" name="number10" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component x="530" y="120" name="number11" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component x="520" y="140" name="number12" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>100</property>
- </component>
- <component name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3</property>
- </component>
- <component name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component name="number5" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component name="number6" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0.5</property>
- </component>
- <component name="number7" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0.5</property>
- </component>
- <component x="490" y="0" name="number8" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>5</property>
- </component>
- <component x="480" y="40" name="number9" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3</property>
- </component>
- <component x="310" y="10" name="random1" title="rand" color="cyan1">
- <implementation.python script="nuvem/random_.py"/>
- <service name="random"/>
- <reference target="number1" name="range"/>
- </component>
- <component x="390" y="10" name="randoms1" title="rands" color="cyan1">
- <implementation.python script="nuvem/randoms.py"/>
- <service name="randoms"/>
- <reference target="number8" name="n"/>
- <reference target="number9" name="range"/>
- </component>
- <component x="390" y="100" name="randoms2" title="rands" color="cyan1">
- <implementation.python script="nuvem/randoms.py"/>
- <service name="randoms"/>
- <reference target="number10" name="n"/>
- <reference target="range1" name="range"/>
- </component>
- <component x="480" y="120" name="range1" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number11" name="first"/>
- <reference target="number12" name="last"/>
- </component>
- <component x="20" y="130" name="sin" title="sin" color="cyan1">
- <implementation.python script="nuvem/sin_.py"/>
- <service name="sin"/>
- <reference target="number6" name="x"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>greater than 5</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>not greater than 5</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>3.14116 * 5 * 5</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>3.14116 * ref.get(r) * ref.get(r)</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://people.apache.org/~jsdelfino/tuscany/test/surface.py</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>val = 3.14116 * ref.get(r) * ref.get(r)</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testlogic/app.stats b/sca-cpp/trunk/modules/edit/apps/testlogic/app.stats
deleted file mode 100644
index e557346327..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testlogic/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test logic components") (id "testlogic"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testlogic/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testlogic/htdocs/app.html
deleted file mode 100644
index 4e9efdaa22..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testlogic/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test logic components</H2>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsearch/app.composite b/sca-cpp/trunk/modules/edit/apps/testsearch/app.composite
deleted file mode 100644
index 493e9a253a..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsearch/app.composite
+++ /dev/null
@@ -1,240 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="bingsearch" promote="bingsearch"/>
- <service name="gaddress1" promote="gaddress1"/>
- <service name="get" promote="get"/>
- <service name="ggeopos1" promote="ggeopos1"/>
- <service name="googlemap" promote="googlemap"/>
- <service name="googlemap2" promote="googlemap2"/>
- <service name="googlesearch" promote="googlesearch"/>
- <service name="weather" promote="weather"/>
- <service name="weather2" promote="weather2"/>
- <service name="yahoosearch" promote="yahoosearch"/>
- <component x="330" y="10" name="bingsearch" title="bing" color="pink1">
- <implementation.python script="nuvem/bsearch.py"/>
- <service name="bingsearch"/>
- <reference target="text10" name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://www.bing.com/search"/>
- </reference>
- </component>
- <component x="330" y="50" name="gaddress1" title="address" color="pink1">
- <implementation.python script="nuvem/gaddress.py"/>
- <service name="gaddress"/>
- <reference target="text1" name="address"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.googleapis.com/maps/api/geocode/json"/>
- </reference>
- </component>
- <component x="20" y="250" name="get" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference target="text3" name="url"/>
- </component>
- <component x="490" y="10" name="ggeopos1" title="geo position" color="pink1">
- <implementation.python script="nuvem/ggeopos.py"/>
- <service name="ggeopos"/>
- <reference target="number1" name="latitude"/>
- <reference target="number4" name="longitude"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.googleapis.com/maps/api/geocode/json"/>
- </reference>
- </component>
- <component x="310" y="100" name="googlemap" title="google map" color="pink1">
- <implementation.python script="nuvem/gmap.py"/>
- <service name="googlemap"/>
- <reference target="list2" name="locations"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.google.com/maps/api/staticmap"/>
- </reference>
- </component>
- <component x="15" y="96" name="googlemap2" title="google map" color="pink1">
- <implementation.python script="nuvem/gmap.py"/>
- <service name="googlemap"/>
- <reference target="list3" name="locations"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.google.com/maps/api/staticmap"/>
- </reference>
- </component>
- <component x="20" y="10" name="googlesearch" title="google" color="pink1">
- <implementation.python script="nuvem/gsearch.py"/>
- <service name="googlesearch"/>
- <reference target="text" name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://ajax.googleapis.com/ajax/services/search/web"/>
- </reference>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list" name="value"/>
- <property>A</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list24" name="value"/>
- <property>A</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list25" name="value"/>
- <property>B</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text4" name="item" clonable="true"/>
- <reference target="number2" name="item" clonable="true"/>
- <reference target="number3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list24" title="list2" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="text7" name="name"/>
- <reference target="text5" name="value"/>
- </component>
- <component name="list25" title="list2" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="text8" name="name"/>
- <reference target="text6" name="value"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>94070</property>
- </component>
- <component x="730" y="80" name="number1" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>37.507156</property>
- </component>
- <component name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>37.507156</property>
- </component>
- <component name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>-122.260526</property>
- </component>
- <component x="730" y="120" name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>-122.260526</property>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>apache tuscany</property>
- </component>
- <component x="710" y="20" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>San Carlos, CA</property>
- </component>
- <component name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>apache tuscany</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>94070</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://maps.google.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&amp;zoom=14&amp;size=512x512&amp;maptype=roadmap%20&amp;markers=color:blue|label:S|40.702147,-74.015794&amp;markers=color:green|label:G|40.711614,-74.012318%20&amp;markers=color:red|color:red|label:C|40.718217,-73.998284&amp;sensor=false</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>green</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>San Francisco, CA</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>San Carlos, CA</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>yellow</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>green</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>apache tuscany</property>
- </component>
- <component x="18" y="49" name="weather" title="weather" color="pink1">
- <implementation.python script="nuvem/gweather.py"/>
- <service name="weather"/>
- <reference target="number" name="zip"/>
- <reference name="ws" visible="false">
- <binding.http uri="http://www.google.com/ig/api"/>
- </reference>
- </component>
- <component x="190" y="51" name="weather2" title="weather" color="pink1">
- <implementation.python script="nuvem/gweather.py"/>
- <service name="weather"/>
- <reference target="text2" name="zip"/>
- <reference name="ws" visible="false">
- <binding.http uri="http://www.google.com/ig/api"/>
- </reference>
- </component>
- <component x="180" y="10" name="yahoosearch" title="yahoo" color="pink1">
- <implementation.python script="nuvem/ysearch.py"/>
- <service name="yahoosearch"/>
- <reference target="text9" name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://search.yahooapis.com/WebSearchService/V1/webSearch"/>
- </reference>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsearch/app.stats b/sca-cpp/trunk/modules/edit/apps/testsearch/app.stats
deleted file mode 100644
index 691c43875d..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsearch/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test search components") (id "testsearch"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testsearch/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testsearch/htdocs/app.html
deleted file mode 100644
index ca5462f07a..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsearch/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test search components</H1>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsms/app.composite b/sca-cpp/trunk/modules/edit/apps/testsms/app.composite
deleted file mode 100644
index d2abbaae28..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsms/app.composite
+++ /dev/null
@@ -1,98 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="item" promote="property"/>
- <service name="twsms1" promote="twsms1"/>
- <component x="180" y="30" name="keychain1" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name1" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="190" y="70" name="keychain3" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name3" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="190" y="100" name="keychain4" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name5" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="180" y="140" name="keychain5" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name4" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text14" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="630" y="350" name="name1" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>twiliosid</property>
- </component>
- <component x="780" y="320" name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>twiliotoken</property>
- </component>
- <component x="250" y="140" name="name4" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>tophone</property>
- </component>
- <component x="520" y="270" name="name5" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>fromphone</property>
- </component>
- <component x="180" y="170" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Hello Again!</property>
- </component>
- <component x="550" y="450" name="text12" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>From={0}&amp;To={1}&amp;Body={2}</property>
- </component>
- <component x="250" y="340" name="text14" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Hello there</property>
- </component>
- <component x="20" y="10" name="twsms1" title="sms" color="blue1">
- <implementation.python script="nuvem/twsms.py"/>
- <service name="twsms"/>
- <reference target="keychain1" name="sid"/>
- <reference target="keychain3" name="token"/>
- <reference target="keychain4" name="from"/>
- <reference target="keychain5" name="to"/>
- <reference target="text1" name="msg"/>
- <reference name="s" wiredByImpl="true" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsms/app.stats b/sca-cpp/trunk/modules/edit/apps/testsms/app.stats
deleted file mode 100644
index be1fc6d254..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsms/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test HTTP components") (id "testhttp"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testsms/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testsms/htdocs/app.html
deleted file mode 100644
index dd8f5f9f26..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsms/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test SMS API</H1>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsocial/app.composite b/sca-cpp/trunk/modules/edit/apps/testsocial/app.composite
deleted file mode 100644
index 28ec9654d8..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsocial/app.composite
+++ /dev/null
@@ -1,179 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="sendgtalk" promote="sendgtalk"/>
- <service name="start" promote="start"/>
- <component name="fbprofile" title="facebook profile" color="blue1">
- <implementation.python script="nuvem/fbprofile.py"/>
- <service name="fbprofile"/>
- <reference target="text" name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component name="format" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text7" name="pattern"/>
- <reference target="list" name="values"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="twprofile" name="value"/>
- <property>twitprofile</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="fbprofile" name="value"/>
- <property>name</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="twtimeline" name="value"/>
- <property>twittimeline</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="twfriends" name="value"/>
- <property>twitfriends</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="twfollowers" name="value"/>
- <property>twitfollowers</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="now" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="now" title="now" color="orange1">
- <implementation.python script="nuvem/now.py"/>
- <service name="now"/>
- </component>
- <component x="20" y="210" name="sendgtalk" title="gtalk" color="blue1">
- <implementation.cpp path="lib/chat" library="libchat-sender2"/>
- <service name="sendgtalk"/>
- <reference target="text8" name="jid"/>
- <reference target="text9" name="pass"/>
- <reference target="text6" name="to"/>
- <reference target="format" name="msg"/>
- </component>
- <component x="10" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list3" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>100001053301307</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>jsdelfino</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xmppsca.2@gmail.com</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Hello, the time is {0}</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xmppsca.1@gmail.com</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xmpp4sca</property>
- </component>
- <component name="twfollowers" title="twitter followers" color="blue1">
- <implementation.python script="nuvem/twfollowers.py"/>
- <service name="twfollowers"/>
- <reference target="text5" name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/followers.json"/>
- </reference>
- </component>
- <component name="twfriends" title="twitter friends" color="blue1">
- <implementation.python script="nuvem/twfriends.py"/>
- <service name="twfriends"/>
- <reference target="text4" name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/friends.json"/>
- </reference>
- </component>
- <component name="twprofile" title="twitter profile" color="blue1">
- <implementation.python script="nuvem/twprofile.py"/>
- <service name="twprofile"/>
- <reference target="text3" name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/users/show.json"/>
- </reference>
- </component>
- <component name="twtimeline" title="twitter timeline" color="blue1">
- <implementation.python script="nuvem/twtimeline.py"/>
- <service name="twtimeline"/>
- <reference target="text2" name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/user_timeline.json"/>
- </reference>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testsocial/app.stats b/sca-cpp/trunk/modules/edit/apps/testsocial/app.stats
deleted file mode 100644
index fa487f4d81..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsocial/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test social components") (id "testsocial"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testsocial/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testsocial/htdocs/app.html
deleted file mode 100644
index 5fe616ca16..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testsocial/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>Test social components</H1>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testtext/app.composite b/sca-cpp/trunk/modules/edit/apps/testtext/app.composite
deleted file mode 100644
index 7021ddb2e9..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testtext/app.composite
+++ /dev/null
@@ -1,216 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="contains" promote="contains"/>
- <service name="format" promote="format"/>
- <service name="format2" promote="format2"/>
- <service name="join" promote="join"/>
- <service name="lowercase" promote="lowercase"/>
- <service name="parse" promote="parse"/>
- <service name="replace" promote="replace"/>
- <service name="split" promote="split"/>
- <service name="uppercase" promote="uppercase"/>
- <component x="19" y="7" name="contains" title="contains" color="cyan1">
- <implementation.python script="nuvem/contains.py"/>
- <service name="contains"/>
- <reference target="text10" name="search"/>
- <reference target="text9" name="string"/>
- </component>
- <component x="150" y="110" name="format" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text13" name="pattern"/>
- <reference target="list" name="values"/>
- </component>
- <component x="310" y="130" name="format2" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text14" name="pattern"/>
- <reference target="list3" name="values"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text17" name="value"/>
- <property>a</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text18" name="value"/>
- <property>b</property>
- </component>
- <component x="300" y="10" name="join" title="join" color="cyan1">
- <implementation.python script="nuvem/join.py"/>
- <service name="join"/>
- <reference target="text6" name="separator"/>
- <reference target="list2" name="list"/>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text15" name="item" clonable="true"/>
- <reference target="text16" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text7" name="item" clonable="true"/>
- <reference target="text8" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="20" y="226" name="lowercase" title="lower" color="cyan1">
- <implementation.python script="nuvem/lowercase.py"/>
- <service name="lowercase"/>
- <reference target="text2" name="string"/>
- </component>
- <component x="150" y="230" name="parse" title="parse" color="cyan1">
- <implementation.python script="nuvem/parse.py"/>
- <service name="parse"/>
- <reference target="text19" name="regexp"/>
- <reference target="text20" name="string"/>
- </component>
- <component x="150" y="10" name="replace" title="replace" color="cyan1">
- <implementation.python script="nuvem/replace.py"/>
- <service name="replace"/>
- <reference target="text4" name="from"/>
- <reference target="text5" name="to"/>
- <reference target="text3" name="string"/>
- </component>
- <component x="23" y="89" name="split" title="split" color="cyan1">
- <implementation.python script="nuvem/split.py"/>
- <service name="split"/>
- <reference target="text11" name="separator"/>
- <reference target="text12" name="string"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abc</property>
- </component>
- <component name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>cd</property>
- </component>
- <component name="text11" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>x</property>
- </component>
- <component name="text12" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abcxdefxghi</property>
- </component>
- <component name="text13" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>The {0} brown {1}</property>
- </component>
- <component name="text14" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>The {a} brown {b}</property>
- </component>
- <component name="text15" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>quick</property>
- </component>
- <component name="text16" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>fox</property>
- </component>
- <component name="text17" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>quick</property>
- </component>
- <component name="text18" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>fox</property>
- </component>
- <component name="text19" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>city (.*) state (.*)</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>ABC</property>
- </component>
- <component name="text20" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>city San Francisco state CA</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abcxdefxghi</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>x</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>y</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>x</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abc</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>def</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abcdef</property>
- </component>
- <component x="20" y="172" name="uppercase" title="upper" color="cyan1">
- <implementation.python script="nuvem/uppercase.py"/>
- <service name="uppercase"/>
- <reference target="text" name="string"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testtext/app.stats b/sca-cpp/trunk/modules/edit/apps/testtext/app.stats
deleted file mode 100644
index 35e43ff383..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testtext/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test text processing components") (id "testtext"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testtext/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testtext/htdocs/app.html
deleted file mode 100644
index 1c7612d0e0..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testtext/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test text processing components</H2>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testurl/app.composite b/sca-cpp/trunk/modules/edit/apps/testurl/app.composite
deleted file mode 100644
index f42ba5fa4b..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testurl/app.composite
+++ /dev/null
@@ -1,146 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="email" promote="email"/>
- <service name="host" promote="host"/>
- <service name="keychain1" promote="keychain1"/>
- <service name="keychain2" promote="keychain2"/>
- <service name="params" promote="params"/>
- <service name="path" promote="path"/>
- <service name="realm" promote="realm"/>
- <service name="url" promote="url"/>
- <service name="user" promote="user"/>
- <component x="17" y="223" name="email" title="email" color="green1">
- <implementation.python script="nuvem/email.py"/>
- <service name="email"/>
- <property name="email"/>
- </component>
- <component x="20" y="10" name="host" title="host" color="green1">
- <implementation.python script="nuvem/host.py"/>
- <service name="host"/>
- <property name="host"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text4" name="value"/>
- <property>parmx</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text5" name="value"/>
- <property>parmy</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number" name="value"/>
- <property>parmn</property>
- </component>
- <component x="260" y="50" name="keychain1" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="text1" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="260" y="10" name="keychain2" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference target="name1" name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text2" name="item" clonable="true"/>
- <reference target="text3" name="item" clonable="true"/>
- <reference target="item" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="400" y="10" name="name1" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>key2</property>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>123</property>
- </component>
- <component x="16" y="91" name="params" title="?params" color="green1">
- <implementation.python script="nuvem/params.py"/>
- <service name="params"/>
- <property name="params"/>
- </component>
- <component x="17" y="48" name="path" title="path" color="green1">
- <implementation.python script="nuvem/path.py"/>
- <service name="path"/>
- <property name="path"/>
- </component>
- <component x="14" y="177" name="realm" title="realm" color="green1">
- <implementation.python script="nuvem/realm.py"/>
- <service name="realm"/>
- <property name="realm"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://sca-store.com/</property>
- </component>
- <component x="400" y="10" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>key2</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>path</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xx</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>yy</property>
- </component>
- <component x="90" y="10" name="url" title="url" color="green1">
- <implementation.python script="nuvem/url.py"/>
- <service name="url"/>
- <reference target="text" name="address"/>
- <reference target="list" name="args"/>
- </component>
- <component x="16" y="134" name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testurl/app.stats b/sca-cpp/trunk/modules/edit/apps/testurl/app.stats
deleted file mode 100644
index b4142f40cf..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testurl/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test URL components") (id "testurl"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testurl/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testurl/htdocs/app.html
deleted file mode 100644
index 8c47186044..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testurl/htdocs/app.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test url components</H2>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testvalues/app.composite b/sca-cpp/trunk/modules/edit/apps/testvalues/app.composite
deleted file mode 100644
index 4ee8a0a619..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testvalues/app.composite
+++ /dev/null
@@ -1,491 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="empty" promote="empty"/>
- <service name="false" promote="false"/>
- <service name="first" promote="first"/>
- <service name="itemnb" promote="itemnb"/>
- <service name="list8" promote="list8"/>
- <service name="list9" promote="list9"/>
- <service name="name" promote="name"/>
- <service name="nothing" promote="nothing"/>
- <service name="reduce2" promote="reduce2"/>
- <service name="rest" promote="rest"/>
- <service name="second" promote="second"/>
- <service name="shuffle" promote="shuffle"/>
- <service name="start" promote="start"/>
- <service name="true" promote="true"/>
- <service name="values" promote="values"/>
- <service name="values2" promote="values2"/>
- <component name="add" title="+" color="cyan1">
- <implementation.python script="nuvem/add.py"/>
- <service name="add">
- <documentation>+</documentation>
- </service>
- <reference target="valueof2" name="value1"/>
- <reference target="valueof3" name="value2"/>
- </component>
- <component x="17" y="269" name="empty" title="empty" color="yellow1">
- <implementation.python script="nuvem/empty.py"/>
- <service name="empty"/>
- </component>
- <component x="21" y="170" name="false" title="false" color="orange1">
- <implementation.python script="nuvem/false_.py"/>
- <service name="false"/>
- </component>
- <component x="110" y="10" name="first" title="first" color="yellow1">
- <implementation.python script="nuvem/first.py"/>
- <service name="first"/>
- <reference target="list7" name="list"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text3" name="value"/>
- <property>a</property>
- </component>
- <component name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list6" name="value"/>
- <property>a</property>
- </component>
- <component name="item11" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text7" name="value"/>
- <property>entry</property>
- </component>
- <component name="item12" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list10" name="value"/>
- <property>entry</property>
- </component>
- <component name="item13" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text9" name="value"/>
- <property>test</property>
- </component>
- <component name="item14" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text10" name="value"/>
- <property>d</property>
- </component>
- <component name="item15" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text11" name="value"/>
- <property>x</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text4" name="value"/>
- <property>d</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text5" name="value"/>
- <property>ccc</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>b</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text8" name="value"/>
- <property>c</property>
- </component>
- <component name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number11" name="value"/>
- <property>c</property>
- </component>
- <component name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text6" name="value"/>
- <property>b</property>
- </component>
- <component name="item8" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list4" name="value"/>
- <property>a</property>
- </component>
- <component name="item9" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list5" name="value"/>
- <property>x</property>
- </component>
- <component x="110" y="100" name="itemnb" title="item #" color="yellow1">
- <implementation.python script="nuvem/itemnb.py"/>
- <service name="itemnb"/>
- <reference target="number8" name="index"/>
- <reference target="map" name="list"/>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="number" name="item" clonable="true"/>
- <reference target="number7" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list10" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item13" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item14" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item10" name="item" clonable="true"/>
- <reference target="item9" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list4" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item7" name="item" clonable="true"/>
- <reference target="item6" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list5" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item8" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list6" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list7" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="number2" name="item" clonable="true"/>
- <reference target="number3" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="357" y="208" name="list8" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item11" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="268" y="279" name="list9" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item12" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="lookup" title="lookup" color="yellow1">
- <implementation.python script="nuvem/lookup.py"/>
- <service name="lookup"/>
- <reference target="name3" name="name"/>
- <reference target="list2" name="list"/>
- </component>
- <component name="map" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference target="name2" name="item"/>
- <reference target="multiply" name="transform"/>
- <reference target="reverse" name="list"/>
- </component>
- <component name="multiply" title="*" color="cyan1">
- <implementation.python script="nuvem/multiply.py"/>
- <service name="multiply">
- <documentation>*</documentation>
- </service>
- <reference target="valueof" name="value1"/>
- <reference target="number6" name="value2"/>
- </component>
- <component x="21" y="70" name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>abc</property>
- </component>
- <component name="name2" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>nb</property>
- </component>
- <component name="name3" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>d</property>
- </component>
- <component name="name6" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>sum</property>
- </component>
- <component name="name7" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>i</property>
- </component>
- <component name="name8" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>a.b</property>
- </component>
- <component x="19" y="219" name="nothing" title="nothing" color="orange1">
- <implementation.python script="nuvem/nothing.py"/>
- <service name="nothing"/>
- </component>
- <component name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>12</property>
- </component>
- <component name="number10" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>10</property>
- </component>
- <component name="number11" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>123</property>
- </component>
- <component name="number12" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component name="number13" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>10</property>
- </component>
- <component name="number14" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component name="number2" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>123</property>
- </component>
- <component name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>456</property>
- </component>
- <component name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component name="number5" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>10</property>
- </component>
- <component name="number6" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>2</property>
- </component>
- <component name="number7" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>34</property>
- </component>
- <component name="number8" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>3</property>
- </component>
- <component name="number9" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>0</property>
- </component>
- <component name="range" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number4" name="first"/>
- <reference target="number5" name="last"/>
- </component>
- <component name="range2" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number9" name="first"/>
- <reference target="number10" name="last"/>
- </component>
- <component name="range3" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference target="number12" name="first"/>
- <reference target="number13" name="last"/>
- </component>
- <component x="360" y="10" name="reduce2" title="reduce" color="yellow1">
- <implementation.python script="nuvem/reduce_.py"/>
- <service name="reduce"/>
- <reference target="name6" name="item"/>
- <reference target="name7" name="accum"/>
- <reference target="add" name="transform"/>
- <reference target="number14" name="init"/>
- <reference target="range2" name="list"/>
- </component>
- <component x="240" y="10" name="rest" title="rest" color="yellow1">
- <implementation.python script="nuvem/rest.py"/>
- <service name="rest"/>
- <reference target="list" name="list"/>
- </component>
- <component name="reverse" title="reverse" color="yellow1">
- <implementation.python script="nuvem/reverse.py"/>
- <service name="reverse"/>
- <reference target="range" name="list"/>
- </component>
- <component x="830" y="170" name="second" title="second" color="yellow1">
- <implementation.python script="nuvem/second.py"/>
- <service name="second"/>
- <reference target="item15" name="list"/>
- </component>
- <component name="select" title="select" color="yellow1">
- <implementation.python script="nuvem/select.py"/>
- <service name="select"/>
- <reference target="name8" name="path"/>
- <reference target="list3" name="list"/>
- </component>
- <component x="110" y="290" name="shuffle" title="shuffle" color="yellow1">
- <implementation.python script="nuvem/shuffle_.py"/>
- <service name="shuffle"/>
- <reference target="range3" name="list"/>
- </component>
- <component x="15" y="11" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="text" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xyz</property>
- </component>
- <component name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>xyz</property>
- </component>
- <component name="text11" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>y</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>bbb</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abc</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>def</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>ccc</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>BBB</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>hello</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>CCC</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>abc</property>
- </component>
- <component x="23" y="120" name="true" title="true" color="orange1">
- <implementation.python script="nuvem/true_.py"/>
- <service name="true"/>
- </component>
- <component name="valueof" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>nb</property>
- </component>
- <component name="valueof2" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>sum</property>
- </component>
- <component name="valueof3" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>i</property>
- </component>
- <component x="830" y="10" name="values" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference target="lookup" name="list"/>
- </component>
- <component x="530" y="10" name="values2" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference target="select" name="list"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testvalues/app.stats b/sca-cpp/trunk/modules/edit/apps/testvalues/app.stats
deleted file mode 100644
index 4b7a09cd38..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testvalues/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test values and lists") (id "testvalues"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testvalues/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testvalues/htdocs/app.html
deleted file mode 100644
index 79bb081a97..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testvalues/htdocs/app.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test values and lists</H2>
- </SPAN>
- <SPAN id="value" class="text" style="position: absolute; top: 36px; left: 29px; ">
- <SPAN>=value</SPAN>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets/app.composite b/sca-cpp/trunk/modules/edit/apps/testwidgets/app.composite
deleted file mode 100644
index 1cb1aee017..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets/app.composite
+++ /dev/null
@@ -1,189 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="start" promote="start"/>
- <component x="170" y="330" name="htattrs1" title="html attrs:" color="cyan1">
- <implementation.python script="nuvem/htattrs.py"/>
- <service name="htattrs"/>
- <reference target="list2" name="value"/>
- </component>
- <component name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text9" name="value"/>
- <property>testpath2</property>
- </component>
- <component x="100" y="340" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htattrs1" name="value"/>
- <property>testattrs</property>
- </component>
- <component name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text" name="value"/>
- <property>testh1</property>
- </component>
- <component x="270" y="370" name="item11" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text10" name="value"/>
- <property>onclick</property>
- </component>
- <component x="280" y="330" name="item12" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text1" name="value"/>
- <property>value</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="item" name="value"/>
- <property>testpath1</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text6" name="value"/>
- <property>testimg</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text8" name="value"/>
- <property>testtext</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text4" name="value"/>
- <property>testlink</property>
- </component>
- <component name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text5" name="value"/>
- <property>testcheckbox</property>
- </component>
- <component name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text3" name="value"/>
- <property>testentry</property>
- </component>
- <component name="item8" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>testbutton</property>
- </component>
- <component name="item9" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text7" name="value"/>
- <property>testsection</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item10" name="item" clonable="true"/>
- <reference target="item9" name="item" clonable="true"/>
- <reference target="item8" name="item" clonable="true"/>
- <reference target="item7" name="item" clonable="true"/>
- <reference target="item6" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item1" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item12" name="item" clonable="true"/>
- <reference target="item11" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="17" y="3" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test header 1</property>
- </component>
- <component x="320" y="340" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test html attrs</property>
- </component>
- <component x="370" y="370" name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>alert('hey')</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test button</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test entry field</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://tuscany.apache.org</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test checkbox</property>
- </component>
- <component name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://tuscany.apache.org/images/TuscanyLogo.jpg</property>
- </component>
- <component name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test section</property>
- </component>
- <component name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test text</property>
- </component>
- <component name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test path</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets/app.stats b/sca-cpp/trunk/modules/edit/apps/testwidgets/app.stats
deleted file mode 100644
index 6a66748ab1..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test widgets") (id "testwidgets"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testwidgets/htdocs/app.html
deleted file mode 100644
index d1422c10ac..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets/htdocs/app.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<?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">
- <SPAN id="testh1" class="h1" style="position: absolute; top: 9px; left: 11px; ">
- <H1>=testh1</H1>
- </SPAN>
- <SPAN id="testsection" class="section" style="position: absolute; top: 45px; width: 100%; left: 11px; ">
- <SPAN>=testsection</SPAN>
- </SPAN>
- <SPAN id="testimg" class="img" style="position: absolute; top: 90px; left: 263px; ">
- <IMG src="/public/img.png"/>
- </SPAN>
- <SPAN id="testbutton" class="button" style="position: absolute; top: 99px; left: 11px; ">
- <INPUT type="button" value="=testbutton" class="graybutton"/>
- </SPAN>
- <SPAN id="testentry" class="entry" style="position: absolute; top: 144px; left: 11px; ">
- <INPUT type="text" value="=testentry" size="20" autocapitalize="off"/>
- </SPAN>
- <SPAN id="testcheckbox" class="checkbox" style="position: absolute; top: 180px; left: 11px; ">
- <INPUT type="checkbox" value="=testcheckbox"/>
- <SPAN>=testcheckbox</SPAN>
- </SPAN>
- <SPAN id="testlink" class="link" style="position: absolute; top: 216px; left: 11px; ">
- <A href="=testlink">
- <SPAN>=testlink</SPAN>
- </A>
- </SPAN>
- <SPAN id="testattrs" class="text" style="position: absolute; top: 216px; left: 272px; ">
- <SPAN>=testattrs</SPAN>
- </SPAN>
- <SPAN id="testtext" class="text" style="position: absolute; top: 243px; left: 11px; ">
- <SPAN>=testtext</SPAN>
- </SPAN>
- <SPAN id="testpath1.testpath2" class="text" style="position: absolute; top: 270px; left: 11px; ">
- <SPAN>=testpath1.testpath2</SPAN>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.composite b/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.composite
deleted file mode 100644
index f387e876ed..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.composite
+++ /dev/null
@@ -1,147 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="start" promote="start"/>
- <component x="100" y="310" name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text5" name="value"/>
- <property>testframe</property>
- </component>
- <component x="100" y="290" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text1" name="value"/>
- <property>testselect</property>
- </component>
- <component name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list3" name="value"/>
- <property>testlink</property>
- </component>
- <component name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>testhtml</property>
- </component>
- <component name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text" name="value"/>
- <property>testlist1</property>
- </component>
- <component name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="list4" name="value"/>
- <property>testlist2</property>
- </component>
- <component name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number3" name="value"/>
- <property>a</property>
- </component>
- <component name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="number4" name="value"/>
- <property>b</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference target="item1" name="item" clonable="true"/>
- <reference target="item" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="text3" name="item" clonable="true"/>
- <reference target="text4" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list4" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item6" name="item" clonable="true"/>
- <reference target="item7" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="number3" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>1</property>
- </component>
- <component name="number4" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>2</property>
- </component>
- <component x="13" y="8" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list" name="content"/>
- </component>
- <component name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test value</property>
- </component>
- <component x="170" y="280" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>test select</property>
- </component>
- <component name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>&lt;b&gt;test bold text&lt;/b&gt;</property>
- </component>
- <component name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://www.apache.org/</property>
- </component>
- <component name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Apache</property>
- </component>
- <component name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://www.cnn.com</property>
- </component>
- <component x="760" y="170" name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>dynamic checkbox</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.stats b/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.stats
deleted file mode 100644
index 18f0cb50f8..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets2/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test more widgets") (id "testwidgets2"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets2/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testwidgets2/htdocs/app.html
deleted file mode 100644
index 7efb62d247..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets2/htdocs/app.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test widget components</H2>
- </SPAN>
- <SPAN id="testlist1" class="table" style="position: absolute; top: 36px; width: 100%; left: 20px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=testlist1</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="testlist2" class="table" style="position: absolute; top: 90px; width: 100%; left: 20px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=testlist2</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="b" class="table" style="position: absolute; top: 171px; width: 100%; left: 20px; ">
- <TABLE class="datatable" style="width: 100%; ">
- <TBODY>
- <TR>
- <TD>=b</TD>
- <TD>...</TD>
- </TR>
- <TR>
- <TD>...</TD>
- <TD>...</TD>
- </TR>
- </TBODY>
- </TABLE>
- </SPAN>
- <SPAN id="testhtml" class="text" style="position: absolute; top: 234px; left: 20px; ">
- <SPAN>=testhtml</SPAN>
- </SPAN>
- <SPAN id="testselect" class="select" style="position: absolute; top: 234px; left: 155px; ">
- <SELECT>
- <OPTION>=testselect</OPTION>
- </SELECT>
- </SPAN>
- <SPAN id="testlink" class="link" style="position: absolute; top: 270px; left: 20px; ">
- <A href="=testlink">
- <SPAN>=testlink</SPAN>
- </A>
- </SPAN>
- <SPAN id="testframe" class="iframe" style="position: absolute; top: 306px; left: 20px; ">
- <A href="/public/iframe.html">
- <SPAN class="fakeframe">
- <SPAN>frame ...</SPAN>
- </SPAN>
- </A>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.composite b/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.composite
deleted file mode 100644
index e367b69a9c..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.composite
+++ /dev/null
@@ -1,206 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="start" promote="start"/>
- <component x="260" y="220" name="htattrs1" title="html attrs:" color="cyan1">
- <implementation.python script="nuvem/htattrs.py"/>
- <service name="htattrs"/>
- <reference target="list1" name="value"/>
- </component>
- <component x="190" y="80" name="htbutton1" title="html button" color="cyan1">
- <implementation.python script="nuvem/htbutton.py"/>
- <service name="htbutton"/>
- <reference target="text8" name="value"/>
- </component>
- <component x="210" y="180" name="htcheck1" title="html checkbox" color="cyan1">
- <implementation.python script="nuvem/htcheck.py"/>
- <service name="htcheck"/>
- <reference target="text9" name="value"/>
- </component>
- <component x="180" y="10" name="htimg1" title="html img" color="cyan1">
- <implementation.python script="nuvem/htimg.py"/>
- <service name="htimg"/>
- <reference target="text1" name="value"/>
- </component>
- <component x="190" y="230" name="htimg2" title="html img" color="cyan1">
- <implementation.python script="nuvem/htimg.py"/>
- <service name="htimg"/>
- <reference target="htattrs1" name="value"/>
- </component>
- <component x="180" y="50" name="htlink1" title="html link" color="cyan1">
- <implementation.python script="nuvem/htlink.py"/>
- <service name="htlink"/>
- <reference target="list21" name="value"/>
- </component>
- <component x="400" y="330" name="htstyle1" title="html style" color="cyan1">
- <implementation.python script="nuvem/htstyle.py"/>
- <service name="htstyle"/>
- <reference target="list2" name="value"/>
- </component>
- <component x="100" y="10" name="item1" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htimg1" name="value"/>
- <property>testdynimg</property>
- </component>
- <component x="100" y="170" name="item10" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htcheck1" name="value"/>
- <property>testdyncheckbox</property>
- </component>
- <component x="110" y="230" name="item2" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htimg2" name="value"/>
- <property>teststyledimg</property>
- </component>
- <component x="400" y="300" name="item3" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text3" name="value"/>
- <property>onclick</property>
- </component>
- <component x="510" y="290" name="item4" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text4" name="value"/>
- <property>width</property>
- </component>
- <component x="510" y="320" name="item5" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text5" name="value"/>
- <property>height</property>
- </component>
- <component x="400" y="220" name="item6" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text10" name="value"/>
- <property>id</property>
- </component>
- <component x="400" y="260" name="item7" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="text2" name="value"/>
- <property>src</property>
- </component>
- <component x="90" y="50" name="item8" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htlink1" name="value"/>
- <property>testdynlink</property>
- </component>
- <component x="90" y="120" name="item9" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference target="htbutton1" name="value"/>
- <property>testdynbutton</property>
- </component>
- <component name="list" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item1" name="item" clonable="true"/>
- <reference target="item8" name="item" clonable="true"/>
- <reference target="item9" name="item" clonable="true"/>
- <reference target="item10" name="item" clonable="true"/>
- <reference target="item2" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list1" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item6" name="item" clonable="true"/>
- <reference target="item7" name="item" clonable="true"/>
- <reference target="item3" name="item" clonable="true"/>
- <reference target="htstyle1" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="item4" name="item" clonable="true"/>
- <reference target="item5" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="240" y="50" name="list21" title="list2" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="text6" name="name"/>
- <reference target="text7" name="value"/>
- </component>
- <component x="20" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference target="list" name="content"/>
- </component>
- <component x="240" y="10" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://tuscany.apache.org/images/TuscanyLogo.jpg</property>
- </component>
- <component x="430" y="220" name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>testimg</property>
- </component>
- <component x="440" y="260" name="text2" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://tuscany.apache.org/images/TuscanyLogo.jpg</property>
- </component>
- <component x="430" y="250" name="text3" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>alert('hey')</property>
- </component>
- <component x="560" y="280" name="text4" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>320px</property>
- </component>
- <component x="560" y="320" name="text5" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>60px</property>
- </component>
- <component x="280" y="50" name="text6" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>http://www.apache.org/</property>
- </component>
- <component x="280" y="80" name="text7" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>Apache</property>
- </component>
- <component x="270" y="80" name="text8" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>dynamic button</property>
- </component>
- <component x="300" y="180" name="text9" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>dynamic checkbox</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.stats b/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.stats
deleted file mode 100644
index 2e772401c9..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets3/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Test HTML generator components") (id "testwidgets3"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/testwidgets3/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/testwidgets3/htdocs/app.html
deleted file mode 100644
index 393d63c2d1..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/testwidgets3/htdocs/app.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<?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">
- <SPAN id="page:h2" class="h2" style="position: absolute; top: 0px; left: 2px; ">
- <H2>Test widget components</H2>
- </SPAN>
- <SPAN id="testdynimg" class="text" style="position: absolute; top: 36px; left: 2px; ">
- <SPAN>=testdynimg</SPAN>
- </SPAN>
- <SPAN id="testdynlink" class="text" style="position: absolute; top: 135px; left: 2px; ">
- <SPAN>=testdynlink</SPAN>
- </SPAN>
- <SPAN id="testdynbutton" class="text" style="position: absolute; top: 171px; left: 2px; ">
- <SPAN>=testdynbutton</SPAN>
- </SPAN>
- <SPAN id="testdyncheckbox" class="text" style="position: absolute; top: 207px; left: 2px; ">
- <SPAN>=testdyncheckbox</SPAN>
- </SPAN>
- <SPAN id="teststyledimg" class="text" style="position: absolute; top: 243px; left: 2px; ">
- <SPAN>=teststyledimg</SPAN>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/apps/twsms/app.composite b/sca-cpp/trunk/modules/edit/apps/twsms/app.composite
deleted file mode 100644
index 66523f4754..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/twsms/app.composite
+++ /dev/null
@@ -1,129 +0,0 @@
-<?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" name="app" targetNamespace="http://app">
- <service name="item" promote="property"/>
- <service name="send" promote="send"/>
- <component x="280" y="260" name="format2" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text12" name="pattern"/>
- <reference target="list31" name="values"/>
- </component>
- <component x="100" y="10" name="format4" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference target="text1" name="pattern"/>
- <reference target="list6" name="values"/>
- </component>
- <component x="180" y="330" name="list11" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference target="format2" name="value"/>
- </component>
- <component x="110" y="180" name="list21" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference target="text15" name="first"/>
- <reference target="list11" name="second"/>
- </component>
- <component x="410" y="310" name="list31" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference target="param4" name="first"/>
- <reference target="param5" name="second"/>
- <reference target="param6" name="third"/>
- </component>
- <component name="list6" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference target="param1" name="item" clonable="true"/>
- <reference target="param3" name="item" clonable="true"/>
- <reference target="param2" name="item" clonable="true"/>
- <reference target="text10" name="item" clonable="true"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="480" y="200" name="param1" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>sid</property>
- <property name="query" visible="false"/>
- </component>
- <component x="480" y="250" name="param2" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>sid</property>
- <property name="query" visible="false"/>
- </component>
- <component x="490" y="220" name="param3" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>token</property>
- <property name="query" visible="false"/>
- </component>
- <component x="430" y="310" name="param4" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>from</property>
- <property name="query" visible="false"/>
- </component>
- <component x="430" y="330" name="param5" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>to</property>
- <property name="query" visible="false"/>
- </component>
- <component x="440" y="370" name="param6" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>msg</property>
- <property name="query" visible="false"/>
- </component>
- <component x="80" y="10" name="post1" title="post" color="green1">
- <implementation.cpp path="lib/http" library="libhttppost"/>
- <service name="post"/>
- <reference target="format4" name="url"/>
- <reference target="list21" name="content"/>
- </component>
- <component x="10" y="10" name="send" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference target="post1" name="content"/>
- </component>
- <component x="430" y="80" name="text1" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>https://{0}:{1}@api.twilio.com/2010-04-01/Accounts/{2}/SMS/Messages</property>
- </component>
- <component x="490" y="270" name="text10" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>SMS/Messages</property>
- </component>
- <component x="410" y="280" name="text12" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>From={0}&amp;To={1}&amp;Body={2}</property>
- </component>
- <component x="180" y="300" name="text15" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>application/x-www-form-urlencoded</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/apps/twsms/app.stats b/sca-cpp/trunk/modules/edit/apps/twsms/app.stats
deleted file mode 100644
index 85c97c2457..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/twsms/app.stats
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "SMS send service") (id "twsms"))) \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/apps/twsms/htdocs/app.html b/sca-cpp/trunk/modules/edit/apps/twsms/htdocs/app.html
deleted file mode 100644
index d2eaebcdd0..0000000000
--- a/sca-cpp/trunk/modules/edit/apps/twsms/htdocs/app.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<?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">
- <SPAN id="page:h1" class="h1" style="position: absolute; top: 0px; left: 2px; ">
- <H1>SMS Send Service</H1>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 36px; left: 2px; ">
- <SPAN>To send an SMS use a URL like this:</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 63px; left: 2px; ">
- <SPAN>http://twsms..../?sid=...&amp;token=...&amp;from=...</SPAN>
- </SPAN>
- <SPAN id="page:text" class="text" style="position: absolute; top: 81px; left: 2px; ">
- <SPAN>&amp;to=...&amp;msg=...</SPAN>
- </SPAN>
-</DIV>
diff --git a/sca-cpp/trunk/modules/edit/composites.py b/sca-cpp/trunk/modules/edit/composites.py
deleted file mode 100644
index 87569a8700..0000000000
--- a/sca-cpp/trunk/modules/edit/composites.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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.
-
-# App composites collection implementation
-from util import *
-
-# Convert an id to an app id
-def appid(id):
- return ("'" + car(id), "'app.composite")
-
-# Put an app into the apps db
-def put(id, app, cache):
- comp = cdr(cadddr(car(app)))
- cache.put(appid(id), comp)
- return True
-
-# Get an app from the apps db
-def get(id, cache):
- if isNil(id):
- return (("'feed", ("'title", "Composites"), ("'id", "composites")),)
- 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):
- cache.delete(appid(id))
- return True
-
diff --git a/sca-cpp/trunk/modules/edit/config-backup b/sca-cpp/trunk/modules/edit/config-backup
deleted file mode 100755
index 9951518863..0000000000
--- a/sca-cpp/trunk/modules/edit/config-backup
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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.
-
-cd ../../
-tar czf ../config-backup.tar.gz modules/edit/*start modules/edit/*stop modules/edit/htdocs/*.js modules/edit/htdocs/public/*.js modules/edit/htdocs/home/*.b64 modules/edit/htdocs/home/*.png
-
diff --git a/sca-cpp/trunk/modules/edit/dashboards.py b/sca-cpp/trunk/modules/edit/dashboards.py
deleted file mode 100644
index f42106e0ec..0000000000
--- a/sca-cpp/trunk/modules/edit/dashboards.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# 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.
-
-# Dashboards collection implementation
-from util import *
-
-# Convert a particular user id to a dashboard id
-def dashboardid(user):
- return ("'" + user.id(), "'user.apps")
-
-# Get a dashboard from the cache
-def getdashboard(id, cache):
- dashboard = cache.get(id)
- if isNil(dashboard) or dashboard is None:
- return ()
- return dashboard
-
-# Put an app into the user's dashboard
-def put(id, app, user, cache, apps):
- def putapp(app, dashboard):
- if isNil(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)))
-
- appentry = (("'entry", cadr(car(app)), ("'id", car(id))),)
- dashboard = putapp(appentry, getdashboard(dashboardid(user), cache))
- cache.put(dashboardid(user), dashboard)
-
- # Update app in app repository
- apps.put(id, app);
- return True
-
-# Get apps from the user's dashboard
-def get(id, user, cache, apps):
- def findapp(id, dashboard):
- if isNil(dashboard):
- return None
- if car(id) == cadr(caddr(car(dashboard))):
- return (car(dashboard),)
- return findapp(id, cdr(dashboard))
-
- if isNil(id):
- 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
-def delete(id, user, cache, apps):
- if isNil(id):
- return cache.delete(dashboardid(user))
-
- def deleteapp(id, dashboard):
- if isNil(dashboard):
- return ()
- if car(id) == cadr(caddr(car(dashboard))):
- return cdr(dashboard)
- return cons(car(dashboard), deleteapp(id, cdr(dashboard)))
-
- dashboard = deleteapp(id, getdashboard(dashboardid(user), cache))
- cache.put(dashboardid(user), dashboard)
-
- # Delete app from app repository
- apps.delete(id);
- return True
-
diff --git a/sca-cpp/trunk/modules/edit/dashboards/jane@localhost/user.apps b/sca-cpp/trunk/modules/edit/dashboards/jane@localhost/user.apps
deleted file mode 100644
index 710de5f62e..0000000000
--- a/sca-cpp/trunk/modules/edit/dashboards/jane@localhost/user.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty test app") (id "test")))
diff --git a/sca-cpp/trunk/modules/edit/dashboards/jane@sca-store.com/user.apps b/sca-cpp/trunk/modules/edit/dashboards/jane@sca-store.com/user.apps
deleted file mode 100644
index 710de5f62e..0000000000
--- a/sca-cpp/trunk/modules/edit/dashboards/jane@sca-store.com/user.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty test app") (id "test")))
diff --git a/sca-cpp/trunk/modules/edit/dashboards/john@localhost/user.apps b/sca-cpp/trunk/modules/edit/dashboards/john@localhost/user.apps
deleted file mode 100644
index 710de5f62e..0000000000
--- a/sca-cpp/trunk/modules/edit/dashboards/john@localhost/user.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty test app") (id "test")))
diff --git a/sca-cpp/trunk/modules/edit/dashboards/john@sca-store.com/user.apps b/sca-cpp/trunk/modules/edit/dashboards/john@sca-store.com/user.apps
deleted file mode 100644
index 710de5f62e..0000000000
--- a/sca-cpp/trunk/modules/edit/dashboards/john@sca-store.com/user.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "An empty test app") (id "test")))
diff --git a/sca-cpp/trunk/modules/edit/data-backup b/sca-cpp/trunk/modules/edit/data-backup
deleted file mode 100755
index 18cba8fbbe..0000000000
--- a/sca-cpp/trunk/modules/edit/data-backup
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/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.
-
-cd ../../
-tar czf ../data-backup.tar.gz modules/edit/accounts modules/edit/apps modules/edit/dashboards modules/edit/store modules/edit/tmp/appdata
-
diff --git a/sca-cpp/trunk/modules/edit/edit.composite b/sca-cpp/trunk/modules/edit/edit.composite
deleted file mode 100644
index 0e348fd105..0000000000
--- a/sca-cpp/trunk/modules/edit/edit.composite
+++ /dev/null
@@ -1,275 +0,0 @@
-<?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"
- targetNamespace="http://edit"
- name="edit">
-
- <component name="User">
- <implementation.python script="user.py"/>
- <property name="user">?</property>
- <property name="email">?</property>
- <property name="nickname">?</property>
- <property name="fullname">?</property>
- <property name="firstname">?</property>
- <property name="lastname">?</property>
- <property name="realm">?</property>
- <service name="User">
- <binding.http uri="user"/>
- </service>
- </component>
-
- <component name="EditWidget">
- <implementation.widget location="/index.html"/>
- <reference name="user" target="User"/>
- <reference name="accounts" target="Accounts"/>
- <reference name="dashboards" target="Dashboards"/>
- <reference name="apps" target="Apps"/>
- <reference name="store" target="AppStore"/>
- <reference name="palettes" target="Palettes"/>
- <reference name="composites" target="Composites"/>
- <reference name="pages" target="Pages"/>
- <reference name="log" target="Log"/>
- </component>
-
- <component name="AppWidget">
- <implementation.widget location="/app/index.html"/>
- <reference name="user" target="User"/>
- <reference name="pages" target="Pages"/>
- <reference name="log" target="Log"/>
- </component>
-
- <component name="Accounts">
- <implementation.python script="accounts.py"/>
- <service name="Accounts">
- <binding.http uri="accounts"/>
- </service>
- <reference name="user" target="User"/>
- <reference name="cache" target="AccountCache"/>
- </component>
-
- <component name="Dashboards">
- <implementation.python script="dashboards.py"/>
- <service name="Dashboards">
- <binding.http uri="dashboards"/>
- </service>
- <reference name="user" target="User"/>
- <reference name="cache" target="DashboardCache"/>
- <reference name="apps" target="Apps"/>
- </component>
-
- <component name="AppStore">
- <implementation.python script="store.py"/>
- <service name="AppStore">
- <binding.http uri="appstore"/>
- </service>
- <reference name="cache" target="StoreCache"/>
- </component>
-
- <component name="Apps">
- <implementation.python script="apps.py"/>
- <service name="Apps">
- <binding.http uri="apps"/>
- </service>
- <reference name="cache" target="AppCache"/>
- <reference name="store" target="AppStore"/>
- <reference name="composites" target="Composites"/>
- <reference name="pages" target="Pages"/>
- </component>
-
- <component name="Composites">
- <implementation.python script="composites.py"/>
- <service name="Composites">
- <binding.http uri="composites"/>
- </service>
- <reference name="cache" target="AppDocCache"/>
- </component>
-
- <component name="Pages">
- <implementation.python script="pages.py"/>
- <service name="Pages">
- <binding.http uri="pages"/>
- </service>
- <reference name="cache" target="AppDocCache"/>
- </component>
-
- <component name="Palettes">
- <implementation.python script="palettes.py"/>
- <service name="Palettes">
- <binding.http uri="palettes"/>
- </service>
- <reference name="cache" target="PaletteDocCache"/>
- </component>
-
- <component name="AccountCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="AccountCache">
- <binding.http uri="accountcache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="AccountDB"/>
- <reference name="l2writer" target="AccountDB"/>
- </component>
-
- <component name="AccountDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">accounts</property>
- <property name="format">scheme</property>
- <service name="AccountDB">
- <binding.http uri="accountdb"/>
- </service>
- </component>
-
- <component name="DashboardCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="DashboardCache">
- <binding.http uri="dashboardcache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="DashboardDB"/>
- <reference name="l2writer" target="DashboardDB"/>
- </component>
-
- <component name="DashboardDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">dashboards</property>
- <property name="format">scheme</property>
- <service name="DashboardDB">
- <binding.http uri="dashboarddb"/>
- </service>
- </component>
-
- <component name="StoreCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="StoreCache">
- <binding.http uri="storecache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="StoreDB"/>
- <reference name="l2writer" target="StoreDB"/>
- </component>
-
- <component name="StoreDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">store</property>
- <property name="format">scheme</property>
- <service name="StoreDB">
- <binding.http uri="storedb"/>
- </service>
- </component>
-
- <component name="AppCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="AppCache">
- <binding.http uri="appcache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="AppDB"/>
- <reference name="l2writer" target="AppDB"/>
- </component>
-
- <component name="AppDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">apps</property>
- <property name="format">scheme</property>
- <service name="AppDB">
- <binding.http uri="appdb"/>
- </service>
- </component>
-
- <component name="AppDocCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="AppDocCache">
- <binding.http uri="appdoccache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="AppDocDB"/>
- <reference name="l2writer" target="AppDocDB"/>
- </component>
-
- <component name="AppDocDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">apps</property>
- <property name="format">xml</property>
- <service name="AppDocDB">
- <binding.http uri="appdocdb"/>
- </service>
- </component>
-
- <component name="PaletteDocCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="PaletteDocCache">
- <binding.http uri="palettedoccache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="PaletteDocDB"/>
- <reference name="l2writer" target="PaletteDocDB"/>
- </component>
-
- <component name="PaletteDocDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">palettes</property>
- <property name="format">xml</property>
- <service name="PaletteDocDB">
- <binding.http uri="palettedocdb"/>
- </service>
- </component>
-
- <component name="AppDataFileCache">
- <implementation.cpp path="../../components/cache" library="libdatacache"/>
- <service name="AppDataFileCache">
- <binding.http uri="appdatafilecache"/>
- </service>
- <reference name="l1reader" target="Memcache"/>
- <reference name="l1writer" target="Memcache"/>
- <reference name="l2reader" target="AppDataFileDB"/>
- <reference name="l2writer" target="AppDataFileDB"/>
- </component>
-
- <component name="AppDataFileDB">
- <implementation.cpp path="../../components/filedb" library="libfiledb"/>
- <property name="dbname">tmp/appdata/filedb</property>
- <property name="format">scheme</property>
- <service name="AppDataFileDB">
- <binding.http uri="appdatafiledb"/>
- </service>
- </component>
-
- <component name="Memcache">
- <implementation.cpp path="../../components/cache" library="libmemcache"/>
- <service name="Memcache">
- <binding.http uri="memcache"/>
- </service>
- <property name="servers">localhost:11211</property>
- </component>
-
- <component name="Log">
- <implementation.python script="log.py"/>
- <service name="Log">
- <binding.http uri="log"/>
- </service>
- </component>
-
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/account/index.html b/sca-cpp/trunk/modules/edit/htdocs/account/index.html
deleted file mode 100644
index 291f6dea1c..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/account/index.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span><span id="userNameHeader"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table style="width: 100%;">
-<tr>
-<th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Account</th>
-</tr>
-</table>
-
-<form id="userForm">
-<table style="width: 100%;">
-<tr><tr><td><b>Photo:</b></td></tr>
-<tr><td><img id="userimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Name:</b></td></tr>
-<tr><td><input type="text" id="userTitle" size="30" placeholder="Enter your name" style="width: 300px;"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
-<tr><td><textarea id="userDescription" cols="40" rows="3" placeholder="Enter a short description of yourself" style="width: 300px;"></textarea></td></tr>
-</table>
-
-<br/>
-<table style="width: 100%;">
-<tr>
-<th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Calendar</th>
-</tr>
-</table>
-
-<table>
-<tr><td style="padding-right: 2px;"><input type="text" id="sched1" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service1" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="sched2" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service2" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="sched3" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service3" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="sched4" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service4" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="sched5" size="10" placeholder="Schedule" style="width: 80px;"/></td><td><input type="text" id="service5" size="2048" placeholder="Service URL" style="width: 200px;"/></td></tr>
-</table>
-<br/>
-
-<table style="width: 100%;">
-<tr>
-<th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Key chain</th>
-</tr>
-</table>
-
-<table>
-<tr><td style="padding-right: 2px;"><input type="text" id="name1" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value1" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name2" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value2" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name3" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value3" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name4" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value4" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name5" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value5" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name6" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value6" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name7" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value7" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name8" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value8" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name9" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value9" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-<tr><td style="padding-right: 2px;"><input type="text" id="name10" size="10" placeholder="Key name" style="width: 80px;"/></td><td><input type="text" id="value10" size="2048" placeholder="Key value" style="width: 200px;"/></td></tr>
-</table>
-</form>
-
-<script type="text/javascript">
-
-// Init service references
-var editWidget = sca.component("EditWidget");
-var user= sca.defun(sca.reference(editWidget, "user"), "id");
-var accounts = sca.reference(editWidget, "accounts");
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Account';
-
-// Set images
-$('userimg').src = ui.b64img(appcache.get('/public/user.b64'));
-
-/**
- * The current account entry and corresponding saved XML content.
- */
-var username;
-var accountentry;
-var savedaccountentryxml = '';
-
-/**
- * Get and display the user's account.
- */
-function getaccount(name) {
- showStatus('Loading');
-
- return accounts.get(name, function(doc) {
-
- // Stop now if we didn't get an account
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- accountentry = doc != null? car(elementsToValues(atom.readATOMEntry(mklist(doc)))) : mklist("'entry", mklist("'title", ''), mklist("'id", name));
- username = cadr(assoc("'id", cdr(accountentry)));
- var title = cadr(assoc("'title", cdr(accountentry)));
- $('userNameHeader').innerHTML = username;
- $('userTitle').value = title;
-
- var content = cadr(assoc("'content", cdr(accountentry)));
- var acct = isNil(content)? mklist() : cdr(content);
-
- var desc = assoc("'description", acct);
- $('userDescription').innerHTML = isNil(desc) || isNil(cdr(desc))? '' : cadr(desc);
-
- var cal = assoc("'calendar", acct);
- reduce(function(i, evt) {
- var sched = assoc("'@schedule", evt);
- var svc = assoc("'@service", evt);
- $('sched' + i).value = isNil(sched)? '' : cadr(sched);
- $('service' + i).value = isNil(svc)? '' : cadr(svc);
- return i + 1;
- }, 1, isNil(cal)? mklist() : cadr(cadr(cal)));
-
- var keys = assoc("'keys", acct);
- reduce(function(i, key) {
- var kn = assoc("'@name", key);
- var kv = assoc("'@value", key);
- $('name' + i).value = isNil(kn)? '' : cadr(kn);
- $('value' + i).value = isNil(kv)? '' : cadr(kv);
- return i + 1;
- }, 1, isNil(keys)? mklist() : cadr(cadr(keys)));
-
- savedaccountentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(accountentry))));
- return true;
- });
-}
-
-/**
- * Save the user's account.
- */
-function save(entryxml) {
- if (isNil(username))
- return false;
- showStatus('Saving');
- savedaccountentryxml = entryxml;
- accounts.put(username, savedaccountentryxml, function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
-
- showStatus('Saved');
- return true;
- });
- return true;
-}
-
-/**
- * Handle a change event
- */
-function onaccountchange() {
- var title = $('userTitle').value;
- var desc = $('userDescription').value;
- var cal = map(function(i) {
- var sched = $('sched' + i).value;
- var svc = $('service' + i).value;
- return mklist("'event", mklist("'@schedule", sched), mklist("'@service", svc));
- }, range(1, 6));
- var keys = map(function(i) {
- var kn = $('name' + i).value;
- var kv = $('value' + i).value;
- return mklist("'key", mklist("'@name", kn), mklist("'@value", kv));
- }, range(1, 11));
-
- var accountentry = mklist("'entry", mklist("'title", title != ''? title : username), mklist("'id", username),
- mklist("'content", mklist("'account", mklist("'description", desc), cons("'keys", keys), cons("'calendar", cal))));
- var entryxml = car(atom.writeATOMEntry(valuesToElements(mklist(accountentry))));
- if (savedaccountentryxml == entryxml)
- return false;
-
- showStatus('Modified');
- return save(entryxml);
-}
-
-$('userTitle').onchange = onaccountchange;
-$('userDescription').onchange = onaccountchange;
-map(function(i) {
- $('sched' + i).onchange = onaccountchange;
- $('service' + i).onchange = onaccountchange;
- return true;
-}, range(1, 6));
-map(function(i) {
- $('name' + i).onchange = onaccountchange;
- $('value' + i).onchange = onaccountchange;
- return true;
-}, range(1, 11));
-
-/**
- * Handle a form submit event.
- */
-$('userForm').onsubmit = function() {
- onaccountchange();
- return false;
-};
-
-// Get the user's account
-getaccount();
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/app/cache-manifest.cmf b/sca-cpp/trunk/modules/edit/htdocs/app/cache-manifest.cmf
deleted file mode 100644
index 6ea53970aa..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/app/cache-manifest.cmf
+++ /dev/null
@@ -1,17 +0,0 @@
-CACHE MANIFEST
-
-# Version 5
-
-# App resources
-/favicon.ico
-/public/iframe-min.html
-/public/img.png
-/public/notauth/
-/public/notfound/
-/public/notyet/
-/public/oops/
-/public/touchicon.png
-
-NETWORK:
-*
-
diff --git a/sca-cpp/trunk/modules/edit/htdocs/app/index.html b/sca-cpp/trunk/modules/edit/htdocs/app/index.html
deleted file mode 100644
index 0b01c1d3bd..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/app/index.html
+++ /dev/null
@@ -1,906 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html manifest="cache-manifest.cmf">
-<head>
-<title></title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<link rel="apple-touch-icon" href="/public/touchicon.png"/>
-<base href="/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- // Redirect to login page if not signed in
- document.location = '/login/';
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- // Redirect to login page if not signed in
- if (http.status == 403)
- document.location = '/login/';
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-// Redirect to login page if not signed in
-if (document.location.protocol == 'https:' && !ui.signedin())
- document.location = '/login/';
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="mainbodydiv" class="mainbodydiv">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="content">
-</div>
-
-<script type="text/javascript">
-
-/**
- * Get the app name
- */
-var appname = location.pathname.split('/')[1];
-
-// Set page title
-document.title = appname;
-
-/**
- * The main page div.
- */
-var contentdiv = $('content');
-
-/**
- * Initialize the app HTTP clients.
- */
-var appWidget = sca.component('AppWidget');
-var pagecomp = sca.reference(appWidget, 'pages');
-var startcomp = sca.httpclient('start', '/' + appname + '/start');
-var stopcomp = sca.httpclient('stop', '/' + appname + '/stop');
-var timercomp = sca.httpclient('timer', '/' + appname + '/timer');
-var animationcomp = sca.httpclient('animation', '/' + appname + '/animation');
-var locationcomp = sca.httpclient('location', '/' + appname + '/location');
-
-/**
- * Pre-fetch app resources.
- */
-var appresources = [
- ['/all-min.js'],
- ['/ui-min.css'],
- ['/config-min.js'],
- ['/public/config-min.js']
-];
-
-/**
- * Handle application cache events.
- */
-applicationCache.addEventListener('checking', function(e) {
- //log('appcache checking', e);
-}, false);
-applicationCache.addEventListener('error', function(e) {
- //log('appcache error', e);
-}, false);
-applicationCache.addEventListener('noupdate', function(e) {
- //log('appcache noupdate', e);
-}, false);
-applicationCache.addEventListener('downloading', function(e) {
- //log('appcache downloading', e);
-}, false);
-applicationCache.addEventListener('progress', function(e) {
- //log('appcache progress', e);
-}, false);
-applicationCache.addEventListener('updateready', function(e) {
- //log('appcache updateready', e);
- applicationCache.swapCache();
- //log('appcache swapped', e);
-}, false);
-applicationCache.addEventListener('cached', function(e) {
- //log('appcache cached', e);
- map(function(res) {
- appcache.get(res[0]);
- }, appresources);
-}, false);
-
-/**
- * Handle network offline/online events.
- */
-window.addEventListener('offline', function(e) {
- //log('going offline');
-}, false);
-window.addEventListener('online', function(e) {
- //log('going online');
-}, false);
-
-//log(navigator.onLine? 'online' : 'offline');
-
-/**
- * Find a named value in a tree of elements. The value name is given
- * as a list of ids.
- */
-function namedvalue(l, id) {
- if (isNil(l))
- return null;
- var e = car(l);
-
- // Element matches id segment
- if (car(id) == elementName(e)) {
-
- // Found element matching the whole id path
- if (isNil(cdr(id)))
- return e;
-
- // Search for next id segments in child elements
- if (!elementHasValue(e)) {
- var v = namedvalue(elementChildren(e), cdr(id));
- if (v != null)
- return v;
- }
- }
-
- // Search for id through the whole element tree
- if (!elementHasValue(e)) {
- var v = namedvalue(elementChildren(e), id);
- if (v != null)
- return v;
- }
- return namedvalue(cdr(l), id);
-}
-
-/**
- * Return the value of an input element.
- */
-function inputvalue(e) {
- if (e.className == 'entry' || e.className == 'password') {
- return car(childElements(e)).value;
- }
- if (e.className == 'button') {
- return car(childElements(e)).value;
- }
- if (e.className == 'checkbox') {
- if (!car(childElements(e)).checked)
- return null;
- return car(childElements(e)).value;
- }
- if (e.className == 'select') {
- return car(childElements(car(childElements(e)))).value;
- }
- return null;
-};
-
-/**
- * Set a value into a widget.
- */
-function setwidgetvalue(e, dv) {
- var htattrs = namedElementChild("'htattrs", dv);
-
- function attr(ce) {
- return mklist(elementName(ce) == "'htstyle"? 'style' : elementName(ce).substring(1), elementHasValue(ce)? elementValue(ce) : elementChildren(ce));
- }
-
- function vattr(dv) {
- return (elementHasValue(dv) && !isNil(elementValue(dv)))? mklist(mklist('value', isNil(elementValue(dv))? '' : elementValue(dv))) : mklist();
- }
-
- function sattr(dv) {
- var s = namedElementChild("'htstyle", dv);
- return isNil(s)? mklist() : mklist(mklist('style', elementHasValue(s)? elementValue(s) : elementChildren(s)))
- }
-
- var attrs = append(append(isNil(htattrs)? mklist() : map(attr, elementChildren(htattrs)), vattr(dv)), sattr(dv));
-
- // Set the attributes of the widget
- function setattrs(vsetter, attrs, ce) {
- return map(function(a) {
- if (car(a) == 'value')
- return vsetter(a, ce);
-
- if (car(a) == 'style') {
- // Split a style property between a style attribute
- // and a stylesheet definition in the document's head
-
- function prop(s) {
- if (s == ';')
- return '';
- var i = s.indexOf('<style>');
- if (i == -1)
- return s;
- var j = s.indexOf('</style>');
- return s.substring(0, i) + prop(s.substring(j + 8));
- }
-
- function sheet(s) {
- var i = s.indexOf('<style>');
- if (i == -1)
- return '';
- var j = s.indexOf('</style>');
- return s.substring(i + 7, j) + sheet(s.substring(j + 8));
- }
-
- var st = cadr(a).replace(new RegExp('{id}', 'g'), e.id);
- var p = prop(st);
- var s = sheet(st);
-
- // Define the stylesheet
- if (s != '') {
- var esheet = ui.elementByID(contentdiv, 'style_' + e.id);
- if (isNil(esheet)) {
- var nesheet = document.createElement('style');
- nesheet.id = 'style_' + e.id;
- nesheet.type = 'text/css';
- document.head.appendChild(nesheet);
- nesheet.innerHTML = s;
- } else {
- esheet.innerHTML = s;
- }
- }
-
- var aname = ce.style.webkitAnimationName;
-
- // Set the style attribute
- ce.setAttribute('style', p);
-
- // Restart current animation if necessary
- if (!isNil(aname) && ce.style.webkitAnimationName == aname) {
- ce.style.webkitAnimationName = '';
- setTimeout(function() {
- ce.style.webkitAnimationName = aname;
- }, 0);
- }
- return a;
- }
-
- ce.setAttribute(car(a), cadr(a));
- return a;
- }, attrs);
- }
-
- if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
- var ce = car(childElements(e));
- return setattrs(function(a, ce) { ce.innerHTML = cadr(a); }, attrs, ce);
- }
- if (e.className == 'entry' || e.className == 'password') {
- var ce = car(childElements(e));
- return setattrs(function(a, ce) { ce.defaultValue = cadr(a); }, attrs, ce);
- }
- if (e.className == 'button') {
- var ce = car(childElements(e));
- return setattrs(function(a, ce) { ce.value = cadr(a); }, attrs, ce);
- }
- if (e.className == 'checkbox') {
- var ce = car(childElements(e));
-
- function setcheckvalue(a, ce) {
- var v = cadr(a);
- ce.value = v;
- map(function(n) { if (n.nodeName == "SPAN") n.innerHTML = v; return n; }, nodeList(e.childNodes));
- return true;
- }
-
- return setattrs(setcheckvalue, attrs, ce);
- }
- if (e.className == 'select') {
- var ce = car(childElements(car(childElements(e))));
-
- function setselectvalue(a, ce) {
- var v = cadr(a);
- ce.value = v;
- ce.innerHTML = v;
- return true;
- }
-
- return setattrs(setselectvalue, attrs, ce);
- }
- if (e.className == 'list') {
- var dl = ui.datalist(isNil(dv)? mklist() : mklist(dv));
- e.innerHTML = dl;
- return dl;
- }
- if (e.className == 'table') {
- var dl = ui.datatable(isNil(dv)? mklist() : mklist(dv));
- e.innerHTML = dl;
- return dl;
- }
- if (e.className == 'link') {
- var ce = car(childElements(e));
-
- function setlinkvalue(a, ce) {
- var v = cadr(a);
- if (isList(v)) {
- ce.href = car(v);
- ce.innerHTML = cadr(v);
- return true;
- }
- ce.href = v;
- ce.innerHTML = v;
- return true;
- }
-
- return setattrs(setlinkvalue, attrs, ce);
- }
- if (e.className == 'img') {
- var ce = car(childElements(e));
- return setattrs(function(a, ce) { ce.setAttribute('src', cadr(a)); }, attrs, ce);
- }
- if (e.className == 'iframe') {
- var ce = car(childElements(e));
- return setattrs(function(a, ce) { ce.setAttribute('src', cadr(a)); }, attrs, ce);
- }
- return '';
-};
-
-/**
- * Update the app page with the given app data.
- */
-function updatepage(l) {
- if (isNil(l))
- return true;
-
- // Update the widgets values
- function updatewidget(e) {
- var dv = namedvalue(l, map(function(t) { return "'" + t; }, e.id.split('.')));
- if (dv == null || isNil(dv))
- return e;
- setwidgetvalue(e, dv);
- return e;
- }
-
- map(updatewidget, filter(function(e) { return !isNil(e.id) && e.id.substring(0, 5) != 'page:'; }, nodeList(ui.elementByID(contentdiv, 'page').childNodes)));
- return true;
-}
-
-/**
- * Convert a document to application data.
- */
-function docdata(doc) {
- if (isNil(doc))
- return null;
-
- if (json.isJSON(mklist(doc)))
- return json.readJSON(mklist(doc));
-
- if (atom.isATOMEntry(mklist(doc)))
- return atom.readATOMEntry(mklist(doc));
-
- if (atom.isATOMFeed(mklist(doc)))
- return atom.readATOMFeed(mklist(doc));
-
- return doc;
-}
-
-/**
- * Bind a handler to a widget.
- */
-function bindwidgethandler(e, appname) {
- if (e.className == 'button') {
- var b = car(childElements(e));
- b.name = e.id;
- b.onclick = function() { return buttonClickHandler(b.value, appname); };
- return e;
- }
- if (e.className == 'link') {
- var l = car(childElements(e));
- var hr = l.href;
- if (hr.substring(0, 5) == 'link:' && hr.indexOf('://') == -1) {
- var f = function(e) {
- e.preventDefault();
- return buttonClickHandler(hr.substring(5), appname);
- };
- l.ontouchstart = l.onclick = f;
- l.href = 'javascript:void()';
- }
- return e;
- }
- if (e.className == 'entry' || e.className == 'password' || e.className == 'checkbox') {
- car(childElements(e)).name = e.id;
- return e;
- }
- if (e.className == 'select') {
- var ce = car(childElements(car(childElements(e))));
- ce.name = e.id;
- return e;
- }
- return e;
-}
-
-/**
- * Initial fixup of a widget.
- */
-function fixupwidget(e) {
- if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
- if (e.className == 'section')
- e.style.width = '100%';
- var ce = car(childElements(e));
- if (ce.innerHTML == '=' + e.id)
- ce.innerHTML = '';
- return e;
- }
- if (e.className == 'entry' || e.className == 'password') {
- var ce = car(childElements(e));
- if (ce.defaultValue == '=' + e.id)
- ce.defaultValue = '';
- return e;
- }
- if (e.className == 'button') {
- var ce = car(childElements(e));
- if (ce.value == '=' + e.id)
- ce.value = '';
- return e;
- }
- if (e.className == 'checkbox') {
- var ce = car(childElements(e));
- if (ce.value == '=' + e.id) {
- ce.value = '';
- map(function(n) { if (n.nodeName == "SPAN") n.innerHTML = ''; return n; }, nodeList(e.childNodes));
- }
- return e;
- }
- if (e.className == 'select') {
- var ce = car(childElements(car(childElements(e))));
- if (ce.value == '=' + e.id) {
- ce.value = '';
- ce.innerHTML = '';
- }
- return e;
- }
- if (e.className == 'list') {
- car(childElements(e)).innerHTML = '';
- e.style.width = '100%';
- car(childElements(e)).style.width = '100%';
- return e;
- }
- if (e.className == 'table') {
- car(childElements(e)).innerHTML = '';
- e.style.width = '100%';
- car(childElements(e)).style.width = '100%';
- return e;
- }
- if (e.className == 'link') {
- var ce = car(childElements(e));
- if (ce.innerHTML == '=' + e.id)
- ce.innerHTML = '';
- return e;
- }
- if (e.className == 'img') {
- var ce = car(childElements(e));
- return e;
- }
- if (e.className == 'iframe') {
- var ce = car(childElements(e));
- e.innerHTML = '<iframe src="' + ce.href + '" frameborder="no" scrolling="no"></iframe>';
- return e;
- }
- return e;
-}
-
-/**
- * Set initial value of a widget.
- */
-function initwidget(e) {
- if (!isNil(e.id) && e.id.substring(0, 5) != 'page:')
- setwidgetvalue(e, mklist());
- return e;
-}
-
-/**
- * Get app data from the main app page component.
- */
-function getpagedata(appname) {
- try {
-
- // Display component data on the page
- function displaypage(doc) {
- updatepage(docdata(doc));
- return true;
- }
-
- // Eval a component init script
- function evalcompinit(doc) {
- if (isNil(doc))
- return true;
- var js = car(json.readJSON(mklist(doc)));
- if (!elementHasValue(js))
- return true;
- eval(elementValue(js));
- return true;
- }
-
- // Initial setup of a widget
- function setupwidget(e) {
- initwidget(e);
- fixupwidget(e);
- bindwidgethandler(e, appname);
- }
-
- // Setup the widgets
- map(setupwidget, filter(function(e) { return !isNil(e.id); }, nodeList(ui.elementByID(contentdiv, 'page').childNodes)));
-
- // Get the component app data
- startcomp.get(location.search, function(doc, e) {
- if (isNil(doc)) {
- log('error on get(start, ' + location.search + ')', e);
- return false;
- }
-
- // Display data on the page
- displaypage(doc);
- });
-
- // Get and eval the optional timer, animation and location watch setup scripts
- timercomp.get('setup', function(doc, e) {
- if (isNil(doc)) {
- log('error on get(timer, setup)', e);
- return false;
- }
-
- // Evaluate the component init expression
- return evalcompinit(doc);
- });
- animationcomp.get('setup', function(doc, e) {
- if (isNil(doc)) {
- log('error on get(animation, setup)', e);
- return false;
- }
-
- // Evaluate the component init expression
- return evalcompinit(doc);
- });
- locationcomp.get('setup', function(doc, e) {
- if (isNil(doc)) {
- log('error on get(location, setup)', e);
- return false;
- }
-
- // Evaluate the component init expression
- return evalcompinit(doc);
- });
-
- return true;
-
- } catch(e) {
- log('error in getpagedata()', e);
- return true;
- }
-}
-
-/**
- * Build a query string from the values of the page's input fields.
- */
-function compquery() {
- function queryarg(e) {
- return e.id + '=' + inputvalue(e);
- }
-
- function childrenList(n) {
- return append(nodeList(n.childNodes), reduce(append, mklist(), map(childrenList, nodeList(n.childNodes))));
- }
-
- var args = map(queryarg, filter(function(e) { return !isNil(e.id) && !isNil(inputvalue(e)); }, childrenList(ui.elementByID(contentdiv, 'page'))));
-
- // Append current location properties if known
- if (!isNil(geoposition)) {
- var g = geoposition;
- args = append(args, mklist('latitude=' + g.coords.latitude, 'longitude=' + g.coords.longitude, 'altitude=' + g.coords.altitude,
- 'accuracy=' + g.coords.accuracy, 'altitudeAccuracy=' + g.coords.altitudeAccuracy, 'heading=' + g.coords.heading,
- 'speed=' + g.coords.speed));
- }
-
- return '?' + args.join('&');
-}
-
-/**
- * Handle a button click event.
- */
-function buttonClickHandler(id, appname) {
- try {
- var uri = compquery();
- return sca.component(id, appname).get(uri, function(doc, e) {
- if (isNil(doc)) {
- log('error on get(button, ' + uri + ')', e);
- return false;
- }
-
- // Inject data into the page
- updatepage(docdata(doc));
- });
- } catch(e) {
- log('error in buttonClickHandler()', e);
- return true;
- }
-}
-
-/**
- * Handle a timer interval event.
- */
-function intervalHandler() {
- try {
- var uri = compquery();
- return timercomp.get(uri, function(doc, e) {
- if (isNil(doc)) {
- log('error on get(timer, ' + uri + ')', e);
- return false;
- }
-
- // Inject data into the page
- updatepage(docdata(doc));
- });
- } catch(e) {
- log('error in intervalHandler()', e);
- return true;
- }
-}
-
-/**
- * Setup an interval timer.
- */
-function setupIntervalHandler(msec) {
- intervalHandler();
- try {
- return setInterval(intervalHandler, msec);
- } catch(e) {
- log('error in setupIntervalHandler()', e);
- return true;
- }
-}
-
-/**
- * Handle an animation event.
- */
-var animationData = null;
-var gettingAnimationData = false;
-var currentAnimationData = null;
-var animationLoop = 0;
-var currentAnimationLoop = 0;
-
-function animationHandler() {
- try {
- function applyAnimation() {
- // Update page with current animation data
- updatepage(car(currentAnimationData));
-
- // End of animation?
- if (isNil(cdr(currentAnimationData))) {
- if (currentAnimationLoop == -1) {
- // Repeat current animation forever
- currentAnimationData = animationData;
- return true;
- }
-
- currentAnimationLoop = currentAnimationLoop - 1;
- if (currentAnimationLoop <= 0) {
- // Get next animation data
- currentAnimationData = null;
- animationData = null;
- return true;
- }
-
- // Repeat animation
- currentAnimationData = animationData;
- return true;
- }
-
- // Move to the next animation frame
- currentAnimationData = cdr(currentAnimationData);
- return true;
- }
-
- // Get new animation data if necessary
- if (isNil(animationData)) {
- if (gettingAnimationData)
- return true;
- var uri = compquery();
- return animationcomp.get(uri, function(doc, e) {
- if (isNil(doc)) {
- log('error on get(animation, ' + uri + ')', e);
- return false;
- }
-
- // Apply the new animation
- currentAnimationData = docdata(doc);
- currentAnimationLoop = animationLoop;
- gettingAnimationData = false;
- applyAnimation();
- });
- }
-
- // Apply the current animation
- return applyAnimation();
-
- } catch(e) {
- log('error in animationHandler()', e);
- return true;
- }
-}
-
-/**
- * Setup an animation.
- */
-function setupAnimationHandler(msec, loop) {
- animationLoop = loop;
- animationHandler();
- try {
- return setInterval(animationHandler, msec);
- } catch(e) {
- log('error in setupAnimationHandler()', e);
- return true;
- }
-}
-
-/**
- * Handle a location watch event.
- */
-var locationWatch = null;
-var geoposition = null;
-
-function locationHandler(pos) {
- try {
- geoposition = pos;
- var uri = compquery();
- return locationcomp.get(uri, function(doc, e) {
- if (isNil(doc)) {
- log('error on get(location, ' + uri + ')', e);
- return false;
- }
-
- // Inject data into the page
- updatepage(docdata(doc));
- });
- } catch(e) {
- return locationErrorHandler(e);
- }
-}
-
-function locationErrorHandler(e) {
- log('location error', e);
- if (!isNil(locationWatch)) {
- try {
- navigator.geolocation.clearWatch(locationWatch);
- } catch(e) {}
- locationWatch = null;
- }
- return true;
-}
-
-/**
- * Setup a location watch handler.
- */
-function setupLocationHandler() {
- function installLocationHandler() {
- if (!isNil(locationWatch))
- return true;
- try {
- locationWatch = navigator.geolocation.watchPosition(locationHandler, locationErrorHandler);
- } catch(e) {
- log('error in installLocationHandler()', e);
- }
- return true;
- }
-
- installLocationHandler();
- setInterval(installLocationHandler, 10000);
- return true;
-}
-
-/**
- * Return the page in an ATOM entry.
- */
-function atompage(doc) {
- 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);
-}
-
-// Load the app page
-pagecomp.get(appname, function(doc, e) {
- //log('page get');
- if (isNil(doc)) {
- log('error getting app page', e);
- return false;
- }
-
- // Set the app HTML page into the content div
- //log('page', doc);
- var el = atompage(doc);
- contentdiv.innerHTML = writeStrings(writeXML(el, false));
-
- // Merge in the app data
- getpagedata(appname);
-});
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Document load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
-
diff --git a/sca-cpp/trunk/modules/edit/htdocs/cache-manifest.cmf b/sca-cpp/trunk/modules/edit/htdocs/cache-manifest.cmf
deleted file mode 100644
index cb76f773a3..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/cache-manifest.cmf
+++ /dev/null
@@ -1,18 +0,0 @@
-CACHE MANIFEST
-
-# Version 5
-
-# App resources
-/
-/favicon.ico
-/public/iframe-min.html
-/public/img.png
-/public/notauth/
-/public/notfound/
-/public/notyet/
-/public/oops/
-/public/touchicon.png
-
-NETWORK:
-*
-
diff --git a/sca-cpp/trunk/modules/edit/htdocs/clone/index.html b/sca-cpp/trunk/modules/edit/htdocs/clone/index.html
deleted file mode 100644
index 3642634ed6..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/clone/index.html
+++ /dev/null
@@ -1,146 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span><span id="appNameHeader"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table style="width: 100%;">
-<tr>
-<th id="th" class="thl thr" style="padding-top: 4px; padding-bottom:4px;">Clone this App</th>
-</tr>
-</table>
-
-<form id="cloneAppForm">
-<table style="width: 100%;">
-<tr><td><b>New App Name:</b></td></tr>
-<tr><td><input type="text" id="appName" size="15" autocapitalize="off" placeholder="Your app name"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>App Icon:</b></td></tr>
-<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
-<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
-<tr><td><input type="text" id="appTitle" size="30" placeholder="Enter the title of your app" style="width: 300px;"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
-<tr><td><textarea id="appDescription" cols="40" rows="3" placeholder="Enter a short description of your app" style="width: 300px;"></textarea></td></tr>
-<tr><td>
-<input id="cloneAppOKButton" type="submit" class="graybutton" style="font-weight: bold;" value="Clone" title="Clone the app"/>
-<input id="cloneAppCancelButton" type="button" class="graybutton" value="Cancel"/>
-</td></tr>
-</table>
-</form>
-
-<script type="text/javascript">
-
-// Get the app name
-var appname = ui.fragmentParams(location)['app'];
-
-// Set page titles
-var tclone = isNil(config.clone)? 'Clone' : config.clone;
-document.title = ui.windowtitle(location.hostname) + ' - ' + tclone + ' - ' + appname;
-$('appNameHeader').innerHTML = '<a href=\"/' + appname + '/\" target=\"' + '_blank' + '\">' + appname + '</a>';
-$('th').innerHTML = tclone + ' this App';
-$('cloneAppOKButton').value = tclone;
-$('cloneAppOKButton').title = tclone + ' this app';
-
-// Set images
-$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-
-// Init service references
-var editWidget = sca.component("EditWidget");
-var dashboards = sca.reference(editWidget, "dashboards");
-var apps = sca.reference(editWidget, "apps");
-
-/**
- * The current app entry and corresponding saved XML content.
- */
-var appentry;
-var savedappentryxml = '';
-
-/**
- * Get and display an app.
- */
-function getapp(name) {
- if (isNil(name))
- return false;
- showStatus('Loading');
-
- return apps.get(name, function(doc) {
-
- // Stop now if we didn't get the app
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- 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;
- $('appDescription').innerHTML = '';
- savedappentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
- return true;
- });
-}
-
-/**
- * Clone an app.
- */
-$('cloneAppForm').onsubmit = function() {
- var name = $('appName').value;
- if (name == '')
- return false;
- showStatus('Saving');
-
- // Clone the app
- var title = $('appTitle').value;
- var app = mklist(mklist("'entry", mklist("'title", title != ''? title : name), mklist("'id", appname)));
- var entry = atom.writeATOMEntry(valuesToElements(app));
- dashboards.put(name, car(entry), function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
- showStatus(defaultStatus());
-
- // Open it in the page editor
- ui.navigate('/#view=page&app=' + name, '_view');
- return false;
- });
- return false;
-};
-
-/**
- * Cancel cloning an app.
- */
-$('cloneAppCancelButton').onclick = function() {
- history.back();
-};
-
-// Get the current app
-getapp(appname);
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/create/index.html b/sca-cpp/trunk/modules/edit/htdocs/create/index.html
deleted file mode 100644
index 6097053cd6..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/create/index.html
+++ /dev/null
@@ -1,106 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table style="width: 100%;">
-<tr>
-<th class="thl thr" style="padding-top: 4px; padding-bottom:4px;">Create an App</th>
-</tr>
-</table>
-
-<form id="createAppForm">
-<table style="width: 100%;">
-<tr><td><b>App Name:</b></td></tr>
-<tr><td><input type="text" id="appName" size="15" autocapitalize="off" placeholder="Your app name"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>App Icon:</b></td></tr>
-<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
-<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
-<tr><td><input type="text" id="appTitle" size="30" placeholder="Enter the title of your app" style="width: 300px;"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
-<tr><td><textarea id="appDescription" cols="40" rows="3" placeholder="Enter a short description of your app" style="width: 300px;"></textarea></td></tr>
-<tr><td>
-<input id="createAppOKButton" type="submit" class="graybutton" style="font-weight: bold;" value="Create" title="Create the app"/>
-<input id="createAppCancelButton" type="button" class="graybutton" value="Cancel"/>
-</td></tr>
-</table>
-</form>
-
-<script type="text/javascript">
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Create App';
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Set images
-$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-
-// Init service references
-var editWidget = sca.component("EditWidget");
-var dashboards = sca.reference(editWidget, "dashboards");
-var apps = sca.reference(editWidget, "apps");
-
-/**
- * Create an app.
- */
-$('createAppForm').onsubmit = function() {
- var name = $('appName').value;
- if (name == '')
- return false;
- showStatus('Saving');
-
- // Clone the '.new' app template
- var title = $('appTitle').value;
- var app = mklist(mklist("'entry", mklist("'title", title != ''? title : name), mklist("'id", 'new')));
- var entry = atom.writeATOMEntry(valuesToElements(app));
- dashboards.put(name, car(entry), function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
- showStatus('Saved');
-
- // Open it in the page editor
- ui.navigate('/#view=page&app=' + name, '_view');
- return false;
- });
- return false;
-};
-
-/**
- * Cancel creating an app.
- */
-$('createAppCancelButton').onclick = function() {
- history.back();
-};
-
-showStatus(defaultStatus());
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/favicon.ico b/sca-cpp/trunk/modules/edit/htdocs/favicon.ico
deleted file mode 100644
index a7b502b9e1..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/graph/index.html b/sca-cpp/trunk/modules/edit/htdocs/graph/index.html
deleted file mode 100644
index 1732590079..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/graph/index.html
+++ /dev/null
@@ -1,2178 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv" style="overflow: visible;">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="appNameHeader"></span></h2></td>
-<td style="vertical-align: middle; text-align: right; padding-right: 8px;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table id="compValueBackground" style="width: 2500px; position: absolute; top: 59px; left: 0px; z-index: -1;">
-<tr>
-<th class="thr thl"><span style="display: inline-block; padding-top: 0px; padding-bottom: 0px; height: 24px;"></span></th>
-</tr>
-</table>
-
-<table id="compValueTable" style="width: 100%;">
-<tr>
-<td class="thl thr" style="text-align: right; padding-right: 2px; vertical-align: top;">
-<span id="deleteCompButton" title="Delete a component" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">-</span>
-
-<span id="copyCompButton" title="Copy a component" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">c</span>
-
-<span id="addCompButton" title="Add a component" class="graybutton" style="font-weight: bold; font-size: 16px; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">+</span>
-
-<span id="playCompButton" title="View component value" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">&gt;</span>
-</td>
-
-<td class="thl thr" style="padding-left: 2px; padding-right: 2px; vertical-align: top; width: 100%">
-<input id="compValue" type="text" value="" title="Component value" autocapitalize="off" placeholder="Value" style="position: relative; visibility: hidden; width: 100%;"/>
-</td>
-</tr>
-</table>
-
-<div id="contentdiv" style="margin-top: 4px; width: 2500px;">
-<div id="playdiv" style="position: relative; top: 0x; left: 0px; right: 0px; width: 2500px; height: 5000px; visibility: hidden">
-</div>
-</div>
-
-<script type="text/javascript">
-
-// Get the app name
-var appname = ui.fragmentParams(location)['app'];
-var ispalette = false;
-if (isNil(appname)) {
- appname = ui.fragmentParams()['palette'];
-
- // Edit a palette instead of a regular app
- if (!isNil(appname))
- ispalette = true;
-}
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - ' + (isNil(config.compose)? 'Composition' : config.compose) + ' - ' + appname;
-$('appNameHeader').innerHTML = '<a href=\"/' + appname + '/\" target=\"' + '_blank' + '\">' + appname + '</a>';
-
-/**
- * Component value field, add, delete and play buttons.
- */
-var cvalue = $('compValue');
-var cadd = $('addCompButton');
-var cdelete = $('deleteCompButton');
-var ccopy = $('copyCompButton');
-var cplay = $('playCompButton');
-
-// Position background divs
-var cvbackground = $('compValueBackground');
-var cvtable = $('compValueTable');
-cvbackground.style.top = ui.pixpos(cvtable.offsetTop);
-
-/**
- * Adjust component value field size.
- */
-function resizeFields() {
- cvalue.style.width = '0px';
- cvalue.style.width = ui.pixpos(cvalue.parentNode.clientWidth - 18);
- return true;
-}
-
-resizeFields();
-window.onresize = resizeFields;
-
-// Init componnent references
-var editWidget = sca.component("EditWidget");
-var palettes = sca.reference(editWidget, "palettes");
-var composites = sca.reference(editWidget, ispalette? "palettes" : "composites");
-
-// Setup remote log
-//rconsole = sca.defun(sca.reference(editWidget, "log"), "log");
-
-/**
- * SVG composite rendering functions.
- */
-var graph = {};
-
-/**
- * Basic colors
- */
-graph.colors = {};
-graph.colors.black = '#000000';
-graph.colors.blue = '#0000ff';
-graph.colors.cyan = '#00ffff';
-graph.colors.gray = '#808080'
-graph.colors.lightgray = '#dcdcdc'
-graph.colors.green = '#00ff00';
-graph.colors.magenta = '#ff00ff';
-graph.colors.orange = '#ffa500';
-graph.colors.pink = '#ffc0cb';
-graph.colors.purple = '#800080';
-graph.colors.red = '#ff0000';
-graph.colors.white = '#ffffff';
-graph.colors.yellow = '#ffff00';
-graph.colors.link = '#598edd';
-
-graph.colors.orange1 = '#ffd666';
-graph.colors.green1 = '#bbe082';
-graph.colors.blue1 = '#66dbdf';
-graph.colors.yellow1 = '#fdf57a';
-graph.colors.cyan1 = '#e6eafb';
-graph.colors.lightgray1 = '#eaeaea'
-graph.colors.pink1 = '#ffd9e0';
-graph.colors.red1 = '#d03f41';
-graph.colors.white1 = '#ffffff';
-
-graph.colors.orange2 = '#ffbb00';
-graph.colors.green2 = '#96d333';
-//graph.colors.blue2 = '#0d7cc1';
-graph.colors.blue2 = '#00c3c9';
-graph.colors.red2 = '#d03f41';
-graph.colors.yellow2 = '#fcee21';
-graph.colors.magenta2 = '#c0688a';
-graph.colors.cyan2 = '#d5dcf9';
-graph.colors.lightgray2 = '#dcdcdc'
-graph.colors.pink2 = '#ffc0cb';
-graph.colors.white2 = '#ffffff';
-
-graph.colors.orange3 = '#ffc700';
-graph.colors.green3 = '#92e120';
-graph.colors.blue3 = '#008fd1';
-graph.colors.yellow3 = '#fdf400';
-graph.colors.cyan3 = '#b4d3fd';
-graph.colors.lightgray3 = '#e3e3e3'
-graph.colors.pink3 = '#da749b';
-graph.colors.red3 = '#ed3f48';
-graph.colors.white3 = '#ffffff';
-
-/**
- * Default positions and sizes.
- */
-graph.palcx = 2500;
-graph.proxcx = 20;
-graph.proxcy = 20;
-graph.buttoncx = 55;
-graph.buttoncy = 23;
-graph.curvsz = 4;
-graph.tabsz = 2;
-graph.titlex = 4;
-graph.titley = 11;
-graph.titlew = ui.isMobile()? -2 : 0;
-
-/**
- * SVG rendering functions.
- */
-
-graph.svgns='http://www.w3.org/2000/svg';
-
-/**
- * Make an SVG graph.
- */
-graph.mkgraph = function(cdiv, pos, cvalue, cadd, ccopy, cdelete) {
-
- // Create a div element to host the graph
- var div = document.createElement('div');
- div.id = 'svgdiv';
- div.style.position = 'absolute';
- div.style.left = ui.pixpos(pos.xpos() + cdiv.offsetLeft);
- div.style.top = ui.pixpos(pos.ypos() + cdiv.offsetTop);
- cdiv.appendChild(div);
-
- // Create SVG element
- var svg = document.createElementNS(graph.svgns, 'svg');
- svg.style.height = ui.pixpos(5000);
- svg.style.width = ui.pixpos(5000);
- div.appendChild(svg);
-
- // Track element dragging and selection
- graph.dragging = null;
- graph.dragged = false;
- graph.moverenderer = null;
- graph.selected = null;
- cvalue.disabled = true;
- cvalue.style.visibility = 'hidden';
- ccopy.disabled = true;
- cdelete.disabled = true;
-
- /**
- * Find the first draggable element in a hierarchy of elements.
- */
- function draggable(n) {
- if (n == div || n == svg || n == null)
- return null;
- if (n.nodeName == 'g' && !isNil(n.id) && n.id != '')
- return n;
- return draggable(n.parentNode);
- }
-
- /**
- * Handle a mouse down or touch start event.
- */
- function onmousedown(e) {
-
- // Remember mouse or touch position
- var pos = typeof e.touches != "undefined" ? e.touches[0] : e;
- graph.downX = pos.screenX;
- graph.downY = pos.screenY;
- graph.moveX = pos.screenX;
- graph.moveY = pos.screenY;
-
- // Engage the click component selection right away
- // on mouse controlled devices
- if (typeof e.touches == 'undefined')
- onclick(e);
-
- // Find and remember draggable component
- var dragging = draggable(e.target);
- if (dragging == null || dragging != graph.selected)
- return true;
- graph.dragging = dragging;
- graph.dragged = false;
-
- // Remember current drag position
- graph.dragX = pos.screenX;
- graph.dragY = pos.screenY;
-
- e.preventDefault();
- return true;
- };
-
- if (!ui.isMobile()) {
- div.onmousedown = function(e) {
- //log('onmousedown');
- var suspend = svg.suspendRedraw(10);
- var r = onmousedown(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- } else {
- div.ontouchstart = function(e) {
- //log('ontouchstart');
-
- // Clear current move renderer if it's running
- if (!isNil(graph.moverenderer)) {
- clearInterval(graph.moverenderer);
- graph.moverenderer = null;
- }
-
- var suspend = svg.suspendRedraw(10);
- var r = onmousedown(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- }
-
- /**
- * Handle a mouse up or touch end event.
- */
- function onmouseup(e) {
-
- // Engage the click component selection now on touch devices
- if (ui.isMobile()) {
- if (!graph.dragged && graph.moveX == graph.downX && graph.moveY == graph.downY)
- return onclick(e);
- }
-
- // Stop here if the component was not dragged
- if (graph.dragging == null)
- return true;
- if (!graph.dragged) {
- graph.dragging = null;
- return true;
- }
-
- if (graph.dragging.parentNode == svg && graph.dragging.id.substring(0, 8) != 'palette:') {
-
- // Add new dragged component to the composite
- if (isNil(graph.dragging.compos)) {
- var compos = scdl.composite(svg.compos);
- setElement(compos, graph.sortcompos(graph.addcomps(mklist(graph.dragging.comp), compos)));
- graph.dragging.compos = svg.compos;
- }
-
- // Update component position
- setElement(graph.dragging.comp, graph.movecomp(graph.dragging.comp, graph.abspos(graph.dragging, svg)));
-
- // Wire component to neighboring reference
- if (!isNil(graph.dragging.svcpos)) {
- var compos = scdl.composite(svg.compos);
- setElement(compos, graph.sortcompos(graph.clonerefs(graph.wire(graph.dragging, compos, svg))));
- }
-
- // Snap top level component position to grid
- if (graph.dragging.parentNode == svg) {
- var gpos = graph.relpos(graph.dragging);
- setElement(graph.dragging.comp, graph.movecomp(graph.dragging.comp, graph.mkpath().pos(graph.gridsnap(gpos.xpos()), graph.gridsnap(gpos.ypos()))));
- }
- }
-
- // Forget current dragged component
- graph.dragging = null;
- graph.dragged = false;
-
- // Refresh the composite
- //log('onmouseup refresh');
- var nodes = graph.refresh(svg);
-
- // Reselected the previously selected component
- if (!isNil(graph.selected)) {
- graph.selected = graph.findcompnode(scdl.name(graph.selected.comp), nodes);
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
- }
-
- // Trigger composite change event
- svg.oncomposchange(false);
- return true;
- };
-
- if (!ui.isMobile()) {
- div.onmouseup = function(e) {
- //log('onmouseup');
- var suspend = svg.suspendRedraw(10);
- var r = onmouseup(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- } else {
- div.ontouchend = function(e) {
- //log('ontouchend');
-
- // Clear current move renderer if it's running
- if (!isNil(graph.moverenderer)) {
- clearInterval(graph.moverenderer);
- graph.moverenderer = null;
- }
-
- var suspend = svg.suspendRedraw(10);
- var r = onmouseup(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- }
-
- /**
- * Handle a mouse or touch click event.
- */
- function onclick(e) {
- //log('onclick logic');
-
- // Find selected component
- var selected = draggable(e.target);
- if (selected == null) {
- if (graph.selected != null) {
-
- // Reset current selection
- graph.compselect(graph.selected, false, cvalue, ccopy, cdelete);
- graph.selected = null;
-
- // Trigger component select event
- svg.oncompselect(null);
- }
-
- // Dismiss the palette
- if (e.target == div || e.target == svg && ui.numpos(div.style.left) != (graph.palcx * -1))
- div.style.left = ui.pixpos(graph.palcx * -1);
-
- return true;
- }
-
- // Ignore multiple click events
- if (selected == graph.selected)
- return true;
- if (selected.id.substring(0, 8) == 'palette:' && ui.numpos(div.style.left) != 0)
- return true;
-
- // Deselect previously selected component
- graph.compselect(graph.selected, false, cvalue, ccopy, cdelete);
-
- // Clone component from the palette
- if (selected.id.substring(0, 8) == 'palette:') {
- var compos = scdl.composite(svg.compos);
- var comp = graph.clonepalette(selected, compos, svg);
- setElement(compos, graph.sortcompos(graph.addcomps(mklist(comp), compos)));
-
- // Move into the editing area and hide the palette
- div.style.left = ui.pixpos(graph.palcx * -1);
-
- // Refresh the composite
- //log('onclick refresh');
- var nodes = graph.refresh(svg);
-
- // Reselect the previously selected component
- graph.selected = graph.findcompnode(scdl.name(comp), nodes);
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
-
- // Trigger composite change event
- svg.oncomposchange(true);
-
- } else {
- graph.selected = selected;
-
- // Select the component
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
- }
-
- //log('comp selected');
-
- e.preventDefault();
- return true;
- }
-
- if (!ui.isMobile()) {
- div.onclick = function(e) {
- //log('div onclick');
- var suspend = svg.suspendRedraw(10);
- var r = onclick(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- svg.onclick = function(e) {
- //log('svg onclick');
- var suspend = svg.suspendRedraw(10);
- var r = onclick(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- }
-
- /**
- * Handle a mouse or touch move event.
- */
- function onmousemove(e) {
- if (graph.dragging == null)
- return true;
-
- // Ignore duplicate mouse move events
- if (graph.moveX == graph.dragX && graph.moveY == graph.dragY)
- return true;
-
- // Remember that the component was dragged
- graph.dragged = true;
-
- // Cut wire to component
- if (graph.dragging.parentNode != svg) {
- var compos = scdl.composite(svg.compos);
- setElement(compos, graph.sortcompos(graph.cutwire(graph.dragging, compos, svg)));
-
- // Bring component to the top
- graph.bringtotop(graph.dragging, svg);
- }
-
- // Calculate new position of dragged element
- var gpos = graph.relpos(graph.dragging);
- var newX = gpos.xpos() + (graph.moveX - graph.dragX);
- var newY = gpos.ypos() + (graph.moveY - graph.dragY);
- if (newX >= graph.palcx)
- graph.dragX = graph.moveX
- else
- newX = graph.palcx;
- if (newY >= 0)
- graph.dragY = graph.moveY;
- else
- newY = 0;
-
- // Detach child elements to speedup rendering
- graph.compoutline(graph.dragging, true);
-
- // Move the dragged element
- graph.move(graph.dragging, graph.mkpath().pos(newX, newY));
-
- return false;
- };
-
- if (!ui.isMobile()) {
- window.onmousemove = function(e) {
- //log('onmousemove');
-
- // Remember mouse position
- graph.moveX = e.screenX;
- graph.moveY = e.screenY;
-
- var suspend = svg.suspendRedraw(10);
- var r = onmousemove(e);
- svg.unsuspendRedraw(suspend);
- return r;
- }
- } else {
- div.ontouchmove = function(e) {
- //log('ontouchmove');
-
- // Remember touch position
- var pos = e.touches[0];
- if (graph.moveX == pos.screenX && graph.moveY == pos.screenY)
- return true;
- graph.moveX = pos.screenX;
- graph.moveY = pos.screenY;
- if (graph.moveX == graph.dragX && graph.moveY == graph.dragY)
- return true;
-
- // Start async move renderer
- if (graph.moverenderer == null) {
- graph.moverenderer = setInterval(function() {
- var suspend = svg.suspendRedraw(10);
- onmousemove(e);
- svg.unsuspendRedraw(suspend);
- }, 10);
- }
- return true;
- }
- }
-
- /**
- * Handle field on change events.
- */
- function onvaluechange() {
- if (graph.selected == null)
- return false;
- if (g.parentNode.style.visibility == 'hidden')
- return false;
-
- // Change component name and refactor references to it
- function changename() {
- var compos = scdl.composite(svg.compos);
- cvalue.value = graph.ucid(cvalue.value, compos, false);
- graph.selected.id = cvalue.value;
- setElement(compos, graph.sortcompos(graph.renamecomp(graph.selected.comp, compos, cvalue.value)));
-
- // Refresh the composite
- //log('onchangename refresh');
- var nodes = graph.refresh(svg);
-
- // Reselected the previously selected component
- graph.selected = graph.findcompnode(scdl.name(graph.selected.comp), nodes);
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
-
- // Trigger composite change event
- svg.oncomposchange(true);
- return false;
- }
-
- // Change the component property value
- function changeprop() {
- graph.setproperty(graph.selected.comp, cvalue.value);
- var hasprop = graph.hasproperty(graph.selected.comp);
- cvalue.disabled = hasprop? false : true;
- cvalue.style.visibility = hasprop? 'visible' : 'hidden';
- cvalue.value = graph.property(graph.selected.comp);
-
- // Refresh the composite
- //log('onchangeprop refresh');
- var nodes = graph.refresh(svg);
-
- // Reselected the previously selected component
- graph.selected = graph.findcompnode(scdl.name(graph.selected.comp), nodes);
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
-
- // Trigger composite change event
- svg.oncomposchange(true);
- return false;
- }
-
- return graph.hasproperty(graph.selected.comp)? changeprop() : changename();
- };
-
- cvalue.onchange = function() {
- var suspend = svg.suspendRedraw(10);
- var r = onvaluechange();
- svg.unsuspendRedraw(suspend);
- return r;
- }
-
- // Handle delete event
- function ondeleteclick() {
- if (graph.selected == null)
- return false;
- if (graph.selected.id.substring(0, 8) != 'palette:') {
-
- // Remove selected component
- var compos = scdl.composite(svg.compos);
- if (isNil(graph.selected.compos))
- setElement(compos, graph.sortcompos(graph.cutwire(graph.selected, compos, svg)));
- setElement(compos, graph.sortcompos(graph.clonerefs(graph.gcollect(graph.removecomp(graph.selected.comp, compos)))));
-
- // Reset current selection
- graph.compselect(graph.selected, false, cvalue, ccopy, cdelete);
- graph.selected = null;
-
- // Refresh the composite
- //log('ondelete refresh');
- graph.refresh(svg);
-
- // Trigger component select event
- svg.oncompselect(null);
-
- // Trigger composite change event
- svg.oncomposchange(true);
- }
- return false;
- };
-
- cdelete.onclick = function() {
- var suspend = svg.suspendRedraw(10);
- var r = ondeleteclick();
- svg.unsuspendRedraw(suspend);
- return r;
- };
-
- // Handle copy event
- function oncopyclick() {
- if (graph.selected == null)
- return false;
- if (graph.selected.id.substring(0, 8) == 'palette:')
- return false;
-
- // Clone the selected component
- var compos = scdl.composite(svg.compos);
- var comps = graph.clonecomp(graph.selected, compos, svg);
- setElement(compos, graph.sortcompos(graph.addcomps(comps, compos)));
-
- // Refresh the composite
- //log('onclick refresh');
- var nodes = graph.refresh(svg);
-
- // Select the component clone
- graph.selected = graph.findcompnode(scdl.name(car(comps)), nodes);
- graph.compselect(graph.selected, true, cvalue, ccopy, cdelete);
-
- // Trigger component select event
- svg.oncompselect(graph.selected);
-
- // Trigger composite change event
- svg.oncomposchange(true);
-
- return false;
- };
-
- ccopy.onclick = function() {
- var suspend = svg.suspendRedraw(10);
- var r = oncopyclick();
- svg.unsuspendRedraw(suspend);
- return r;
- };
-
- // Handle add event
- cadd.onclick = function() {
-
- // Show the palette
- div.style.left = ui.pixpos(0);
- return false;
- };
-
- // Create a hidden SVG element to help compute the width
- // of component and reference titles
- graph.svgtitles = document.createElementNS(graph.svgns, 'svg');
- graph.svgtitles.style.visibility = 'hidden';
- graph.svgtitles.style.height = ui.pixpos(0);
- graph.svgtitles.style.width = ui.pixpos(0);
- div.appendChild(graph.svgtitles);
-
- return svg;
-};
-
-/**
- * Point class.
- */
-graph.Point = function(x, y) {
- this.x = x;
- this.y = y;
-};
-graph.Point.prototype.xpos = function() {
- return this.x;
-};
-graph.Point.prototype.ypos = function() {
- return this.y;
-};
-
-graph.mkpoint = function(x, y) {
- return new graph.Point(x, y);
-};
-
-/**
- * Path class.
- */
-graph.Path = function() {
- this.path = '';
- this.x = 0;
- this.y = 0;
-}
-graph.Path.prototype.pos = function(x, y) {
- this.x = x;
- this.y = y;
- return this;
-};
-graph.Path.prototype.xpos = function() {
- return this.x;
-};
-graph.Path.prototype.ypos = function() {
- return this.y;
-};
-graph.Path.prototype.rmove = function(x, y) {
- return this.move(this.x + x, this.y + y);
-};
-graph.Path.prototype.rline = function(x, y) {
- return this.line(this.x + x, this.y + y);
-};
-graph.Path.prototype.rcurve = function(x1, y1, x, y) {
- return this.curve(this.x + x1, this.y + y1, this.x + x1 + x, this.y + y1 + y);
-};
-graph.Path.prototype.str = function() {
- return this.path;
-};
-graph.Path.prototype.clone = function() {
- return graph.mkpath().pos(this.xpos(), this.ypos());
-};
-graph.Path.prototype.move = function(x, y) {
- this.path += 'M' + x + ',' + y + ' ';
- return this.pos(x, y);
-};
-graph.Path.prototype.line = function(x, y) {
- this.path += 'L' + x + ',' + y + ' ';
- return this.pos(x, y);
-};
-graph.Path.prototype.curve = function(x1, y1, x, y) {
- this.path += 'Q' + x1 + ',' + y1 + ' ' + x + ',' + y + ' ';
- return this.pos(x, y);
-};
-graph.Path.prototype.end = function() {
- this.path += 'Z';
- return this;
-};
-
-graph.mkpath = function() {
- return new graph.Path();
-};
-
-/**
- * Return an element representing a title.
- */
-graph.mktitle = function(t, x, y) {
- var title = document.createElementNS(graph.svgns, 'text');
- title.setAttribute('x', x);
- title.setAttribute('y', y);
- title.setAttribute('class', 'svgtitle');
- title.setAttribute('pointer-events', 'none');
- title.appendChild(document.createTextNode(t));
- graph.svgtitles.appendChild(title);
- return title;
-};
-
-/**
- * Return an element representing the title of a component.
- */
-graph.comptitle = function(comp) {
- return memo(comp, 'title', function() {
- var ct = graph.title(comp);
- var pt = graph.propertytitle(comp);
- if (ct == '' && pt == '')
- return null;
- return graph.mktitle((ct != '' && pt != '')? ct + ' ' + pt : ct + pt, graph.titlex, graph.titley);
- });
-};
-
-/**
- * Return the width of the title of a component.
- */
-graph.comptitlewidth = function(comp) {
- var title = graph.comptitle(comp);
- if (isNil(title))
- return 0;
- return title.getBBox().width + graph.titlew;
-};
-
-/**
- * Draw a component shape selection.
- */
-graph.compselect = function(g, s, cvalue, ccopy, cdelete) {
- if (isNil(g) || !s) {
- cvalue.value = '';
- cvalue.disabled = true;
- cvalue.style.visibility = 'hidden';
- ccopy.disabled = true;
- cdelete.disabled = true;
- if (isNil(g))
- return true;
- g.shape.setAttribute('stroke', graph.colors.gray);
- g.shape.setAttribute('stroke-width', '1');
- return true;
- }
-
- cvalue.value = graph.hasproperty(g.comp)? graph.property(g.comp) : g.id;
- cvalue.disabled = false;
- cvalue.style.visibility = 'visible';
- ccopy.disabled = false;
- cdelete.disabled = false;
-
- g.shape.setAttribute('stroke', graph.colors.link);
- g.shape.setAttribute('stroke-width', '2');
- g.parentNode.appendChild(g);
- return true;
-};
-
-/**
- * Draw a palette shape selection.
- */
-graph.paletteselect = function(g, s) {
- if (isNil(g))
- return true;
- if (!s) {
- g.shape.setAttribute('stroke', graph.colors.gray);
- g.shape.setAttribute('stroke-width', '1');
- return true;
- }
-
- g.shape.setAttribute('stroke', graph.colors.link);
- g.shape.setAttribute('stroke-width', '2');
- g.parentNode.appendChild(g);
- return true;
-};
-
-/**
- * Draw a component outline for faster rendering.
- */
-graph.compoutline = function(g, s) {
- if (s == (isNil(g.outlined)? false : g.outlined))
- return true;
- g.outlined = s;
-
- if (s) {
- g.shape.setAttribute('fill', 'none');
- if (!isNil(g.title))
- g.removeChild(g.title);
- } else {
- g.shape.setAttribute('fill', graph.color(g.comp));
- if (!isNil(g.title))
- g.appendChild(g.title);
- }
-
- map(function(r) {
- var n = caddr(r);
- if (isNil(n))
- return r;
- graph.compoutline(n, s);
- return r;
- }, g.refpos);
- return true;
-};
-
-/**
- * Return a node representing a component.
- */
-graph.compnode = function(comp, cassoc, pos, parentg) {
-
- // Make the component title element
- var title = graph.comptitle(comp);
-
- // Compute the path of the component shape
- var path = graph.comppath(comp, cassoc);
-
- // Create the main component shape
- var shape = document.createElementNS(graph.svgns, 'path');
- shape.setAttribute('d', path.str());
- shape.setAttribute('fill', graph.color(comp));
- //shape.setAttribute('fill-opacity', '0.6');
- shape.setAttribute('stroke', graph.colors.gray);
- shape.setAttribute('stroke-width', '1');
- shape.setAttribute('pointer-events', 'visible');
-
- // Create an svg group and add the shape and title to it
- var g = document.createElementNS(graph.svgns, 'g');
- g.comp = comp;
- g.id = scdl.name(comp);
- g.setAttribute('transform', 'translate(' + pos.xpos() + ',' + pos.ypos() + ')');
- g.pos = pos.clone();
- g.appendChild(shape);
- g.shape = shape;
- if (!isNil(title)) {
- g.appendChild(title);
- g.title = title;
- }
-
- // Store the the positions of the services and references
- g.refpos = reverse(path.refpos);
- g.svcpos = reverse(path.svcpos);
-
- // Handle onclick events
- g.onclick = parentg.onclick;
-
- return g;
-};
-
-/**
- * Find the node representing a component.
- */
-graph.findcompnode = function(name, nodes) {
- if (isNil(nodes))
- return null;
- if (isNil(car(nodes).comp))
- return graph.findcompnode(name, cdr(nodes));
- if (name == scdl.name(car(nodes).comp))
- return car(nodes);
- var node = graph.findcompnode(name, nodeList(car(nodes).childNodes));
- if (!isNil(node))
- return node;
- return graph.findcompnode(name, cdr(nodes));
-}
-
-/**
- * Return a graphical group.
- */
-graph.mkgroup = function(pos) {
- var g = document.createElementNS(graph.svgns, 'g');
- g.setAttribute('transform', 'translate(' + pos.xpos() + ',' + pos.ypos() + ')');
- g.pos = pos.clone();
- return g;
-};
-
-/**
- * Return a node representing a button.
- */
-graph.mkbutton = function(t, pos) {
-
- // Make the button title
- var title = graph.mktitle(t, graph.titlex, graph.titley);
-
- // Compute the path of the button shape
- var path = graph.buttonpath().str();
-
- // Create the main button shape
- var shape = document.createElementNS(graph.svgns, 'path');
- shape.setAttribute('d', path);
- shape.setAttribute('fill', graph.colors.lightgray1);
- //shape.setAttribute('fill-opacity', '0.6');
- shape.setAttribute('stroke', graph.colors.gray);
- shape.setAttribute('stroke-width', '1');
- shape.setAttribute('pointer-events', 'visible');
-
- // Create a group and add the button shape to it
- var g = document.createElementNS(graph.svgns, 'g');
- g.setAttribute('transform', 'translate(' + pos.xpos() + ',' + pos.ypos() + ')');
- g.pos = pos.clone();
- g.appendChild(shape);
- g.appendChild(title);
-
- // Store the button shape in the group
- g.shape = shape;
-
- return g;
-};
-
-/**
- * Return the relative position of a node.
- */
-graph.relpos = function(e) {
- var pmatrix = e.parentNode != null? e.parentNode.getCTM() : null;
- var matrix = e.getCTM();
- var curX = pmatrix != null? (Number(matrix.e) - Number(pmatrix.e)): Number(matrix.e);
- var curY = pmatrix != null? (Number(matrix.f) - Number(pmatrix.f)): Number(matrix.f);
- return graph.mkpath().pos(curX, curY);
-};
-
-/**
- * Move a node.
- */
-graph.move = function(e, pos) {
- e.setAttribute('transform', 'translate(' + pos.xpos() + ',' + pos.ypos() + ')');
- e.pos = pos.clone();
-};
-
-/**
- * Return the absolute position of a component node.
- */
-graph.abspos = function(e, g) {
- if (e == g)
- return graph.mkpath();
- var gpos = graph.relpos(e);
- var pgpos = graph.abspos(e.parentNode, g);
- return graph.mkpath().pos(gpos.xpos() + pgpos.xpos(), gpos.ypos() + pgpos.ypos());
-};
-
-/**
- * Bring a component node to the top.
- */
-graph.bringtotop = function(n, g) {
- if (n == g)
- return null;
- graph.move(n, graph.abspos(n, g));
- g.appendChild(n);
-}
-
-/**
- * Return the title of a SCDL element.
- */
-graph.title = function(e) {
- var t = scdl.title(e);
- if (t != null) {
- if (t == 'gt')
- return '>'
- if (t == 'lt')
- return '<';
- if (t.indexOf('{propval}') != -1)
- return '';
- if (t.indexOf('{compname}') == -1)
- return t;
- return t.replace('{compname}', scdl.name(e));
- }
- return scdl.name(e);
-};
-
-/**
- * Return the property value of a SCDL component.
- */
-graph.property = function(e) {
- var p = scdl.properties(e);
- if (isNil(p))
- return '';
- if (scdl.visible(car(p)) == 'false')
- return '';
- var pv = scdl.propertyValue(car(p));
- return pv;
-};
-
-/**
- * Return the title of a property of a SCDL component.
- */
-graph.propertytitle = function(e) {
- var pv = graph.property(e);
- var t = scdl.title(e);
- if (t.indexOf('{propval}') == -1)
- return pv;
- return t[0] == ' '? t.substr(1).replace('{propval}', pv) : t.replace('{propval}', pv);
-};
-
-/**
- * Return true if a SCDL component has a property.
- */
-graph.hasproperty = function(e) {
- var p = scdl.properties(e);
- if (isNil(p))
- return false;
- if (scdl.visible(car(p)) == 'false')
- return false;
- return true;
-};
-
-/**
- * Change the property value of a SCDL component.
- */
-graph.setproperty = function(e, value) {
- var p = scdl.properties(e);
- if (isNil(p))
- return '';
- if (scdl.visible(car(p)) == 'false')
- return '';
- var name = scdl.name(car(p));
- setElement(car(p), mklist(element, "'property", mklist(attribute, "'name", name != null? name : "property"), value));
- return value;
-};
-
-/**
- * Return the color of a SCDL component.
- */
-graph.color = function(comp) {
- return memo(comp, 'color', function() {
- var c = scdl.color(comp);
- return c == null? graph.colors.blue1 : graph.colors[c];
- });
-};
-
-/**
- * Return the services on the left side of a component.
- */
-graph.lsvcs = function(comp) {
- return memo(comp, 'lsvcs', function() {
- var svcs = scdl.services(comp);
- if (isNil(svcs))
- return mklist(mklist("'element","'service","'attribute","'name",scdl.name(comp)));
- var l = filter(function(s) {
- var a = scdl.align(s);
- var v = scdl.visible(s);
- return (a == null || a == 'left') && v != 'false';
- }, svcs);
- if (isNil(l))
- return mklist();
- return mklist(car(l));
- });
-};
-
-/**
- * Return the references on the right side of a component.
- */
-graph.rrefs = function(comp) {
- return memo(comp, 'rrefs', function() {
- return filter(function(r) {
- var a = scdl.align(r);
- var v = scdl.visible(r);
- return (a == null || a == 'right') && v != 'false';
- }, scdl.references(comp));
- });
-};
-
-/**
- * Return the height of a reference on the right side of a component.
- */
-graph.rrefheight = function(ref, cassoc) {
- return memo(ref, 'rheight', function() {
- var target = assoc(scdl.target(ref), cassoc);
- if (isNil(target))
- return graph.tabsz * 8;
- return graph.compclosureheight(cadr(target), cassoc);
- });
-};
-
-/**
- * Return the total height of the references on the right side of a component.
- */
-graph.rrefsheight = function(refs, cassoc) {
- if (isNil(refs))
- return 0;
- return graph.rrefheight(car(refs), cassoc) + graph.rrefsheight(cdr(refs), cassoc);
-};
-
-/**
- * Return the height of a component node.
- */
-graph.compheight = function(comp, cassoc) {
- return memo(comp, 'height', function() {
- var lsvcs = graph.lsvcs(comp);
- var lsvcsh = Math.max(1, length(lsvcs)) * (graph.tabsz * 8) + (graph.tabsz * 4);
- var rrefs = graph.rrefs(comp);
- var rrefsh = graph.rrefsheight(rrefs, cassoc) + (graph.tabsz * 2);
- return Math.max(lsvcsh, rrefsh);
- });
-};
-
-/**
- * Return the height of a component and the components wired to its bottom side.
- */
-graph.compclosureheight = function(comp, cassoc) {
- return memo(comp, 'closureheight', function() {
- return graph.compheight(comp, cassoc);
- });
-};
-
-/**
- * Return the max width of the references on the right side of a component.
- */
-graph.rrefswidth = function(refs, cassoc) {
- if (isNil(refs))
- return 0;
- return Math.max(graph.rrefwidth(car(refs), cassoc), graph.rrefswidth(cdr(refs), cassoc));
-};
-
-/**
- * Return the width of a component.
- */
-graph.compwidth = function(comp, cassoc) {
- return memo(comp, 'width', function() {
- var ctw = graph.comptitlewidth(comp);
- var rrefsw = (isNil(graph.rrefs(comp))? 0 : (graph.tabsz * 4));
- var twidth = (graph.titlex * 2) + ctw + rrefsw;
- var width = Math.max(twidth, (graph.tabsz * 8) + (graph.tabsz * 4));
- return width;
- });
-};
-
-/**
- * Return a path representing a reference positioned to the right of a component.
- */
-graph.rrefpath = function(ref, cassoc, path, maxheight) {
- var height = graph.rrefheight(ref, cassoc);
-
- // Record reference position in the path
- var xpos = path.xpos();
- var ypos = path.ypos();
- path.refpos = cons(mklist(ref, graph.mkpath().pos(xpos, ypos + (graph.tabsz * 5))), path.refpos);
-
- // Compute the reference path
- return path.rline(0,graph.tabsz * 2).rcurve(0,graph.tabsz,-graph.tabsz,0).rcurve(-graph.tabsz,0,0,-graph.tabsz/2.0).rcurve(0,-graph.tabsz/2.0,-graph.tabsz,0).rcurve(-graph.tabsz,0,0,graph.tabsz/2.0).rline(0,graph.tabsz * 3).rcurve(0,graph.tabsz/2.0,graph.tabsz,0).rcurve(graph.tabsz,0,0,-graph.tabsz/2.0).rcurve(0,-graph.tabsz/2.0,graph.tabsz,0).rcurve(graph.tabsz,0,0,graph.tabsz).line(path.xpos(), Math.min(ypos + height, maxheight));
-};
-
-/**
- * Return a path representing a service positioned to the left of a component.
- */
-graph.lsvcpath = function(svc, cassoc, path, minheight) {
- var height = graph.tabsz * 8;
-
- // Record service position in the path
- var xpos = path.xpos();
- var ypos = path.ypos();
- path.svcpos = cons(mklist(svc, graph.mkpath().pos(xpos, ypos - (graph.tabsz * 6))), path.svcpos);
-
- // Compute the service path
- return path.rline(0, -(graph.tabsz * 2)).rcurve(0,-graph.tabsz,-graph.tabsz,0).rcurve(-graph.tabsz,0,0,graph.tabsz/2.0).rcurve(0,graph.tabsz/2.0,-graph.tabsz,0).rcurve(-graph.tabsz,0,0,-graph.tabsz/2.0).rline(0,-(graph.tabsz * 3)).rcurve(0,-graph.tabsz/2.0,graph.tabsz,0).rcurve(graph.tabsz,0,0,graph.tabsz/2.0).rcurve(0,graph.tabsz/2.0,graph.tabsz,0).rcurve(graph.tabsz,0,0,-graph.tabsz).line(path.xpos(), Math.max(ypos - height, minheight));
-};
-
-/**
- * Return a path representing a component node.
- */
-graph.comppath = function(comp, cassoc) {
-
- // Calculate the width and height of the component node
- var width = graph.compwidth(comp, cassoc);
- var height = graph.compheight(comp, cassoc);
-
- /**
- * Apply a path rendering function to a list of services or references.
- */
- function renderpath(x, f, cassoc, path, height) {
- if (isNil(x))
- return path;
- return renderpath(cdr(x), f, cassoc, f(car(x), cassoc, path, height), height);
- }
-
- var path = graph.mkpath().move(graph.curvsz,0);
-
- // Store the positions of services and references in the path
- path.refpos = mklist();
- path.svcpos = mklist();
-
- // Render the references on the right side of the component
- var rrefs = graph.rrefs(comp);
- path = path.line(width - graph.curvsz,path.ypos()).rcurve(graph.curvsz,0,0,graph.curvsz);
- path = renderpath(rrefs, graph.rrefpath, cassoc, path, height - graph.curvsz);
-
- // Render the references on the bottom side of the component
- var boffset = graph.curvsz;
- path = path.line(path.xpos(),height - graph.curvsz).rcurve(0,graph.curvsz,graph.curvsz * -1,0).line(boffset, path.ypos());
-
- // Render the services on the left side of the component
- var lsvcs = graph.lsvcs(comp);
- var loffset = graph.curvsz + (length(lsvcs) * (graph.tabsz * 8));
- path = path.line(graph.curvsz,path.ypos()).rcurve(graph.curvsz * -1,0,0,graph.curvsz * -1).line(path.xpos(), loffset);
- path = renderpath(lsvcs, graph.lsvcpath, cassoc, path, graph.curvsz);
-
- // Close the component node path
- path = path.line(0,graph.curvsz).rcurve(0,graph.curvsz * -1,graph.curvsz,0);
-
- return path.end();
-};
-
-/**
- * Return the position of a component.
- */
-graph.comppos = function(comp, pos) {
- var x = scdl.x(comp);
- var y = scdl.y(comp);
- return graph.mkpath().pos(x != null? Number(x) + graph.palcx : pos.xpos(), y != null? Number(y) : pos.ypos());
-};
-
-/**
- * Return a path representing a button node.
- */
-graph.buttonpath = function(t) {
- var path = graph.mkpath().move(graph.curvsz,0);
- path = path.line(graph.buttoncx - graph.curvsz,path.ypos()).rcurve(graph.curvsz,0,0,graph.curvsz);
- path = path.line(path.xpos(),graph.buttoncy - graph.curvsz).rcurve(0,graph.curvsz,-graph.curvsz,0).line(graph.curvsz, path.ypos());
- path = path.line(graph.curvsz,path.ypos()).rcurve(-graph.curvsz,0,0,-graph.curvsz).line(path.xpos(), graph.curvsz);
- path = path.line(0,graph.curvsz).rcurve(0,-graph.curvsz,graph.curvsz,0);
- return path.end();
-};
-
-/**
- * Render a SCDL composite into a list of component nodes.
- */
-graph.composite = function(compos, pos, aspalette, g) {
- var name = scdl.name(scdl.composite(compos));
- var comps = scdl.components(compos);
- var cassoc = scdl.nameToElementAssoc(comps);
- var proms = scdl.promotions(compos);
-
- // Unmemoize any memoized info about components and their references.
- map(function(c) {
- unmemo(c);
- map(function(r) {
- unmemo(r);
- }, scdl.references(c));
- }, comps);
-
- /**
- * Render a component.
- */
- function rendercomp(comp, cassoc, pos) {
-
- /**
- * Render the references on the right side of a component.
- */
- function renderrrefs(refs, cassoc, pos, gcomp) {
-
- /**
- * Render a reference on the right side of a component.
- */
- function renderrref(ref, cassoc, pos, gcomp) {
- var target = assoc(scdl.target(ref), cassoc);
- if (isNil(target))
- return null;
-
- // Render the component target of the reference
- return rendercomp(cadr(target), cassoc, pos);
- }
-
- /**
- * Move the rendering cursor down below a reference.
- */
- function rendermove(ref, cassoc, pos) {
- return pos.clone().rmove(0, graph.rrefheight(ref, cassoc));
- }
-
- if (isNil(refs))
- return mklist();
-
- // Return list of (ref, comp rendering) pairs
- var grefcomp = renderrref(car(refs), cassoc, pos, gcomp);
- return cons(mklist(car(refs), grefcomp), renderrrefs(cdr(refs), cassoc, rendermove(car(refs), cassoc, pos), gcomp));
- }
-
- // Compute the component shape
- var gcomp = graph.compnode(comp, cassoc, pos, g);
-
- // Render the components wired to the component references
- var rrefs = graph.rrefs(comp);
- var rpos = graph.mkpath().rmove(graph.compwidth(comp, cassoc), 0);
- var grrefs = renderrrefs(rrefs, cassoc, rpos, gcomp);
-
- // Store list of (ref, pos, component rendering) triplets in the component
- function refposgcomp(refpos, grefs) {
- if (isNil(refpos))
- return mklist();
-
- // Append component rendering to component
- var gref = cadr(car(grefs));
- if (gref != null)
- gcomp.appendChild(gref);
- return cons(mklist(car(car(refpos)), cadr(car(refpos)), gref), refposgcomp(cdr(refpos), cdr(grefs)));
- }
-
- gcomp.refpos = refposgcomp(gcomp.refpos, grrefs);
-
- return gcomp;
- }
-
- /**
- * Render a list of promoted service components.
- */
- function renderproms(svcs, cassoc, pos) {
-
- /**
- * Return the component promoted by a service.
- */
- function promcomp(svc, cassoc) {
- var c = assoc(scdl.promote(svc), cassoc);
- if (isNil(c))
- return mklist();
- return cadr(c);
- }
-
- /**
- * Move the rendering cursor down below a component.
- */
- function rendermove(comp, cassoc, pos) {
- return pos.clone().rmove(0, graph.compclosureheight(comp, cassoc) + Math.max((graph.tabsz * 2), 8));
- }
-
- if (isNil(svcs))
- return mklist();
-
- // Render the first promoted component in the list
- // then recurse to render the rest of the list
- var comp = promcomp(car(svcs), cassoc);
- if (isNil(comp))
- return renderproms(cdr(svcs), cassoc, rendermove(car(svcs), cassoc, pos));
-
- var cpos = graph.comppos(comp, pos);
- return cons(rendercomp(comp, cassoc, cpos), renderproms(cdr(svcs), cassoc, rendermove(comp, cassoc, cpos)));
- }
-
- // Render the promoted service components
- var rproms = renderproms(proms, cassoc, pos.clone().rmove(graph.tabsz * 4, graph.tabsz * 4));
-
- if (aspalette) {
-
- // Prefix ids of palette component elements with 'palette:' and
- // move them to the palette area
- return map(function(r) {
- r.id = 'palette:' + r.id;
- var gpos = r.pos;
- graph.move(r, graph.mkpath().pos(gpos.xpos() - graph.palcx, gpos.ypos()));
- return r;
- }, rproms);
-
- } else {
-
- // Link app component elements to the containing composite
- return map(function(r) { r.compos = compos; return r; }, rproms);
- }
-};
-
-/**
- * Return a component unique id.
- */
-graph.ucid = function(prefix, compos1, compos2, clone) {
-
- // Build an assoc list keyed by component name
- var comps = map(function(c) { return mklist(scdl.name(c), c); }, append(namedElementChildren("'component", compos1), namedElementChildren("'component", compos2)));
-
- if (!clone && isNil(assoc(prefix, comps)))
- return prefix;
-
- /**
- * Find a free component id.
- */
- function ucid(p, id) {
- if (isNil(assoc(p + id, comps)))
- return p + id;
- return ucid(p, id + 1);
- }
-
- /**
- * Remove trailing digits from a prefix.
- */
- function untrail(p) {
- if (p.length < 2 || p[p.length - 1] < '0' || p[p.length - 1] > '9')
- return p;
- return untrail(p.substring(0, p.length - 1));
- }
-
- return ucid(prefix == ''? 'comp' : (clone? untrail(prefix) : prefix), 1);
-};
-
-/**
- * Clone a palette component node.
- */
-graph.clonepalette = function(e, compos, g) {
-
- // Clone the SCDL component and give it a unique name
- var wcomp = append(mklist(element, "'component", mklist(attribute, "'name", graph.ucid(scdl.name(e.comp), compos, compos, true))),
- filter(function(c) { return !(isAttribute(c) && attributeName(c) == "'name")}, elementChildren(e.comp)));
- var x = '<composite>' + writeXML(mklist(wcomp), false) + '</composite>';
- var rcompos = scdl.composite(readXML(mklist(x)));
- var comp = car(scdl.components(mklist(rcompos)));
-
- // Update component position
- setElement(comp, graph.movecomp(comp, graph.abspos(e, g).rmove(graph.palcx, 0)));
-
- return comp;
-};
-
-/**
- * Move a SCDL component to the given position.
- */
-graph.movecomp = function(comp, pos) {
- if (isNil(pos))
- return append(mklist(element, "'component"),
- filter(function(e) { return !(isAttribute(e) && (attributeName(e) == "'x" || attributeName(e) == "'y")); }, elementChildren(comp)));
- return append(mklist(element, "'component", mklist(attribute, "'x", '' + (pos.xpos() - graph.palcx)), mklist(attribute, "'y", '' + pos.ypos())),
- filter(function(e) { return !(isAttribute(e) && (attributeName(e) == "'x" || attributeName(e) == "'y")); }, elementChildren(comp)));
-};
-
-/**
- * Align a pos along a 10pixel grid.
- */
-graph.gridsnap = function(x) {
- return Math.round(x / 10) * 10;
-}
-
-/**
- * Clone a component node and all the components it references.
- */
-graph.clonecomp = function(e, compos, g) {
-
- // Write the component and the components it references to XML
- function collectcomp(e) {
- function collectrefs(refpos) {
- if (isNil(refpos))
- return mklist();
- var r = car(refpos);
- var n = caddr(r);
- if (isNil(n))
- return collectrefs(cdr(refpos));
- return append(collectcomp(n), collectrefs(cdr(refpos)));
- }
-
- return cons(e.comp, collectrefs(e.refpos));
- }
-
- var allcomps = collectcomp(e);
- var ls = map(function(e) { return writeXML(mklist(e), false); }, allcomps);
- var x = '<composite>' + writeStrings(ls) + '</composite>';
-
- // Read them back from XML to clone them
- var rcompos = scdl.composite(readXML(mklist(x)));
- var comps = scdl.components(mklist(rcompos));
-
- // Give them new unique names
- map(function(e) {
-
- // Rename each component
- var oname = scdl.name(e);
- var name = graph.ucid(oname, compos, rcompos, true);
- setElement(e, append(mklist(element, "'component", mklist(attribute, "'name", name)),
- filter(function(c) { return !(isAttribute(c) && attributeName(c) == "'name")}, elementChildren(e))));
-
- // Refactor references to the component
- map(function(c) { return graph.refactorrefs(scdl.references(c), oname, name); }, comps);
- }, comps);
-
- // Update the top component position
- var comp = car(comps);
- setElement(comp, graph.movecomp(comp, graph.abspos(e, g).rmove(10, 10)));
-
- return comps;
-};
-
-/**
- * Sort elements of a composite.
- */
-graph.sortcompos = function(compos) {
- return append(mklist(element, "'composite"), elementChildren(compos).sort(function(a, b) {
-
- // Sort attributes, place them at the top
- var aa = isAttribute(a);
- var ba = isAttribute(b);
- if (aa && !ba) return -1;
- if (!aa && ba) return 1;
- if (aa && ba) {
- var aan = attributeName(a);
- var ban = attributeName(b);
- if (aan < ban) return -1;
- if (aan > ban) return 1;
- return 0;
- }
-
- // Sort elements, place services before components
- var aen = elementName(a);
- var ben = elementName(b);
- if (aen == "'service" && ben == "'component") return -1;
- if (aen == "'component" && ben == "'service") return 1;
- var an = scdl.name(a);
- var bn = scdl.name(b);
- if (an < bn) return -1;
- if (an > bn) return 1;
- return 0;
- }));
-}
-
-/**
- * Add a list of components to a SCDL composite. The first
- * component in the list is a promoted component.
- */
-graph.addcomps = function(comps, compos) {
- var comp = car(comps);
- var name = scdl.name(comp);
- var prom = mklist(element, "'service", mklist(attribute, "'name", name), mklist(attribute, "'promote", name));
- return append(mklist(element, "'composite"), append(elementChildren(compos), cons(prom, comps)));
-};
-
-/**
- * Remove a component from a SCDL composite.
- */
-graph.removecomp = function(comp, compos) {
- var name = scdl.name(comp);
- return append(mklist(element, "'composite"),
- filter(function(c) { return !(isElement(c) && scdl.name(c) == name); }, elementChildren(compos)));
-};
-
-/**
- * Garbage collect components not referenced or promoted.
- */
-graph.gcollect = function(compos) {
-
- // List the promoted components
- var proms = map(function(s) { return mklist(scdl.promote(s), true); }, scdl.promotions(mklist(compos)));
-
- // List the referenced components
- var refs = reduce(function(a, comp) {
- return append(a,
- map(function(ref) { return mklist(scdl.target(ref), true); }, filter(function(ref) { return scdl.target(ref) != null; }, scdl.references(comp))));
- }, mklist(), scdl.components(mklist(compos)));
-
- // Filter out the unused components
- var used = append(proms, refs);
- return append(mklist(element, "'composite"),
- filter(function(c) { return !(isElement(c) && elementName(c) == "'component" && isNil(assoc(scdl.name(c), used))); }, elementChildren(compos)));
-}
-
-/**
- * Clone and cleanup clonable references.
- */
-graph.clonerefs = function(compos) {
- return append(mklist(element, "'composite"),
- map(function(c) {
- if (elementName(c) != "'component")
- return c;
-
- // If the references are clonable
- var refs = scdl.references(c);
- if (isNil(refs))
- return c;
- if (scdl.clonable(car(refs)) != 'true')
- return c;
-
- // Filter out the unwired references and add a fresh unwired
- // reference at the end of the list
- var cc = append(
- filter(function(e) { return !(elementName(e) == "'reference" && scdl.target(e) == null); }, elementChildren(c)),
- mklist(mklist(element, "'reference", mklist(attribute, "'name", scdl.name(car(refs))), mklist(attribute, "'clonable", "true"))));
- return append(mklist(element, "'component"), cc);
-
- }, elementChildren(compos)));
-}
-
-/**
- * Refactor references to a component.
- */
-graph.refactorrefs = function(refs, oname, nname) {
- if (isNil(refs))
- return true;
- var ref = car(refs);
- if (scdl.target(ref) != oname)
- return graph.refactorrefs(cdr(refs), oname, nname);
-
- // Change the reference's target attribute
- setElement(ref, append(mklist(element, "'reference"),
- append(filter(function(e) { return !(isAttribute(e) && attributeName(e) == "'target"); }, elementChildren(ref)),
- mklist(mklist(attribute, "'target", nname)))));
-
- return graph.refactorrefs(cdr(refs), oname, nname);
-};
-
-/**
- * Rename a component.
- */
-graph.renamecomp = function(comp, compos, name) {
-
- // Refactor all the references to the renamed component
- var oname = scdl.name(comp);
- map(function(c) { return graph.refactorrefs(scdl.references(c), oname, name); }, namedElementChildren("'component", compos));
-
- // Rename the SCDL promoted service and component
- var proms = filter(function(s) { return scdl.name(s) == oname }, scdl.services(compos));
- if (!isNil(proms))
- setElement(car(proms), mklist(element, "'service", mklist(attribute, "'name", name), mklist(attribute, "'promote", name)));
- setElement(comp, append(mklist(element, "'component"),
- cons(mklist(attribute, "'name", name),
- filter(function(e) { return !(isAttribute(e) && attributeName(e) == "'name"); }, elementChildren(comp)))));
-
- return append(mklist(element, "'composite"), elementChildren(compos));
-};
-
-/**
- * Cut the wire to a component node and make that node a
- * top level component node.
- */
-graph.cutwire = function(node, compos, g) {
-
- /**
- * Find the reference wired to a node and cut its wire.
- */
- function cutref(refs, node) {
- if (isNil(refs))
- return true;
- var ref = car(refs);
- if (caddr(ref) == node) {
- setlist(ref, mklist(car(ref), cadr(ref), null));
- setElement(car(ref),
- append(mklist(element, "'reference"),
- filter(function(e) { return !(isAttribute(e) && attributeName(e) == "'target"); }, elementChildren(car(ref)))));
- }
- return cutref(cdr(refs), node);
- }
-
- // Cut any reference wire, if found
- cutref(node.parentNode.refpos, node);
-
- // Make the component node a top level node.
- node.compos = g.compos;
-
- // Update the SCDL composite, add a promote element for
- // that component
- var comp = node.comp;
- var name = scdl.name(comp);
- var prom = mklist(element, "'service", mklist(attribute, "'name", name), mklist(attribute, "'promote", name));
- return append(mklist(element, "'composite"),
- append(mklist(prom), filter(function(c) { return !(isElement(c) && elementName(c) == "'service" && scdl.name(c) == name); }, elementChildren(compos))));
-}
-
-/**
- * Wire a component to the closest neighbor reference.
- */
-graph.wire = function(n, compos, g) {
-
- // Compute position of the component's service node
- var spos = cadr(car(n.svcpos));
- var aspos = graph.abspos(n, g).rmove(spos.xpos(), spos.ypos());
-
- /**
- * Find closest unwired reference node among all the references
- * of all the components.
- */
- function closecomprefs(nodes, spos, cref) {
-
- /**
- * Find the closest unwired reference node among all the
- * references of a node.
- */
- function closerefs(npos, refs, spos, cref) {
- if (isNil(refs))
- return cref;
- var fdist = cadddr(cref);
- var ref = car(refs);
-
- // Skip wired reference
- if (!isNil(filter(function(n) { return isAttribute(n) && attributeName(n) == "'target"; }, car(ref))))
- return closerefs(npos, cdr(refs), spos, cref);
-
- // Compute distance between service node and reference node
- var rpos = cadr(ref).clone().rmove(npos.xpos(), npos.ypos());
- var dx = Math.pow(rpos.xpos() - spos.xpos(), 2);
- var dy = Math.pow(rpos.ypos() - spos.ypos(), 2);
-
- // Check for proximity threshold
- var rdist = (dx < (graph.proxcx * graph.proxcx) && dy < (graph.proxcy * graph.proxcy))? Math.sqrt(dx + dy) : 25000000;
-
- // Go through all the references in the component
- return closerefs(npos, cdr(refs), spos, fdist < rdist? cref : mklist(car(ref), cadr(ref), caddr(ref), rdist));
- }
-
- if (isNil(nodes))
- return cref;
-
- // Skip non-component nodes
- var node = car(nodes);
- if (isNil(node.comp))
- return closecomprefs(cdr(nodes), spos, cref);
-
- // Compute the component absolute position
- var npos = graph.abspos(node, g);
-
- // Go through all the components and their references
- return closecomprefs(append(nodeList(node.childNodes), cdr(nodes)), spos, closerefs(npos, node.refpos, spos, cref));
- }
-
- // Find closest reference node
- var cref = closecomprefs(nodeList(g.childNodes), aspos, mklist(null, graph.mkpath(), null, 25000000));
- if (car(cref) == null)
- return compos;
- if (cadddr(cref) == 25000000)
- return compos;
-
- // Wire component to that reference, un-promote it, and
- // update the SCDL reference and composite
- setElement(n.comp, graph.movecomp(graph.dragging.comp, null));
- n.compos = null;
- setElement(car(cref), append(mklist(element, "'reference", mklist(attribute, "'target", scdl.name(n.comp))), elementChildren(car(cref))));
- var name = scdl.name(n.comp);
- return append(mklist(element, "'composite"),
- filter(function(c) { return !(isElement(c) && elementName(c) == "'service" && scdl.name(c) == name); }, elementChildren(compos)));
-}
-
-/**
- * Display a list of graphical nodes.
- */
-graph.display = function(nodes, g, svg) {
- var suspend = svg.suspendRedraw(10);
-
- // Append the nodes to the graphical canvas
- appendNodes(nodes, g);
-
- svg.unsuspendRedraw(suspend);
- return nodes;
-};
-
-/**
- * Hide a graph.
- */
-graph.hide = function(g) {
-
- // Remove nodes from the graph
- map(function(n) { if (!isNil(n.comp) && n.id.substr(0, 8) != 'palette:') { g.removeChild(n); } return n; }, nodeList(g.childNodes));
- return g;
-};
-
-/**
- * Refresh a graph.
- */
-graph.refresh = function(g) {
- //log('refresh');
-
- // Remove existing nodes from the graph
- map(function(n) { if (!isNil(n.comp) && n.id.substr(0, 8) != 'palette:') { g.removeChild(n); } return n; }, nodeList(g.childNodes));
-
- // Redisplay the composite associated with the graph
- var nodes = graph.composite(g.compos, graph.mkpath().pos(graph.palcx,0), false, g);
- appendNodes(nodes, g);
- return nodes;
-};
-
-/**
- * Display and enable editing of a composite and the graphical
- * nodes that represent it.
- */
-graph.edit = function(appname, compos, nodes, onchange, onselect, g) {
- var suspend = g.suspendRedraw(10);
-
- // Store the appname and composite in the graphical canvas
- g.appname = appname;
- g.compos = compos;
-
- // Sort the composite elements now to allow for change detection later
- var scompos = scdl.composite(g.compos);
- setElement(scompos, graph.sortcompos(scompos));
-
- // Store event listeners
- g.oncomposchange = onchange;
- g.oncompselect = onselect;
-
- // Remove existing nodes from the graph
- map(function(n) { if (!isNil(n.comp) && n.id.substr(0, 8) != 'palette:') { g.removeChild(n); } return n; }, nodeList(g.childNodes));
-
- // Display the composite nodes
- appendNodes(nodes, g);
-
- g.unsuspendRedraw(suspend);
- return nodes;
-};
-
-/**
- * Track the current app composite and corresponding saved XML content.
- */
-var savedcomposxml = '';
-var composite;
-
-/**
- * Track the composition graph, whether it's visible or not and the selected component.
- */
-var g;
-var gdiv;
-var bg;
-var gvisible = true;
-var gcomp = null;
-var cdiv = $('contentdiv');
-var pdiv = $('playdiv');
-
-// Position play div inside the content div
-pdiv.style.position = 'absolute';
-pdiv.style.top = cdiv.offsetTop + 'px';
-
-/**
- * Track the palettes.
- */
-var gpalettes = new Array();
-var spalette = 'control';
-var bpalette = null;
-
-/**
- * Return the composite in an ATOM entry.
- */
-function atomcomposite(doc) {
- 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);
-}
-
-/**
- * Get and display an app.
- */
-function getapp(name, g) {
- if (isNil(name))
- return false;
- showStatus('Loading');
-
- return composites.get(name, function(doc) {
-
- // Stop now if we didn't get a composite
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- composite = atomcomposite(doc);
- if (isNil(composite)) {
-
- // Create a default empty composite if necessary
- var x = '<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912" ' +
- 'targetNamespace="http://app" name="app"></composite>';
- composite = readXML(mklist(x));
- }
-
- // Display the composite
- graph.edit(name, composite, graph.composite(composite, graph.mkpath().move(graph.palcx,0), false, g), oncomposchange, oncompselect, g);
-
- // Track the saved composite XML
- savedcomposxml = car(writeXML(composite, false));
- return true;
- });
-}
-
-/**
- * Display a palette. Get it from the server if needed.
- */
-function displaypalette(name, g, svg, palette, gpalettes) {
- if (isNil(name))
- return;
- if (isNil(gpalettes[name])) {
-
- // Get the palette from the server
- palettes.get(name, function(doc) {
- gpalettes[name] = graph.composite(atomcomposite(doc), graph.mkpath().move(2580,0), true, g);
- graph.display(gpalettes[name], g, svg);
- });
- return true;
- }
- graph.display(gpalettes[name], g, svg);
- return true;
-}
-
-/**
- * Install a palette, including a button to select the palette, and
- * the palette content.
- */
-function installpalette(name, pos, g, bg, palette, gpalettes) {
- var b = graph.mkbutton(name, pos);
- graph.display(mklist(b), g, g);
- b.onclick = function(e) {
-
- // Swap the selected palette
- graph.paletteselect(bpalette, false);
- displaypalette(spalette, bg, g, palette, gpalettes);
- bpalette = b;
- graph.paletteselect(b, true);
- spalette = name;
- return displaypalette(spalette, g, g, palette, gpalettes);
- };
-
- if (name != spalette) {
-
- // Will get the palette from the server later if needed
- gpalettes[name] = null;
- return true;
- }
-
- // Display the selected palette
- graph.paletteselect(b, true);
- displaypalette(name, g, g, palette, gpalettes);
-
- return b;
-}
-
-/**
- * Save the current composite.
- */
-function save(savexml) {
- showStatus('Saving');
- savedcomposxml = savexml;
- var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
- '<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml">' +
- savedcomposxml + '</content></entry>';
- composites.put(appname, entry, function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
- showStatus('Saved');
- return false;
- });
- return true;
-}
-
-/**
- * Handle a composite change event.
- */
-function oncomposchange(prop) {
- var newxml = car(writeXML(composite, false));
- if (savedcomposxml == newxml)
- return false;
- showStatus('Modified');
-
- // Save property changes right away
- if (prop)
- return save(newxml);
-
- // Autosave other changes after 1 second
- showStatus('Modified');
- setTimeout(function() {
- if (savedcomposxml == newxml) {
- showStatus('Saved');
- return false;
- }
- return save(newxml);
- }, 1000);
- return true;
-}
-
-/**
- * Return the link to a component.
- */
-function complink(appname, cname) {
- if (cname == '' || isNil(cname))
- return '';
- var protocol = location.protocol;
- var host = location.hostname;
- var port = ':' + location.port;
- if (port == ':80' || port == ':443' || port == ':')
- port = '';
- var link = protocol + '//' + host + port + '/' + appname + '/c/' + cname;
- return link;
-}
-
-/**
- * Handle a component select event.
- */
-function oncompselect(gsel) {
- if (gsel == gcomp)
- return true;
- gcomp = gsel;
-
- function updateButton(b, v) {
- b.style.color = v? '#000000' : '#808080';
- }
-
- updateButton(cdelete, !isNil(gsel));
- updateButton(ccopy, !isNil(gsel));
- updateButton(cplay, !isNil(gsel));
- return true;
-}
-
-/**
- * Show the result data of a component.
- */
-function showdata(gcomp) {
- if (!gvisible)
- return true;
- if (isNil(gcomp))
- return true;
- cvalue.value = complink(appname, gcomp.id);
- cplay.innerHTML = '&lt;';
- gvisible = false;
- pdiv.innerHTML = '';
- pdiv.style.visibility = 'visible';
-
- // Get the component result data
- var comp = sca.component(gcomp.id, appname);
- comp.get('', function(doc) {
- function displaydata(t, w) {
- pdiv.style.width = w;
- pdiv.innerHTML = t;
- return true;
- }
-
- // Stop now if we didn't get the doc
- if (doc == null)
- return displaydata('No content', '2500px');
-
- // Format data table
- if (json.isJSON(mklist(doc)))
- return displaydata(ui.datatable(json.readJSON(mklist(doc))), '2500px');
-
- if (atom.isATOMEntry(mklist(doc)))
- return displaydata(ui.datatable(atom.readATOMEntry(mklist(doc))), '2500px');
-
- if (atom.isATOMFeed(mklist(doc)))
- return display(ui.datatable(atom.readATOMFeed(mklist(doc))), '2500px');
-
- // Insert the doc as is in an iframe
- var t = '<table class="datatable" style="width: 100%;">' +
- '<tr><td class="datatdltop">' + 'value' + '</td>' + '<td class="datatdr">' +
- '<iframe style="width: 100%; height: 5000px;" scrolling="no" frameborder="0" src="' + clink + '"/>' +
- '</td></tr></table>'
- return displaydata(t, '100%');
- });
-
- setTimeout(function() {
- gdiv.style.visibility = 'hidden'
- }, 0);
- return true;
-}
-
-/**
- * Show the composition graph.
- */
-function showgraph(gcomp) {
- if (gvisible)
- return true;
- cplay.innerHTML = '&gt;';
- gdiv.style.visibility = 'visible'
- gvisible = true;
- graph.compselect(gcomp, true, cvalue, ccopy, cdelete);
- setTimeout(function() {
- pdiv.style.visibility = 'hidden';
- pdiv.innerHTML = '';
- }, 0);
- return true;
-}
-
-/**
- * Handle play component button event.
- */
-cplay.onclick = function() {
- if (gcomp == null)
- return false;
- if (!gvisible)
- return showgraph(gcomp);
- return showdata(gcomp);
-}
-
-// Create editor graph area
-g = graph.mkgraph(cdiv, graph.mkpath().move(-2500,0), cvalue, cadd, ccopy, cdelete);
-gdiv = g.parentNode;
-bg = graph.mkgroup(graph.mkpath());
-
-// Install the palettes
-var pos = graph.mkpath().move(0, 0);
-bpalette = installpalette('control', pos.rmove(5,2), g, bg, spalette, gpalettes);
-installpalette('values', pos.rmove(0,28), g, bg, spalette, gpalettes);
-installpalette('lists', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('transform', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('text', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('http', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('animation', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('talk', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('social', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('search', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('database', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('logic', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('math', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-installpalette('python', pos.rmove(0, 28), g, bg, spalette, gpalettes);
-
-// Get and display the current app
-getapp(appname, g);
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/home/home.b64 b/sca-cpp/trunk/modules/edit/htdocs/home/home.b64
deleted file mode 100644
index 9131135881..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/home/home.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAAaoAAACRCAIAAAAdJ2t7AAAgAElEQVR42u2d+1NT1/r/99/AD2f68ZfjOOOFGXFwhoLScqgow2E+IAylGUqDCAlBwFgU6yUwMkVyKnKGD7anSvVrcWwZLziVFioUiQJCzIWQkHATwrXCEVQUBP1Uz6d+n7XXTtgJm5ug3J5n3tMuHtfaa+2tefE8a629wrxGQ0NDW5HG4CNAQ0ND/KGhoaEh/tDQ0NAQf2hoaGiIPzQ0NDTEHxoaGhriDw0NDQ3xh4aGhob4Q0NDQ0P8oaGhoSH+0NDQ0BB/aGhoaMsSfy9fvhwbGxsdHX2G9tYMHi88ZHjUS+75L92R4/NchPe4iPA3MNyhsV4pbzz1q/mr4oZM1FsSPN5yS6763qX23obBwcHnz5/T5/981DrQ90NfV9b9zmP3O1MXpWBgWX09F/vvG/kjb3nyNK/5nsJg3KczJGnrUDMUPC5FnfGMpVnf3ePwL2GoZbAxr1+r6Ffv669NWtqCW4AbaTjT36Xn3+Piwl/rv6tKzEpk07sUPHBjR3l/f//w8PDTxxX3O9MWK/UmKq2v9wYdeUnv/b1IvbkJHuD1e230eQ73lPSr9y556glwcG9/y3V6j4sLfxD32dlXYs4sa838rS2zvF2JekuCxwsPGR41PHaIAXu67va0HaVk6e9Kfdyf+nQgdXhwMQoGBsODQQIBIQa8025NUOu4j7HOkGC0JDQ0JZibUTMVPC6jBR4dEBBiwJ62O73VCZQXD9RJT/QJI4aEZ/VLW3ALcCNwO4SAXXog4NxjwPnEH+S8lH1lrcrb9zMr+5SodyB41PDASRbccrqj+SCwD8jyn1HF/40tdsEgYaiQBWdr66TVtcC+RKNF1tYpa+9CvYnaOuEBQhZsvZvdeUsK7HuiT/yzSfa6efkIbgduimTB/f2QBS8W/L18+bK88RSN+5B9C0DAhv9pb063Nqfc7zy6JNhnJ2CP9cT+O2pJVU2Ctg7ZN3cCKrQG6+39nSpJf03CMmOfnYAPdIp+1ua4EjJv+BsbG6NrHZCOTftxVdXHfRYXVNCB5JpEPYcPy33/UXts5k1KGr5qbzoE+BvoPbyQRBved/6gd5Hl4Myb3O84JquqAfzJ6oz2j7G4MNd1x1aXLYnhjXPCgbT2qvvu9IjGhWk+hew3GHYLujgGXUhrCmhhjlfepzV0qGSAv4d3x5HxoibCqpHOFjRv1uod6EmdnOIPsLMo8Dc6Okoz39/apsdfaVkQw7x3ug1JN4naktYwTHxZ2izwZ84E9oEe3j+0kPgbiHVjmBO1B2bepL87TcLiT2ow2T7DdV4Mw6yP9ErLnSMOYorSGWZDqGlhmk+u8Rv8+HomlKCLmKJjtDDHi+/VGYB9oMd2chnDQxgm43L07CjzZq3eiUYMCRR/gJ1Fgb9nz55R/JW3T/9ZLVXBg3X9vgfKx1U9yDvH0BgeSE/yhwwjnw3+fjUrKf4e9S1Y9PfHMER/8fBXm/tG+Iurb7B9hitdGca7pHXuoIkpUTKMf3hLl6ylXfqGzbeGzT/+BG4wpgQ4uCVsHvBXT/E3pI3jeGEhIDtVJJkdZd6s1TvRs3oOf4CdRYm/nuTPXN+L/+kwG8vIw13fi81PIeWOZCjv/3//Db/8wuXvM6z5p+4uZT/DxVVR/q7U9568IBk85bVRH7q6xx50rmkXW8E1PM6dVvjsX0kq1n+xIGQzw9haRRWzzis/cc41YR8Ee7/32dkUwU6dVFT2qb1CfL58ik5nPn7BTq9c5Ya3OeA9+O+BOeOvqSjwI9tD+Czzk0djijHLJyEb132+dyN1HsmP/WMSJzR/VP/JZ5zvL7lF8f/H1dz4Zdpm2zUjnrI1u37lOvoo6C/w3zNzwV9jhZttzGszSsEjOq9cZfccOhfNfsijik6vXU99W30uVtJPfnTZOZtzg/f5Chu/GNfdodTrkVMsdW6+wSuvVDaJk4e/xoDPQyFe26lt57NGojq3er2/m+367uz1WefWtSFbSdc5Fc6XdbxBScXp/1ofE25ywN/EG5kD/mIKgrnukrNF4BkqCRCvow6XU2fBIy2Vr2Y83Q16Qhbrtx4Ms/rnil1OrRB/s4r+vkwLYxhxFHChuPjv5CmGicq5tHfN/xSFEI/rBzmq5K//5QtFueqYqn43ZHyb5R9frP+COuN/UrBxIhipmZPzAYGC6tiEQBIu5Xtad/js2R1QjL16uLyKOINPxF6p/+J0PukdEsnSKhEUPkyNKtDJD8cRvnyYkSTYqQNe2VZr4j6+qEvJOUEG8FnBF4Kdznz8gjXLecOTB5A2U0R/5R3KYvNxUHnHpPgbqw+Ei8i+juyyJqmv+jFsTvpUR5zMRm916z59wd+g+OWv+wSdf1gj4FP60cGgJmtSVb43aX4zmavJeN7Uxd/M8ySk0x0cqyf3GJL5SVurNDeI/PEU0d+zh4r+LiIoTBL9tUZcIsxyO1EgqmqUlLH8yiiIrK0JzTsCZa8ik0x7wQU+u7uzRVWVgYf8ye+VqnZpLXGu2pMtqq3ZmZNIal6qo/hj1ifuLKukTo+LdZKyXMbWPCgjlmDrfI2gkwseG03+u8ll/EpMQuEhuX5olSbsm/3s9TWck4n1zUjfnvfVhMve4t9gTAnkvFtCefgTvJHJYLfH0pKoM4CgMFn013eZ/BuTpQdaaySvKgM3Mcw2mW9LZWR1Nvn9nfVD1GvNTvJXuCtgsIL8y9umCHVqhfibdfJ7rQAen3tBn/L0wTXsv4b3L5Iy4eDPLBT+UU9rHv4MUHU25fsTEA6tOalLKzYriptT4r3Ha57k1XSaESt1qHD8yzDSqrTti6+vJhX3KMvb0q6UfbqGRcnZjDWMa1Ax1zAZfrdtzkgS7LScd33SivG9wv14/B9i+CwG/STU6XczHr9gp9+Sjv7ODa9DPkXya7yX3dZ0GFSt/+pK1fFfjMcF8ffHQFLVr7GPhhVjAwe6asPcWCpRft2wUvQcuRrBMBEhA0JO3dcQIfz1RuuBR93Jj/oSTvxtYs19R1ik6rP/CmR4RAH3WDpF8nu9qTCxuhr0490Ckz6t15omnPy2lK625YZSU83Oi8XRLV0Skymy6DRwwbvIFJ4ByIuN5BCgCTiRG65tZ51bA6tM0dq66LpKry2A5NxdLIkCamnNdj8Y3I7snWkQlyXamrcHwP2uTxd0itnmq7Yw7JXbJ8mOmUDb9f1DeJ1WEWeY0GVjeDdop569IHgjEiH2Fel/vKdKBF29dfbzctVejW7a5NecDj2vKq2IHqqJGtJEZMGvsGC/FxASXvbmgr1g3yFMfudh7q85Dj7QaSo5/MqLL4iCv9LDZUlQDi84zDJrzVlu6ePYYW9mTUbSxX+9z/DNFVLUj39yrHnAVRh/XzdzP17McSWM6zmcdtCdfzE5Bx3fIq7hl1N0ys+vv4cLMjtsrej1Q34S6vTMjMcv2OmZE/yOvpx4p/a4D8BHSQcFwB8InALJ7/C+H9M28vux46+qz5Yd561jNvp3Cznv5m92GORGxi0i6D6p+Vf9AK158MxGgj8TAeXfHnCMO0SdgnEfgI+SDgqAPxAJBifir7F4FYs5FoUav89D+QMBvygHPOkxjiwQ5UQ6DHg94xKSzfJrfO1CdMKfkA7+y+yPauc7laFCTjEXx7H9CoVgFH876xyuH8nGjGHsok240GVjeDc4EX+CNxIjFPcB+CjpoAD4A4FTAH/GsG0AsmtkEaMl29Xh4uuYTcG+I2yOzEbzTJ6dd7xWiL83WPo4dhhCadf3yCpHxzESIrGf9dPNSif8HfAmgRgbZ31gi7OUV8piTxanlDjWlAvj7z07iU7G0UAMLuX6D9UXpZAb9sg3s8n192x4ZeNLSjgzaacq5+hvHH8n5YwNf86dfjvj8Qt2mseP/iZf+oCEl2Kut/0g6KdqJeAPnDcbTzjhz/Q1BGXrinRJTx8DCqUfAf50B1n8/cVOuht77TGds7OWxHSeXTZ4ddVG3qhMeOyIv9yNE6K/yZc+IOGlmJPUakF3dUrAHzjbO76aAn/hGRA9+QeU1MQ0kqiQ+Esa2ZBqv5gDgcl/T6T3xRrWaQ8JuyKLCgILK6PZyTsb/tjojIv+xpEUuAcQoxR0Unru1JoCSfLrH1oniL8NdvyRalz0xy2YhAlddmr8Cd7IxHWbRNsK7/0qotSbNwB/4FTo1YL4o1wzKKBnt24bR7qvBZVejngFhW/t4YK71eLcCvH3Jiu/V/LJbBcTEALpZAENeegM4AT8QSDGTX4djLrSnFbwEwmv1qTuKZ0R/pg14pCC5rTv88k03GdXD7Oke//r+mPlbV98KSepd/C/klX1UWRVQS76vipJzrL4w0k6dbz+x+yU3O6iNu76kKcLdjrz8U9S82N2vjKuqO3wyVT3yeb++FHeo74vDMZMIGCxJtPSZPd/weGPUGlzlfXg2EDS1YN/JfM4+fE0+nOLDWzrO2C6Sqb5jtjm/pyc3Ixe2iddfQfabrIVMqOfCuHvqS6InWSMejCw70bmxsnm/vhRnsTQkKP+BQhobMg8pb/BYdEghD/CgsidtY0SU43/Hm4xQaIi83Rr0y5EmUyhOWRCzU/VSifvVn9+LrLORCfXXA5d56bhQpQRdaZwdurQnczNZZOah0jz8DwyYef6TeUkThZkjWRIa8l1cmOEoj+XCHr9/bbrj+NP8LKyKfEneCNTL3EMaSW3b2cBARVVN+/U/NPmt5FLHwogE6f4t1TGvCghs8Ah8oBuTbT1Bx8ob0oJ5SYEFWGAPPK3Lgt85dgK8fdGG1/MsRB5+eeQ1VJV7ad03YBdT4CPuisffx+ydQoKgtbYfgdtjhNd65lQczL82ScuMmLLybbq2GD7dcS+wRDvx0WR0En16Yes88O4Hf5kMIcFO3UizkV28YS/dCvY6azGL9jpRXYVhQ2RXdn5ymNT4+/50BFa5guc3NyfNVJm6+KjWG8ZcGnvJxzp/sb5ZdmRY2MKQSdcoa3I375G+dHekN+HFWP1QLp1TskvyZcLbI03rmMnGQ9Ojb+4pnsc8ngCpw1/pWttdJDWFtiztVURia7rGWb3OfBHnE+3/6W429Zzwelir7w7V9wCKMmm+SP3XDOu0poiFoW21eQLMZM42eb+FGRRl47Q9RAB/G2xXT+tQOLYSrgv3g2ylXew+OMKgjcyNf7+1xRHy3yB08aL6HyRCyUdWds9673JdvFtu/z6LFGnIO1d50FDwr6zHtx6iGMrxN+87fub8oWHL4ub00o7js+wPreFsEOpaksrdXiN5Hip43WuFPw9+GAUN6/XkbSZv4oybadchWk7nc34BWuyTtWMN7gM9H7BZx/86AidI0/7Djx9fMTuYUm3zvRY8cfAAZIUT+60TSAeeuR4hcnf9yA1/5jxBhep3shnH/w4+WaO9pg6U0zjhJWHltZo8LcIOSdUFrgCV7Nreue0+wobu6SmKVvN8rJT3MhkG1we3pXy2Qc/Or/CYZS8Gt/TJxnSRI8Yp3+jw6EV4u+t42+WmvkLJKpaEZt9+x448Xc2BnQ/3fzWO513TVzigHAPEl6QPe6bQk9rIer9i3pgeue8a+ISB4kBDSQRHo/7lpre2mshb7K9GcI9SHhBvLhveQrxZ4OaOelAxqdXZvb6cJEqNl7+QbD4/dgTn15sPv5uOl1U+PujO/ZMdljX4+mdiL8ZvRSsLfZJOx3ZiPhD/C0E/laanPB3r+PET9VKkMGYKZT8LiI54e+0peKuTgnKUf8yXfKLmh5/Wn1u6s0boNu3swSTX8Qf4m9Z4Q/CPbrxBQQFp6WPxYw/CPfoxhcQFJyXPlCzxB+Ee3TjCwgKE5Y+EH+Iv+WCP7rtGfA3cF9B2XftLpHTxpdFiD+67Rnwt9dYT9nXalaAnDe+oGaGP7rtGfA3oNtL2SevvANy3vhiU8u3XjKRu6rC5tdEFKZ7HZW5HZX7VJdxu1teaUSFCq+ju9wyFP5WvdMhCJF5MtfklMAReuxK2c58pW9Bth+R0rf0WhRbTdqS75chc0uWef18TQyewWuB49XYmgVnw8lyikZUoPBI3uV2NMXXUClB/KGmV7H5eLX+KyBgV9uRu+YTFH/gXAwnvkyDvy7Fj3cLgIBJavUVwyWKP/L+r8CJL6jplagzXL11FgjYVZVYWPM9xV8iOe9+wlsflFYl/nS/C/cihz5M7PD+B5NfFPPaGC5z8Nm2QLOqTmGPnvD0oW/FsTuo+W9WhQL7VCkOzrxr0YYUF8bZvIb0Th2tUtVIEX+oaVTewWW7fAm/9LbI9OyhgiKPL+GX3lAz0B5LC0UeX8IvvTVLDNnj74BS/HXnsns6Pb2sGnHhLsKsbSmhfflste0+3TXhR9lTYbJs5/2NFPlw7T192OhPwh4J43JU4Zuv9Dml8Cq8LH5dE8QS1qWwRGxQrqVM7Lvsf0rhk5fuk690t20sFY1cYzfNbvfuM0b/vIvwMSNfjPhDTa9fjA7sm+zIg0WoXqsD+yY98gA1w/xXo+Ozb9IjD/Shm3iBFsWf9ay3ePvqjG8jyeY+Fm0hirChsrBCpU9pCaSiUnrgFYc/S0Syvf12Fn+WCJaPLoVFkd0VYro3cDCfbJneJAsYaZYOloVVXw7v5p0W86LIlzaH4JHiL4Q9WkYjJ/BNZkeC+EPNKAac9sCrRRsDTnfgFWp2MeC0B169NoqydnkZasT5wbzkd1xRp7YTv1hpO9dPHyajBwJ6eg2yHhVLKLHcI8TGr9eandscste11ZVSg2I137VN5NM3njtHZbG4/LmCJrli9kdmk+cqFs2uZj3O/aHmbz/gUhHi723vB7QpJm/7BPxZxHnBztN8L0r8tjF0wm71zyUxQ9fYtFfk/6o5gkzYbfd9QWYS/QBbm7Z7qK6F5rG5MxPsp09fSyfysnIDTolWsZFgEA0M6YFam2SBNiLT4JFh1nEdlVZIEH8oxB/qbeEv3wl/RhHHIMbNoHFGTB+byTIiv9Pbac7rniXj6CaT+VqNvMoadsrP0+d2+mrKQfbEBDY89PQe4nWdV8StL7ewM4MhKTvJLCT7ljGzK/AV4g+F+EO9E/yxJx0QQnnYWdbCrpAcZafhhi57sX/qnes5YeWWcSk55yP2dJGlh5G9MmV+tGYnPTOVIq8mcJO9bAwnq8zrPPpsg6FpMk236cyjbUUF8YdC/KHecvJrzR0/93QTGwOGpIdxC7KMi0zmSldLknMjXuijhzTRQ/qYkcqgEHZCsFsvfUGRxzAyuQf95hByXpZFRLezbAt2E3sy9nPzuYlCHuAGKVsZl2S5RwjbXJwdgckvCvGHemvRX7Btf1+zpHCX83a8EBLKSTW8LTLJ6TtfOH71pdi+8tssNed62BeUxba90C8qgrhlE7igzH+Qt2mGrvPaJDVke4x3LQ8Ywm3PKMQf6q3hb+ZfcRnDHoc1k5oSNjB02rEsHSFOyZs2R/yhEH+ohcIfvvOL+EP8If4Qf4g/xB/iD/GH+EP8If4Qf4i/RY+/DpVsmePPKEf8oRB/qAn409dbb+8H/D3WLNsTT0caFBR/o6OjiD8U4g9lOwhLb7xXcxLwN6hettHfk9bvKP7GxsYQfyjEH4pTQr25sb68QyX5vTr+z6ZlyL4/m+Mf9Bgo/l6+fIn4QyH+UDb8mZubmpqaNRd6q/c80ScuMwIC+550lVD2DQ4OzpFaiD/EH+JvueGvs7PTbDZ3NFf3N5x5oFM8qZOPGBKe1S9lGeUjDQrIee1xH9jz588RfyjEH8oBf4CGtrY2q9Xav3xteHh47tRC/CH+EH/LEH80NwRbfuCDm5p73If4Q/wtFvzJEH/zJ7mlhb8n7uXLl2NjY6Ojo8+WuMEtwI3Mca0D8Yf4W1z6d3fa/jtq8k3nBhPCa+5SNLXOy5bglWCIP8TfAutBT+pJtZZEf/p6hNfc9V1bB+IP8Yf4Wxp61JdaXm8E/MWrtbK2TuTXXBTf3mXo/R3xh/hD/C0NDQ+mNjU1XdDp96i1iUYLEnAu7Cvp6bUvESD+EH+IvyWAP7pPrbql9YylWaEz7NMa9upA9StR+vpEvTGh3pxgbnZWvRn+CCo4Nflcb0ytN55paFS33rPabHBwcJEsLyD+UIi/qfBH96mVmy3Z2rr9d9R0IXgFCm58f7X6pFpbXm+EiBh+K9A4rqftjvVutvX2fnqUy7TqqZT11ybNWup9/VpFf8OZ/i79PG4uQfyhEH/T4O+HBktctVpaXStZqexz0gWdHiJi+K3QbfqhYwbI43RL2lu9503Y58DBvf0t1+drazHiD4X4mwp/d9qtZOmjVpOkrUvQ1snqjFKDKa6+YQWK3Li+Pl6t3aPWVre03mso77wV11sVD/q9On5QHfdYIx3Sxk3UE51suC5+ju+WjRgSnugTHqhZAnbp5+XFMsQfCvE3Ff4g56X4w6UPTm2d8CjOWJoh54WADiKyd3l4AXQE3ZEseD6OFUD8oRB/U218odueceOLEwEVWgM9uLS/JuEdH9wC3T3QKeblUCnEHwrxN9W2Z+6lN962Z4m2MqKufWpASGuuuu8+FtHoXH8mbedR4sJc1x1bXbYkht3ixiOtKbAPbC7apzXQtY6Hd8fB9KImwjr7Y5zfoNWTOvm8HCmK+EMh/qZ66Y1O9o+/9NZYupphPAqneQcupiSTYdaHmhzrz6zt/KnOi4FRRHql5X58nRtPTNExbmBz/dYOA13QGD+23hgewjAZl6Nnh783ajViSJiXA+URfyjE32xOfGkhCPMuaZ0pKfj1Z9t2rqp0ndAdy+UtYfOAvwnf2WYhIDtVJJnl15a/Sav5+jY1xB8K8Tdz/DX6wYeVNbd/fu++foPXJQ3xm0rd1m/wyKtkQ7wKKPucy/mv9THhJl79nGJeuQJqRpedW7ueOjZ4nyceierc6vVb14ZsBZcrW4dLmYnf3213KK3tnlMsnVA5qui0/WpeeaVkGFxvzNqMUknFaXY8DvibOIA54C+mIJjrLjlbBJ6hkgDxOupwOXUWPNJS+WrG092gJ/yyfuvBMKt/rtjl1Arxh/hD/C2Mnj1U9HcRQWGy6E9cmE1wk3EhQttAcBZxDkgUXXiEfIJDciUQXhWlM8zWoMuQY26BHJNXv5VfltZecGGYVXuyRbU1O3MSwe91qS6mRMmiINY3I92/xMQL2Vj/+sTQKk3YN/uh6HFRw6+8Pe8rgpnd2aKqyqCMWILI87ciLpEKbicKRFWNMSXceOz4ExzAZLDbY2lJ1BlAUJgs+uu77AsXkaUHWmskryoDNzHMNplvS2VkdbY7+LN+iHqt2Un4vytgsCIA/r9NEerUCvGH+EP8LYyuNxUmVleDfrxbYNKn9VrTpk1+xeeBGqER7V2hn29lSRQpImXCwV32IGuS5Dc8wx8oGVhlitbWRddVem2hrQiwAqomziQSf2At/bHdP8S5clgaDCAxkqvfHhABrEyP4XVnp569IDgAiRD7ivQ/3lMlgq7eOvt5uWqvRjdt8mtOh55XlVZED9VEDWkisjwZJtjvBYSEl725YC/YdwiTX8Qf4m+RxH0APko6KAD+QCQYnIi/xuJVwJQiNjSruwoBlF9JKSRyXufPrWUY36JiKLud14znmPz6vLIoJ5Lh23rGJSRbTIjmH9YojL+dddyPohP+QLdIXuVw8DD7o9r5FZQxvO4m4k9wADFCcR+Aj5IOCoA/EDgF8GcM2wYgu0YWMVqyXR0uvo7ZFOw7wubIeZ7EkWfnHa8V4g/xh/hbiDm+LgX3RletFnRXpwT8gbO94ytB/Plw6wmNvjsAHBsAQ+GNjf7c1J5/aF2XE/64+rwyG6/F2uK1rsiigsDCymhCtK0T1yVY/G2w4y9wtz364yqzVxvHX+AeZlr8CQ5AOvGbeW0rvPeriFJv3gD8gVOhVwvij3LNoICe3bpttOq+FlR6OeIVFL51txHR3WpxboX4Q/wh/hZ4iUNiaMhR/wIENDZkntLf4LBosOHPdB0+2WsPnRbVNhJq5JGJNmaHEtLGCBpP0RlAO/749XllSVku1F39+bnIOhOdpHM5dD1mKvwxLhHKiDpTeB6Z+3Pn5v64yjElZFZx9aELUSaugus3lbIp8Sc4gKmXOIa0ktu3s4CAiqqbd2r+afPbyKUPBZCJU/xbKmNelPiRJyEP6NZEW3/wgfKmlFBuQlARBsgjvylkga8cWyH+EH+IvwXGX1zTvYkv+YPTRgSTb8SGcVhoCwjRTpSSrc6q0+yaQw1Zqy0DHu1g2cSv79A24ny6iy0WWrU7V9xCW/lPir8tXGXXtAJJu3NlUd4Re6659tCFGHab4Vob/uzjYUFJByYwgKnx97+muIkHGYDTRqXofJELJR1Z2z3rvcl28W27/PosUacg7V3nQUPCvrMe3HqIYyvEH+IP8bfAG1ykeiOfffCjExQkja3S2WwT4dd3aNvSGl1nimlsn24TtZLNr7ukJqg8xR5DerXZ7OCbbgBOc3wP70r57IMfnV/hMEpeje/pkwxpokeM07/R4dAK8Yf4Q/wt7PZmEgMaSCLMi/sWTOxmmg1zf1VjXrY3Q7gHCS+IF/e9ayH+EH+Iv5WCP6m22CftdGQj4g/xh/hD/L1l/J22VNzVKUE56l8Ek9+VIyf8afW5qTdvgG7fzhJMfhF/iD/U0l76oBtfQFCYsPSxcvEH4R7d+AKCwoSlD8Qf4g+1NPFHtz0D/vYa6yn7Ws0KkPPGl5WHP7rtGfA3oNtL2SevvANy2vjyqjI0S+aWkR70AvGH+EMtrW3PP94tAAImqdVXDJco/sj7vxPf+lhhStQZrt46CwTsqkosrPme4i+R/a47pznBkWte7C4XryHEH+IPtbReeqPI40v4pbcVpj2WFoo8voRferNEGX7YqSkRz4Rfr4zSV4g/xB/ib5Go1+rAvkmPPFiB+a9Gx2ffZEcevKgIlG1fLZYHjFDA1YRliVZz255FXoYabpFk8Jq/7SCsVafyIxB/iCESqGQAAAU2SURBVD/E35I58GrFxoDTHng1co283MZ4+pDkVx8mpojzXCv25F5FMesBkf70BECZzJ2+IX1qtqdDI/4Qf4i/BTvtGTUZ/oo4/EH0Z80lZ61uEvnRU14K2dfaxMpwAzkIiwlJIcsj3ex7b/QgLMQf4g/xh/hbJvgzp68lZxpkc7lti5L8GKIIo37Hs7C8hxB/iD/EH+Jv2eCPnve3aVcAu74hLZWtIvhLDzco2OhPsXPEIukrCsrP9lddi3iF+EP8If4Qf8sGf69rgjZxix7uR0Wr2OJqjcZ+2vOqLKVvMjsnOKuDXhB/iD/EH+JvMeLvRQn51g5muw9d+R0qsq/wQobrqirjjvNr+dbLnviG7PIbxJVfxB/iD/G3pPH3Si9WKdmvlvN0mMt7oY8e0kw4x9QSM8ODsBB/iD/EH+JvsePPkMIdnLpJFoTv/CL+UIi/lYS/XO/kXW5HU/y6jXjkAeIPhfhbYXN/eOIL4g+F+Fsp+OtQyRYMf0Y54g/xh/hD/C0Q/vT11tv7AX+PNQtw4ulIg4Lib3R0FPGH+EP8If7e7UFYeuO9mpOAv0H1AkR/T1q/o/gbGxtD/CH+EH+Iv3eqhHpzY315h0rye3X8n03vlH1/Nsc/6DFQ/L18+RLxh/hD/CH+3i3+zM1NTU3Nmgu91Xue6BPfGQGBfU+6Sij7BgcHXy9fQ/wh/hB/ixd/nZ2dZrO5o7m6v+HMA53iSZ18xJDwrP7tyCgfaVBAzmuP+8CeP3+O+EP8If4QfwuAPwBQW1ub1WrtXwgbHh5+vawN8Yf4Q/wtavzRDBTsXYIPulvecR/iD/G3WPAnQ/wJSW5p4e+8e/ny5djY2Ojo6LO3ZnBx6GIZr3Ug/hB/i0v/7k7bf0dNvuncYELk8aVoal32G48Rf6gVjb8HPakn1VoS/enrEXl8fdfWgfhD/KGWM/4e9aWW1xsBf/FqraytE6lHFd/eZej9HfGH+EMtZ/wND6Y2NTVd0On3qLWJRgsSkLKvpKfXvhCB+EP8oZYt/ujutuqW1jOWZkV9g9zUmNDQlGBuXmmSW1oUza2Q89rjvmW/8w7xh1rp+FvY3W2L2Zb9zjvEHwrxtzC72xazrZCdd4g/1Pzgr73p0NLEX/o73t22mG2l7bxD/KHmA38WZXtzOuDv4f1DSwt/TwdO4gQ/GuIPNRf8ZbY2fgv4e9CzxPA3NFCA+END/KHeXKUtmY3mW+1NKb3th/8zumTY95/R1Af9DYg/NMQf6s0Fj52cDWe51N125HF/6pIgILBv6OFN3N2GhvhDzRV/3Nlw7eq+nov/7sl63H/s6UDq8OAiVPrw4EnIee1xH+5uQ0P8oeaEv6W7ew53t6Eh/lBzxd+S2z2Hu9vQlgn+fjV/hfhbKFVYs5bQ7jnc3Ya2rPAH/6DLG08B/n5ry0QYLYA6vsYFBDS0hcEf/DJX37sE+CtrRfwtgOp6ChF/aGgLgz9IZNp7G0rMyhJz5u37SMB3rY7fzYg/NLSFwR/Y4OCgsaMcCFjWqkQCvks191Xi7jk0tIXE3/Pnz+HjBzEgZME3m0/9du/Eb21kJQT1NlRhzars/AZyXnvch7vn0NAWDH9gw8PDeFQR7p5DQ1uJ+KMxIJ7ahrvn0NBWIv6orfBT23D3HBraysUfGhoaGuIPDQ0NDfGHhoaGhvhDQ0NDQ/yhoaGhIf7Q0NDQEH9oaGhoiD80NDQ0xB8aGhoa4g8NDQ0N8YeGhoaG+ENDQ0ND/KGhoaEh/tDQ0NAQf2hoaGiIPzQ0tJVs/x8Xr6boMQqPwwAAAABJRU5ErkJggg== \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/home/home.png b/sca-cpp/trunk/modules/edit/htdocs/home/home.png
deleted file mode 100644
index 8f5a0b0d86..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/home/home.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/home/index.html b/sca-cpp/trunk/modules/edit/htdocs/home/index.html
deleted file mode 100644
index 6fb9b558bf..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/home/index.html
+++ /dev/null
@@ -1,68 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<div style="margin-left: auto; margin-right: auto; text-align: center;">
-
-<div id="maintitle" style="font-size: 150%;"></div>
-
-<div id="maindiagram"><div id="diagram" style="width: 320px; height: 280px; padding: 0px; margin: 0px auto;"></div></div>
-
-<input type="button" class="greenbutton" style="font-size: 150%; font-weight: bold; font-style: italic; padding: 10px;" id="getstarted" title="Get Started" value="Get Started"/>
-
-<br/><br/>
-<div>Requires Safari 5+, Chrome 11+, Firefox 4+, IE 9+</div>
-
-</div>
-
-<script type="text/javascript">
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname);
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-$('maintitle').innerHTML = isNil(config.maintitle)? 'Simple App Builder' : config.maintitle;
-$('getstarted').onclick = function() {
- return ui.navigate('/#view=store', '_view');
-};
-
-// Display the main diagram
-var diagram = $('diagram');
-diagram.style.background = 'url(\'' + ui.b64img(appcache.get('/home/home.b64')) + '\')';
-var bgpos = 0;
-setInterval(function() {
- bgpos = bgpos -280;
- if (bgpos == -2800)
- bgpos = 0;
- diagram.style.backgroundPosition = '0px ' + ui.pixpos(bgpos);
-}, 2000);
-
-showStatus(defaultStatus());
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/index.html b/sca-cpp/trunk/modules/edit/htdocs/index.html
deleted file mode 100644
index 3bc1529dbb..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/index.html
+++ /dev/null
@@ -1,525 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html manifest="/cache-manifest.cmf">
-<head>
-<title></title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<link rel="apple-touch-icon" href="/public/touchicon.png"/>
-<base href="/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- // Redirect to login page if not signed in
- document.location = '/login/';
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- // Redirect to login page if not signed in
- if (http.status == 403)
- document.location = '/login/';
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-// Redirect to login page if not signed in
-if (document.location.protocol == 'https:' && !ui.signedin())
- document.location = '/login/';
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="mainbodydiv" class="mainbodydiv" style="overflow: visible;">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="menubackground" style="position: absolute; top: 0px; left: 0px; z-index: -1; width: 100%; visibility: hidden;">
-<table cellpadding="0" cellspacing="0" width="100%" class="tbar"><tr><td class="dtbar">
-<table border="0" cellspacing="0" cellpadding="0"><tr><td class="ltbar"><span class="tbarsmenu">>&nbsp</span></td></tr></table>
-</td></tr></table>
-</div>
-
-<div id="menu"></div>
-
-<div id="content" class="bodydiv" style="overflow: visible;">
-<div id="viewcontainer"></div>
-</div>
-
-<script type="text/javascript">
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname);
-
-// Init div variables
-var bdiv = $('mainbodydiv');
-var mdiv = $('menu');
-var cdiv = $('content');
-var mbgdiv = $('menubackground');
-mbgdiv.style.top = ui.pixpos(mdiv.offsetTop);
-var vcontainer = $('viewcontainer');
-vcontainer.className = ui.isMobile()? 'viewcontainer3dm' : 'viewcontainer3d';
-
-/**
- * Pre-fetch app resources.
- */
-var appresources = [
- ['/all-min.js'],
- ['/ui-min.css'],
- ['/account/', 'flip'],
- ['/clone/', 'flip'],
- ['/create/', 'flip'],
- ['/graph/', 'flip'],
- ['/config-min.js'],
- ['/home/', 'right'],
- ['/home/home.b64'],
- ['/page/', 'flip'],
- ['/public/app.b64'],
- ['/public/config-min.js'],
- ['/public/grid72.b64'],
- ['/public/iframe-min.html'],
- ['/public/img.b64'],
- ['/public/user.b64'],
- ['/stats/', 'flip'],
- ['/store/', 'left']
-];
-
-/**
- * Handle application cache events.
- */
-applicationCache.addEventListener('checking', function(e) {
- //log('appcache checking', e);
- showStatus('Checking');
-}, false);
-applicationCache.addEventListener('error', function(e) {
- //log('appcache error', e);
- showStatus(defaultStatus());
-}, false);
-applicationCache.addEventListener('noupdate', function(e) {
- //log('appcache noupdate', e);
- showStatus(defaultStatus());
-}, false);
-applicationCache.addEventListener('downloading', function(e) {
- //log('appcache downloading', e);
- showStatus('Updating');
-}, false);
-applicationCache.addEventListener('progress', function(e) {
- //log('appcache progress', e);
- showStatus('Updating');
-}, false);
-applicationCache.addEventListener('updateready', function(e) {
- //log('appcache updateready', e);
- applicationCache.swapCache();
- showStatus(defaultStatus());
- //log('appcache swapped', e);
-}, false);
-applicationCache.addEventListener('cached', function(e) {
- //log('appcache cached', e);
- map(function(res) {
- showStatus('Updating');
- appcache.get(res[0]);
- }, appresources);
- showStatus(defaultStatus());
-}, false);
-
-/**
- * Handle network offline/online events.
- */
-window.addEventListener('offline', function(e) {
- //log('going offline');
- showStatus('Offline');
-}, false);
-window.addEventListener('online', function(e) {
- //log('going online');
- showStatus('Online');
-}, false);
-
-//log(navigator.onLine? 'online' : 'offline');
-
-/**
- * Handle view transitions.
- */
-
-// Keep track of the current view url and uri
-var viewurl = '';
-var viewuri = '';
-var viewidx = '';
-var viewdiv;
-
-/**
- * Record which transitions should be applied to each resource.
- */
-var apptransitions = {};
-map(function(res) {
- if (res.length > 1)
- apptransitions[res[0]] = res[1];
-}, appresources);
-
-/**
- * Return the transition that should be applied to a resource.
- */
-function viewtransition(uri) {
- var t = apptransitions[uri];
- return isNil(t)? 'left' : t;
-}
-
-/**
- * Create a new view div.
- */
-function mkviewdiv(cname) {
- var vdiv = document.createElement('div');
- vdiv.className = cname;
- if (!ui.isMobile())
- return vdiv;
-
- // Handle view transition end
- function viewdivtransitionend(e) {
- if (e.target.className == 'leftviewunloaded3dm' || e.target.className == 'rightviewunloaded3dm' || e.target.className == 'flipviewunloaded3dm')
- e.target.parentNode.removeChild(e.target);
- }
- vdiv.addEventListener('webkitTransitionEnd', viewdivtransitionend, false);
- vdiv.addEventListener('transitionend', viewdivtransitionend, false);
- return vdiv;
-}
-
-/**
- * Return the last visited location.
- */
-function lastvisited() {
- return localStorage.getItem('ui.lastvisited')
-}
-
-/**
- * Build and show the menu bar.
- */
-function showmenu(mdiv, view, appname) {
- mdiv.innerHTML = ui.menubar(
- append(mklist(ui.menu('Home', '/', '_view', view == 'home'), ui.menu('Store', '/#view=store', '_view', view === 'store')),
- (isNil(appname) || appname == 'undefined')?
- mklist() :
- mklist(
- ui.menu('Stats', '/#view=stats&app=' + appname, '_view', view == 'stats'),
- ui.menu('Page', '/#view=page&app=' + appname, '_view', view == 'page'),
- ui.menu(isNil(config.compose)? 'Composition' : config.compose, '/#view=graph&app=' + appname, '_view', view == 'graph'))),
- mklist(
- ui.menu('Account', '/#view=account', '_view', view == 'account'),
- ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
-}
-
-/**
- * Show a status message.
- */
-function showStatus(s) {
- var sdiv = $('status');
- if (isNil(sdiv))
- return s;
- sdiv.innerHTML = s;
- return s;
-}
-
-/**
- * Return the default status message.
- */
-function defaultStatus() {
- return navigator.onLine? 'Online' : 'Offline';
-}
-
-/**
- * Show a view.
- */
-function showview(url) {
- //log('showview', url);
-
- // Save last visited location
- localStorage.setItem('ui.lastvisited', url);
-
- // Determine the view to show
- var params = ui.fragmentParams(url);
- var view = isNil(params['view'])? 'home' : params['view'];;
- var uri = '/' + view + '/';
- var idx = isNil(params['idx'])? '1' : params['idx'];
-
- // Determine the transition to use
- var vt = viewtransition(uri);
- var ovt = viewtransition(viewuri);
- var vtransition;
- if (ovt == 'flip')
- vtransition = 'flip';
- else if (uri == viewuri && (vt == 'left' || vt == 'right'))
- vtransition = idx >= viewidx? 'left' : 'right';
- else
- vtransition = vt;
-
- // Track current view url and uri
- viewurl = url;
- viewuri = uri;
- viewidx = idx;
-
- // Show the menu bar
- var appname = params['app'];
- showmenu(mdiv, view, appname);
- cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- // Compute the viewport size
- var iswide = view == 'graph' || view == 'page';
- var vwidth = iswide? '2500px' : '100%';
- mbgdiv.style.visibility = iswide? 'visible' : 'hidden';
- mbgdiv.style.width = vwidth;
-
- // Start to unload the front view and create a new view
- if (ui.isMobile()) {
- // Prepare current view for transition out
- var ovdiv = viewdiv;
- if (!isNil(ovdiv)) {
- ovdiv.skipNode = true;
- ovdiv.className = 'viewunloading3dm';
- }
-
- // Load the requested doc into a new view
- var vdiv = mkviewdiv(vtransition + 'viewloading3dm');
- vcontainer.appendChild(vdiv);
- var vdoc = appcache.get(uri);
- vdiv.innerHTML = vdoc;
- map(ui.evalScript, ui.innerScripts(vdiv));
-
- // Show the document
- if (document.body.style.visibility != 'visible')
- document.body.style.visibility = 'visible';
-
- setTimeout(function() {
- // Transition the old view out
- if (!isNil(ovdiv))
- ovdiv.className = vtransition + 'viewunloaded3dm';
-
- // Transition the new view in
- vdiv.className = 'viewloaded3dm';
- }, 0);
- } else {
- // Prepare current view for transition out
- var ovdiv = viewdiv;
- if (!isNil(ovdiv))
- ovdiv.skipNode = true;
-
- // Load the requested doc into the view
- var vdiv = mkviewdiv('viewloading3d');
- vcontainer.appendChild(vdiv);
- var vdoc = appcache.get(uri);
- vdiv.innerHTML = vdoc;
- map(ui.evalScript, ui.innerScripts(vdiv));
-
- // Show the document
- if (document.body.style.visibility != 'visible')
- document.body.style.visibility = 'visible';
-
- setTimeout(function() {
- // Transition the new view in
- vdiv.className = 'viewloaded3d';
-
- // Transition the old view out
- if (!isNil(ovdiv))
- ovdiv.parentNode.removeChild(ovdiv);
- }, 0);
- }
-
- // Track the current visible view
- viewdiv = vdiv;
-
- return true;
-}
-
-/**
- * Update the browser window location.
- */
-function updatelocation(url) {
- //log('updatelocation', url);
-
- // Add url to the history if necessary
- if (url != ui.pathandparams(location)) {
- history.pushState(null, null, url);
- //log('pushstate', history.length);
-
- // Update the location hash if necessary
- var f = ui.fragment(url);
- if (f != '' && f != location.hash) {
- location.hash = f;
- //log('hash', f);
- }
- }
- return url;
-}
-
-/**
- * Handle navigations.
- */
-window.onnavigate = function(url) {
- //log('onnavigate', url);
-
- updatelocation(url);
-
- // Show the specified view
- if (url == viewurl)
- return true;
- return showview(url);
-};
-
-/**
- * Handle login redirect.
- */
-window.onloginredirect = function(e) {
- document.location = '/login/';
-};
-
-/**
- * Log the current user out.
- */
-function logout() {
- // Clear session cookie and user-specific local storage entries
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.location = '/login/';
- return true;
-}
-
-/**
- * Handle history.
- */
-window.addEventListener('popstate', function(e) {
- //log('onpopstate', history.length);
- var furl = ui.fragment(location);
- var url = location.pathname + (furl == ''? '' : '#' + furl);
-
- // Show the current view
- if (url == viewurl)
- return true;
- return showview(url);
-
-}, false);
-
-window.addEventListener('hashchange', function(e) {
- //log('onhashchange');
- var furl = ui.fragment(location);
- var url = location.pathname + (furl == ''? '' : '#' + furl);
-
- // Show the current view
- if (url == viewurl)
- return true;
- return showview(url);
-
-}, false);
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Document load post processing.
- */
-function onload() {
- //log('onload', history.length);
- var furl = ui.fragment(location);
-
- // Show the view specified in the given url fragment
- if (furl != '') {
- var url = location.pathname + '#' + furl;
- if (url == viewurl)
- return true;
- return showview(url);
- }
-
- // Show the last visited view
- if (ui.isMobile() && (document.referrer == null || document.referrer == '')) {
- //log('show lastvisited');
- var lv = lastvisited();
- var url = isNil(lv)? location.pathname : lv;
- updatelocation(url);
- if (url == viewurl)
- return true;
- return showview(url);
- }
-
- // Show the main home view
- var url = location.pathname;
- if (url == viewurl)
- return true;
- return showview(url);
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/login/index.html b/sca-cpp/trunk/modules/edit/htdocs/login/index.html
deleted file mode 100644
index 9052abe8d3..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/login/index.html
+++ /dev/null
@@ -1,156 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-<title>Sign in</title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<base href="/login/"/>
-<link rel="stylesheet" type="text/css" href="/ui-min.css"/>
-<script type="text/javascript" src="/all-min.js"></script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="bodydiv" class="bodydiv">
-
-<h1>Sign in</h1>
-
-<form name="openIDForm">
-<table border="0">
-<tr><td><b>Sign in with your Google account</b></td></tr>
-<tr><td><input type="button" value="Sign in" class="graybutton" style="font-weight: bold;" onclick="submitOpenIDSignin(withGoogle)"/></td></tr>
-</table>
-</form>
-
-<form name="oauth2Form">
-<table border="0">
-<tr><td><b>Sign in with your Facebook account</b></td></tr>
-<tr><td><input type="button" value="Sign in" class="graybutton" style="font-weight: bold;" onclick="submitOAuth2Signin(withFacebook)"/></td></tr>
-</table>
-</form>
-
-<form name="openIDSignin" action="/" method="GET">
-<input type="hidden" name="openid_identifier" value=""/>
-</form>
-
-<form name="oauth2Signin" action="/" method="GET">
-<input type="hidden" name="mod_oauth2_authorize" value=""/>
-<input type="hidden" name="mod_oauth2_access_token" value=""/>
-<input type="hidden" name="mod_oauth2_client_id" value=""/>
-<input type="hidden" name="mod_oauth2_info" value=""/>
-<input type="hidden" name="mod_oauth2_display" value=""/>
-<input type="hidden" name="mod_oauth2_step" value="authorize"/>
-</form>
-
-<script type="text/javascript">
-function queryParams() {
- var qp = new Array();
- var qs = window.location.search.substring(1).split('&');
- for (var i = 0; i < qs.length; i++) {
- var e = qs[i].indexOf('=');
- if (e > 0)
- qp[qs[i].substring(0, e)] = unescape(qs[i].substring(e + 1));
- }
- return qp;
-}
-
-function openauthReferrer() {
- var r = queryParams()['openauth_referrer'];
- if (typeof(r) == 'undefined' || domainname(r) != domainname(window.location.hostname))
- return '/';
- var q = r.indexOf('?');
- if (q > 0)
- return r.substring(0, q);
- return r;
-}
-
-/**
- * Signin with OpenID.
- */
-function submitOpenIDSignin(w) {
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.openIDSignin.openid_identifier.value = w();
- document.openIDSignin.action = openauthReferrer();
- document.openIDSignin.submit();
-}
-
-function withGoogle() {
- return 'https://www.google.com/accounts/o8/id';
-}
-
-/**
- * Signin with OAuth 2.0.
- */
-function submitOAuth2Signin(w) {
- parms = w();
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.oauth2Signin.mod_oauth2_authorize.value = parms[0];
- document.oauth2Signin.mod_oauth2_access_token.value = parms[1];
- document.oauth2Signin.mod_oauth2_client_id.value = parms[2];
- document.oauth2Signin.mod_oauth2_info.value = parms[3];
- document.oauth2Signin.mod_oauth2_display.value = parms[4];
- document.oauth2Signin.action = openauthReferrer();
- document.oauth2Signin.submit();
-}
-
-function withFacebook() {
- var parms = ['https://graph.facebook.com/oauth/authorize', 'https://graph.facebook.com/oauth/access_token', 'facebook.com', 'https://graph.facebook.com/me', ui.isMobile()? 'touch' : 'page'];
- return parms;
-}
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Document load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/page/index.html b/sca-cpp/trunk/modules/edit/htdocs/page/index.html
deleted file mode 100644
index 9482cb4e32..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/page/index.html
+++ /dev/null
@@ -1,987 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv" style="overflow: visible;">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="appNameHeader"></span></h2></td>
-<td style="vertical-align: middle; text-align: right; padding-right: 8px;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table id="widgetValueBackground" style="width: 2500px; position: absolute; top: 59px; left: 0px; z-index: -1;">
-<tr>
-<th class="thr thl"><span style="display: inline-block; padding-top: 0px; padding-bottom: 0px; height: 24px;"></span></th>
-</tr>
-</table>
-
-<table id="widgetValueTable" style="width: 100%;">
-<tr>
-<td class="thl thr" style="text-align: right; padding-right: 2px; vertical-align: top;">
-<span id="deleteWidgetButton" title="Delete a Widget" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">-</span>
-
-<span id="copyWidgetButton" title="Copy a Widget" class="graybutton" style="font-weight: bold; font-size: 16px; color: #808080; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; text-align: center; margin-left: 0px; margin-right: 0px;">c</span>
-
-<span id="addWidgetButton" title="Add a Widget" class="graybutton" style="font-weight: bold; font-size: 16px; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; middle; text-align: center; margin-left: 0px; margin-right: 0px;">+</span>
-
-<span id="playPageButton" title="View page" class="graybutton" style="font-weight: bold; font-size: 16px; display: inline-block; width: 24px; height: 20px; padding-top: 0px; padding-bottom: 0px; middle; text-align: center; margin-left: 0px; margin-right: 0px;">&gt;</span>
-</td>
-
-<td class="thl thr" style="padding-left: 2px; padding-right: 2px; vertical-align: top; width: 100%;">
-<input id="widgetValue" type="text" value="" title="Widget value" autocapitalize="off" placeholder="Value" style="position: relative; visibility: hidden; width: 100%;"/>
-</td>
-</tr>
-</table>
-
-<div id="contentdiv" style="margin-top: 4px; width: 2500px;">
-<div id="editdiv" style="visibility: visible; position: relative; top: 0px; left: -2500px; width: 2500px; height: 5000px;">
-
-<div style="position: relative; left: 2500px; top: 0px; right: 0px; height: 5000px; border:1px; border-style: solid; border-color: #a2bae7;"><span id="editgrid"></span></div>
-<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 320px; height: 460px;"></div>
-<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 480px; height: 300px;"></div>
-<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 768px; height: 911px;"></div>
-<div class="guide" style="position: absolute; left: 2500px; top: 0px; width: 1024px; height: 655px;"></div>
-
-<span class="h1" id="palette:h1" style="position: absolute; left: 0px; top: 0px;"><h1>Header1</h1></span>
-<span class="h2" id="palette:h2" style="position: absolute; left: 0px; top: 30px;"><h2>Header2</h2></span>
-<span class="section" id="palette:section" style="position: absolute; left: 0px; top: 60px; width: 200px;"><span class="section">section</span></span>
-<span class="button" id="palette:button" style="position: absolute; left: 0px; top: 90px;"><input type="button" value="button" class="graybutton"/></span>
-<span class="entry" id="palette:entry" style="position: absolute; left: 0px; top: 120px;"><input type="text" value="field" size="20" autocapitalize="off"/></span>
-<span class="password" id="palette:password" style="position: absolute; left: 0px; top: 150px;"><input type="password" value="password" size="20"/></span>
-<span class="checkbox" id="palette:checkbox" style="position: absolute; left: 0px; top: 180px;"><input type="checkbox" value="checkbox"/><span>checkbox</span></span>
-<span class="select" id="palette:select" style="position: absolute; left: 0px; top: 210px;"><select><option value="select">select</option></select></span>
-<span class="list" id="palette:list" style="position: absolute; left: 0px; top: 240px; width: 200px;">
-<table class="datatable" style="width: 200px;"><tr><td class="datatd">list</td></tr><tr><td class="datatd">...</td></tr></table>
-</span>
-<span class="table" id="palette:table" style="position: absolute; left: 0px; top: 290px; width: 200px;">
-<table class="datatable" style="width: 200px;"><tr><td class="datatdl">table</td><td class="datatdr">...</td></tr><tr><td class="datatdl">...</td><td class="datatdr">...</td></tr></table>
-</span>
-<span class="link" id="palette:link" style="position: absolute; left: 0px; top: 340px;"><a href="/"><span>link</span></a></span>
-<span class="text" id="palette:text" style="position: absolute; left: 0px; top: 370px;"><span>text</span></span>
-<span class="iframe fakeframe" id="palette:iframe" style="position: absolute; left: 0px; top: 400px; width: 200px;"><a href="/public/iframe-min.html"><span class="fakeframe"><span>frame ...</span></span></a></span>
-<span class="img" id="palette:img" style="position: absolute; left: 0px; top: 430px;"><img id="imgimg"/></span>
-</div>
-
-<div id="playdiv" style="visibility: hidden; position: absolute; top: 0px; left: 0px; width: 2500px; height: 5000px;">
-</div>
-
-</div>
-
-<div id="buffer" style="visibility: hidden; width: 0px; height: 0px"></div>
-
-<script type="text/javascript">
-
-// Get the app name
-var appname = ui.fragmentParams(location)['app'];
-
-/**
- * Return the link to an app.
- */
-function applink(appname) {
- var protocol = location.protocol;
- var host = location.hostname;
- var port = ':' + location.port;
- if (port == ':80' || port == ':443' || port == ':')
- port = '';
- var link = protocol + '//' + host + port + '/' + appname + '/';
- return link;
-}
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Page - ' + appname;
-$('appNameHeader').innerHTML = '<a href=\"/' + appname + '/\" target=\"' + '_blank' + '\">' + appname + '</a>';
-
-/**
- * Page editor area, widget value field, add, delete and play page buttons.
- */
-var cdiv = $('contentdiv');
-var ediv = $('editdiv');
-var evisible = true;
-var pdiv = $('playdiv');
-var wvalue = $('widgetValue');
-var wadd = $('addWidgetButton');
-var wdelete = $('deleteWidgetButton');
-var wcopy = $('copyWidgetButton');
-var pplay = $('playPageButton');
-
-// Set images
-$('editgrid').parentNode.style.background = 'url(\'' + ui.b64img(appcache.get('/public/grid72.b64')) + '\')';
-$('imgimg').src = ui.b64img(appcache.get('/public/img.b64'));
-
-// Position edit and play divs inside the content div
-ediv.style.position = 'absolute';
-ediv.style.top = cdiv.offsetTop + 'px';
-pdiv.style.position = 'absolute';
-pdiv.style.top = cdiv.offsetTop + 'px';
-
-// Position background divs
-var wvbackground = $('widgetValueBackground');
-var wvtable = $('widgetValueTable');
-wvbackground.style.top = ui.pixpos(wvtable.offsetTop);
-
-/**
- * Adjust widget value field size.
- */
-function resizeFields() {
- wvalue.style.width = '0px';
- wvalue.style.width = ui.pixpos(wvalue.parentNode.clientWidth - 18);
- return true;
-}
-
-resizeFields();
-window.onresize = resizeFields;
-
-// Init component references
-var editWidget = sca.component('EditWidget');
-var pages = sca.reference(editWidget, 'pages');
-
-/**
- * Page editing functions.
- */
-var page = {};
-
-/**
- * Default positions and sizes.
- */
-page.palcx = 2500;
-
-/**
- * Init a page editor. Works with all browsers except IE.
- */
-page.edit = function(elem, wvalue, wadd, wcopy, wdelete, onchange, onselect) {
-
- // Track element dragging and selection
- page.dragging = null;
- page.selected = null;
- wvalue.disabled = true;
- wvalue.style.visibility = 'hidden';
- wcopy.disabled = true;
- wdelete.disabled = true;
-
- // Trigger widget select and page change events
- page.onpagechange = onchange;
- page.onwidgetselect = onselect;
-
- /**
- * Handle a mouse down event.
- */
- elem.onmousedown = function(e) {
-
- // On mouse controlled devices, engage the click component selection
- // logic right away
- if (typeof e.touches == 'undefined')
- elem.onclick(e);
-
- // Find a draggable element
- var dragging = page.draggable(e.target, elem);
- if (dragging == null || dragging != page.selected)
- return true;
- page.dragging = dragging;
-
- // Remember mouse position
- var pos = typeof e.touches != "undefined"? e.touches[0] : e;
- page.dragX = pos.screenX;
- page.dragY = pos.screenY;
-
- if (e.preventDefault)
- e.preventDefault();
- else
- e.returnValue = false;
- return true;
- };
-
- // Support touch devices
- elem.ontouchstart = elem.onmousedown;
-
- /**
- * Handle a mouse up event.
- */
- elem.onmouseup = function(e) {
- if (page.dragging == null)
- return true;
-
- // Snap to grid
- var newX = page.gridsnap(ui.numpos(page.dragging.style.left));
- var newY = page.gridsnap(ui.numpos(page.dragging.style.top));
- page.dragging.style.left = ui.pixpos(newX);
- page.dragging.style.top = ui.pixpos(newY);
- page.dragging.cover.style.left = ui.pixpos(newX);
- page.dragging.cover.style.top = ui.pixpos(newY);
-
- // Fixup widget style
- page.fixupwidget(page.dragging);
-
- // Forget dragged element
- page.dragging = null;
-
- // Trigger page change event
- page.onpagechange(false);
- return true;
- };
-
- // Support touch devices
- elem.ontouchend = elem.onmouseup;
-
- /**
- * Handle a mouse move event.
- */
- window.onmousemove = function(e) {
- if (page.dragging == null)
- return true;
-
- // Get the mouse position
- var pos = typeof e.touches != "undefined"? e.touches[0] : e;
- if (pos.screenX == page.dragX && pos.screenY == page.dragY)
- return true;
-
- // Compute position of dragged element
- var curX = ui.numpos(page.dragging.style.left);
- var curY = ui.numpos(page.dragging.style.top);
- var newX = curX + (pos.screenX - page.dragX);
- var newY = curY + (pos.screenY - page.dragY);
- if (newX >= page.palcx)
- page.dragX = pos.screenX;
- else
- newX = page.palcx;
- if (newY >= 0)
- page.dragY = pos.screenY;
- else
- newY = 0;
-
- // Move the dragged element
- page.dragging.style.left = ui.pixpos(newX);
- page.dragging.style.top = ui.pixpos(newY);
- page.dragging.cover.style.left = ui.pixpos(newX);
- page.dragging.cover.style.top = ui.pixpos(newY);
- return true;
- };
-
- // Support touch devices
- elem.ontouchmove = window.onmousemove;
-
- /**
- * Handle a mouse click event.
- */
- elem.onclick = function(e) {
-
- // Find selected element
- var selected = page.draggable(e.target, elem);
- if (selected == null) {
- if (page.selected != null) {
-
- // Reset current selection
- page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
- page.selected = null;
-
- // Trigger widget select event
- page.onwidgetselect(null);
- }
-
- // Dismiss the palette
- if (ui.numpos(elem.style.left) != (page.palcx * -1))
- elem.style.left = ui.pixpos(page.palcx * -1);
-
- return true;
- }
-
- // Deselect the previously selected element
- page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
-
- // Clone element dragged from palette
- if (selected.id.substring(0, 8) == 'palette:') {
- page.selected = page.clone(selected);
-
- // Move into the editing area and hide the palette
- page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + page.palcx);
- page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + page.palcx);
- elem.style.left = ui.pixpos(page.palcx * -1);
-
- // Bring it to the top
- page.bringtotop(page.selected);
-
- // Trigger page change event
- page.onpagechange(true);
-
- } else {
-
- // Bring selected element to the top
- page.selected = selected;
- page.bringtotop(page.selected);
- }
-
- // Select the element
- page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
-
- // Trigger widget select event
- page.onwidgetselect(page.selected);
-
- return true;
- };
-
- /**
- * Handle field on change events.
- */
- wvalue.onchange = wvalue.onblur = function() {
- if (page.selected == null)
- return false;
- page.settext(page.selected, wvalue.value);
- page.selected.cover.style.width = ui.pixpos(page.selected.clientWidth + 4);
- page.selected.cover.style.height = ui.pixpos(page.selected.clientHeight + 4);
-
- // Trigger page change event
- page.onpagechange(true);
- return false;
- };
-
- // Handle add widget event.
- wadd.onclick = function() {
-
- // Show the palette
- elem.style.left = ui.pixpos(0);
- return false;
- };
-
- // Handle delete event.
- wdelete.onclick = function() {
- if (page.selected == null)
- return false;
-
- // Reset current selection
- page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
-
- // Remove selected widget
- page.selected.parentNode.removeChild(page.selected);
- page.selected.cover.parentNode.removeChild(page.selected.cover);
- page.selected = null;
-
- // Trigger widget select event
- page.onwidgetselect(null);
-
- // Trigger page change event
- page.onpagechange(true);
- return false;
- };
-
- // Handle copy event.
- wcopy.onclick = function() {
- if (page.selected == null)
- return false;
- if (page.selected.id.substring(0, 8) == 'palette:')
- return false;
-
- // Reset current selection
- page.widgetselect(page.selected, false, wvalue, wcopy, wdelete);
-
- // Clone selected widget
- page.selected = page.clone(page.selected);
-
- // Move 10 pixels down right
- page.selected.style.left = ui.pixpos(ui.numpos(page.selected.style.left) + 10);
- page.selected.style.top = ui.pixpos(ui.numpos(page.selected.style.top) + 10);
- page.selected.cover.style.left = ui.pixpos(ui.numpos(page.selected.cover.style.left) + 10);
- page.selected.cover.style.top = ui.pixpos(ui.numpos(page.selected.cover.style.top) + 10);
-
- // Bring it to the top
- page.bringtotop(page.selected);
-
- // Select the element
- page.widgetselect(page.selected, true, wvalue, wcopy, wdelete);
-
- // Trigger widget select event
- page.onwidgetselect(page.selected);
-
- // Trigger page change event
- page.onpagechange(true);
- return false;
- };
-
- // Cover child elements with span elements to prevent
- // any input events to reach them
- map(page.cover, nodeList(elem.childNodes));
-
- return elem;
-};
-
-/**
- * Return the text of a widget.
- */
-page.text = function(e) {
- function formula(e) {
- var f = e.id;
- if (f.substring(0, 5) != 'page:')
- return '=' + f;
- return '';
- }
-
- function constant(e, f) {
- if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
- var t = car(childElements(e)).innerHTML;
- return t == f? '' : t;
- }
- if (e.className == 'button' || e.className == 'checkbox') {
- var t = car(childElements(e)).value;
- return t == f? '' : t;
- }
- if (e.className == 'entry' || e.className == 'password') {
- var t = car(childElements(e)).defaultValue;
- return t == f? '' : t;
- }
- if (e.className == 'select') {
- var t = car(childElements(car(childElements(e)))).value;
- return t == f? '' : t;
- }
- if (e.className == 'link') {
- var lhr = car(childElements(e)).href;
- var hr = lhr.substring(0, 5) == 'link:'? lhr.substring(5) : '';
- var t = car(childElements(car(childElements(e)))).innerHTML;
- return t == f? hr : (t == hr? hr : (t == ''? hr : hr + ',' + t));
- }
- if (e.className == 'img') {
- var src = car(childElements(e)).src;
- return src == location.href? '' : src;
- }
- if (e.className == 'iframe') {
- var hr = car(childElements(e)).href;
- return hr == location.href? '' : hr;
- }
- if (e.className == 'list')
- return '';
- if (e.className == 'table')
- return '';
- return '';
- }
-
- var f = formula(e);
- var c = constant(e, f);
- return f == ''? c : (c == ''? f : f + ',' + c);
-};
-
-/**
- * Return true if a widget has editable text.
- */
-page.hastext = function(e) {
- if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section')
- return true;
- if (e.className == 'button' || e.className == 'checkbox')
- return true;
- if (e.className == 'entry' || e.className == 'password')
- return true;
- if (e.className == 'select')
- return false;
- if (e.className == 'link')
- return true;
- if (e.className == 'img')
- return true;
- if (e.className == 'iframe')
- return true;
- if (e.className == 'list')
- return false;
- if (e.className == 'table')
- return false;
- return false;
-};
-
-/**
- * Set the text of a widget.
- */
-page.settext = function(e, t) {
- function formula(t) {
- if (t.length > 1 && t.substring(0, 1) == '=')
- return car(t.split(','));
- return '';
- }
-
- function constant(t) {
- return t.length > 1 && t.substring(0, 1) == '='? cdr(t.split(',')) : t.split(',');
- }
-
- var f = formula(t);
- var c = constant(t);
-
- e.id = f != ''? f.substring(1) : ('page:' + e.className);
-
- if (e.className == 'h1' || e.className == 'h2' || e.className == 'text' || e.className == 'section') {
- car(childElements(e)).innerHTML = isNil(c)? f : car(c);
- return t;
- }
- if (e.className == 'button' || e.className == 'entry' || e.className == 'password') {
- car(childElements(e)).defaultValue = isNil(c)? f : car(c);
- return t;
- }
- if (e.className == 'checkbox') {
- car(childElements(e)).value = isNil(c)? f : car(c);
- map(function(n) { if (n.nodeName == "SPAN") n.innerHTML = isNil(c)? f : car(c); return n; }, nodeList(e.childNodes));
- return t;
- }
- if (e.className == 'select') {
- var ce = car(childElements(car(childElements(e))));
- ce.value = isNil(c)? f : car(c);
- ce.innerHTML = isNil(c)? f : car(c);
- return t;
- }
- if (e.className == 'list') {
- e.innerHTML = '<table class="datatable" style="width: 100%;;"><tr><td class="datatd">' + (isNil(c)? f : car(c)) + '</td></tr><tr><td class="datatd">...</td></tr></table>';
- return t;
- }
- if (e.className == 'table') {
- e.innerHTML = '<table class="datatable" style="width: 100%;"><tr><td class="datatdl">' + (isNil(c)? f : car(c)) + '</td><td class="datatdr">...</td></tr><tr><td class="datatdl">...</td><td class="datatdr">...</td></tr></table>';
- return t;
- }
- if (e.className == 'link') {
- var ce = car(childElements(e));
- ce.href = isNil(c)? 'link:/index.html' : ('link:' + car(c));
- car(childElements(ce)).innerHTML = isNil(c)? (f != ''? f : '/index.html') : isNil(cdr(c))? (f != ''? f : car(c)) : cadr(c);
- return t;
- }
- if (e.className == 'img') {
- car(childElements(e)).src = isNil(c)? '/public/img.png' : car(c);
- return t;
- }
- if (e.className == 'iframe') {
- car(childElements(e)).href = isNil(c)? '/public/iframe-min.html' : car(c);
- return t;
- }
- return '';
-};
-
-/**
- * Initial fixup of a widget.
- */
-page.fixupwidget = function(e) {
- if (e.className == 'iframe') {
- var f = car(childElements(e));
- //e.innerHTML = '<iframe src="' + f.href + '" frameborder="no" scrolling="no"></iframe>';
- return e;
- }
- if (e.className == 'section') {
- e.style.width = '100%';
- return e;
- }
- if (e.className == 'list') {
- e.style.width = '100%';
- car(childElements(e)).style.width = '100%';
- return e;
- }
- if (e.className == 'table') {
- e.style.width = '100%';
- car(childElements(e)).style.width = '100%';
- return e;
- }
- if (e.className == 'img') {
- var i = car(childElements(e));
- if (i.src != '' && i.src.substring(0, 5) == 'data:')
- i.src = '/public/img.png';
- return e;
- }
- return e;
-}
-
-/**
- * Find a draggable element in a hierarchy of elements.
- */
-page.draggable = function(n, e) {
- if (n == e)
- return null;
- if (n.id != '')
- return n;
- if (n.covered)
- return n.covered;
- return page.draggable(n.parentNode, e);
-}
-
-/**
- * Align a pos along a 9pixel grid.
- */
-page.gridsnap = function(x) {
- return Math.round(x / 9) * 9;
-}
-
-/**
- * Bring an element and its parent to the top.
- */
-page.bringtotop = function(n) {
- n.parentNode.appendChild(n);
- n.cover.parentNode.appendChild(n.cover);
-}
-
-/**
- * Draw widget selection.
- */
-page.widgetselect = function(n, s, wvalue, wcopy, wdelete) {
- if (isNil(n) || !s) {
- // Clear the widget value field
- wvalue.value = '';
- wvalue.disabled = true;
- wvalue.style.visibility = 'hidden';
- wcopy.disabled = true;
- wdelete.disabled = true;
-
- // Clear the widget outline
- if (!isNil(n))
- n.cover.style.borderWidth = '0px';
- return true;
- }
-
- // Update the widget value field
- wvalue.value = page.text(n);
- wvalue.disabled = false;
- wvalue.style.visibility = 'visible';
- wcopy.disabled = false;
- wdelete.disabled = false;
-
- // Outline the widget
- n.cover.style.borderWidth = '2px';
- return true;
-};
-
-/**
- * Cover a page element with a <span> element to prevent
- * any input events to reach it.
- */
-page.cover = function(e) {
- if (e.id == '' || isNil(e.style))
- return e;
- var cover = document.createElement('div');
- cover.style.position = 'absolute';
- cover.style.left = ui.pixpos(ui.numpos(e.style.left) - 2);
- cover.style.top = ui.pixpos(ui.numpos(e.style.top) - 2);
- cover.style.width = ui.pixpos(e.clientWidth + 4);
- cover.style.height = ui.pixpos(e.clientHeight + 4);
- cover.style.visibility = 'inherit';
- cover.style.borderStyle = 'solid';
- cover.style.borderWidth = '0px';
- cover.style.borderColor = '#598edd';
- cover.style.padding = '0px';
- cover.style.margin = '0px';
- cover.covered = e;
- e.cover = cover;
- e.parentNode.appendChild(cover);
- return e;
-}
-
-/**
- * Clone a palette element.
- */
-page.clone = function(e) {
-
- /**
- * Clone an element's HTML.
- */
- function mkclone(e) {
- var ne = document.createElement('span');
-
- // Skip the palette: prefix
- ne.id = 'page:' + e.id.substr(8);
-
- // Copy the class and HTML content
- ne.className = e.className;
- ne.innerHTML = e.innerHTML;
-
- // Fixup the widget style
- page.fixupwidget(ne);
-
- return ne;
- }
-
- /**
- * Clone an element's position.
- */
- function posclone(ne, e) {
- ne.style.position = 'absolute';
- ne.style.left = ui.pixpos(ui.numpos(e.style.left));
- ne.style.top = ui.pixpos(ui.numpos(e.style.top));
- e.parentNode.appendChild(ne);
- page.cover(ne);
- return ne;
- }
-
- return posclone(mkclone(e), e);
-};
-
-/**
- * Return the page in an ATOM entry.
- */
-function atompage(doc) {
- 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);
-}
-
-/**
- * Track the current page saved XHTML content.
- */
-var savedpagexhtml = '';
-
-/**
- * Track the current widget.
- */
-var widget = null;
-
-/**
- * Get and display an app page.
- */
-function getpage(name, ediv) {
- if (isNil(name))
- return false;
- showStatus('Loading');
-
- return pages.get(name, function(doc) {
-
- // Stop now if we didn't get a page
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- // Convert the page to XHTML and place it in a hidden buffer
- var buffer = $('buffer');
- var el = atompage(doc);
-
- // Create a default empty page if necessary
- if (isNil(el))
- buffer.innerHTML = '<div id="page"></div>';
- else
- buffer.innerHTML = writeStrings(writeXML(el, false));
-
- // Remove any existing page nodes from the editor div
- var fnodes = filter(function(e) {
- if (isNil(e.id) || e.id == '' || e.id.substr(0, 8) == 'palette:')
- return false;
- var x = ui.numpos(e.style.left) - 2500;
- if (x < 0 || ui.numpos(e.style.top) < 0)
- return false;
- return true;
- }, nodeList(ediv.childNodes));
-
- map(function(e) {
- ediv.removeChild(e);
- }, fnodes);
-
- // Append new page nodes to editor
- map(function(e) {
- ediv.appendChild(e);
- if (!isNil(e.style))
- e.style.left = ui.pixpos(ui.numpos(e.style.left) + 2500);
- return page.cover(e);
- }, nodeList(buffer.childNodes[0].childNodes));
-
- savedpagexhtml = pagexhtml(ediv);
- return true;
- });
-}
-
-/**
- * Handle add widget button click event.
- */
-wadd.onclick = function(e) {
- // Show the widget palette
- ediv.style.left = ui.pixpos(0);
-};
-
-/**
- * Return the current page XHTML content.
- */
-function pagexhtml(ediv) {
-
- // Copy page DOM to hidden buffer
- var buffer = $('buffer');
- buffer.innerHTML = '<div id="page"></div>'
- var div = buffer.childNodes[0];
-
- // Capture the nodes inside the page div
- div.innerHTML = ediv.innerHTML;
- var nodes = nodeList(div.childNodes);
- map(function(e) {
- div.removeChild(e);
- return e;
- }, nodes);
-
- // Filter out palette and editor artifacts, which are not
- // part of the page, as well as nodes positioned out the
- // editing area
- var fnodes = filter(function(e) {
- if (isNil(e.id) || e.id == '' || e.id.substr(0, 8) == 'palette:')
- return false;
- var x = ui.numpos(e.style.left) - 2500;
- if (x < 0 || ui.numpos(e.style.top) < 0)
- return false;
- return true;
- }, nodes);
-
- // Reposition nodes
- map(function(e) {
- var x = ui.numpos(e.style.left) - 2500;
- e.style.left = ui.pixpos(x);
- return e;
- }, fnodes);
-
- // Sort them by position
- var snodes = fnodes.sort(function(a, b) {
- var ay = ui.numpos(a.style.top);
- var by = ui.numpos(b.style.top);
- if (ay < by) return -1;
- if (ay > by) return 1;
- var ax = ui.numpos(a.style.left);
- var bx = ui.numpos(b.style.left);
- if (ax < bx) return -1;
- if (ax > bx) return 1;
- return 0;
- });
-
- // Append the sorted nodes back to the div in order
- map(function(e) {
- div.appendChild(e);
- return e;
- }, snodes);
-
- // Convert the page to XHTML
- var lxhtml = readXHTMLElement(div);
- var xhtml = writeStrings(writeXML(lxhtml, false));
- return xhtml;
-}
-
-/**
- * Save the current page.
- */
-function save(newxml) {
- showStatus('Saving');
-
- // Get the current page XHTML content
- savedpagexhtml = newxml;
-
- // 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">' +
- newxml + '</content></entry>';
-
- pages.put(appname, entry, function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
- showStatus('Saved');
- return false;
- });
- return true;
-};
-
-/**
- * Handle a page change event
- */
-function onpagechange(prop) {
- var newxml = pagexhtml(ediv);
- if (savedpagexhtml == newxml)
- return false;
- showStatus('Modified');
-
- // Save property changes right away
- if (prop)
- return save(newxml);
-
- // Autosave other changes after 1 second
- setTimeout(function() {
- if (savedpagexhtml == newxml) {
- showStatus('Saved');
- return false;
- }
- return save(newxml);
- }, 1000);
- return true;
-}
-
-/**
- * Handle a widget select event.
- */
-function onwidgetselect(w) {
- if (w == widget)
- return true;
- widget = w;
-
- function updateButton(b, v) {
- b.style.color = v? '#000000' : '#808080';
- }
-
- updateButton(wdelete, !isNil(w));
- updateButton(wcopy, !isNil(w));
- return true;
-}
-
-/**
- * Play page in a frame.
- */
-function playpage() {
- if (!evisible)
- return true;
- page.widgetselect(widget, false, wvalue, wcopy, wdelete);
- page.selected = null;
- wvalue.value = applink(appname);
- pplay.innerHTML = '&lt;';
- evisible = false;
- pdiv.style.visibility = 'visible';
- pdiv.innerHTML = '';
- pdiv.innerHTML = '<iframe id="playappframe" style="position: relative; height: 5000px; width: 2500px; border: 0px;" scrolling="no" frameborder="0" src="/' +
- appname + '"></iframe>';
- setTimeout(function() {
- ediv.style.visibility = 'hidden'
- }, 0);
- return true;
-}
-
-/**
- * Show the page editor.
- */
-function showedit() {
- if (evisible)
- return true;
- pplay.innerHTML = '&gt;';
- ediv.style.visibility = 'visible'
- evisible = true;
- page.widgetselect(widget, true, wvalue, wcopy, wdelete);
- page.selected = widget;
- setTimeout(function() {
- pdiv.style.visibility = 'hidden';
- pdiv.innerHTML = '';
- }, 0);
- return true;
-}
-
-/**
- * Handle play page button event.
- */
-pplay.onclick = function() {
- if (!evisible)
- return showedit();
- return playpage();
-}
-
-// Initialize the page editor
-page.edit(ediv, wvalue, wadd, wcopy, wdelete, onpagechange, onwidgetselect);
-
-// Get and display the current app page
-getpage(appname, ediv);
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/app.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/app.b64
deleted file mode 100644
index 7ed235aa14..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/app.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAABGdBTUEAALGPC/xhBQAAAAxQTFRFyN+N+dR1/PCI////6HjE5gAAADJJREFUKM9j+I8EPjBQifeBAQSY6coLBYN6inhaq0Bg6SDn/f//akB466ExTS6P2ukMAKumzarJO/66AAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/app.png b/sca-cpp/trunk/modules/edit/htdocs/public/app.png
deleted file mode 100644
index 1f73274b76..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/app.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/app.xcf b/sca-cpp/trunk/modules/edit/htdocs/public/app.xcf
deleted file mode 100644
index 741b7ff43f..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/app.xcf
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/delete.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/delete.b64
deleted file mode 100644
index c8137d7ab4..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/delete.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAAAZiS0dEANAAPwBBXloXjQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sEFhQaKzNh4PgAAAMKSURBVEjHxZZPTBNBFMa/maVbWjcUi0YiIHIoNBADTUgsqCWgUUFjwkk5CXLUBKIc9KIXjx64oMSDoiggGC8koImCGDWYkADRIiQQgikWCq0WoXW33R0PpYjSLeWP8btN3sv85s17894QrKNeIBng8gFmJSDZgGIAqJeBjQCkH5AHioGZaHsQNUMP+ByKYB0ByVjvIAxsUkHcrRJI9pggXYBWB1pLQUqxQSlg3X4o9WWAqArpAhL04JoIYMQmxQCPD3JlGbCwBtIFaPXgWrcC+AtUEY6Ihg060NrtACyf3KgDrQ2v6e8kbzwH0URBSnvA56xAKIJ1kRzNbS2ZNhYssjodVj41VbPaxqemaqxOh9XGgkXmtpbMyKDQvqQXSKbg2iKGzfPE0v8uV7BYDIuDg95B66FhJkmM8DyxfHifK+TlGRaHhryDBwuHmSSxyBUnn6Ohh6aSQElin86U26XZWVGwWAxZD5tMAGBufmAS8vIMkssl2s+Uj6gBQuLySS/oTQpyONr9GmxHhAMvnltovJZ+73vjTiyyJSmipHw8WTrkfd33Y52385arAr1EAF00R3HqixRwu38mnT61O35/uh4AJq7Ujc0/affEUGsCDfWi9TXX3uEOeDwBABCnp/3OO42uGPuAgQLUG4urueVRlsZo1ACANiVFZ7rTkBFjMXtpqJtGV9q1q3uNJ47vlpd88kTt5VEWCLLk6gtpeyrP74qheY5wlaB6AhSqOSUUFOzIun8vh8RxZKKmZvRrw20X0WjkxCKbceexo0Z3Z+d8wDUXVIeQdgrIA6rFl5DAmVsfZ1MtT+faO5zOxrtzADB1/Ybj28tX85wgxOU8e5pN9XqqHos8QIuBGQY2GTEPD5tM8en79P7x8aWxqurx1bbPZytGRYfDrzOZBHPzA5PanCkGZki4d3GQG7DNksFdLIFkpwBQAsmugHVvJ0AB6w5PypW79EOpZ4BnOwAM8Pih1P/R6gGgDBB9kCu3Clo1GcU1kGXQgg9yxWavTgHrXp6IC///t/Iv/l2/AGa0Qa2X0eC0AAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/delete.png b/sca-cpp/trunk/modules/edit/htdocs/public/delete.png
deleted file mode 100644
index fb56bae030..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/delete.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/delete.xcf b/sca-cpp/trunk/modules/edit/htdocs/public/delete.xcf
deleted file mode 100644
index 7691f50cc5..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/delete.xcf
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/grid72.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/grid72.b64
deleted file mode 100644
index 34be13e5ca..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/grid72.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAAEgAAABIAgMAAAAog1vUAAAABGdBTUEAALGPC/xhBQAAAAlQTFRFwuD84/T+////fj9v9QAAACxJREFUOMtjWLUqa9WsVctWrYQxVjAMCqFQdBDCMOrUUaeOOnXUqYPPqZgAABmg/C7pJC7lAAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/grid72.png b/sca-cpp/trunk/modules/edit/htdocs/public/grid72.png
deleted file mode 100644
index cf6008171a..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/grid72.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/iframe.html b/sca-cpp/trunk/modules/edit/htdocs/public/iframe.html
deleted file mode 100644
index e2b862dbaa..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/iframe.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-</head>
-<body style="margin:3px; padding: 0px; background-color: #dcdcdc;">
-
-<div>frame ...</div>
-
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/img.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/img.b64
deleted file mode 100644
index 97dae687a0..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/img.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAIRQTFRFwdt/w9yEw9+MxN2GxN6NxN+Oxd2Mxd6Nxt6Lx96Lx96Nx9+NyN6MyN+MyN+N8u2I8+2I+NBq+NFr+NFt+NFu+NJz+NN0+dR1+dR3+dZw+dh4+9Fy+9Nz++5++++B+++F/NNz/PCH/PCI/PGW/PKc/fKd/vzp/vzq/v7+/v/z/9Jx////nQZfHwAAAIxJREFUOMtj0CYAGKiiQANdUAPdBAZmFMCIYQUzHwrgpKECblYwYEJ2LYoCHi0FMBCEAmF0E3hkxFGABJICXnYWFhY2aVE4EENTwCWgCARKCCCFoUAJFQw9BYycnBz8eBSA04cqPhNAQIX+CiSFhIRE8CiQ10ROMNgUqKNnHGU5FCCrhqZAg7Z5Ey8AALiBh6brcmloAAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/img.png b/sca-cpp/trunk/modules/edit/htdocs/public/img.png
deleted file mode 100644
index 2363b25e8e..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/img.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/img.xcf b/sca-cpp/trunk/modules/edit/htdocs/public/img.xcf
deleted file mode 100644
index ffcc124584..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/img.xcf
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/notauth/index.html b/sca-cpp/trunk/modules/edit/htdocs/public/notauth/index.html
deleted file mode 100644
index f366533e17..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/notauth/index.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-<title>Sorry</title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<base href="/notauth/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="bodydiv" class="mainbodydiv">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="menu"></div>
-
-<div id="content" class="viewloaded3d">
-
-<table style="width: 100%;">
-<tr><td><h2><span id="h1"></span></h2></td></tr>
-</table>
-
-<div style="margin-left: auto; margin-right: auto; text-align: center;">
-<div class="hd2">Sorry, you're not authorized to view this page.</div>
-</div>
-
-</div>
-
-<script type="text/javascript">
-
-// Set page title
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Init div variables
-var mdiv = $('menu');
-var cdiv = $('content');
-
-/**
- * Build and show the menu bar.
- */
-function showmenu(mdiv) {
- mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
-}
-
-showmenu(mdiv);
-cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
-
-/**
- * Log the current user out.
- */
-function logout() {
- // Clear session cookie and user-specific local storage entries
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.location = '/login/';
- return true;
-}
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/notfound/index.html b/sca-cpp/trunk/modules/edit/htdocs/public/notfound/index.html
deleted file mode 100644
index 24efb159ea..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/notfound/index.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-<title>Page not found</title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<base href="/notfound/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="bodydiv" class="mainbodydiv">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="menu"></div>
-
-<div id="content" class="viewloaded3d">
-
-<table style="width: 100%;">
-<tr><td><h2><span id="h1"></span></h2></td></tr>
-</table>
-
-<div style="margin-left: auto; margin-right: auto; text-align: center;">
-<div class="hd2">Sorry, that page was not found.</div>
-<div>You may have clicked an expired link or mistyped the address.</div>
-</div>
-
-</div>
-
-<script type="text/javascript">
-
-// Set page title
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Init div variables
-var mdiv = $('menu');
-var cdiv = $('content');
-
-/**
- * Build and show the menu bar.
- */
-function showmenu(mdiv) {
- mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
-}
-
-showmenu(mdiv);
-cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
-
-/**
- * Log the current user out.
- */
-function logout() {
- // Clear session cookie and user-specific local storage entries
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.location = '/login/';
- return true;
-}
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/notyet/index.html b/sca-cpp/trunk/modules/edit/htdocs/public/notyet/index.html
deleted file mode 100644
index b8457485fb..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/notyet/index.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-<title>Page not found</title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0"/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<base href="/notyet/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="bodydiv" class="mainbodydiv">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="menu"></div>
-
-<div id="content" class="viewloaded3d">
-
-<table style="width: 100%;">
-<tr><td><h2><span id="h1"></span></h2></td></tr>
-</table>
-
-<div style="margin-left: auto; margin-right: auto; text-align: center;">
-<div class="hd2">Sorry, that page is still under construction.</div>
-<div>Please check back later.</div>
-</div>
-
-</div>
-
-<script type="text/javascript">
-
-// Set page title
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Init div variables
-var mdiv = $('menu');
-var cdiv = $('content');
-
-/**
- * Build and show the menu bar.
- */
-function showmenu(mdiv) {
- mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
-}
-
-showmenu(mdiv);
-cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
-
-/**
- * Log the current user out.
- */
-function logout() {
- // Clear session cookie and user-specific local storage entries
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.location = '/login/';
- return true;
-}
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/oops/index.html b/sca-cpp/trunk/modules/edit/htdocs/public/oops/index.html
deleted file mode 100644
index ca3e7706e3..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/oops/index.html
+++ /dev/null
@@ -1,166 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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.
--->
-<html>
-<head>
-<title>Oops</title>
-<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0/>
-<meta name="apple-mobile-web-app-capable" content="yes"/>
-<meta name="apple-mobile-web-app-status-bar-style" content="black"/>
-<base href="/oops/"/>
-<script type="text/javascript">
-
-window.appcache = {};
-
-/**
- * Get and cache a resource.
- */
-appcache.get = function(uri) {
- var h = uri.indexOf('#');
- var u = h == -1? uri : uri.substring(0, h);
-
- // Get resource from local storage first
- var item = localStorage.getItem(u);
- if (item != null && item != '')
- return item;
-
- // Get resource from network
- var http = new XMLHttpRequest();
- http.open("GET", u, false);
- http.send(null);
- if (http.status == 200) {
- if (http.getResponseHeader("X-Login") != null) {
- if (log) log('http error', u, 'X-Login');
- return null;
- } else if (http.responseText == '' || http.getResponseHeader("Content-Type") == null) {
- if (log) log('http error', u, 'No-Content');
- return null;
- }
- localStorage.setItem(u, http.responseText);
- return http.responseText;
- }
- if (log) log('http error', u, http.status, http.statusText);
- return null;
-};
-
-// Load Javascript and CSS
-(function() {
- var bootjs = document.createElement('script');
- bootjs.type = 'text/javascript';
- bootjs.text = appcache.get('/all-min.js');
- document.head.appendChild(bootjs);
- document.head.appendChild(ui.declareCSS(appcache.get('/ui-min.css')));
-})();
-
-</script>
-</head>
-<body class="delayed" onload="onload();">
-<div id="bodydiv" class="mainbodydiv">
-
-<div id="headdiv" class="hsection">
-<script type="text/javascript">
-(function() {
-$('headdiv').appendChild(ui.declareScript(appcache.get('/public/config-min.js')));
-})();
-</script>
-</div>
-
-<div id="menu"></div>
-
-<div id="content" class="viewloaded3d">
-
-<table style="width: 100%;">
-<tr><td><h2><span id="h1"></span></h2></td></tr>
-</table>
-
-<div style="margin-left: auto; margin-right: auto; text-align: center;">
-<div class="hd2">Oops, something went wrong...</div>
-</div>
-
-</div>
-
-<script type="text/javascript">
-
-// Set page title
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Init div variables
-var mdiv = $('menu');
-var cdiv = $('content');
-
-/**
- * Build and show the menu bar.
- */
-function showmenu(mdiv) {
- mdiv.innerHTML = ui.menubar(
- mklist(ui.menu('Home', '/', '_view', false)),
- mklist(ui.signedin()? ui.menufunc('Sign out', 'logout();', false) : ui.menu('Sign in', '/login/', '_self', false)));
-}
-
-showmenu(mdiv);
-cdiv.style.top = ui.pixpos(mdiv.offsetTop + mdiv.offsetHeight);
-
-/**
- * Log the current user out.
- */
-function logout() {
- // Clear session cookie and user-specific local storage entries
- var reset = 'TuscanyOpenAuth=; expires=' + new Date(1970,01,01).toGMTString() + '; domain=.' + domainname(window.location.hostname) + '; path=/';
- document.cookie = reset;
- localStorage.removeItem('/r/EditWidget/accounts');
- localStorage.removeItem('/r/EditWidget/dashboards');
- //localStorage.clear();
- document.location = '/login/';
- return true;
-}
-
-/**
- * Handle orientation change.
- */
-document.body.onorientationchange = function(e) {
- //log('onorientationchange');
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
-
- return true;
-};
-
-/**
- * Load post processing.
- */
-function onload() {
- //log('onload');
-
- // Show the page
- document.body.style.visibility = 'visible';
-
- // Scroll to the top and hide the address bar
- window.scrollTo(0, 0);
- return true;
-}
-
-</script>
-
-<div id="footdiv" class="fsection">
-</div>
-
-</div>
-</body>
-</html>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b64
deleted file mode 100644
index 2239f6ae0f..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAADkAAAA5CAIAAAADehTSAAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sDGxMkCJXGmL8AAAHwSURBVGje7ZpNbhNBEIXf625sCzA/QUhkg8SGiGxZcpDcgRux5hLkEjkE7BAS9gIyk+muxyZIsSeOG09bsXHX0p4pfVNdP8/loSTsiTnsj1XWyrrMutVSG+ic/ftNqe1mIMtSjsPUu9EQJ6H/UdvNLr59cgwFWaM1p8dnLx6dFGYF6RhIXzLVGIChB3VX8Fg0DWrPqqyHxTq4MUnKKEEBoNvIN4uxiqTkofUXpgZKsqtMx3Djpb45lNWAxxbfXf6wtdH9+vkKBLLGrFLz4M1HTk+K5gAIgBCVcaTI1gOK/acazqqbw2PdYzE7tdyh9AFJTL0zNDIJMInAZpKPzBzmIZuUnjoa9QQkOBHAyWbigYDaTslybg/59f7Q4+003pqwhqcbqjLH9H2OXw0Ksl6XsWB/a39lhf1rz8vOnKoHKmtlrayVtbLuuc6SFK1Z2hEZkBwAv1us4zA9PT7rDX3v9dPiOeBxT/uY0A+qd6Pbl2Sax/kXDN9LlcrXO3Rk9k/QWluVtbIe2O5toBGwFum3bLH/pEso7RarrPNHH/D8JbBIpsjJqx2Lq3Xu2Xv61yvXJzf6/b3nK2Htyu8WB9P/XltF/wfVllgFxet9azGL+bjMD5IUYbPSMktwT8hRSdalkizcufKcs77vUlkr61bsD5lbwtgOKPT2AAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.png b/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.png
deleted file mode 100644
index f22c33d2a0..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.xcf b/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.xcf
deleted file mode 100644
index fc713b478b..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/touchicon.xcf
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/user.b64 b/sca-cpp/trunk/modules/edit/htdocs/public/user.b64
deleted file mode 100644
index 7ed235aa14..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/user.b64
+++ /dev/null
@@ -1 +0,0 @@
-iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAABGdBTUEAALGPC/xhBQAAAAxQTFRFyN+N+dR1/PCI////6HjE5gAAADJJREFUKM9j+I8EPjBQifeBAQSY6coLBYN6inhaq0Bg6SDn/f//akB466ExTS6P2ukMAKumzarJO/66AAAAAElFTkSuQmCC \ No newline at end of file
diff --git a/sca-cpp/trunk/modules/edit/htdocs/public/user.png b/sca-cpp/trunk/modules/edit/htdocs/public/user.png
deleted file mode 100644
index 1f73274b76..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/public/user.png
+++ /dev/null
Binary files differ
diff --git a/sca-cpp/trunk/modules/edit/htdocs/robots.txt b/sca-cpp/trunk/modules/edit/htdocs/robots.txt
deleted file mode 100644
index 1f53798bb4..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/robots.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-User-agent: *
-Disallow: /
diff --git a/sca-cpp/trunk/modules/edit/htdocs/stats/index.html b/sca-cpp/trunk/modules/edit/htdocs/stats/index.html
deleted file mode 100644
index 81f06c95e4..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/stats/index.html
+++ /dev/null
@@ -1,161 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span><span id="appNameHeader"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<table style="width: 100%;">
-<tr>
-<th class="thl thr" style="padding-top: 4px; padding-bottom: 4px; padding-left: 2px; padding-right: 2px; ">Stats</th>
-
-<th class="thl thr" style="width: 100%; text-align: right; padding-right: 2px; padding-top: 0px; padding-bottom: 0px;">
-<input type="button" class="graybutton" style="font-weight: bold; margin-top: 0px; margin-bottom: 0px; height: 24px;" id="cloneApp" value="Clone" title="Clone this app"/>
-</th>
-</tr>
-</table>
-
-<form id="appForm">
-<table style="width: 100%;">
-<tr><tr><td><b>App Icon:</b></td></tr>
-<tr><td><img id="appimg" style="width: 50px; height: 50px; vertical-align: top;"></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Sharing:</b></td></tr>
-<tr><td><input type="checkbox" value="shared"/><span>Shared</span></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>App Title:</b></td></tr>
-<tr><td><input type="text" id="appTitle" size="30" placeholder="Enter the title of your app" style="width: 300px;"/></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Updated:</b></td></tr>
-<tr><td><span id="appUpdated"></span></td></tr>
-<tr><tr><td style="padding-top: 6px;"><b>Description:</b></td></tr>
-<tr><td><textarea id="appDescription" cols="40" rows="3" placeholder="Enter a short description of your app" style="width: 300px;"></textarea></td></tr>
-</table>
-</form>
-
-<script type="text/javascript">
-
-// Get the app name
-var appname = ui.fragmentParams(location)['app'];
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Stats - ' + appname;
-$('appNameHeader').innerHTML = '<a href=\"/' + appname + '/\" target=\"' + '_blank' + '\">' + appname + '</a>';
-var tclone = isNil(config.clone)? 'Clone' : config.clone;
-$('cloneApp').value = tclone;
-$('cloneApp').title = tclone + ' this app';
-
-// Set images
-$('appimg').src = ui.b64img(appcache.get('/public/app.b64'));
-
-// Init service references
-var editWidget = sca.component("EditWidget");
-var dashboards = sca.reference(editWidget, "dashboards");
-var apps = sca.reference(editWidget, "apps");
-
-/**
- * The current app entry and corresponding saved XML content.
- */
-var appentry;
-var savedappentryxml = '';
-
-/**
- * Get and display an app.
- */
-function getapp(name) {
- if (isNil(name))
- return false;
- showStatus('Loading');
-
- return apps.get(name, function(doc) {
-
- // Stop now if we didn't get the app
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- 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;
- $('appUpdated').innerHTML = 'Apr 24, 2011'
- $('appDescription').innerHTML = '';
- savedappentryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
- return true;
- });
-}
-
-/**
- * Save the current app.
- */
-function save(entryxml) {
- showStatus('Saving');
- savedappentryxml = entryxml;
- dashboards.put(appname, savedappentryxml, function(e) {
- if (e) {
- showStatus('Local copy');
- return false;
- }
-
- showStatus('Saved');
- return false;
- });
- return true;
-}
-
-/**
- * Handle a change event
- */
-function onappchange() {
- var title = $('appTitle').value;
- var appentry = mklist("'entry", mklist("'title", title != ''? title : appname), mklist("'id", appname));
- var entryxml = car(atom.writeATOMEntry(valuesToElements(mklist(appentry))));
- if (savedappentryxml == entryxml)
- return false;
- showStatus('Modified');
- return save(entryxml);
-}
-
-$('appTitle').onchange = onappchange;
-$('appDescription').onchange = onappchange;
-
-/**
- * Handle a form submit event.
- */
-$('appForm').onsubmit = function() {
- onappchange();
- return false;
-};
-
-/**
- * Handle Clone button event.
- */
-$('cloneApp').onclick = function() {
- return ui.navigate('/#view=clone&app=' + appname, '_view');
-}
-
-// Get the current app
-getapp(appname);
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/htdocs/store/index.html b/sca-cpp/trunk/modules/edit/htdocs/store/index.html
deleted file mode 100644
index bcb3ba7c85..0000000000
--- a/sca-cpp/trunk/modules/edit/htdocs/store/index.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<!DOCTYPE html>
-<!--
- * 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="bodydiv" class="bodydiv">
-
-<table style="width: 100%;">
-<tr>
-<td><h2><span id="h1"></span></h2></td>
-<td style="vertical-align: middle; text-align: right;"><span id="status" style="font-weight: bold; color: #808080;"></span></td>
-</tr>
-</table>
-
-<div id="catmenu"></div>
-
-<div id="apps"></div>
-
-<script type="text/javascript">
-
-// Set page titles
-document.title = ui.windowtitle(location.hostname) + ' - Store';
-$('h1').innerHTML = ui.hometitle(location.hostname);
-
-// Get the store category
-var category = ui.fragmentParams(location)['category'];
-if (isNil(category))
- category = 'myapps';
-
-/**
- * Build store menu bar
- */
-function catmenu() {
- function catmenuitem(name, cat, idx) {
- var c = cat == category? 'smenu' : 'amenu';
- return '<th class="thl thr" style="width: 10px; padding-top: 4px; padding-bottom: 4px; padding-right: 6px;">'
- + ui.ahref('/#view=store&category=' + cat + '&idx=' + idx, '_view', '<span class="' + c + '">' + name + '</span>') + '</th>';
- }
-
- var m = '<table style="width: 100%; margin-bottom: 2px;"><tr>';
- m += catmenuitem('My Apps', 'myapps', '1');
- m += catmenuitem('New', 'new', '2');
- m += catmenuitem('Top', 'top', '3');
- m += catmenuitem('Featured', 'featured', '4');
- m += catmenuitem('All', 'all', '5');
- if (category == 'myapps') {
- m += '<th class="thl thr" style="width: 100%; padding-top: 0px; padding-bottom: 0px; padding-right: 0px; text-align: right;">';
- m += '<input type="button" class="graybutton" id="createApp" title="Create a new app" style="font-weight: bold; margin-top: 0px; margin-bottom: 0px; height: 24px;" Value="New App"/>';
- m += '</th></tr></table>';
- return m;
- }
- m += '<th class="thl thr" style="width: 100%;"></th></tr></table>';
- return m;
-}
-
-// Build store menu bar
-$('catmenu').innerHTML = catmenu();
-
-/**
- * Service references.
- */
-var editWidget = sca.component("EditWidget");
-var store = sca.reference(editWidget, "store");
-var dashboards = sca.reference(editWidget, "dashboards");
-
-/**
- * Edit an app.
- */
-function editApp(appname) {
- return ui.navigate('/#view=page&app=' + appname, '_view');
-}
-
-/**
- * View an app.
- */
-function viewApp(appname) {
- return ui.navigate('/#view=stats&app=' + appname, '_view');
-}
-
-/**
- * Create an app.
- */
-if (category == 'myapps') {
- $('createApp').onclick = function() {
- return ui.navigate('/#view=create', '_view');
- }
-}
-
-/**
- * Get and display list of apps.
- */
-function getapps(category) {
- //log('category', category);
- showStatus('Loading');
-
- function display(doc) {
-
- // Stop now if we didn't get the apps
- if (doc == null) {
- showStatus('No data');
- return false;
- }
- showStatus(defaultStatus());
-
- var apps = '<div>';
- var feed = car(elementsToValues(atom.readATOMFeed(mklist(doc))));
- var aentries = assoc("'entry", cdr(feed));
- var entries = isNil(aentries)? mklist() : isList(car(cadr(aentries)))? cadr(aentries) : mklist(cdr(aentries));
-
- var appimg = ui.b64img(appcache.get('/public/app.b64'));
-
- function displayentries(entries) {
- if (isNil(entries))
- return apps;
- var entry = car(entries);
- var title = cadr(assoc("'title", entry))
- var name = cadr(assoc("'id", entry))
- var author = 'joe';
- var clone = isNil(config.clone)? 'Clone' : config.clone;
-
- apps += '<div class="box" style="width: 150px; display: inline-block; border: 1px; border-style: solid; border-color: #dcdcdc; border-collapse: collapse; margin: 2px; padding: 2px; vertical-align: top;">'
- apps += '<table><tr>';
- apps += '<td>';
- apps += '<div>' + ui.ahref('/#view=stats&app=' + name, '_view', '<img src="' + appimg + '" width="50" height="50" style="height: 50px; width: 50px; vertical-align: top; margin: 0px; padding: 0px;"></img>') + '</div>';
- apps += '</td>';
- apps += '<td class="tdw">';
- apps += '<div style="font-weight: bold">' + ui.ahref('/' + name + '/', '_blank', name) + '</div>';
- if (category == 'myapps')
- apps += '<div style="color: #808080;">Shared</div>';
- else
- apps += '<div>' + 'by&nbsp;' + '<span style="font-weight: bold;">' + author + '</span></div>';
- apps += '</td>';
- apps += '</tr></table>';
- apps += '</div>';
- return displayentries(cdr(entries));
- }
-
- displayentries(entries);
-
- apps += '</div>';
- $('apps').innerHTML = apps;
- }
-
- if (category == 'myapps')
- return dashboards.get('', display);
- return store.get(category, display);
-}
-
-// Get and display the list of apps
-getapps(category);
-
-</script>
-
-</div>
diff --git a/sca-cpp/trunk/modules/edit/log.py b/sca-cpp/trunk/modules/edit/log.py
deleted file mode 100644
index 8aa3d3bd30..0000000000
--- a/sca-cpp/trunk/modules/edit/log.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# 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.
-
-# Log service component
-from sys import stderr
-
-# Log a message
-def log(msg):
- print >> stderr, '[rconsole]', msg
-
diff --git a/sca-cpp/trunk/modules/edit/mkapplinks b/sca-cpp/trunk/modules/edit/mkapplinks
deleted file mode 100755
index a68a2896ec..0000000000
--- a/sca-cpp/trunk/modules/edit/mkapplinks
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/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.
-
-aprefix=$1
-tprefix=$2
-nprefix=$3
-
-# Create app links to Nuvem and Tuscany components
-cd $1
-for n in `ls apps | awk '{ printf "apps/%s/nuvem\n", $1 }'`; do
- if [ ! -e "$n" ]; then
- ln -s "$nprefix/nuvem-parallel/nuvem" "$n"
- fi
-done
-
-for n in `ls apps | awk '{ printf "apps/%s/lib\n", $1 }'`; do
- if [ ! -e "$n" ]; then
- ln -s "$tprefix/components" "$n"
- fi
-done
-
diff --git a/sca-cpp/trunk/modules/edit/pages.py b/sca-cpp/trunk/modules/edit/pages.py
deleted file mode 100644
index 99392aeeef..0000000000
--- a/sca-cpp/trunk/modules/edit/pages.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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.
-
-# App pages collection implementation
-from util import *
-
-# Convert an id to an app id
-def appid(id):
- return ("'" + car(id), "'htdocs", "'app.html")
-
-# Put an app page into the apps db
-def put(id, app, cache):
- 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 (("'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):
- cache.delete(appid(id))
- return True
-
diff --git a/sca-cpp/trunk/modules/edit/palettes.py b/sca-cpp/trunk/modules/edit/palettes.py
deleted file mode 100644
index 5cb303e053..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes.py
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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.
-
-# Palettes collection implementation
-from util import *
-
-# Convert an id to a palette id
-def paletteid(id):
- return ("'" + car(id), "'palette.composite")
-
-# Put a palette into the palettes db
-def put(id, palette, cache):
- comp = cdr(cadddr(car(palette)))
- cache.put(paletteid(id), comp)
- return True
-
-# Get a palette from the palettes db
-def get(id, cache):
- if isNil(id):
- return (("'feed", ("'title", "Palettes"), ("'id", "palettes")),)
- return (("'entry", ("'title", car(id)), ("'id", car(id)), ("'content", car(cache.get(paletteid(id))))),)
-
diff --git a/sca-cpp/trunk/modules/edit/palettes/animation/palette.composite b/sca-cpp/trunk/modules/edit/palettes/animation/palette.composite
deleted file mode 100644
index 75cbf497b6..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/animation/palette.composite
+++ /dev/null
@@ -1,103 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="frames" promote="frames"/>
- <service name="htattrs" promote="htattrs"/>
- <service name="htbutton" promote="htbutton"/>
- <service name="htcheck" promote="htcheck"/>
- <service name="htimg" promote="htimg"/>
- <service name="htinline" promote="htinline"/>
- <service name="htlink" promote="htlink"/>
- <service name="htstyle" promote="htstyle"/>
- <service name="left" promote="left"/>
- <service name="pixels" promote="pixels"/>
- <service name="top" promote="top"/>
- <service name="transform" promote="transform"/>
- <service name="transition" promote="transition"/>
- <component x="170" y="160" name="frames" title="frames" color="white1">
- <implementation.python script="nuvem/frames.py"/>
- <service name="frames"/>
- <reference name="msec"/>
- <reference name="loop"/>
- <reference name="content"/>
- </component>
- <component x="140" y="60" name="htattrs" title="attrs:" color="white1">
- <implementation.python script="nuvem/htattrs.py"/>
- <service name="htattrs"/>
- <reference name="value"/>
- </component>
- <component x="130" y="10" name="htbutton" title="button" color="white1">
- <implementation.python script="nuvem/htbutton.py"/>
- <service name="htbutton"/>
- <reference name="value"/>
- </component>
- <component x="250" y="10" name="htcheck" title="checkbox" color="white1">
- <implementation.python script="nuvem/htcheck.py"/>
- <service name="htcheck"/>
- <reference name="value"/>
- </component>
- <component x="80" y="10" name="htimg" title="img" color="white1">
- <implementation.python script="nuvem/htimg.py"/>
- <service name="htimg"/>
- <reference name="value"/>
- </component>
- <component x="80" y="60" name="htinline" title="inline" color="white1">
- <implementation.python script="nuvem/htinline.py"/>
- <service name="htinline"/>
- <reference name="value"/>
- </component>
- <component x="200" y="10" name="htlink" title="link" color="white1">
- <implementation.python script="nuvem/htlink.py"/>
- <service name="htlink"/>
- <reference name="value"/>
- </component>
- <component x="200" y="60" name="htstyle" title="style" color="white1">
- <implementation.python script="nuvem/htstyle.py"/>
- <service name="htstyle"/>
- <reference name="value"/>
- </component>
- <component x="230" y="110" name="left" title="left" color="white1">
- <implementation.python script="nuvem/left.py"/>
- <service name="left"/>
- <reference name="value"/>
- </component>
- <component x="260" y="60" name="pixels" title="pixels" color="white1">
- <implementation.python script="nuvem/pixels.py"/>
- <service name="pixels"/>
- <reference name="value"/>
- </component>
- <component x="170" y="110" name="top" title="top" color="white1">
- <implementation.python script="nuvem/top.py"/>
- <service name="top"/>
- <reference name="value"/>
- </component>
- <component x="80" y="160" name="transform" title="transform" color="white1">
- <implementation.python script="nuvem/transform.py"/>
- <service name="transform"/>
- <reference name="x"/>
- <reference name="y"/>
- <reference name="d"/>
- </component>
- <component x="80" y="110" name="transition" title="transition" color="white1">
- <implementation.python script="nuvem/transition.py"/>
- <service name="transition"/>
- <reference name="value"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/control/palette.composite b/sca-cpp/trunk/modules/edit/palettes/control/palette.composite
deleted file mode 100644
index f89cae2c5d..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/control/palette.composite
+++ /dev/null
@@ -1,86 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="animation" promote="animation"/>
- <service name="call" promote="call"/>
- <service name="location" promote="location"/>
- <service name="schedule" promote="schedule"/>
- <service name="service" promote="service"/>
- <service name="start" promote="start"/>
- <service name="stop" promote="stop"/>
- <service name="timer" promote="timer"/>
- <component x="160" y="60" name="animation" title="animation" color="green1">
- <implementation.python script="nuvem/animation.py"/>
- <service name="animation" visible="false">
- <binding.http uri="animation"/>
- </service>
- <reference name="n"/>
- <reference name="loop"/>
- <reference name="content"/>
- </component>
- <component x="190" y="10" name="call" title="call" color="green1">
- <implementation.python script="nuvem/call.py"/>
- <service name="call"/>
- <reference name="name"/>
- <reference name="proxy" wiredByImpl="true" visible="false"/>
- </component>
- <component x="80" y="60" name="location" title="location" color="green1">
- <implementation.python script="nuvem/location.py"/>
- <service name="location" visible="false">
- <binding.http uri="location"/>
- </service>
- <reference name="content"/>
- </component>
- <component x="240" y="60" name="schedule" title="schedule" color="green1">
- <implementation.python script="nuvem/schedule.py"/>
- <service name="schedule" visible="false">
- <binding.http uri="schedule"/>
- </service>
- <reference name="n"/>
- <reference name="content"/>
- </component>
- <component x="240" y="10" name="service" title="{compname}" color="green1">
- <implementation.python script="nuvem/service.py"/>
- <service name="service" visible="false"/>
- <reference name="content"/>
- </component>
- <component x="80" y="10" name="start" title="start" color="green1">
- <implementation.python script="nuvem/start.py"/>
- <service name="start" visible="false">
- <binding.http uri="start"/>
- </service>
- <reference name="content"/>
- </component>
- <component x="130" y="10" name="stop" title="stop" color="green1">
- <implementation.python script="nuvem/stop.py"/>
- <service name="stop" visible="false">
- <binding.http uri="stop"/>
- </service>
- <reference name="content"/>
- </component>
- <component x="80" y="110" name="timer" title="timer" color="green1">
- <implementation.python script="nuvem/timer.py"/>
- <service name="timer" visible="false">
- <binding.http uri="timer"/>
- </service>
- <reference name="n"/>
- <reference name="content"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/database/palette.composite b/sca-cpp/trunk/modules/edit/palettes/database/palette.composite
deleted file mode 100644
index cca0b174b8..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/database/palette.composite
+++ /dev/null
@@ -1,72 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="delete" promote="delete"/>
- <service name="filedb" promote="filedb"/>
- <service name="get" promote="get"/>
- <service name="nosqldb" promote="nosqldb"/>
- <service name="post" promote="post"/>
- <service name="put" promote="put"/>
- <service name="sqldb" promote="sqldb"/>
- <component x="270" y="60" name="delete" title="delete" color="pink1">
- <implementation.python script="nuvem/delete.py"/>
- <service name="delete"/>
- <reference name="collection"/>
- <reference name="id"/>
- </component>
- <component x="80" y="10" name="filedb" title="file" color="pink1">
- <implementation.python script="nuvem/filedb.py"/>
- <service name="filedb"/>
- <reference name="db" target="AppDataFileCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="80" y="60" name="get" title="get" color="pink1">
- <implementation.python script="nuvem/get.py"/>
- <service name="get"/>
- <reference name="collection"/>
- <reference name="id"/>
- </component>
- <component x="140" y="10" name="nosqldb" title="index **" color="pink1">
- <implementation.python script="nuvem/nosqldb.py"/>
- <service name="nosqldb"/>
- <reference name="db" target="AppDataNoSQLCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
- <component x="200" y="60" name="post" title="post" color="pink1">
- <implementation.python script="nuvem/post.py"/>
- <service name="post"/>
- <reference name="collection"/>
- <reference name="id"/>
- <reference name="value"/>
- </component>
- <component x="140" y="60" name="put" title="put" color="pink1">
- <implementation.python script="nuvem/put.py"/>
- <service name="put"/>
- <reference name="collection"/>
- <reference name="id"/>
- <reference name="value"/>
- </component>
- <component x="210" y="10" name="sqldb" title="sql **" color="pink1">
- <implementation.python script="nuvem/sqldb.py"/>
- <service name="sqldb"/>
- <reference name="db" target="AppDataSQLCache" visible="false"/>
- <property name="host" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/http/palette.composite b/sca-cpp/trunk/modules/edit/palettes/http/palette.composite
deleted file mode 100644
index 6c8cbaa553..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/http/palette.composite
+++ /dev/null
@@ -1,105 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="delete" promote="delete"/>
- <service name="email" promote="email"/>
- <service name="get" promote="get"/>
- <service name="host" promote="host"/>
- <service name="keychain" promote="keychain"/>
- <service name="param" promote="param"/>
- <service name="params" promote="params"/>
- <service name="patch" promote="patch"/>
- <service name="path" promote="path"/>
- <service name="post" promote="post"/>
- <service name="put" promote="put"/>
- <service name="url" promote="url"/>
- <service name="user" promote="user"/>
- <component x="80" y="170" name="delete" title="delete" color="green1">
- <implementation.cpp path="lib/http" library="libhttpdelete"/>
- <service name="delete"/>
- <reference name="url"/>
- </component>
- <component x="130" y="60" name="email" title="email" color="green1">
- <implementation.python script="nuvem/email.py"/>
- <service name="email"/>
- <property name="email" visible="false"/>
- </component>
- <component x="80" y="120" name="get" title="get" color="green1">
- <implementation.cpp path="lib/http" library="libhttpget"/>
- <service name="get"/>
- <reference name="url"/>
- </component>
- <component x="80" y="10" name="host" title="host" color="green1">
- <implementation.python script="nuvem/host.py"/>
- <service name="host"/>
- <property name="host" visible="false"/>
- </component>
- <component x="190" y="60" name="keychain" title="keychain" color="green1">
- <implementation.python script="nuvem/keychain.py"/>
- <service name="keychain"/>
- <reference name="name"/>
- <reference name="account" target="Accounts" visible="false"/>
- </component>
- <component x="250" y="10" name="param" title="?param" color="green1">
- <implementation.python script="nuvem/param.py"/>
- <service name="param"/>
- <property>x</property>
- <property name="query" visible="false"/>
- </component>
- <component x="180" y="10" name="params" title="?params" color="green1">
- <implementation.python script="nuvem/params.py"/>
- <service name="params"/>
- <property name="query" visible="false"/>
- </component>
- <component x="260" y="120" name="patch" title="patch" color="green1">
- <implementation.cpp path="lib/http" library="libhttppatch"/>
- <service name="patch"/>
- <reference name="url"/>
- <reference name="content"/>
- </component>
- <component x="130" y="10" name="path" title="path" color="green1">
- <implementation.python script="nuvem/path.py"/>
- <service name="path"/>
- <property name="path" visible="false"/>
- </component>
- <component x="200" y="120" name="post" title="post" color="green1">
- <implementation.cpp path="lib/http" library="libhttppost"/>
- <service name="post"/>
- <reference name="url"/>
- <reference name="content"/>
- </component>
- <component x="140" y="120" name="put" title="put" color="green1">
- <implementation.cpp path="lib/http" library="libhttpput"/>
- <service name="put"/>
- <reference name="url"/>
- <reference name="content"/>
- </component>
- <component x="270" y="60" name="url" title="url" color="green1">
- <implementation.python script="nuvem/url.py"/>
- <service name="url"/>
- <reference name="address"/>
- <reference name="args"/>
- </component>
- <component x="80" y="60" name="user" title="user" color="green1">
- <implementation.python script="nuvem/user.py"/>
- <service name="user"/>
- <property name="user" visible="false"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/lists/palette.composite b/sca-cpp/trunk/modules/edit/palettes/lists/palette.composite
deleted file mode 100644
index 2f4051d7b9..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/lists/palette.composite
+++ /dev/null
@@ -1,131 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="append" promote="append"/>
- <service name="empty" promote="empty"/>
- <service name="first" promote="first"/>
- <service name="insert" promote="insert"/>
- <service name="itemnb" promote="itemnb"/>
- <service name="last" promote="last"/>
- <service name="list" promote="list"/>
- <service name="list1" promote="list1"/>
- <service name="list2" promote="list2"/>
- <service name="list3" promote="list3"/>
- <service name="lookup" promote="lookup"/>
- <service name="names" promote="names"/>
- <service name="range" promote="range"/>
- <service name="rest" promote="rest"/>
- <service name="second" promote="second"/>
- <service name="select" promote="select"/>
- <service name="values" promote="values"/>
- <component x="140" y="70" name="append" title="+" color="yellow1">
- <implementation.python script="nuvem/append.py"/>
- <service name="append"/>
- <reference name="first"/>
- <reference name="second"/>
- </component>
- <component x="80" y="70" name="empty" title="empty" color="yellow1">
- <implementation.python script="nuvem/empty.py"/>
- <service name="empty"/>
- </component>
- <component x="80" y="130" name="first" title="first" color="yellow1">
- <implementation.python script="nuvem/first.py"/>
- <service name="first"/>
- <reference name="list"/>
- </component>
- <component x="200" y="70" name="insert" title="insert" color="yellow1">
- <implementation.python script="nuvem/insert.py"/>
- <service name="insert"/>
- <reference name="value"/>
- <reference name="list"/>
- </component>
- <component x="80" y="180" name="itemnb" title="item #" color="yellow1">
- <implementation.python script="nuvem/itemnb.py"/>
- <service name="itemnb"/>
- <reference name="index"/>
- <reference name="list"/>
- </component>
- <component x="200" y="130" name="last" title="last" color="yellow1">
- <implementation.python script="nuvem/last.py"/>
- <service name="last"/>
- <reference name="list"/>
- </component>
- <component x="80" y="10" name="list" title="list.." color="yellow1">
- <implementation.python script="nuvem/list_.py"/>
- <service name="list"/>
- <reference name="item" clonable="true"/>
- </component>
- <component x="140" y="10" name="list1" title="list" color="yellow1">
- <implementation.python script="nuvem/single.py"/>
- <service name="list1"/>
- <reference name="value"/>
- </component>
- <component x="200" y="10" name="list2" title="list" color="yellow1">
- <implementation.python script="nuvem/pair.py"/>
- <service name="list2"/>
- <reference name="first"/>
- <reference name="second"/>
- </component>
- <component x="260" y="10" name="list3" title="list" color="yellow1">
- <implementation.python script="nuvem/triple.py"/>
- <service name="list3"/>
- <reference name="first"/>
- <reference name="second"/>
- <reference name="third"/>
- </component>
- <component x="160" y="180" name="lookup" title="lookup" color="yellow1">
- <implementation.python script="nuvem/lookup.py"/>
- <service name="lookup"/>
- <reference name="name"/>
- <reference name="list"/>
- </component>
- <component x="80" y="250" name="names" title="names" color="yellow1">
- <implementation.python script="nuvem/names.py"/>
- <service name="names"/>
- <reference name="list"/>
- </component>
- <component x="240" y="250" name="range" title="range" color="yellow1">
- <implementation.python script="nuvem/range_.py"/>
- <service name="range"/>
- <reference name="first"/>
- <reference name="last"/>
- </component>
- <component x="140" y="130" name="rest" title="rest" color="yellow1">
- <implementation.python script="nuvem/rest.py"/>
- <service name="rest"/>
- <reference name="list"/>
- </component>
- <component x="250" y="130" name="second" title="second" color="yellow1">
- <implementation.python script="nuvem/second.py"/>
- <service name="second"/>
- <reference name="list"/>
- </component>
- <component x="240" y="180" name="select" title="select" color="yellow1">
- <implementation.python script="nuvem/select.py"/>
- <service name="select"/>
- <reference name="path"/>
- <reference name="list"/>
- </component>
- <component x="160" y="250" name="values" title="values" color="yellow1">
- <implementation.python script="nuvem/values.py"/>
- <service name="values"/>
- <reference name="list"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/logic/palette.composite b/sca-cpp/trunk/modules/edit/palettes/logic/palette.composite
deleted file mode 100644
index 4d84272fd5..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/logic/palette.composite
+++ /dev/null
@@ -1,70 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="and" promote="and"/>
- <service name="equals" promote="equals"/>
- <service name="greater" promote="greater"/>
- <service name="if" promote="if"/>
- <service name="lesser" promote="lesser"/>
- <service name="not" promote="not"/>
- <service name="or" promote="or"/>
- <component x="140" y="10" name="and" title="and" color="green1">
- <implementation.python script="nuvem/and_.py"/>
- <service name="and"/>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="80" y="100" name="equals" title="=" color="green1">
- <implementation.python script="nuvem/equals.py"/>
- <service name="equals"/>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="200" y="100" name="greater" title="gt" color="green1">
- <implementation.python script="nuvem/greater.py"/>
- <service name="greater"/>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="80" y="10" name="if" title="if" color="green1">
- <implementation.python script="nuvem/if_.py"/>
- <service name="if"/>
- <reference name="condition"/>
- <reference name="then"/>
- <reference name="else"/>
- </component>
- <component x="140" y="100" name="lesser" title="lt" color="green1">
- <implementation.python script="nuvem/lesser.py"/>
- <service name="lesser"/>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="260" y="10" name="not" title="not" color="green1">
- <implementation.python script="nuvem/not_.py"/>
- <service name="not"/>
- <reference name="value"/>
- </component>
- <component x="200" y="10" name="or" title="or" color="green1">
- <implementation.python script="nuvem/or_.py"/>
- <service name="or"/>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/math/palette.composite b/sca-cpp/trunk/modules/edit/palettes/math/palette.composite
deleted file mode 100644
index 7dc4e88f2f..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/math/palette.composite
+++ /dev/null
@@ -1,138 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="add" promote="add"/>
- <service name="ceil" promote="ceil"/>
- <service name="cos" promote="cos"/>
- <service name="distance" promote="distance"/>
- <service name="divide" promote="divide"/>
- <service name="floor" promote="floor"/>
- <service name="max" promote="max"/>
- <service name="min" promote="min"/>
- <service name="mod" promote="mod"/>
- <service name="multiply" promote="multiply"/>
- <service name="pi" promote="pi"/>
- <service name="random" promote="random"/>
- <service name="randoms" promote="randoms"/>
- <service name="round" promote="round"/>
- <service name="sin" promote="sin"/>
- <service name="subtract" promote="subtract"/>
- <service name="sum" promote="sum"/>
- <component x="80" y="10" name="add" title="+" color="cyan1">
- <implementation.python script="nuvem/add.py"/>
- <service name="add">
- <documentation>+</documentation>
- </service>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="270" y="130" name="ceil" title="ceil" color="cyan1">
- <implementation.python script="nuvem/ceil_.py"/>
- <service name="ceil"/>
- <reference name="x"/>
- </component>
- <component x="210" y="190" name="cos" title="cos" color="cyan1">
- <implementation.python script="nuvem/cos_.py"/>
- <service name="cos"/>
- <reference name="x"/>
- </component>
- <component x="80" y="240" name="distance" title="distance **" color="cyan1">
- <implementation.python script="nuvem/distance.py"/>
- <service name="distance"/>
- <reference name="location1"/>
- <reference name="location2"/>
- </component>
- <component x="270" y="10" name="divide" title="/" color="cyan1">
- <implementation.python script="nuvem/divide.py"/>
- <service name="divide">
- <documentation>/</documentation>
- </service>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="210" y="130" name="floor" title="floor" color="cyan1">
- <implementation.python script="nuvem/floor_.py"/>
- <service name="floor"/>
- <reference name="x"/>
- </component>
- <component x="150" y="80" name="max" title="max" color="cyan1">
- <implementation.python script="nuvem/max_.py"/>
- <service name="max"/>
- <reference name="l"/>
- </component>
- <component x="210" y="80" name="min" title="min" color="cyan1">
- <implementation.python script="nuvem/min_.py"/>
- <service name="min"/>
- <reference name="l"/>
- </component>
- <component x="80" y="130" name="mod" title="mod" color="cyan1">
- <implementation.python script="nuvem/mod.py"/>
- <service name="mod"/>
- <reference name="n"/>
- <reference name="x"/>
- </component>
- <component x="210" y="10" name="multiply" title="*" color="cyan1">
- <implementation.python script="nuvem/multiply.py"/>
- <service name="multiply">
- <documentation>*</documentation>
- </service>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="80" y="190" name="pi" title="pi" color="cyan1">
- <implementation.python script="nuvem/pi_.py"/>
- <service name="pi"/>
- </component>
- <component x="170" y="240" name="random" title="rand" color="cyan1">
- <implementation.python script="nuvem/random_.py"/>
- <service name="random"/>
- <reference name="range"/>
- </component>
- <component x="230" y="240" name="randoms" title="rands" color="cyan1">
- <implementation.python script="nuvem/randoms.py"/>
- <service name="randoms"/>
- <reference name="n"/>
- <reference name="range"/>
- </component>
- <component x="150" y="130" name="round" title="round" color="cyan1">
- <implementation.python script="nuvem/round_.py"/>
- <service name="round"/>
- <reference name="n"/>
- <reference name="x"/>
- </component>
- <component x="150" y="190" name="sin" title="sin" color="cyan1">
- <implementation.python script="nuvem/sin_.py"/>
- <service name="sin"/>
- <reference name="x"/>
- </component>
- <component x="150" y="10" name="subtract" title="-" color="cyan1">
- <implementation.python script="nuvem/subtract.py"/>
- <service name="subtract">
- <documentation>-</documentation>
- </service>
- <reference name="value1"/>
- <reference name="value2"/>
- </component>
- <component x="80" y="80" name="sum" title="sum" color="cyan1">
- <implementation.python script="nuvem/sum_.py"/>
- <service name="sum"/>
- <reference name="l"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/python/palette.composite b/sca-cpp/trunk/modules/edit/palettes/python/palette.composite
deleted file mode 100644
index 2cc03ae365..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/python/palette.composite
+++ /dev/null
@@ -1,35 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="eval" promote="eval"/>
- <service name="exec" promote="exec"/>
- <component x="80" y="10" name="eval" title="expr" color="green1">
- <implementation.python script="nuvem/eval_.py"/>
- <service name="eval"/>
- <reference name="py"/>
- <reference name="ref"/>
- </component>
- <component x="150" y="10" name="exec" title="script" color="green1">
- <implementation.python script="nuvem/exec_.py"/>
- <service name="exec"/>
- <reference name="py"/>
- <reference name="ref"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/search/palette.composite b/sca-cpp/trunk/modules/edit/palettes/search/palette.composite
deleted file mode 100644
index db58cdcd08..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/search/palette.composite
+++ /dev/null
@@ -1,100 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="bsearch" promote="bsearch"/>
- <service name="gaddress" promote="gaddress"/>
- <service name="ggeopos" promote="ggeopos"/>
- <service name="gimages" promote="gimages"/>
- <service name="gmap" promote="gmap"/>
- <service name="gsearch" promote="gsearch"/>
- <service name="gweather" promote="gweather"/>
- <service name="traffic" promote="traffic"/>
- <service name="ysearch" promote="ysearch"/>
- <component x="240" y="10" name="bsearch" title="bing" color="blue1">
- <implementation.python script="nuvem/bsearch.py"/>
- <service name="bsearch"/>
- <reference name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://www.bing.com/search"/>
- </reference>
- </component>
- <component x="140" y="60" name="gaddress" title="address" color="blue1">
- <implementation.python script="nuvem/gaddress.py"/>
- <service name="gaddress"/>
- <reference name="address"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.googleapis.com/maps/api/geocode/json"/>
- </reference>
- </component>
- <component x="220" y="60" name="ggeopos" title="geo position" color="blue1">
- <implementation.python script="nuvem/ggeopos.py"/>
- <service name="ggeopos"/>
- <reference name="latitude"/>
- <reference name="longitude"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.googleapis.com/maps/api/geocode/json"/>
- </reference>
- </component>
- <component x="80" y="120" name="gimages" title="images" color="blue1">
- <implementation.python script="nuvem/gimages.py"/>
- <service name="gimages"/>
- <reference name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="https://ajax.googleapis.com/ajax/services/search/images"/>
- </reference>
- </component>
- <component x="80" y="60" name="gmap" title="map" color="blue1">
- <implementation.python script="nuvem/gmap.py"/>
- <service name="gmap"/>
- <reference name="locations"/>
- <reference name="s" visible="false">
- <binding.http uri="http://maps.google.com/maps/api/staticmap"/>
- </reference>
- </component>
- <component x="80" y="10" name="gsearch" title="google" color="blue1">
- <implementation.python script="nuvem/gsearch.py"/>
- <service name="gsearch"/>
- <reference name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://ajax.googleapis.com/ajax/services/search/web"/>
- </reference>
- </component>
- <component x="150" y="120" name="gweather" title="weather" color="blue1">
- <implementation.python script="nuvem/gweather.py"/>
- <service name="gweather"/>
- <reference name="zip"/>
- <reference name="ws" visible="false">
- <binding.http uri="http://www.google.com/ig/api"/>
- </reference>
- </component>
- <component x="230" y="120" name="traffic" title="traffic **" color="blue1">
- <implementation.python script="nuvem/traffic.py"/>
- <service name="traffic"/>
- <reference name="location"/>
- </component>
- <component x="160" y="10" name="ysearch" title="yahoo" color="blue1">
- <implementation.python script="nuvem/ysearch.py"/>
- <service name="ysearch"/>
- <reference name="query"/>
- <reference name="s" visible="false">
- <binding.http uri="http://search.yahooapis.com/WebSearchService/V1/webSearch"/>
- </reference>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/social/palette.composite b/sca-cpp/trunk/modules/edit/palettes/social/palette.composite
deleted file mode 100644
index 5e02303857..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/social/palette.composite
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="bzprofile" promote="bzprofile"/>
- <service name="fbalbums" promote="fbalbums"/>
- <service name="fbfriends" promote="fbfriends"/>
- <service name="fbgroups" promote="fbgroups"/>
- <service name="fbprofile" promote="fbprofile"/>
- <service name="flkalbum" promote="flkalbum"/>
- <service name="picalbum" promote="picalbum"/>
- <service name="twfollowers" promote="twfollowers"/>
- <service name="twfriends" promote="twfriends"/>
- <service name="twprofile" promote="twprofile"/>
- <service name="twtimeline" promote="twtimeline"/>
- <component x="80" y="260" name="bzprofile" title="buzz profile" color="blue1">
- <implementation.python script="nuvem/bzprofile.py"/>
- <service name="bzprofile"/>
- <reference name="id"/>
- <reference name="bz" visible="false">
- <binding.http uri="https://www.googleapis.com/buzz/v1/people"/>
- </reference>
- </component>
- <component x="190" y="60" name="fbalbums" title="facebook albums" color="blue1">
- <implementation.python script="nuvem/fbalbums.py"/>
- <service name="fbalbums"/>
- <reference name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component x="190" y="10" name="fbfriends" title="facebook friends" color="blue1">
- <implementation.python script="nuvem/fbfriends.py"/>
- <service name="fbfriends"/>
- <reference name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component x="80" y="60" name="fbgroups" title="facebook groups" color="blue1">
- <implementation.python script="nuvem/fbgroups.py"/>
- <service name="fbgroups"/>
- <reference name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component x="80" y="10" name="fbprofile" title="facebook profile" color="blue1">
- <implementation.python script="nuvem/fbprofile.py"/>
- <service name="fbprofile"/>
- <reference name="id"/>
- <reference name="fb" visible="false">
- <binding.http uri="https://graph.facebook.com"/>
- </reference>
- </component>
- <component x="80" y="210" name="flkalbum" title="flicker album" color="blue1">
- <implementation.python script="nuvem/flkalbum.py"/>
- <service name="flkalbum"/>
- <reference name="id"/>
- <reference name="flk" visible="false">
- <binding.http uri="http://api.flickr.com/services/feeds/photos_public.gne"/>
- </reference>
- </component>
- <component x="190" y="210" name="picalbum" title="picasa album" color="blue1">
- <implementation.python script="nuvem/picalbum.py"/>
- <service name="picalbum"/>
- <reference name="id"/>
- <reference name="pic" visible="false">
- <binding.http uri="https://picasaweb.google.com/data/feed/api/user"/>
- </reference>
- </component>
- <component x="80" y="160" name="twfollowers" title="twitter followers" color="blue1">
- <implementation.python script="nuvem/twfollowers.py"/>
- <service name="twfollowers"/>
- <reference name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/followers.json"/>
- </reference>
- </component>
- <component x="190" y="160" name="twfriends" title="twitter friends" color="blue1">
- <implementation.python script="nuvem/twfriends.py"/>
- <service name="twfriends"/>
- <reference name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/friends.json"/>
- </reference>
- </component>
- <component x="80" y="110" name="twprofile" title="twitter profile" color="blue1">
- <implementation.python script="nuvem/twprofile.py"/>
- <service name="twprofile"/>
- <reference name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/users/show.json"/>
- </reference>
- </component>
- <component x="190" y="110" name="twtimeline" title="twitter timeline" color="blue1">
- <implementation.python script="nuvem/twtimeline.py"/>
- <service name="twtimeline"/>
- <reference name="id"/>
- <reference name="tw" visible="false">
- <binding.http uri="http://api.twitter.com/1/statuses/user_timeline.json"/>
- </reference>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/talk/palette.composite b/sca-cpp/trunk/modules/edit/palettes/talk/palette.composite
deleted file mode 100644
index 90a48291ca..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/talk/palette.composite
+++ /dev/null
@@ -1,55 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="sendemail" promote="sendemail"/>
- <service name="sendgtalk" promote="sendgtalk"/>
- <service name="twsms" promote="twsms"/>
- <service name="voicecall" promote="voicecall"/>
- <component x="150" y="10" name="sendemail" title="email **" color="blue1">
- <implementation.python script="nuvem/sendemail.py"/>
- <service name="sendemail"/>
- <reference name="from"/>
- <reference name="to"/>
- <reference name="msg"/>
- </component>
- <component x="80" y="10" name="sendgtalk" title="gtalk" color="blue1">
- <implementation.cpp path="lib/chat" library="libchat-sender2"/>
- <service name="sendgtalk"/>
- <reference name="jid"/>
- <reference name="pass"/>
- <reference name="to"/>
- <reference name="msg"/>
- </component>
- <component x="230" y="10" name="twsms" title="sms" color="blue1">
- <implementation.python script="nuvem/twsms.py"/>
- <service name="twsms"/>
- <reference name="sid"/>
- <reference name="token"/>
- <reference name="from"/>
- <reference name="to"/>
- <reference name="msg"/>
- <reference name="s" wiredByImpl="true" visible="false"/>
- </component>
- <component x="80" y="120" name="voicecall" title="voice **" color="blue1">
- <implementation.python script="nuvem/voicecall.py"/>
- <service name="voicecall"/>
- <reference name="to"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/text/palette.composite b/sca-cpp/trunk/modules/edit/palettes/text/palette.composite
deleted file mode 100644
index 6b9214f6e4..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/text/palette.composite
+++ /dev/null
@@ -1,76 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="contains" promote="contains"/>
- <service name="format" promote="format"/>
- <service name="join" promote="join"/>
- <service name="lowercase" promote="lowercase"/>
- <service name="parse" promote="parse"/>
- <service name="replace" promote="replace"/>
- <service name="split" promote="split"/>
- <service name="uppercase" promote="uppercase"/>
- <component x="80" y="10" name="contains" title="contains" color="cyan1">
- <implementation.python script="nuvem/contains.py"/>
- <service name="contains"/>
- <reference name="search"/>
- <reference name="string"/>
- </component>
- <component x="80" y="90" name="format" title="format" color="cyan1">
- <implementation.python script="nuvem/format_.py"/>
- <service name="format"/>
- <reference name="pattern"/>
- <reference name="values"/>
- </component>
- <component x="280" y="10" name="join" title="join" color="cyan1">
- <implementation.python script="nuvem/join.py"/>
- <service name="join"/>
- <reference name="separator"/>
- <reference name="list"/>
- </component>
- <component x="210" y="90" name="lowercase" title="lower" color="cyan1">
- <implementation.python script="nuvem/lowercase.py"/>
- <service name="lowercase"/>
- <reference name="string"/>
- </component>
- <component x="150" y="90" name="parse" title="parse" color="cyan1">
- <implementation.python script="nuvem/parse.py"/>
- <service name="parse"/>
- <reference name="regexp"/>
- <reference name="string"/>
- </component>
- <component x="150" y="10" name="replace" title="replace" color="cyan1">
- <implementation.python script="nuvem/replace.py"/>
- <service name="replace"/>
- <reference name="from"/>
- <reference name="to"/>
- <reference name="string"/>
- </component>
- <component x="220" y="10" name="split" title="split" color="cyan1">
- <implementation.python script="nuvem/split.py"/>
- <service name="split"/>
- <reference name="separator"/>
- <reference name="string"/>
- </component>
- <component x="270" y="90" name="uppercase" title="upper" color="cyan1">
- <implementation.python script="nuvem/uppercase.py"/>
- <service name="uppercase"/>
- <reference name="string"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/transform/palette.composite b/sca-cpp/trunk/modules/edit/palettes/transform/palette.composite
deleted file mode 100644
index 566278c44b..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/transform/palette.composite
+++ /dev/null
@@ -1,59 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="filter" promote="filter"/>
- <service name="map" promote="map"/>
- <service name="reduce" promote="reduce"/>
- <service name="reverse" promote="reverse"/>
- <service name="shuffle" promote="shuffle"/>
- <component x="160" y="10" name="filter" title="filter" color="yellow1">
- <implementation.python script="nuvem/filter_.py"/>
- <service name="filter"/>
- <reference name="item"/>
- <reference name="condition"/>
- <reference name="list"/>
- </component>
- <component x="80" y="10" name="map" title="map" color="yellow1">
- <implementation.python script="nuvem/map_.py"/>
- <service name="map"/>
- <reference name="item"/>
- <reference name="transform"/>
- <reference name="list"/>
- </component>
- <component x="80" y="90" name="reduce" title="reduce" color="yellow1">
- <implementation.python script="nuvem/reduce_.py"/>
- <service name="reduce"/>
- <reference name="item"/>
- <reference name="accum"/>
- <reference name="transform"/>
- <reference name="init"/>
- <reference name="list"/>
- </component>
- <component x="220" y="10" name="reverse" title="reverse" color="yellow1">
- <implementation.python script="nuvem/reverse.py"/>
- <service name="reverse"/>
- <reference name="list"/>
- </component>
- <component x="160" y="90" name="shuffle" title="shuffle" color="yellow1">
- <implementation.python script="nuvem/shuffle_.py"/>
- <service name="shuffle"/>
- <reference name="list"/>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/palettes/values/palette.composite b/sca-cpp/trunk/modules/edit/palettes/values/palette.composite
deleted file mode 100644
index 4cd3a9d14e..0000000000
--- a/sca-cpp/trunk/modules/edit/palettes/values/palette.composite
+++ /dev/null
@@ -1,79 +0,0 @@
-<?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" name="palette" targetNamespace="http://palette">
- <service name="comment" promote="comment"/>
- <service name="false" promote="false"/>
- <service name="item" promote="item"/>
- <service name="name" promote="name"/>
- <service name="nothing" promote="nothing"/>
- <service name="now" promote="now"/>
- <service name="number" promote="number"/>
- <service name="text" promote="text"/>
- <service name="true" promote="true"/>
- <service name="valueof" promote="valueof"/>
- <component x="210" y="110" name="comment" title="{propval}" color="white">
- <implementation.python script="nuvem/comment.py"/>
- <service name="comment" visible="false"/>
- <property>comment</property>
- </component>
- <component x="260" y="10" name="false" title="false" color="orange1">
- <implementation.python script="nuvem/false_.py"/>
- <service name="false"/>
- </component>
- <component x="80" y="60" name="item" title="{propval}:" color="orange1">
- <implementation.python script="nuvem/item.py"/>
- <service name="item"/>
- <reference name="value"/>
- <property>name</property>
- </component>
- <component x="150" y="60" name="name" title="" color="orange1">
- <implementation.python script="nuvem/name.py"/>
- <service name="name"/>
- <property>name</property>
- </component>
- <component x="80" y="110" name="nothing" title="nothing" color="orange1">
- <implementation.python script="nuvem/nothing.py"/>
- <service name="nothing"/>
- </component>
- <component x="150" y="110" name="now" title="now" color="orange1">
- <implementation.python script="nuvem/now.py"/>
- <service name="now"/>
- <reference name="format"/>
- </component>
- <component x="140" y="10" name="number" title="#" color="orange1">
- <implementation.python script="nuvem/number.py"/>
- <service name="number"/>
- <property>123</property>
- </component>
- <component x="80" y="10" name="text" title=" '{propval}'" color="orange1">
- <implementation.python script="nuvem/text.py"/>
- <service name="text"/>
- <property>text</property>
- </component>
- <component x="200" y="10" name="true" title="true" color="orange1">
- <implementation.python script="nuvem/true_.py"/>
- <service name="true"/>
- </component>
- <component x="210" y="60" name="valueof" title="valueof" color="orange1">
- <implementation.python script="nuvem/valueof.py"/>
- <service name="valueof"/>
- <property>name</property>
- </component>
-</composite>
diff --git a/sca-cpp/trunk/modules/edit/ssl-start b/sca-cpp/trunk/modules/edit/ssl-start
deleted file mode 100755
index fdc5a8b8dc..0000000000
--- a/sca-cpp/trunk/modules/edit/ssl-start
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/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.
-
-# For this module to work, add the sca-store.com domain to your /etc/hosts as follows:
-# 127.0.0.1 sca-store.com
-
-here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
-jsprefix=`echo "import os; print os.path.realpath('$here/../js')" | python`
-
-# Create SSL certificates
-../../modules/http/ssl-ca-conf tmp sca-store.com
-../../modules/http/ssl-cert-conf tmp sca-store.com server
-
-# Configure and start logging
-if [ -x ../../components/log/scribe-cat ]; then
- ../../components/log/scribed-central-conf tmp
- ../../components/log/scribed-client-conf tmp localhost
- ../../components/log/scribed-central-start tmp
- ../../components/log/scribed-client-start tmp
-fi
-
-# Start memcached
-../../components/cache/memcached-start tmp 11211
-../../components/cache/memcached-start tmp 11212
-
-# Configure server
-../../modules/http/httpd-conf tmp sca-store.com 8090 htdocs
-../../modules/http/httpd-event-conf tmp
-../../modules/http/httpd-ssl-conf tmp 8453
-
-# Configure password authentication
-#../../modules/http/open-auth-conf tmp
-#../../modules/http/passwd-auth-conf tmp john john
-#../../modules/http/passwd-auth-conf tmp jane jane
-#../../modules/http/passwd-auth-conf tmp admin admin
-
-# Configure OAuth authentication
-# Configure your OAuth app keys here
-../../modules/oauth/oauth-conf tmp
-../../modules/oauth/oauth-memcached-conf tmp localhost 11212
-../../modules/oauth/oauth2-appkey-conf tmp facebook.com 12345 67890
-
-# Configure OpenID step2 authentication
-../../modules/openid/openid-conf tmp
-../../modules/openid/openid-step2-conf tmp
-../../modules/openid/openid-memcached-conf tmp localhost 11212
-
-# Configure authorized users
-#../../modules/http/group-auth-conf tmp john
-#../../modules/http/group-auth-conf tmp jane
-#../../modules/http/group-auth-conf tmp admin
-# Configure the email addresses associated with your OpenID and OAuth ids here
-../../modules/http/group-auth-conf tmp john@sca-store.com
-../../modules/http/group-auth-conf tmp jane@sca-store.com
-
-# Configure mod-security
-../../modules/http/mod-security-conf tmp
-
-# Configure Python component support
-../../modules/server/server-conf tmp
-../../modules/python/python-conf tmp
-
-# Configure server log streaming
-if [ -x ../../components/log/scribe-cat ]; then
- cat >tmp/conf/log.conf <<EOF
-# Generated by: ssl-start $*
-ErrorLog "|$here/../../components/log/scribe-cat server"
-CustomLog "|$here/../../components/log/scribe-cat server" combined
-
-EOF
-
- cat >tmp/conf/log-ssl.conf <<EOF
-# Generated by: ssl-start $*
-CustomLog "|$here/../../components/log/scribe-cat server" sslcombined
-
-EOF
-
- cat >tmp/conf/mod-security-log.conf <<EOF
-# Generated by: ssl-start $*
-SecAuditLog "|$here/../../components/log/scribe-cat secaudit"
-
-EOF
-
-fi
-
-# Configure certificate mime type
-cat >>tmp/conf/svhost-ssl.conf <<EOF
-# Generated by: ssl-start $*
-# Certificate mime type
-<Location /ca.crt>
-ForceType application/x-x509-ca-cert
-</Location>
-
-EOF
-
-# Configure error pages
-cat >>tmp/conf/svhost-ssl.conf <<EOF
-# Generated by: ssl-start $*
-# Error pages
-ErrorDocument 404 /public/notfound/
-ErrorDocument 401 /public/notauth/
-ErrorDocument 500 /public/oops/
-ErrorDocument 405 /public/oops/
-
-EOF
-
-# Configure SCA contributions
-cat >>tmp/conf/httpd.conf <<EOF
-# Generated by: ssl-start $*
-# Configure SCA Composite
-SCAContribution `pwd`/
-SCAComposite edit.composite
-
-# Configure SCA Composite for mass dynamic virtual Hosting
-SCAVirtualContribution `pwd`/apps/
-SCAVirtualComposite app.composite
-
-EOF
-
-# Configure resource aliases
-cat >>tmp/conf/httpd.conf <<EOF
-# Generated by: ssl-start $*
-Alias /home/home.png $here/htdocs/home/home.png
-Alias /home/home.b64 $here/htdocs/home/home.b64
-
-EOF
-
-# Create app resource links
-./mkapplinks . ../../../.. ../../../../../nuvem
-
-# Configure app resource aliases
-cat >>tmp/conf/svhost-ssl.conf <<EOF
-# Generated by: ssl-start $*
-<Location /v>
-RewriteEngine on
-
-# Map /v/<app-name>/<path> to htdocs/app/<path>
-RewriteCond %{REQUEST_URI} ^/v/.+/.*$
-RewriteRule /v/(.+)/(.*)$ $here/htdocs/app/\$2 [L]
-
-# Redirect /v/<app-name> to /<app-name>/
-RewriteCond %{REQUEST_URI} ^/v/[^/]+$
-RewriteRule /v/([^/]+)$ /\$1/ [L,R]
-
-</Location>
-
-EOF
-
-# Create application database directories
-mkdir -p tmp/appdata/filedb
-
-# Start server
-../../modules/http/httpd-start tmp
-
diff --git a/sca-cpp/trunk/modules/edit/start b/sca-cpp/trunk/modules/edit/start
deleted file mode 100755
index a6c417bbb1..0000000000
--- a/sca-cpp/trunk/modules/edit/start
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/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.
-
-# For this module to work, add the sca-store.com domain to your /etc/hosts as follows:
-# 127.0.0.1 sca-store.com
-
-here=`echo "import os; print os.path.realpath('$0')" | python`; here=`dirname $here`
-jsprefix=`echo "import os; print os.path.realpath('$here/../js')" | python`
-
-# Configure and start logging
-if [ -x ../../components/log/scribe-cat ]; then
- ../../components/log/scribed-central-conf tmp
- ../../components/log/scribed-client-conf tmp localhost
- ../../components/log/scribed-central-start tmp
- ../../components/log/scribed-client-start tmp
-fi
-
-# Start memcached
-../../components/cache/memcached-start tmp 11211
-../../components/cache/memcached-start tmp 11212
-
-# Configure server
-../../modules/http/httpd-conf tmp sca-store.com 8090 htdocs
-../../modules/http/httpd-event-conf tmp
-
-# Configure Python component support
-../server/server-conf tmp
-../python/python-conf tmp
-
-# Configure server log streaming
-if [ -x ../../components/log/scribe-cat ]; then
- cat >tmp/conf/log.conf <<EOF
-# Generated by: start $*
-ErrorLog "|$here/../../components/log/scribe-cat server"
-CustomLog "|$here/../../components/log/scribe-cat server" combined
-
-EOF
-
- cat >tmp/conf/log-ssl.conf <<EOF
-# Generated by: start $*
-CustomLog "|$here/../../components/log/scribe-cat server" sslcombined
-
-EOF
-
-fi
-
-# Configure error pages
-cat >>tmp/conf/svhost.conf <<EOF
-# Generated by: start $*
-# Error pages
-ErrorDocument 404 /public/notfound/
-ErrorDocument 401 /public/notauth/
-ErrorDocument 500 /public/oops/
-ErrorDocument 405 /public/oops/
-
-EOF
-
-# Configure SCA contributions
-cat >>tmp/conf/httpd.conf <<EOF
-# Generated by: start $*
-# Configure SCA Composite
-SCAContribution `pwd`/
-SCAComposite edit.composite
-
-# Configure SCA Composite for mass dynamic virtual Hosting
-SCAVirtualContribution `pwd`/apps/
-SCAVirtualComposite app.composite
-
-EOF
-
-# Configure resource aliases
-cat >>tmp/conf/httpd.conf <<EOF
-# Generated by: start $*
-Alias /home/home.png $here/htdocs/home/home.png
-Alias /home/home.b64 $here/htdocs/home/home.b64
-
-EOF
-
-# Create app resource links
-./mkapplinks . ../../../.. ../../../../../nuvem
-
-# Configure app resource aliases
-cat >>tmp/conf/svhost.conf <<EOF
-# Generated by: start $*
-<Location /v>
-RewriteEngine on
-
-# Map /v/<app-name>/<path> to htdocs/app/<path>
-RewriteCond %{REQUEST_URI} ^/v/.+/.*$
-RewriteRule /v/(.+)/(.*)$ $here/htdocs/app/\$2 [L]
-
-# Redirect /v/<app-name> to /<app-name>/
-RewriteCond %{REQUEST_URI} ^/v/[^/]+$
-RewriteRule /v/([^/]+)$ /\$1/ [L,R]
-
-</Location>
-
-EOF
-
-# Create application database directories
-mkdir -p tmp/appdata/filedb
-
-# Start server
-../../modules/http/httpd-start tmp
-
diff --git a/sca-cpp/trunk/modules/edit/stop b/sca-cpp/trunk/modules/edit/stop
deleted file mode 100755
index e1fd92705c..0000000000
--- a/sca-cpp/trunk/modules/edit/stop
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/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.
-
-../../modules/http/httpd-stop tmp
-
-../../components/cache/memcached-stop tmp 11211
-../../components/cache/memcached-stop tmp 11212
-
-if [ -x ../../components/log/scribe-cat ]; then
- ../../components/log/scribed-client-stop tmp
- ../../components/log/scribed-central-stop tmp
-fi
-
diff --git a/sca-cpp/trunk/modules/edit/store.py b/sca-cpp/trunk/modules/edit/store.py
deleted file mode 100644
index 79750975a5..0000000000
--- a/sca-cpp/trunk/modules/edit/store.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# 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.
-
-# stores collection implementation
-from util import *
-
-# Convert a particular store tag to a store id
-def storeid(tag):
- return ("'" + tag, "'store.apps")
-
-# Get a store from the cache
-def getstore(id, cache):
- store = cache.get(id)
- if isNil(store) or store is None:
- return ()
- return store
-
-# Put an app into a store
-def put(key, app, cache):
- def putapp(app, store):
- if isNil(store):
- return app
- if cadr(caddr(car(app))) == cadr(caddr(car(store))):
- return cons(car(app), cdr(store))
- return cons(car(store), putapp(app, cdr(store)))
-
- tag = car(key)
- store = putapp(app, getstore(storeid(tag), cache))
- cache.put(storeid(tag), store)
- return True
-
-# Get apps from a store
-def get(key, cache):
- tag = car(key)
- id = cdr(key)
-
- def findapp(id, store):
- if isNil(store):
- return None
- if car(id) == cadr(caddr(car(store))):
- return (car(store),)
- return findapp(id, cdr(store))
-
- if isNil(id):
- return ((("'feed", ("'title", "App Store"), ("'id", tag)) + getstore(storeid(tag), cache)),)
- return findapp(id, getstore(storeid(tag), cache))
-
-# Delete apps from a store
-def delete(key, cache):
- tag = car(key)
- id = cdr(key)
-
- if isNil(id):
- return cache.delete(storeid(tag))
-
- def deleteapp(id, store):
- if isNil(store):
- return ()
- if car(id) == cadr(caddr(car(store))):
- return cdr(store)
- return cons(car(store), deleteapp(id, cdr(store)))
-
- store = deleteapp(id, getstore(storeid(tag), cache))
- cache.put(storeid(tag), store)
- return True
-
diff --git a/sca-cpp/trunk/modules/edit/store/all/store.apps b/sca-cpp/trunk/modules/edit/store/all/store.apps
deleted file mode 100644
index caf7142403..0000000000
--- a/sca-cpp/trunk/modules/edit/store/all/store.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")) (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 components") (id "testhttp")) (entry (title "Test SMS API") (id "testsms")) (entry (title "Test widgets") (id "testwidgets")) (entry (title "Test more widgets") (id "testwidgets2")) (entry (title "Test event components") (id "testevents")) (entry (title "Test search components") (id "testsearch")) (entry (title "Test database components") (id "testdb")) (entry (title "Test HTML generator components") (id "testwidgets3")) (entry (title "Test animation components") (id "testanimation")))
diff --git a/sca-cpp/trunk/modules/edit/store/featured/store.apps b/sca-cpp/trunk/modules/edit/store/featured/store.apps
deleted file mode 100644
index 18bd47e8dd..0000000000
--- a/sca-cpp/trunk/modules/edit/store/featured/store.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
diff --git a/sca-cpp/trunk/modules/edit/store/new/store.apps b/sca-cpp/trunk/modules/edit/store/new/store.apps
deleted file mode 100644
index 18bd47e8dd..0000000000
--- a/sca-cpp/trunk/modules/edit/store/new/store.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
diff --git a/sca-cpp/trunk/modules/edit/store/top/store.apps b/sca-cpp/trunk/modules/edit/store/top/store.apps
deleted file mode 100644
index 18bd47e8dd..0000000000
--- a/sca-cpp/trunk/modules/edit/store/top/store.apps
+++ /dev/null
@@ -1 +0,0 @@
-((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
diff --git a/sca-cpp/trunk/modules/edit/user.py b/sca-cpp/trunk/modules/edit/user.py
deleted file mode 100644
index 227722ac48..0000000000
--- a/sca-cpp/trunk/modules/edit/user.py
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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.
-
-# User info service component
-
-# Return the user id
-def id(user, email, nick, full, first, last, realm):
- if email.eval() != '?':
- return email.eval()
- if nick.eval() != '?':
- return nick.eval() + '@' + realm.eval()
- if user.eval() != '?':
- return user.eval() + '@' + realm.eval()
- return 'joe@localhost'
diff --git a/sca-cpp/trunk/modules/edit/util.py b/sca-cpp/trunk/modules/edit/util.py
deleted file mode 100644
index 24467fd2cb..0000000000
--- a/sca-cpp/trunk/modules/edit/util.py
+++ /dev/null
@@ -1,164 +0,0 @@
-# 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.
-
-# Simple utility functions
-from sys import maxint
-
-# Scheme-like lists
-def cons(a, b):
- return (a,) + b
-
-def car(l):
- return l[0]
-
-def first(l):
- return car(l)
-
-def cdr(l):
- return l[1:]
-
-def rest(l):
- return cdr(l)
-
-def cadr(l):
- return car(cdr(l))
-
-def cddr(l):
- return cdr(cdr(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
-
-def reverse(l):
- r = list(l)
- r.reverse()
- return tuple(r)
-
-def isNil(l):
- if isinstance(l, streampair):
- return l.isNil()
- return l == ()
-
-def isSymbol(v):
- return isinstance(v, basestring) and v[0:1] == "'"
-
-def isString(v):
- return isinstance(v, basestring) and v[0:1] != "'"
-
-def isList(v):
- if getattr(v, '__iter__', False) == False:
- return False
- if isinstance(v, basestring) or isinstance(v, dict):
- return False
- return True
-
-def isTaggedList(v, t):
- return isList(v) and not isNil(v) and car(v) == t
-
-
-# Scheme-like streams
-class streampair(object):
- def __init__(self, car, cdr):
- self.car = car
- self.cdr = cdr
-
- def __repr__(self):
- return repr(self[0:len(self)])
-
- def isNil(self):
- return self.cdr == ()
-
- def __len__(self):
- if self.cdr == ():
- return 0
- return 1 + len(self.cdr())
-
- def __getitem__(self, i):
- if i == 0:
- return self.car
- return self.cdr()[i - 1]
-
- def __getslice__(self, i, j):
- if isNil(self):
- return ()
- if i > 0:
- if j == maxint:
- return self.cdr()[i - 1: j]
- return self.cdr()[i - 1: j - 1]
- if j == maxint:
- return self
- if j == 0:
- return (self.car,)
- return (self.car,) + self.cdr()[: j - 1]
-
- def __eq__(self, other):
- sl = len(self)
- ol = len(other)
- if sl != ol:
- return False
- return self[0: sl] == other[0: ol]
-
- def __ne__(self, other):
- return not self.__eq__(other)
-
-def cons_stream(car, cdr):
- return streampair(car, cdr)
-
-
-# Scheme-like associations
-def assoc(k, l):
- if l == ():
- return None
-
- if k == car(car(l)):
- return car(l)
- return assoc(k, cdr(l))
-
-# Currying / partial function application
-def curry(f, *args):
- return lambda *a: f(*(args + a))
-
-# Convert a path represented as a list of values to a string
-def path(p):
- if isNil(p):
- return ""
- return "/" + car(p) + path(cdr(p))
-
-# Split a path into a list of segments
-def tokens(path):
- return tuple(filter(lambda s: len(s) != 0, path.split("/")))
-
-# Return true if s1 contains s2
-def contains(s1, s2):
- return s1.find(s2) != -1
-
-# Write a list of strings to a stream
-def writeStrings(l, os):
- if l == ():
- return os
- os.write(car(l))
- return writeStrings(cdr(l), os)
-
diff --git a/sca-cpp/trunk/modules/http/http-test b/sca-cpp/trunk/modules/http/http-test
index 7874a1037f..73cfe700a6 100755
--- a/sca-cpp/trunk/modules/http/http-test
+++ b/sca-cpp/trunk/modules/http/http-test
@@ -24,7 +24,7 @@
sleep 2
# Test
-./curl-test
+./curl-test 2>/dev/null
rc=$?
# Cleanup
diff --git a/sca-cpp/trunk/modules/http/httpd.hpp b/sca-cpp/trunk/modules/http/httpd.hpp
index f4e3767881..7c839c1306 100644
--- a/sca-cpp/trunk/modules/http/httpd.hpp
+++ b/sca-cpp/trunk/modules/http/httpd.hpp
@@ -205,7 +205,7 @@ const string serverName(request_rec* r, const string& def = "localhost") {
/**
* Return true if a request is targeting a virtual host.
*/
-const bool isVirtualHostRequest(const server_rec* s, const string& d, request_rec* r) {
+const bool isVhostRequest(const server_rec* s, const string& d, request_rec* r) {
const string rh = hostName(r);
return rh != hostName(s) && http::topDomain(rh) == d;
}
diff --git a/sca-cpp/trunk/modules/http/proxy-test b/sca-cpp/trunk/modules/http/proxy-test
index bf4e2bf460..9f3d248fdf 100755
--- a/sca-cpp/trunk/modules/http/proxy-test
+++ b/sca-cpp/trunk/modules/http/proxy-test
@@ -29,7 +29,7 @@
sleep 2
# Test
-./curl-test
+./curl-test 2>/dev/null
rc=$?
# Cleanup
diff --git a/sca-cpp/trunk/modules/server/Makefile.am b/sca-cpp/trunk/modules/server/Makefile.am
index edc0dfb251..e2fd67d9b8 100644
--- a/sca-cpp/trunk/modules/server/Makefile.am
+++ b/sca-cpp/trunk/modules/server/Makefile.am
@@ -25,19 +25,14 @@ moddir = $(prefix)/modules/server
EXTRA_DIST = domain-test.composite client-test.scm server-test.scm htdocs/*.html htdocs/test/*.xml htdocs/test/*.txt
-mod_LTLIBRARIES = libmod_tuscany_eval.la libmod_tuscany_wiring.la
-noinst_DATA = libmod_tuscany_eval${libsuffix} libmod_tuscany_wiring${libsuffix}
+mod_LTLIBRARIES = libmod_tuscany_eval.la
+noinst_DATA = libmod_tuscany_eval${libsuffix}
libmod_tuscany_eval_la_SOURCES = mod-eval.cpp
libmod_tuscany_eval_la_LDFLAGS = -lxml2 -lcurl -lmozjs
libmod_tuscany_eval${libsuffix}:
ln -s .libs/libmod_tuscany_eval${libsuffix}
-libmod_tuscany_wiring_la_SOURCES = mod-wiring.cpp
-libmod_tuscany_wiring_la_LDFLAGS = -lxml2 -lcurl -lmozjs
-libmod_tuscany_wiring${libsuffix}:
- ln -s .libs/libmod_tuscany_wiring${libsuffix}
-
noinst_test_LTLIBRARIES = libimpl-test.la
noinst_testdir = `pwd`/tmp
noinst_DATA += libimpl-test${libsuffix}
diff --git a/sca-cpp/trunk/modules/server/client-test.cpp b/sca-cpp/trunk/modules/server/client-test.cpp
index 5de7ab6e7b..3f5ff20c56 100644
--- a/sca-cpp/trunk/modules/server/client-test.cpp
+++ b/sca-cpp/trunk/modules/server/client-test.cpp
@@ -29,7 +29,7 @@
int main() {
tuscany::cout << "Testing..." << tuscany::endl;
- tuscany::server::testURI = "http://localhost:8090/test";
+ tuscany::server::testURI = "http://localhost:8090/scheme";
tuscany::server::testServer();
diff --git a/sca-cpp/trunk/modules/server/client-test.hpp b/sca-cpp/trunk/modules/server/client-test.hpp
index 50b246a073..2dab7b6dfd 100644
--- a/sca-cpp/trunk/modules/server/client-test.hpp
+++ b/sca-cpp/trunk/modules/server/client-test.hpp
@@ -36,7 +36,7 @@
namespace tuscany {
namespace server {
-string testURI = "http://localhost:8090/test";
+string testURI = "http://localhost:8090/scheme";
bool testBlobs = true;
ostream* curlWriter(const string& s, ostream* os) {
diff --git a/sca-cpp/trunk/modules/server/domain-test.composite b/sca-cpp/trunk/modules/server/domain-test.composite
index b003dd15cd..1819b3bf4c 100644
--- a/sca-cpp/trunk/modules/server/domain-test.composite
+++ b/sca-cpp/trunk/modules/server/domain-test.composite
@@ -23,8 +23,8 @@
<component name="scheme-test">
<implementation.scheme script="server-test.scm"/>
- <service name="test">
- <binding.http uri="test"/>
+ <service name="scheme">
+ <binding.http uri="scheme"/>
</service>
</component>
diff --git a/sca-cpp/trunk/modules/server/httpd-test b/sca-cpp/trunk/modules/server/httpd-test
index d541c145e9..63b268d7b3 100755
--- a/sca-cpp/trunk/modules/server/httpd-test
+++ b/sca-cpp/trunk/modules/server/httpd-test
@@ -41,31 +41,31 @@ rc=$?
# Test ATOMPub
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/ >tmp/feed.xml 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/ >tmp/feed.xml 2>/dev/null
diff tmp/feed.xml htdocs/test/feed.xml
rc=$?
fi
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/111 >tmp/entry.xml 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/111 >tmp/entry.xml 2>/dev/null
diff tmp/entry.xml htdocs/test/entry.xml
rc=$?
fi
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/ -X POST -H "Content-type: application/atom+xml" --data @htdocs/test/entry.xml 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/ -X POST -H "Content-type: application/atom+xml" --data @htdocs/test/entry.xml 2>/dev/null
rc=$?
fi
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/111 -X PUT -H "Content-type: application/atom+xml" --data @htdocs/test/entry.xml 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/111 -X PUT -H "Content-type: application/atom+xml" --data @htdocs/test/entry.xml 2>/dev/null
rc=$?
fi
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/111 -X DELETE 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/111 -X DELETE 2>/dev/null
rc=$?
fi
# Test JSON-RPC
if [ "$rc" = "0" ]; then
- $curl_prefix/bin/curl http://localhost:8090/test/ -X POST -H "Content-type: application/json-rpc" --data @htdocs/test/json-request.txt >tmp/json-result.txt 2>/dev/null
+ $curl_prefix/bin/curl http://localhost:8090/scheme/ -X POST -H "Content-type: application/json-rpc" --data @htdocs/test/json-request.txt >tmp/json-result.txt 2>/dev/null
diff tmp/json-result.txt htdocs/test/json-result.txt
rc=$?
fi
diff --git a/sca-cpp/trunk/modules/server/mod-eval.hpp b/sca-cpp/trunk/modules/server/mod-eval.hpp
index 62d91c6236..999a5793ad 100644
--- a/sca-cpp/trunk/modules/server/mod-eval.hpp
+++ b/sca-cpp/trunk/modules/server/mod-eval.hpp
@@ -52,50 +52,61 @@ namespace server {
namespace modeval {
/**
+ * Set to true to wire using mod_proxy, false to wire using HTTP client redirects.
+ */
+const bool useModProxy = true;
+
+/**
* Server configuration.
*/
class ServerConf {
public:
- ServerConf(apr_pool_t* p, server_rec* s) : p(p), server(s), contributionPath(""), compositeName(""), virtualHostDomain(""), virtualHostContributionPath(""), virtualHostCompositeName(""), ca(""), cert(""), key("") {
+ ServerConf(apr_pool_t* p, server_rec* s) : p(p), server(s) {
}
- ServerConf(apr_pool_t* p, const ServerConf& ssc, const string& name) : p(p), server(ssc.server), lifecycle(ssc.lifecycle), contributionPath(ssc.virtualHostContributionPath + name + "/"), compositeName(ssc.virtualHostCompositeName), virtualHostDomain(""), virtualHostContributionPath(""), virtualHostCompositeName(""), ca(ssc.ca), cert(ssc.cert), key(ssc.key) {
+ ServerConf(apr_pool_t* p, const ServerConf& ssc, const string& name) : p(p), server(ssc.server), lifecycle(ssc.lifecycle), vhostName(name), compositeName(ssc.vhostCompositeName), ca(ssc.ca), cert(ssc.cert), key(ssc.key), vhostContributor(ssc.vhostContributor) {
+ contributionPath = length(ssc.vhostContributionPath) != 0? ssc.vhostContributionPath + name + "/" : ssc.contributionPath;
}
const gc_pool p;
server_rec* server;
lambda<value(const list<value>&)> lifecycle;
+ string vhostName;
string contributionPath;
string compositeName;
- string virtualHostDomain;
- string virtualHostContributionPath;
- string virtualHostCompositeName;
+ string vhostDomain;
+ string vhostContributionPath;
+ string vhostCompositeName;
+ string vhostContributorName;
string ca;
string cert;
string key;
+ list<value> references;
+ list<value> services;
list<value> implementations;
list<value> implTree;
+ value vhostContributor;
};
/**
- * Return true if a server contains a composite configuration.
+ * Return true if a server contains a contribution configuration.
*/
-const bool hasCompositeConf(const ServerConf& sc) {
- return sc.contributionPath != "" && sc.compositeName != "";
+const bool hasContributionConf(const ServerConf& sc) {
+ return length(sc.contributionPath) != 0;
}
/**
* Return true if a server contains a virtual host domain configuration.
*/
-const bool hasVirtualDomainConf(const ServerConf& sc) {
- return sc.virtualHostDomain != "";
+const bool hasVhostDomainConf(const ServerConf& sc) {
+ return length(sc.vhostDomain) != 0;
}
/**
- * Return true if a server contains a virtual host composite configuration.
+ * Return true if a server contains a virtual host contribution configuration.
*/
-const bool hasVirtualCompositeConf(const ServerConf& sc) {
- return sc.virtualHostContributionPath != "" && sc.virtualHostCompositeName != "";
+const bool hasVhostContributionConf(const ServerConf& sc) {
+ return length(sc.vhostContributionPath) != 0 || length(sc.vhostContributorName) != 0;
}
/**
@@ -129,262 +140,6 @@ public:
};
/**
- * Handle an HTTP GET.
- */
-const failable<int> get(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
- debug(r->uri, "modeval::get::uri");
-
- // Inspect the query string
- const list<list<value> > args = httpd::queryArgs(r);
- const list<value> ia = assoc(value("id"), args);
- const list<value> ma = assoc(value("method"), args);
-
- // Evaluate a JSON-RPC request and return a JSON result
- if (!isNil(ia) && !isNil(ma)) {
-
- // Extract the request id, method and params
- const value id = cadr(ia);
- const value func = c_str(json::funcName(string(cadr(ma))));
-
- // Apply the requested function
- const failable<value> val = failableResult(impl(cons(func, json::queryParams(args))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
-
- // Return JSON result
- js::JSContext cx;
- return httpd::writeResult(json::jsonResult(id, content(val), cx), "application/json-rpc; charset=utf-8", r);
- }
-
- // Evaluate the GET expression
- const list<value> params(append<value>(cddr(rpath), mkvalues(args)));
- const failable<value> val = failableResult(impl(cons<value>("get", mklist<value>(params))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
- const value c = content(val);
- debug(c, "modeval::get::content");
-
- // Check if the client requested a specific format
- const list<value> fmt = assoc<value>("format", args);
-
- // Write as a scheme value if requested by the client
- if (!isNil(fmt) && cadr(fmt) == "scheme")
- return httpd::writeResult(mklist<string>(scheme::writeValue(c)), "text/plain; charset=utf-8", r);
-
- // Write a simple value as a JSON value
- if (!isList(c)) {
- js::JSContext cx;
- if (isSymbol(c)) {
- const list<value> lc = mklist<value>(mklist<value>("name", value(string(c))));
- debug(lc, "modeval::get::symbol");
- return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
- }
- const list<value> lc = mklist<value>(mklist<value>("value", c));
- debug(lc, "modeval::get::value");
- return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
- }
-
- // Write an empty list as a JSON empty value
- if (isNil((list<value>)c)) {
- js::JSContext cx;
- debug(list<value>(), "modeval::get::empty");
- return httpd::writeResult(json::writeJSON(list<value>(), cx), "application/json; charset=utf-8", r);
- }
-
- // Write content-type / content-list pair
- if (isString(car<value>(c)) && !isNil(cdr<value>(c)) && isList(cadr<value>(c)))
- return httpd::writeResult(convertValues<string>(cadr<value>(c)), car<value>(c), r);
-
- // Write an assoc value as a JSON result
- if (isSymbol(car<value>(c)) && !isNil(cdr<value>(c))) {
- js::JSContext cx;
- const list<value> lc = mklist<value>(c);
- debug(lc, "modeval::get::assoc");
- debug(valuesToElements(lc), "modeval::get::assoc::element");
- return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
- }
-
- // Write value as JSON if requested by the client
- if (!isNil(fmt) && cadr(fmt) == "json") {
- js::JSContext cx;
- return httpd::writeResult(json::writeJSON(valuesToElements(c), cx), "application/json; charset=utf-8", r);
- }
-
- // Convert list of values to element values
- const list<value> e = valuesToElements(c);
- debug(e, "modeval::get::elements");
-
- // Write an ATOM feed or entry
- if (isList(car<value>(e)) && !isNil(car<value>(e))) {
- const list<value> el = car<value>(e);
- if (isSymbol(car<value>(el)) && car<value>(el) == element && !isNil(cdr<value>(el)) && isSymbol(cadr<value>(el)) && elementHasChildren(el) && !elementHasValue(el)) {
- if (cadr<value>(el) == atom::feed)
- return httpd::writeResult(atom::writeATOMFeed(e), "application/atom+xml; charset=utf-8", r);
- if (cadr<value>(el) == atom::entry)
- return httpd::writeResult(atom::writeATOMEntry(e), "application/atom+xml; charset=utf-8", r);
- }
- }
-
- // Write any other compound value as a JSON value
- js::JSContext cx;
- return httpd::writeResult(json::writeJSON(e, cx), "application/json; charset=utf-8", r);
-}
-
-/**
- * Handle an HTTP POST.
- */
-const failable<int> post(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
- debug(r->uri, "modeval::post::url");
-
- // Evaluate a JSON-RPC request and return a JSON result
- const string ct = httpd::contentType(r);
- if (contains(ct, "application/json-rpc") || contains(ct, "text/plain") || contains(ct, "application/x-www-form-urlencoded")) {
-
- // Read the JSON request
- const int rc = httpd::setupReadPolicy(r);
- if(rc != OK)
- return rc;
- const list<string> ls = httpd::read(r);
- debug(ls, "modeval::post::input");
- js::JSContext cx;
- const list<value> json = elementsToValues(content(json::readJSON(ls, cx)));
- const list<list<value> > args = httpd::postArgs(json);
-
- // Extract the request id, method and params
- const value id = cadr(assoc(value("id"), args));
- const value func = c_str(json::funcName(cadr(assoc(value("method"), args))));
- const list<value> params = (list<value>)cadr(assoc(value("params"), args));
-
- // Evaluate the request expression
- const failable<value> val = failableResult(impl(cons<value>(func, params)));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
-
- // Return JSON result
- return httpd::writeResult(json::jsonResult(id, content(val), cx), "application/json-rpc; charset=utf-8", r);
- }
-
- // Evaluate an ATOM POST request and return the location of the corresponding created resource
- if (contains(ct, "application/atom+xml")) {
-
- // Read the ATOM entry
- const int rc = httpd::setupReadPolicy(r);
- if(rc != OK)
- return rc;
- const list<string> ls = httpd::read(r);
- debug(ls, "modeval::post::input");
- const value entry = elementsToValues(content(atom::readATOMEntry(ls)));
-
- // Evaluate the POST expression
- const failable<value> val = failableResult(impl(cons<value>("post", mklist<value>(cddr(rpath), entry))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
-
- // Return the created resource location
- debug(content(val), "modeval::post::location");
- apr_table_setn(r->headers_out, "Location", apr_pstrdup(r->pool, c_str(httpd::url(r->uri, content(val), r))));
- r->status = HTTP_CREATED;
- return OK;
- }
-
- // Unknown content type, wrap the HTTP request struct in a value and pass it to
- // the component implementation function
- const failable<value> val = failableResult(impl(cons<value>("handle", mklist<value>(httpd::requestValue(r)))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
- return (int)content(val);
-}
-
-/**
- * Handle an HTTP PUT.
- */
-const failable<int> put(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
- debug(r->uri, "modeval::put::url");
-
- // Read the ATOM entry
- const int rc = httpd::setupReadPolicy(r);
- if(rc != OK)
- return rc;
- const list<string> ls = httpd::read(r);
- debug(ls, "modeval::put::input");
- const value entry = elementsToValues(content(atom::readATOMEntry(ls)));
-
- // Evaluate the PUT expression and update the corresponding resource
- const failable<value> val = failableResult(impl(cons<value>("put", mklist<value>(cddr(rpath), entry))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
- if (val == value(false))
- return HTTP_NOT_FOUND;
- return OK;
-}
-
-/**
- * Handle an HTTP DELETE.
- */
-const failable<int> del(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
- debug(r->uri, "modeval::delete::url");
-
- // Evaluate an ATOM delete request
- const failable<value> val = failableResult(impl(cons<value>("delete", mklist<value>(cddr(rpath)))));
- if (!hasContent(val))
- return mkfailure<int>(reason(val));
- if (val == value(false))
- return HTTP_NOT_FOUND;
- return OK;
-}
-
-/**
- * Translate a component request.
- */
-const int translateRequest(const ServerConf& sc, const list<value>& rpath, request_rec *r) {
- debug(rpath, "modeval::translateRequest::path");
- if (isNil(rpath))
- return DECLINED;
-
- // Translate a component request
- const value c = car(rpath);
- if (c == string("components") || c == string("c")) {
- r->handler = "mod_tuscany_eval";
- return OK;
- }
-
- // Translate a request targeting a virtual host or virtual app
- if (hasVirtualCompositeConf(sc) && !isNil(cdr(rpath))) {
- const string cp = sc.virtualHostContributionPath + string(c) + "/" + sc.virtualHostCompositeName;
- struct stat st;
- const int s = stat(c_str(cp), &st);
- if (s != -1) {
- const value d = cadr(rpath);
- if (d == string("components") || d == string("c")) {
- r->handler = "mod_tuscany_eval";
- return OK;
- }
- }
- }
-
- return DECLINED;
-}
-
-/**
- * Translate a component request.
- */
-int translate(request_rec *r) {
- if(r->method_number != M_GET && r->method_number != M_POST && r->method_number != M_PUT && r->method_number != M_DELETE)
- return DECLINED;
-
- // Create a scoped memory pool
- gc_scoped_pool pool(r->pool);
-
- httpdDebugRequest(r, "modeval::translate::input");
-
- // Get the server configuration
- const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_eval);
-
- // Translate the request
- return translateRequest(sc, pathValues(r->uri), r);
-}
-
-/**
* Make an HTTP proxy lambda to a component reference.
*/
const value mkhttpProxy(const ServerConf& sc, const string& ref, const string& base) {
@@ -573,7 +328,7 @@ struct appPropProxy {
appPropProxy(const value& v) : v(v) {
}
const value operator()(unused const list<value>& params) const {
- const char* n = apr_table_get(currentRequest->headers_in, "X-Request-AppName");
+ const char* n = apr_table_get(currentRequest->notes, "X-Request-AppName");
const value a = n != NULL? value(string(n)) : v;
debug(a, "modeval::appPropProxy::value");
return a;
@@ -584,7 +339,7 @@ struct pathPropProxy {
pathPropProxy(unused const value& v) {
}
const value operator()(unused const list<value>& params) const {
- const char* u = apr_table_get(currentRequest->headers_in, "X-Request-URI");
+ const char* u = apr_table_get(currentRequest->notes, "X-Request-URI");
const value v = u != NULL? pathValues(string(u)) : list<value>();
debug(v, "modeval::pathPropProxy::value");
return v;
@@ -743,21 +498,79 @@ const failable<list<value> > applyLifecycleExpr(const list<value>& impls, const
}
/**
+ * Return a list of component-name + references pairs. The references are
+ * arranged in trees of reference-name + reference-target pairs.
+ */
+const list<value> componentReferenceToTargetTree(const value& c) {
+ return mklist<value>(scdl::name(c), mkbtree(sort(scdl::referenceToTargetAssoc(scdl::references(c)))));
+}
+
+const list<value> componentReferenceToTargetAssoc(const list<value>& c) {
+ if (isNil(c))
+ return c;
+ return cons<value>(componentReferenceToTargetTree(car(c)), componentReferenceToTargetAssoc(cdr(c)));
+}
+
+/**
+ * Return a list of service-URI-path + component-name pairs. Service-URI-paths are
+ * represented as lists of URI path fragments.
+ */
+const list<value> defaultBindingURI(const string& cn, const string& sn) {
+ return mklist<value>(cn, sn);
+}
+
+const list<value> bindingToComponentAssoc(const string& cn, const string& sn, const list<value>& b) {
+ if (isNil(b))
+ return b;
+ const value uri(scdl::uri(car(b)));
+ if (isNil(uri))
+ return cons<value>(mklist<value>(defaultBindingURI(cn, sn), cn), bindingToComponentAssoc(cn, sn, cdr(b)));
+ return cons<value>(mklist<value>(pathValues(c_str(string(uri))), cn), bindingToComponentAssoc(cn, sn, cdr(b)));
+}
+
+const list<value> serviceToComponentAssoc(const string& cn, const list<value>& s) {
+ if (isNil(s))
+ return s;
+ const string sn(scdl::name(car(s)));
+ const list<value> btoc(bindingToComponentAssoc(cn, sn, scdl::bindings(car(s))));
+ if (isNil(btoc))
+ return cons<value>(mklist<value>(defaultBindingURI(cn, sn), cn), serviceToComponentAssoc(cn, cdr(s)));
+ return append<value>(btoc, serviceToComponentAssoc(cn, cdr(s)));
+}
+
+const list<value> uriToComponentAssoc(const list<value>& c) {
+ if (isNil(c))
+ return c;
+ return append<value>(serviceToComponentAssoc(scdl::name(car(c)), scdl::services(car(c))), uriToComponentAssoc(cdr(c)));
+}
+
+/**
* Configure the components declared in the deployed composite.
*/
const failable<bool> confComponents(ServerConf& sc) {
- if (!hasCompositeConf(sc))
+ if (!hasContributionConf(sc))
return false;
debug(sc.contributionPath, "modeval::confComponents::contributionPath");
+ debug(sc.contributionPath, "modeval::confComponents::contributorName");
debug(sc.compositeName, "modeval::confComponents::compositeName");
if (sc.ca != "") debug(sc.ca, "modeval::confComponents::sslCA");
if (sc.cert != "") debug(sc.cert, "modeval::confComponents::sslCert");
if (sc.key != "") debug(sc.key, "modeval::confComponents::sslKey");
- // Read the components and get their implementation lambda functions
+ // Read the components and get their services, references and implementation
+ // lambda functions
const failable<list<value> > comps = readComponents(scdl::resourcePath(sc.contributionPath, sc.compositeName));
if (!hasContent(comps))
return mkfailure<bool>(reason(comps));
+
+ const list<value> refs = componentReferenceToTargetAssoc(content(comps));
+ debug(refs, "modeval::confComponents::references");
+ sc.references = mkbtree(sort(refs));
+
+ const list<value> svcs = uriToComponentAssoc(content(comps));
+ debug(svcs, "modeval::confComponents::services");
+ sc.services = mkbtree(sort(svcs));
+
sc.implementations = componentToImplementationAssoc(sc, content(comps));
debug(sc.implementations, "modeval::confComponents::implementations");
return true;
@@ -781,21 +594,36 @@ const failable<bool> startComponents(ServerConf& sc) {
/**
* Configure and start the components deployed in a virtual host.
*/
-const failable<bool> virtualHostConfig(ServerConf& sc, const ServerConf& ssc, request_rec* r) {
- debug(httpd::serverName(ssc.server), "modeval::virtualHostConfig::serverName");
- debug(httpd::serverName(r), "modeval::virtualHostConfig::virtualHostName");
- debug(ssc.virtualHostContributionPath, "modwiring::virtualHostConfig::virtualHostContributionPath");
- debug(sc.contributionPath, "modeval::virtualHostConfig::contributionPath");
-
- // Chdir to the virtual host's contribution
- if (chdir(c_str(sc.contributionPath)) != 0)
- return mkfailure<bool>(string("Couldn't chdir to the deployed contribution: ") + sc.contributionPath);
+const failable<bool> vhostConfig(ServerConf& sc, const ServerConf& ssc, request_rec* r) {
+ debug(httpd::serverName(ssc.server), "modeval::vhostConfig::serverName");
+ debug(httpd::serverName(r), "modeval::vhostConfig::vhostName");
+ debug(ssc.vhostContributionPath, "modeval::vhostConfig::vhostContributionPath");
+ debug(sc.contributionPath, "modeval::vhostConfig::contributionPath");
// Configure the deployed components
const failable<bool> cr = confComponents(sc);
if (!hasContent(cr))
return cr;
+ // Store the virtual host configuration in the request config
+
+ return true;
+}
+
+/**
+ * Start the components deployed in a virtual host.
+ */
+const failable<bool> vhostStart(ServerConf& sc, const ServerConf& ssc, request_rec* r) {
+ debug(httpd::serverName(ssc.server), "modeval::vhostStart::serverName");
+ debug(httpd::serverName(r), "modeval::vhostStart::vhostName");
+ debug(ssc.vhostContributionPath, "modeval::vhostStart::vhostContributionPath");
+ debug(sc.contributionPath, "modeval::vhostStart::contributionPath");
+
+ // Configure the components deployed in a virtual host
+ const failable<bool> cr = vhostConfig(sc, ssc, r);
+ if (!hasContent(cr))
+ return cr;
+
// Start the configured components
const failable<bool> sr = startComponents(sc);
if (!hasContent(sr))
@@ -808,23 +636,441 @@ const failable<bool> virtualHostConfig(ServerConf& sc, const ServerConf& ssc, re
}
/**
- * Cleanup a virtual host.
+ * Stop a virtual host.
*/
-const failable<bool> virtualHostCleanup(const ServerConf& sc, const ServerConf& ssc) {
- if (!hasCompositeConf(sc))
+const failable<bool> vhostStop(const ServerConf& sc, unused const ServerConf& ssc) {
+ if (!hasContributionConf(sc))
return true;
- debug("modeval::virtualHostCleanup");
+ debug("modeval::vhostStop");
// Stop the component implementations
applyLifecycleExpr(sc.implementations, mklist<value>("stop"));
- // Chdir back to the main server's contribution
- if (chdir(c_str(ssc.contributionPath)) != 0)
- return mkfailure<bool>(string("Couldn't chdir to the deployed contribution: ") + ssc.contributionPath);
return true;
}
/**
+ * Handle an HTTP GET.
+ */
+const failable<int> get(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
+ debug(r->uri, "modeval::get::uri");
+
+ // Inspect the query string
+ const list<list<value> > args = httpd::queryArgs(r);
+ const list<value> ia = assoc(value("id"), args);
+ const list<value> ma = assoc(value("method"), args);
+
+ // Evaluate a JSON-RPC request and return a JSON result
+ if (!isNil(ia) && !isNil(ma)) {
+
+ // Extract the request id, method and params
+ const value id = cadr(ia);
+ const value func = c_str(json::funcName(string(cadr(ma))));
+
+ // Apply the requested function
+ const failable<value> val = failableResult(impl(cons(func, json::queryParams(args))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+
+ // Return JSON result
+ js::JSContext cx;
+ return httpd::writeResult(json::jsonResult(id, content(val), cx), "application/json-rpc; charset=utf-8", r);
+ }
+
+ // Evaluate the GET expression
+ const list<value> params(append<value>(cddr(rpath), mkvalues(args)));
+ const failable<value> val = failableResult(impl(cons<value>("get", mklist<value>(params))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+ const value c = content(val);
+ debug(c, "modeval::get::content");
+
+ // Check if the client requested a specific format
+ const list<value> fmt = assoc<value>("format", args);
+
+ // Write as a scheme value if requested by the client
+ if (!isNil(fmt) && cadr(fmt) == "scheme")
+ return httpd::writeResult(mklist<string>(scheme::writeValue(c)), "text/plain; charset=utf-8", r);
+
+ // Write a simple value as a JSON value
+ if (!isList(c)) {
+ js::JSContext cx;
+ if (isSymbol(c)) {
+ const list<value> lc = mklist<value>(mklist<value>("name", value(string(c))));
+ debug(lc, "modeval::get::symbol");
+ return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
+ }
+ const list<value> lc = mklist<value>(mklist<value>("value", c));
+ debug(lc, "modeval::get::value");
+ return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
+ }
+
+ // Write an empty list as a JSON empty value
+ if (isNil((list<value>)c)) {
+ js::JSContext cx;
+ debug(list<value>(), "modeval::get::empty");
+ return httpd::writeResult(json::writeJSON(list<value>(), cx), "application/json; charset=utf-8", r);
+ }
+
+ // Write content-type / content-list pair
+ if (isString(car<value>(c)) && !isNil(cdr<value>(c)) && isList(cadr<value>(c)))
+ return httpd::writeResult(convertValues<string>(cadr<value>(c)), car<value>(c), r);
+
+ // Write an assoc value as a JSON result
+ if (isSymbol(car<value>(c)) && !isNil(cdr<value>(c))) {
+ js::JSContext cx;
+ const list<value> lc = mklist<value>(c);
+ debug(lc, "modeval::get::assoc");
+ debug(valuesToElements(lc), "modeval::get::assoc::element");
+ return httpd::writeResult(json::writeJSON(valuesToElements(lc), cx), "application/json; charset=utf-8", r);
+ }
+
+ // Write value as JSON if requested by the client
+ if (!isNil(fmt) && cadr(fmt) == "json") {
+ js::JSContext cx;
+ return httpd::writeResult(json::writeJSON(valuesToElements(c), cx), "application/json; charset=utf-8", r);
+ }
+
+ // Convert list of values to element values
+ const list<value> e = valuesToElements(c);
+ debug(e, "modeval::get::elements");
+
+ // Write an ATOM feed or entry
+ if (isList(car<value>(e)) && !isNil(car<value>(e))) {
+ const list<value> el = car<value>(e);
+ if (isSymbol(car<value>(el)) && car<value>(el) == element && !isNil(cdr<value>(el)) && isSymbol(cadr<value>(el)) && elementHasChildren(el) && !elementHasValue(el)) {
+ if (cadr<value>(el) == atom::feed)
+ return httpd::writeResult(atom::writeATOMFeed(e), "application/atom+xml; charset=utf-8", r);
+ if (cadr<value>(el) == atom::entry)
+ return httpd::writeResult(atom::writeATOMEntry(e), "application/atom+xml; charset=utf-8", r);
+ }
+ }
+
+ // Write any other compound value as a JSON value
+ js::JSContext cx;
+ return httpd::writeResult(json::writeJSON(e, cx), "application/json; charset=utf-8", r);
+}
+
+/**
+ * Handle an HTTP POST.
+ */
+const failable<int> post(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
+ debug(r->uri, "modeval::post::uri");
+
+ // Evaluate a JSON-RPC request and return a JSON result
+ const string ct = httpd::contentType(r);
+ if (contains(ct, "application/json-rpc") || contains(ct, "text/plain") || contains(ct, "application/x-www-form-urlencoded")) {
+
+ // Read the JSON request
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::post::input");
+ js::JSContext cx;
+ const list<value> json = elementsToValues(content(json::readJSON(ls, cx)));
+ const list<list<value> > args = httpd::postArgs(json);
+
+ // Extract the request id, method and params
+ const value id = cadr(assoc(value("id"), args));
+ const value func = c_str(json::funcName(cadr(assoc(value("method"), args))));
+ const list<value> params = (list<value>)cadr(assoc(value("params"), args));
+
+ // Evaluate the request expression
+ const failable<value> val = failableResult(impl(cons<value>(func, params)));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+
+ // Return JSON result
+ return httpd::writeResult(json::jsonResult(id, content(val), cx), "application/json-rpc; charset=utf-8", r);
+ }
+
+ // Evaluate an ATOM POST request and return the location of the corresponding created resource
+ if (contains(ct, "application/atom+xml")) {
+
+ // Read the ATOM entry
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::post::input");
+ const value entry = elementsToValues(content(atom::readATOMEntry(ls)));
+
+ // Evaluate the POST expression
+ const failable<value> val = failableResult(impl(cons<value>("post", mklist<value>(cddr(rpath), entry))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+
+ // Return the created resource location
+ debug(content(val), "modeval::post::location");
+ apr_table_setn(r->headers_out, "Location", apr_pstrdup(r->pool, c_str(httpd::url(r->uri, content(val), r))));
+ r->status = HTTP_CREATED;
+ return OK;
+ }
+
+ // Unknown content type, wrap the HTTP request struct in a value and pass it to
+ // the component implementation function
+ const failable<value> val = failableResult(impl(cons<value>("handle", mklist<value>(httpd::requestValue(r)))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+ return (int)content(val);
+}
+
+/**
+ * Handle an HTTP PUT.
+ */
+const failable<int> put(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
+ debug(r->uri, "modeval::put::uri");
+
+ // Read the ATOM entry
+ const int rc = httpd::setupReadPolicy(r);
+ if(rc != OK)
+ return rc;
+ const list<string> ls = httpd::read(r);
+ debug(ls, "modeval::put::input");
+ const value entry = elementsToValues(content(atom::readATOMEntry(ls)));
+
+ // Evaluate the PUT expression and update the corresponding resource
+ const failable<value> val = failableResult(impl(cons<value>("put", mklist<value>(cddr(rpath), entry))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+ if (val == value(false))
+ return HTTP_NOT_FOUND;
+ return OK;
+}
+
+/**
+ * Handle an HTTP DELETE.
+ */
+const failable<int> del(const list<value>& rpath, request_rec* r, const lambda<value(const list<value>&)>& impl) {
+ debug(r->uri, "modeval::delete::uri");
+
+ // Evaluate an ATOM delete request
+ const failable<value> val = failableResult(impl(cons<value>("delete", mklist<value>(cddr(rpath)))));
+ if (!hasContent(val))
+ return mkfailure<int>(reason(val));
+ if (val == value(false))
+ return HTTP_NOT_FOUND;
+ return OK;
+}
+
+/**
+ * Route a /references/component-name/reference-name request,
+ * to the target of the component reference.
+ */
+int translateReference(const ServerConf& sc, request_rec *r, const list<value>& rpath, const list<value>& apath) {
+ httpdDebugRequest(r, "modeval::translateReference::input");
+ debug(r->uri, "modeval::translateReference::uri");
+ debug(apath, "modeval::translateReference::apath");
+ debug(rpath, "modeval::translateReference::rpath");
+
+ // Find the requested component
+ if (isNil(cdr(rpath)))
+ return HTTP_NOT_FOUND;
+ const list<value> comp(assoctree(cadr(rpath), sc.references));
+ if (isNil(comp))
+ return HTTP_NOT_FOUND;
+
+ // Find the requested reference and target configuration
+ const list<value> ref(assoctree<value>(caddr(rpath), cadr(comp)));
+ if (isNil(ref))
+ return HTTP_NOT_FOUND;
+ const string target(cadr(ref));
+ debug(target, "modeval::translateReference::target");
+
+ // Route to an absolute target URI using mod_proxy or an HTTP client redirect
+ const list<value> pathInfo = cdddr(rpath);
+ if (http::isAbsolute(target)) {
+ if (useModProxy) {
+ // Build proxy URI
+ string turi = target + path(pathInfo) + (r->args != NULL? string("?") + r->args : string(""));
+ const string proxy(string("proxy:") + turi);
+ debug(proxy, "modeval::translateReference::proxy");
+ r->filename = apr_pstrdup(r->pool, c_str(proxy));
+ r->proxyreq = PROXYREQ_REVERSE;
+ r->handler = "proxy-server";
+ apr_table_setn(r->notes, "proxy-nocanon", "1");
+ return OK;
+ }
+
+ debug(target, "modeval::translateReference::location");
+ r->handler = "mod_tuscany_eval";
+ return httpd::externalRedirect(target, r);
+ }
+
+ // Route to a relative target URI using a local internal redirect
+ // /components/, target component name and request path info
+ const value tname = substr(target, 0, find(target, '/'));
+ const string redir = path(append(apath, cons<value>(string("c"), cons(tname, pathInfo))));
+ debug(redir, "modeval::translateReference::redirect");
+ r->uri = apr_pstrdup(r->pool, c_str(redir));
+ r->handler = "mod_tuscany_eval";
+ return OK;
+}
+
+/**
+ * Find a leaf matching a request path in a tree of URI paths.
+ */
+const int matchPath(const list<value>& k, const list<value>& p) {
+ if (isNil(p))
+ return true;
+ if (isNil(k))
+ return false;
+ if (car(k) != car(p))
+ return false;
+ return matchPath(cdr(k), cdr(p));
+}
+
+const list<value> assocPath(const value& k, const list<value>& tree) {
+ if (isNil(tree))
+ return tree;
+ if (matchPath(k, car<value>(car(tree))))
+ return car(tree);
+ if (k < car<value>(car(tree)))
+ return assocPath(k, cadr(tree));
+ return assocPath(k, caddr(tree));
+}
+
+/**
+ * Route a service request to the component providing the requested service.
+ */
+int translateService(const ServerConf& sc, request_rec *r, const list<value>& rpath, const list<value>& apath) {
+ httpdDebugRequest(r, "modeval::translateService::input");
+ debug(r->uri, "modeval::translateService::uri");
+
+ // Find the requested component
+ debug(sc.services, "modeval::translateService::services");
+ const list<value> svc(assocPath(rpath, sc.services));
+ if (isNil(svc))
+ return DECLINED;
+ debug(svc, "modeval::translateService::service");
+
+ // Build a component-name + path-info URI
+ const list<value> target(append(apath, cons<value>(string("c"), cons<value>(cadr(svc), httpd::pathInfo(rpath, car(svc))))));
+ debug(target, "modeval::translateService::target");
+
+ // Dispatch to the target component using a local internal redirect
+ const string redir(path(target));
+ debug(redir, "modeval::translateService::redirect");
+ r->uri = apr_pstrdup(r->pool, c_str(redir));
+ r->handler = "mod_tuscany_eval";
+ return OK;
+}
+
+/**
+ * Translate a request to the target app and component.
+ */
+const int translateRequest(const ServerConf& sc, request_rec* r, const list<value>& rpath, const list<value>& apath) {
+ debug(apath, "modeval::translateRequest::apath");
+ debug(rpath, "modeval::translateRequest::rpath");
+ if (isNil(apath) && isNil(rpath))
+ return DECLINED;
+
+ if (!isNil(rpath)) {
+
+ // If the request is targeting a virtual host, use the corresponding
+ // virtual host configuration
+ if (isNil(apath)) {
+ if (hasVhostDomainConf(sc) && hasVhostContributionConf(sc) && httpd::isVhostRequest(sc.server, sc.vhostDomain, r)) {
+ const string aname = httpd::hostName(r);
+ ServerConf vsc(r->pool, sc, aname);
+ if (!hasContent(vhostConfig(vsc, sc, r)))
+ return DECLINED;
+ return translateRequest(vsc, r, rpath, mklist<value>(aname));
+ }
+ }
+
+ // Let default handler handle a resource request
+ const value prefix = car(rpath);
+ if (prefix == string("vhosts") || prefix == string("v"))
+ return DECLINED;
+
+ // Let our handler handle a component request
+ if (prefix == string("components") || prefix == string("c")) {
+ r->handler = "mod_tuscany_eval";
+ return OK;
+ }
+
+ // Translate a component reference request
+ if (prefix == string("references") || prefix == string("r"))
+ return translateReference(sc, r, rpath, apath);
+
+ // Attempt to translate the request to a service request
+ if (translateService(sc, r, rpath, apath) == OK)
+ return OK;
+
+ // Attempt to map the request to an actual file
+ if (isNil(apath)) {
+ const failable<request_rec*, int> fnr = httpd::internalSubRequest(r->uri, r);
+ if (!hasContent(fnr))
+ return HTTP_INTERNAL_SERVER_ERROR;
+ request_rec* nr = content(fnr);
+ nr->uri = r->filename;
+ const int tr = ap_core_translate(nr);
+ if (tr != OK)
+ return tr;
+ if (ap_directory_walk(nr) == OK && ap_file_walk(nr) == OK && nr->finfo.filetype != APR_NOFILE) {
+ debug(nr->filename, "modeval::translateRequest::file");
+ return DECLINED;
+ }
+
+ // If the request is targeting a virtual app, use the corresponding
+ // virtual host configuration
+ if (hasVhostContributionConf(sc)) {
+ const string cp = sc.vhostContributionPath + string(prefix) + "/" + sc.vhostCompositeName;
+ ServerConf vsc(r->pool, sc, string(prefix));
+ if (!hasContent(vhostConfig(vsc, sc, r)))
+ return DECLINED;
+ return translateRequest(vsc, r, cdr(rpath), mklist<value>(car(rpath)));
+ }
+ }
+ }
+
+ // If we're in a virtual app and the request didn't match a service,
+ // reference or component, redirect it to /v/<uri>. This will allow
+ // mapping to the actual app resources using HTTPD aliases.
+ if (!isNil(apath)) {
+ if (isNil(rpath) && r->uri[strlen(r->uri) -1] != '/') {
+
+ // Make sure a document root request ends with a '/', using
+ // an external redirect
+ const string target = string(r->uri) + string("/") + (r->args != NULL? string("?") + r->args : string(""));;
+ debug(target, "modeval::translateRequest::location");
+ r->handler = "mod_tuscany_eval";
+ return httpd::externalRedirect(target, r);
+ }
+
+ // Do an internal redirect to /v/<uri>
+ const string redir = string("/redirect:") + string("/v") + string(r->uri);
+ debug(redir, "modeval::translateRequest::redirect");
+ r->filename = apr_pstrdup(r->pool, c_str(redir));
+ r->handler = "mod_tuscany_eval";
+ return OK;
+ }
+
+ return DECLINED;
+}
+
+/**
+ * Translate a request.
+ */
+int translate(request_rec *r) {
+ if(r->method_number != M_GET && r->method_number != M_POST && r->method_number != M_PUT && r->method_number != M_DELETE)
+ return DECLINED;
+
+ // Create a scoped memory pool
+ gc_scoped_pool pool(r->pool);
+
+ httpdDebugRequest(r, "modeval::translate::input");
+
+ // Get the server configuration
+ const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_eval);
+
+ // Translate the request
+ return translateRequest(sc, r, pathValues(r->uri), list<value>());
+}
+
+/**
* Handle a component request.
*/
const int handleRequest(const ServerConf& sc, const list<value>& rpath, request_rec *r) {
@@ -832,45 +1078,44 @@ const int handleRequest(const ServerConf& sc, const list<value>& rpath, request_
if (isNil(cdr(rpath)))
return HTTP_NOT_FOUND;
- // Handle a request targeting a virtual host or virtual app
- if (hasVirtualCompositeConf(sc)) {
- if (hasVirtualDomainConf(sc) && httpd::isVirtualHostRequest(sc.server, sc.virtualHostDomain, r)) {
+ if (hasVhostContributionConf(sc)) {
+
+ // Handle a request targeting a component in a virtual host
+ if (hasVhostDomainConf(sc) && httpd::isVhostRequest(sc.server, sc.vhostDomain, r)) {
// Determine the app name from the host sub-domain name, and
- // store it in a header
+ // store it in a request note
const string app = http::subDomain(httpd::hostName(r));
- apr_table_setn(r->headers_in, "X-Request-AppName", apr_pstrdup(r->pool, c_str(app)));
+ apr_table_setn(r->notes, "X-Request-AppName", apr_pstrdup(r->pool, c_str(app)));
ServerConf vsc(r->pool, sc, app);
- if (!hasContent(virtualHostConfig(vsc, sc, r)))
+ if (!hasContent(vhostStart(vsc, sc, r)))
return HTTP_INTERNAL_SERVER_ERROR;
const int rc = handleRequest(vsc, rpath, r);
- virtualHostCleanup(vsc, sc);
+ vhostStop(vsc, sc);
return rc;
}
+ // Handle a request targeting a component in a virtual app
const value c = car(rpath);
if (c != string("components") && c != string("c")) {
- // Determine the app name from the request URI path
+ // Determine the app name from the request URI path and
+ // store it in a request note
const string app = string(c);
- const string cp = sc.virtualHostContributionPath + app + "/" + sc.virtualHostCompositeName;
- struct stat st;
- const int s = stat(c_str(cp), &st);
- if (s != -1) {
- // Store the app name in a header
- apr_table_setn(r->headers_in, "X-Request-AppName", apr_pstrdup(r->pool, c_str(app)));
- ServerConf vsc(r->pool, sc, app);
- if (!hasContent(virtualHostConfig(vsc, sc, r)))
- return HTTP_INTERNAL_SERVER_ERROR;
- const int rc = handleRequest(vsc, cdr(rpath), r);
- virtualHostCleanup(vsc, sc);
- return rc;
- }
+ const string cp = sc.vhostContributionPath + app + "/" + sc.vhostCompositeName;
+ apr_table_setn(r->notes, "X-Request-AppName", apr_pstrdup(r->pool, c_str(app)));
+
+ ServerConf vsc(r->pool, sc, app);
+ if (!hasContent(vhostStart(vsc, sc, r)))
+ return HTTP_INTERNAL_SERVER_ERROR;
+ const int rc = handleRequest(vsc, cdr(rpath), r);
+ vhostStop(vsc, sc);
+ return rc;
}
}
- // Store the request uri path in a header
- apr_table_setn(r->headers_in, "X-Request-URI", apr_pstrdup(r->pool, c_str(path(rpath))));
+ // Store the request uri path in a request note
+ apr_table_setn(r->notes, "X-Request-URI", apr_pstrdup(r->pool, c_str(path(rpath))));
// Get the component implementation lambda
const list<value> impl(assoctree<value>(cadr(rpath), sc.implTree));
@@ -903,11 +1148,20 @@ int handler(request_rec *r) {
if(strcmp(r->handler, "mod_tuscany_eval"))
return DECLINED;
- // Create a scoped memory pool
- gc_scoped_pool pool(r->pool);
+ // Nothing to do for an external redirect
+ if (r->status == HTTP_MOVED_TEMPORARILY)
+ return OK;
+ // Handle an internal redirect as directed by the translate hook
+ if (r->filename != NULL && !strncmp(r->filename, "/redirect:", 10)) {
+ if (r->args == NULL)
+ return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info)), r);
+ return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info), string(r->args)), r);
+ }
+
+
+ // Create a scope for the current request
ScopedRequest sr(r);
- httpdDebugRequest(r, "modeval::handler::input");
// Get the server configuration
const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_eval);
@@ -946,16 +1200,21 @@ const int postConfigMerge(const ServerConf& mainsc, server_rec* s) {
ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_eval);
debug(httpd::serverName(s), "modeval::postConfigMerge::serverName");
sc.lifecycle = mainsc.lifecycle;
+ sc.vhostName = mainsc.vhostName;
sc.contributionPath = mainsc.contributionPath;
sc.compositeName = mainsc.compositeName;
- sc.virtualHostDomain = mainsc.virtualHostDomain;
- sc.virtualHostContributionPath = mainsc.virtualHostContributionPath;
- sc.virtualHostCompositeName = mainsc.virtualHostCompositeName;
+ sc.vhostDomain = mainsc.vhostDomain;
+ sc.vhostContributionPath = mainsc.vhostContributionPath;
+ sc.vhostCompositeName = mainsc.vhostCompositeName;
+ sc.vhostContributorName = mainsc.vhostContributorName;
if (sc.ca == "") sc.ca = mainsc.ca;
if (sc.cert == "") sc.cert = mainsc.cert;
if (sc.key == "") sc.key = mainsc.key;
+ sc.references = mainsc.references;
+ sc.services = mainsc.services;
sc.implementations = mainsc.implementations;
sc.implTree = mainsc.implTree;
+ sc.vhostContributor = mainsc.vhostContributor;
return postConfigMerge(mainsc, s->next);
}
@@ -964,7 +1223,7 @@ int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp,
gc_scoped_pool pool(p);
- // Get the server configuration and determine the wiring server name
+ // Get the server configuration and determine the server name
ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_eval);
debug(httpd::serverName(s), "modeval::postConfig::serverName");
@@ -1037,6 +1296,10 @@ void childInit(apr_pool_t* p, server_rec* s) {
// Store the implementation lambda functions in a tree for fast retrieval
sc.implTree = mkbtree(sort(sc.implementations));
+ // Create a proxy for the vhost contributor if needed
+ if (length(sc.vhostContributorName) != 0)
+ sc.vhostContributor = mkimplProxy(sc, sc.vhostContributorName);
+
// Merge the updated configuration into the virtual hosts
postConfigMerge(sc, s->next);
@@ -1062,19 +1325,25 @@ const char* confComposite(cmd_parms *cmd, unused void *c, const char *arg) {
const char* confVirtualDomain(cmd_parms *cmd, unused void *c, const char *arg) {
gc_scoped_pool pool(cmd->pool);
ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval);
- sc.virtualHostDomain = arg;
+ sc.vhostDomain = arg;
return NULL;
}
const char* confVirtualContribution(cmd_parms *cmd, unused void *c, const char *arg) {
gc_scoped_pool pool(cmd->pool);
ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval);
- sc.virtualHostContributionPath = arg;
+ sc.vhostContributionPath = arg;
+ return NULL;
+}
+const char* confVirtualContributor(cmd_parms *cmd, unused void *c, const char *arg) {
+ gc_scoped_pool pool(cmd->pool);
+ ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval);
+ sc.vhostContributorName = arg;
return NULL;
}
const char* confVirtualComposite(cmd_parms *cmd, unused void *c, const char *arg) {
gc_scoped_pool pool(cmd->pool);
ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_eval);
- sc.virtualHostCompositeName = arg;
+ sc.vhostCompositeName = arg;
return NULL;
}
const char* confCAFile(cmd_parms *cmd, unused void *c, const char *arg) {
@@ -1108,7 +1377,8 @@ const command_rec commands[] = {
AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, RSRC_CONF, "SCA contribution location"),
AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, RSRC_CONF, "SCA composite location"),
AP_INIT_TAKE1("SCAVirtualDomain", (const char*(*)())confVirtualDomain, NULL, RSRC_CONF, "SCA virtual host domain"),
- AP_INIT_TAKE1("SCAVirtualContribution", (const char*(*)())confVirtualContribution, NULL, RSRC_CONF, "SCA virtual host contribution location"),
+ AP_INIT_TAKE1("SCAVirtualContribution", (const char*(*)())confVirtualContribution, NULL, RSRC_CONF, "SCA virtual host contribution path"),
+ AP_INIT_TAKE1("SCAVirtualContributor", (const char*(*)())confVirtualContributor, NULL, RSRC_CONF, "SCA virtual host contributor component"),
AP_INIT_TAKE1("SCAVirtualComposite", (const char*(*)())confVirtualComposite, NULL, RSRC_CONF, "SCA virtual composite location"),
AP_INIT_TAKE12("SCASetEnv", (const char*(*)())confEnv, NULL, OR_FILEINFO, "Environment variable name and optional value"),
AP_INIT_TAKE1("SCAWiringSSLCACertificateFile", (const char*(*)())confCAFile, NULL, RSRC_CONF, "SCA wiring SSL CA certificate file"),
@@ -1122,7 +1392,7 @@ void registerHooks(unused apr_pool_t *p) {
ap_hook_post_config(postConfig, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_child_init(childInit, NULL, NULL, APR_HOOK_MIDDLE);
ap_hook_handler(handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_translate_name(translate, NULL, NULL, APR_HOOK_FIRST);
+ ap_hook_translate_name(translate, NULL, NULL, APR_HOOK_LAST);
}
}
diff --git a/sca-cpp/trunk/modules/server/mod-wiring.cpp b/sca-cpp/trunk/modules/server/mod-wiring.cpp
deleted file mode 100644
index 0dd0529a42..0000000000
--- a/sca-cpp/trunk/modules/server/mod-wiring.cpp
+++ /dev/null
@@ -1,530 +0,0 @@
-/*
- * 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$ */
-
-/**
- * HTTPD module used to wire component references and route requests to
- * target service components.
- */
-
-#include <sys/stat.h>
-
-#define WANT_HTTPD_LOG 1
-#include "string.hpp"
-#include "stream.hpp"
-#include "list.hpp"
-#include "tree.hpp"
-#include "value.hpp"
-#include "monad.hpp"
-#include "../scdl/scdl.hpp"
-#include "../http/http.hpp"
-#include "../http/httpd.hpp"
-
-extern "C" {
-extern module AP_MODULE_DECLARE_DATA mod_tuscany_wiring;
-}
-
-namespace tuscany {
-namespace server {
-namespace modwiring {
-
-/**
- * Set to true to wire using mod_proxy, false to wire using HTTP client redirects.
- */
-const bool useModProxy = true;
-
-/**
- * Server configuration.
- */
-class ServerConf {
-public:
- ServerConf(apr_pool_t* p, server_rec* s) : p(p), server(s), contributionPath(""), compositeName(""), virtualHostDomain(""), virtualHostContributionPath(""), virtualHostCompositeName("") {
- }
-
- ServerConf(apr_pool_t* p, const ServerConf& ssc, const string& name) : p(p), server(ssc.server), contributionPath(ssc.virtualHostContributionPath + name + "/"), compositeName(ssc.virtualHostCompositeName), virtualHostDomain(""), virtualHostContributionPath(""), virtualHostCompositeName("") {
- }
-
- const gc_pool p;
- server_rec* server;
- string contributionPath;
- string compositeName;
- string virtualHostDomain;
- string virtualHostContributionPath;
- string virtualHostCompositeName;
- list<value> references;
- list<value> services;
-};
-
-/**
- * Return true if a server contains a composite configuration.
- */
-const bool hasCompositeConf(const ServerConf& sc) {
- return sc.contributionPath != "" && sc.compositeName != "";
-}
-
-/**
- * Return true if a server contains a virtual host domain configuration.
- */
-const bool hasVirtualDomainConf(const ServerConf& sc) {
- return sc.virtualHostDomain != "";
-}
-
-/**
- * Return true if a server contains a virtual host composite configuration.
- */
-const bool hasVirtualCompositeConf(const ServerConf& sc) {
- return sc.virtualHostContributionPath != "" && sc.virtualHostCompositeName != "";
-}
-
-/**
- * Route a /references/component-name/reference-name request,
- * to the target of the component reference.
- */
-int translateReference(const ServerConf& sc, request_rec *r, const list<value>& rpath, const list<value>& apath) {
- httpdDebugRequest(r, "modwiring::translateReference::input");
- debug(r->uri, "modwiring::translateReference::uri");
- debug(apath, "modwiring::translateReference::apath");
- debug(rpath, "modwiring::translateReference::rpath");
-
- // Find the requested component
- if (isNil(cdr(rpath)))
- return HTTP_NOT_FOUND;
- const list<value> comp(assoctree(cadr(rpath), sc.references));
- if (isNil(comp))
- return HTTP_NOT_FOUND;
-
- // Find the requested reference and target configuration
- const list<value> ref(assoctree<value>(caddr(rpath), cadr(comp)));
- if (isNil(ref))
- return HTTP_NOT_FOUND;
- const string target(cadr(ref));
- debug(target, "modwiring::translateReference::target");
-
- // Route to an absolute target URI using mod_proxy or an HTTP client redirect
- const list<value> pathInfo = cdddr(rpath);
- if (http::isAbsolute(target)) {
- if (useModProxy) {
- // Build proxy URI
- string turi = target + path(pathInfo) + (r->args != NULL? string("?") + r->args : string(""));
- const string proxy(string("proxy:") + turi);
- debug(proxy, "modwiring::translateReference::proxy");
- r->filename = apr_pstrdup(r->pool, c_str(proxy));
- r->proxyreq = PROXYREQ_REVERSE;
- r->handler = "proxy-server";
- apr_table_setn(r->notes, "proxy-nocanon", "1");
- return OK;
- }
-
- debug(target, "modwiring::translateReference::location");
- r->handler = "mod_tuscany_wiring";
- return httpd::externalRedirect(target, r);
- }
-
- // Route to a relative target URI using a local internal redirect
- // /components/, target component name and request path info
- const value tname = substr(target, 0, find(target, '/'));
- const string tp = path(append(apath, cons<value>(string("c"), cons(tname, pathInfo)))) + (r->args != NULL? string("?") + r->args : string(""));
- const string redir(string("/redirect:") + tp);
- debug(redir, "modwiring::translateReference::redirect");
- r->filename = apr_pstrdup(r->pool, c_str(redir));
- r->handler = "mod_tuscany_wiring";
- return OK;
-}
-
-/**
- * Find a leaf matching a request path in a tree of URI paths.
- */
-const int matchPath(const list<value>& k, const list<value>& p) {
- if (isNil(p))
- return true;
- if (isNil(k))
- return false;
- if (car(k) != car(p))
- return false;
- return matchPath(cdr(k), cdr(p));
-}
-
-const list<value> assocPath(const value& k, const list<value>& tree) {
- if (isNil(tree))
- return tree;
- if (matchPath(k, car<value>(car(tree))))
- return car(tree);
- if (k < car<value>(car(tree)))
- return assocPath(k, cadr(tree));
- return assocPath(k, caddr(tree));
-}
-
-/**
- * Route a service request to the component providing the requested service.
- */
-int translateService(const ServerConf& sc, request_rec *r, const list<value>& rpath, const list<value>& apath) {
- httpdDebugRequest(r, "modwiring::translateService::input");
- debug(r->uri, "modwiring::translateService::uri");
-
- // Find the requested component
- debug(sc.services, "modwiring::translateService::services");
- const list<value> svc(assocPath(rpath, sc.services));
- if (isNil(svc))
- return DECLINED;
- debug(svc, "modwiring::translateService::service");
-
- // Build a component-name + path-info URI
- const list<value> target(append(apath, cons<value>(string("c"), cons<value>(cadr(svc), httpd::pathInfo(rpath, car(svc))))));
- debug(target, "modwiring::translateService::target");
-
- // Dispatch to the target component using a local internal redirect
- const string tp(path(target) + (r->args != NULL? string("?") + r->args : string("")));
- const string redir(string("/redirect:") + tp);
- debug(redir, "modwiring::translateService::redirect");
- r->filename = apr_pstrdup(r->pool, c_str(redir));
- r->handler = "mod_tuscany_wiring";
- return OK;
-}
-
-/**
- * Read the components declared in a composite.
- */
-const failable<list<value> > readComponents(const string& path) {
- ifstream is(path);
- if (fail(is))
- return mkfailure<list<value> >(string("Could not read composite: ") + path);
- return scdl::components(readXML(streamList(is)));
-}
-
-/**
- * Return a list of component-name + references pairs. The references are
- * arranged in trees of reference-name + reference-target pairs.
- */
-const list<value> componentReferenceToTargetTree(const value& c) {
- return mklist<value>(scdl::name(c), mkbtree(sort(scdl::referenceToTargetAssoc(scdl::references(c)))));
-}
-
-const list<value> componentReferenceToTargetAssoc(const list<value>& c) {
- if (isNil(c))
- return c;
- return cons<value>(componentReferenceToTargetTree(car(c)), componentReferenceToTargetAssoc(cdr(c)));
-}
-
-/**
- * Return a list of service-URI-path + component-name pairs. Service-URI-paths are
- * represented as lists of URI path fragments.
- */
-const list<value> defaultBindingURI(const string& cn, const string& sn) {
- return mklist<value>(cn, sn);
-}
-
-const list<value> bindingToComponentAssoc(const string& cn, const string& sn, const list<value>& b) {
- if (isNil(b))
- return b;
- const value uri(scdl::uri(car(b)));
- if (isNil(uri))
- return cons<value>(mklist<value>(defaultBindingURI(cn, sn), cn), bindingToComponentAssoc(cn, sn, cdr(b)));
- return cons<value>(mklist<value>(pathValues(c_str(string(uri))), cn), bindingToComponentAssoc(cn, sn, cdr(b)));
-}
-
-const list<value> serviceToComponentAssoc(const string& cn, const list<value>& s) {
- if (isNil(s))
- return s;
- const string sn(scdl::name(car(s)));
- const list<value> btoc(bindingToComponentAssoc(cn, sn, scdl::bindings(car(s))));
- if (isNil(btoc))
- return cons<value>(mklist<value>(defaultBindingURI(cn, sn), cn), serviceToComponentAssoc(cn, cdr(s)));
- return append<value>(btoc, serviceToComponentAssoc(cn, cdr(s)));
-}
-
-const list<value> uriToComponentAssoc(const list<value>& c) {
- if (isNil(c))
- return c;
- return append<value>(serviceToComponentAssoc(scdl::name(car(c)), scdl::services(car(c))), uriToComponentAssoc(cdr(c)));
-}
-
-/**
- * Configure the components declared in the server's deployment composite.
- */
-const bool confComponents(ServerConf& sc) {
- if (!hasCompositeConf(sc))
- return true;
- debug(sc.contributionPath, "modwiring::confComponents::contributionPath");
- debug(sc.compositeName, "modwiring::confComponents::compositeName");
-
- // Read the component configuration and store the references and service URIs
- // in trees for fast retrieval later
- const failable<list<value> > comps = readComponents(scdl::resourcePath(sc.contributionPath, sc.compositeName));
- if (!hasContent(comps))
- return true;
- const list<value> refs = componentReferenceToTargetAssoc(content(comps));
- debug(refs, "modwiring::confComponents::references");
- sc.references = mkbtree(sort(refs));
-
- const list<value> svcs = uriToComponentAssoc(content(comps));
- debug(svcs, "modwiring::confComponents::services");
- sc.services = mkbtree(sort(svcs));
- return true;
-}
-
-/**
- * Configure and start the components deployed in a virtual host.
- */
-const failable<ServerConf> virtualHostConfig(ServerConf& sc, const ServerConf& ssc, request_rec* r) {
- debug(httpd::serverName(ssc.server), "modwiring::virtualHostConfig::serverName");
- debug(httpd::serverName(r), "modwiring::virtualHostConfig::virtualHostName");
- debug(ssc.virtualHostContributionPath, "modwiring::virtualHostConfig::virtualHostContributionPath");
- debug(sc.contributionPath, "modwiring::virtualHostConfig::contributionPath");
-
- // Configure the wiring for the deployed components
- confComponents(sc);
-
- return sc;
-}
-
-/**
- * Translate an HTTP service or reference request and route it
- * to the target component.
- */
-const int translateRequest(const ServerConf& sc, request_rec *r, const list<value>& rpath, const list<value>& apath) {
- debug(apath, "modwiring::translateRequest::apath");
- debug(rpath, "modwiring::translateRequest::rpath");
- if (isNil(apath) && isNil(rpath))
- return DECLINED;
-
- if (!isNil(rpath)) {
-
- // No translation needed for a component or resource request
- const value c = car(rpath);
- if (c == string("components") || c == string("c") || c == string("vhosts") || c == string("v"))
- return DECLINED;
-
- // If the request is targeting a virtual host, use the corresponding
- // virtual host configuration
- const bool vdc = hasVirtualDomainConf(sc);
- const bool vcc = hasVirtualCompositeConf(sc);
- if (vdc && vcc && httpd::isVirtualHostRequest(sc.server, sc.virtualHostDomain, r)) {
- ServerConf vsc(r->pool, sc, http::subDomain(httpd::hostName(r)));
- if (!hasContent(virtualHostConfig(vsc, sc, r)))
- return HTTP_INTERNAL_SERVER_ERROR;
- return translateRequest(vsc, r, rpath, list<value>());
- }
-
- // Translate a component reference request
- if (c == string("references") || c == string("r"))
- return translateReference(sc, r, rpath, apath);
-
- // Attempt to translate the request to a service request
- if (translateService(sc, r, rpath, apath) == OK)
- return OK;
-
- // If the request is targeting a virtual app, use the corresponding
- // virtual host configuration
- if (vcc) {
- const string cp = sc.virtualHostContributionPath + string(c) + "/" + sc.virtualHostCompositeName;
- struct stat st;
- const int s = stat(c_str(cp), &st);
- if (s == -1)
- return DECLINED;
- ServerConf vsc(r->pool, sc, string(c));
- if (!hasContent(virtualHostConfig(vsc, sc, r)))
- return HTTP_INTERNAL_SERVER_ERROR;
- return translateRequest(vsc, r, cdr(rpath), mklist<value>(car(rpath)));
- }
- }
-
- // If we're in a virtual app and the request is targeting a regular
- // resource, redirect it to /v/<uri>. This will allow mapping to the
- // actual resources using HTTPD aliases.
- if (!isNil(apath)) {
- const string tp = string("/v") + string(r->uri) + (r->args != NULL? string("?") + r->args : string(""));
- const string redir = string("/redirect:") + tp;
- debug(redir, "modwiring::translateRequest::redirect");
- r->filename = apr_pstrdup(r->pool, c_str(redir));
- r->handler = "mod_tuscany_wiring";
- return OK;
- }
-
- return DECLINED;
-}
-
-/**
- * Translate an HTTP service or reference request and route it
- * to the target component.
- */
-int translate(request_rec *r) {
- if(r->method_number != M_GET && r->method_number != M_POST && r->method_number != M_PUT && r->method_number != M_DELETE)
- return DECLINED;
-
- // Create a scoped memory pool
- gc_scoped_pool pool(r->pool);
- httpdDebugRequest(r, "modwiring::translate::input");
-
- // Get the server configuration
- const ServerConf& sc = httpd::serverConf<ServerConf>(r, &mod_tuscany_wiring);
-
- // Translate the request
- return translateRequest(sc, r, pathValues(r->uri), list<value>());
-}
-
-/**
- * HTTP request handler, redirect to a target component.
- */
-int handler(request_rec *r) {
- if(r->method_number != M_GET && r->method_number != M_POST && r->method_number != M_PUT && r->method_number != M_DELETE)
- return DECLINED;
- if(strcmp(r->handler, "mod_tuscany_wiring"))
- return DECLINED;
- if (r->filename == NULL || strncmp(r->filename, "/redirect:", 10) != 0)
- return DECLINED;
-
- // Nothing to do for an external redirect
- if (r->status == HTTP_MOVED_TEMPORARILY)
- return OK;
-
- // Create a scoped memory pool
- gc_scoped_pool pool(r->pool);
-
- httpdDebugRequest(r, "modwiring::handler::input");
- debug(r->uri, "modwiring::handler::uri");
- debug(r->filename, "modwiring::handler::filename");
- debug(r->path_info, "modwiring::handler::path info");
-
- // Do an internal redirect
- if (r->args == NULL)
- return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info)), r);
- return httpd::internalRedirect(httpd::redirectURI(string(r->filename + 10), string(r->path_info), string(r->args)), r);
-}
-
-/**
- * Called after all the configuration commands have been run.
- * Process the server configuration and configure the wiring for the deployed components.
- */
-const int postConfigMerge(const ServerConf& mainsc, server_rec* s) {
- if (s == NULL)
- return OK;
- debug(httpd::serverName(s), "modwiring::postConfigMerge::serverName");
- ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring);
- sc.contributionPath = mainsc.contributionPath;
- sc.compositeName = mainsc.compositeName;
- sc.virtualHostDomain = mainsc.virtualHostDomain;
- sc.virtualHostContributionPath = mainsc.virtualHostContributionPath;
- sc.virtualHostCompositeName = mainsc.virtualHostCompositeName;
- sc.references = mainsc.references;
- sc.services = mainsc.services;
- return postConfigMerge(mainsc, s->next);
-}
-
-int postConfig(apr_pool_t *p, unused apr_pool_t *plog, unused apr_pool_t *ptemp, server_rec *s) {
- gc_scoped_pool pool(p);
-
- // Count the calls to post config, skip the first one as
- // postConfig is always called twice
- const string k("tuscany::modwiring::postConfig");
- const long int count = (long int)httpd::userData(k, s);
- httpd::putUserData(k, (void*)(count + 1), s);
- if (count == 0)
- return OK;
-
- // Configure the wiring for the deployed components
- debug(httpd::serverName(s), "modwiring::postConfig::serverName");
- ServerConf& sc = httpd::serverConf<ServerConf>(s, &mod_tuscany_wiring);
- confComponents(sc);
-
- // Merge the config into any virtual hosts
- return postConfigMerge(sc, s->next);
-}
-
-/**
- * Child process initialization.
- */
-void childInit(apr_pool_t* p, server_rec* s) {
- gc_scoped_pool pool(p);
- if(ap_get_module_config(s->module_config, &mod_tuscany_wiring) == NULL) {
- cfailure << "[Tuscany] Due to one or more errors mod_tuscany_wiring loading failed. Causing apache to stop loading." << endl;
- exit(APEXIT_CHILDFATAL);
- }
-}
-
-/**
- * Configuration commands.
- */
-const char *confContribution(cmd_parms *cmd, unused void *c, const char *arg) {
- gc_scoped_pool pool(cmd->pool);
- ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring);
- sc.contributionPath = arg;
- return NULL;
-}
-const char *confComposite(cmd_parms *cmd, unused void *c, const char *arg) {
- gc_scoped_pool pool(cmd->pool);
- ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring);
- sc.compositeName = arg;
- return NULL;
-}
-const char *confVirtualDomain(cmd_parms *cmd, unused void *c, const char *arg) {
- gc_scoped_pool pool(cmd->pool);
- ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring);
- sc.virtualHostDomain = arg;
- return NULL;
-}
-const char *confVirtualContribution(cmd_parms *cmd, unused void *c, const char *arg) {
- gc_scoped_pool pool(cmd->pool);
- ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring);
- sc.virtualHostContributionPath = arg;
- return NULL;
-}
-const char *confVirtualComposite(cmd_parms *cmd, unused void *c, const char *arg) {
- gc_scoped_pool pool(cmd->pool);
- ServerConf& sc = httpd::serverConf<ServerConf>(cmd, &mod_tuscany_wiring);
- sc.virtualHostCompositeName = arg;
- return NULL;
-}
-
-/**
- * HTTP server module declaration.
- */
-const command_rec commands[] = {
- AP_INIT_TAKE1("SCAContribution", (const char*(*)())confContribution, NULL, RSRC_CONF, "SCA contribution location"),
- AP_INIT_TAKE1("SCAComposite", (const char*(*)())confComposite, NULL, RSRC_CONF, "SCA composite location"),
- AP_INIT_TAKE1("SCAVirtualDomain", (const char*(*)())confVirtualDomain, NULL, RSRC_CONF, "SCA virtual host domain"),
- AP_INIT_TAKE1("SCAVirtualContribution", (const char*(*)())confVirtualContribution, NULL, RSRC_CONF, "SCA virtual host contribution location"),
- AP_INIT_TAKE1("SCAVirtualComposite", (const char*(*)())confVirtualComposite, NULL, RSRC_CONF, "SCA virtual host composite location"),
- {NULL, NULL, NULL, 0, NO_ARGS, NULL}
-};
-
-void registerHooks(unused apr_pool_t *p) {
- ap_hook_post_config(postConfig, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_child_init(childInit, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_handler(handler, NULL, NULL, APR_HOOK_MIDDLE);
- ap_hook_translate_name(translate, NULL, NULL, APR_HOOK_FIRST);
-}
-
-}
-}
-}
-
-extern "C" {
-
-module AP_MODULE_DECLARE_DATA mod_tuscany_wiring = {
- STANDARD20_MODULE_STUFF,
- // dir config and merger
- NULL, NULL,
- // server config and merger
- tuscany::httpd::makeServerConf<tuscany::server::modwiring::ServerConf>, NULL,
- // commands and hooks
- tuscany::server::modwiring::commands, tuscany::server::modwiring::registerHooks
-};
-
-}
diff --git a/sca-cpp/trunk/modules/server/server-conf b/sca-cpp/trunk/modules/server/server-conf
index 47934f973e..83eea0cc6c 100755
--- a/sca-cpp/trunk/modules/server/server-conf
+++ b/sca-cpp/trunk/modules/server/server-conf
@@ -31,13 +31,6 @@ else
libsuffix=".so"
fi
-cat >>$root/conf/modules.conf <<EOF
-# Generated by: server-conf $*
-# Support for SCA component wiring
-LoadModule mod_tuscany_wiring $here/libmod_tuscany_wiring$libsuffix
-
-EOF
-
cat >>$root/conf/httpd.conf <<EOF
# Generated by: server-conf $*
# Serve JavaScript client scripts