summaryrefslogtreecommitdiffstats
path: root/sca-cpp/trunk/hosting/server/store.py
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/hosting/server/store.py
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/hosting/server/store.py')
-rw-r--r--sca-cpp/trunk/hosting/server/store.py80
1 files changed, 80 insertions, 0 deletions
diff --git a/sca-cpp/trunk/hosting/server/store.py b/sca-cpp/trunk/hosting/server/store.py
new file mode 100644
index 0000000000..014c07050e
--- /dev/null
+++ b/sca-cpp/trunk/hosting/server/store.py
@@ -0,0 +1,80 @@
+# 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 ("'store", "'" + 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
+