Author: jsdelfino
Date: Sat Dec 2 13:43:28 2006
New Revision: 481633
URL: http://svn.apache.org/viewvc?view=rev&rev=481633
Log:
Cleaned up the REST sample and added a command style service to show the
XML/HTTP command style support.
Added:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
(with props)
Removed:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResource.py
Modified:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/CustomerRestClient.py
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/sample.customer.restclient.composite
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/sample.customer.composite
Modified:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/CustomerRestClient.py
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/CustomerRestClient.py?view=diff&rev=481633&r1=481632&r2=481633
==============================================================================
---
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/CustomerRestClient.py
(original)
+++
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/CustomerRestClient.py
Sat Dec 2 13:43:28 2006
@@ -25,30 +25,62 @@
from xml.etree import ElementTree as et
import sca
-# Locate the customer service
-customerService = sca.locateservice("Customer")
+# Locate the customer resource service
+customerResource = sca.locateservice("CustomerResource")
-# Invoke the CRUD operations on the customer resource
+# Show how to invoke CRUD operations on the customer resource
+# The CRUD operations translate to HTTP POST, GET, PUT and DELETE
+# according to the REST pattern
-customer = customerService.retrieve("2345")
-print "Retrieved customer " + et.tostring(customer)
+customer = customerResource.retrieve("2345")
+print "Rest - Retrieved customer " + et.tostring(customer)
customer = et.fromstring("""<customer
xmlns="http://sample.customer"><id>1234</id><firstName>Jane</firstName><lastName>Doe</lastName></customer>""")
-url = customerService.create(customer)
-print "Created customer " + url
+url = customerResource.create(customer)
+print "Rest - Created customer " + url
-customer = customerService.retrieve("1234")
-print "Retrieved customer " + et.tostring(customer)
+customer = customerResource.retrieve("1234")
+print "Rest - Retrieved customer " + et.tostring(customer)
-customer = customerService.retrieve(url)
-print "Retrieved by url " + et.tostring(customer)
+customer = customerResource.retrieve(url)
+print "Rest - Retrieved by url " + et.tostring(customer)
customer.find("{http://sample.customer}lastName").text="Smith"
-customerService.update("1234", customer)
-print "Updated customer 1234"
+customerResource.update("1234", customer)
+print "Rest - Updated customer 1234"
-customer = customerService.retrieve("1234")
-print "Retrieved customer " + et.tostring(customer)
+customer = customerResource.retrieve("1234")
+print "Rest - Retrieved customer " + et.tostring(customer)
-customerService.delete("1234")
-print "Deleted customer 1234"
+customerResource.delete("1234")
+print "Rest - Deleted customer 1234"
+
+# Also show how to use REST binding to invoke remote commands
+# using HTTP GET and XML over HTTP POST, the REST binding
+# uses that command pattern when you don't declare a REST interface
+# on your SCA reference
+
+# Locate the customer command service
+customerCommand = sca.locateservice("CustomerCommand")
+
+# Invoke operations on the customer command service
+customer = customerCommand.retrieve("2345")
+print "Command - Retrieved customer " + et.tostring(customer)
+
+customer = et.fromstring("""<customer
xmlns="http://sample.customer"><id>1234</id><firstName>Jane</firstName><lastName>Doe</lastName></customer>""")
+url = customerCommand.create(customer)
+print "Command - Created customer " + url
+
+customer = customerCommand.retrieve("1234")
+print "Command - Retrieved customer " + et.tostring(customer)
+
+customer.find("{http://sample.customer}lastName").text="Smith"
+# commented out for now as application/form-data does not work yet
+#customerCommand.update("1234", customer)
+#print "Command - Updated customer 1234"
+
+customer = customerCommand.retrieve("1234")
+print "Command - Retrieved customer " + et.tostring(customer)
+
+customerCommand.delete("1234")
+print "Command - Deleted customer 1234"
Modified:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/sample.customer.restclient.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/sample.customer.restclient.composite?view=diff&rev=481633&r1=481632&r2=481633
==============================================================================
---
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/sample.customer.restclient.composite
(original)
+++
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer.restclient/sample.customer.restclient.composite
Sat Dec 2 13:43:28 2006
@@ -21,9 +21,13 @@
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="sample.customer.restclient">
- <reference name="Customer">
+ <reference name="CustomerResource">
<interface.rest/>
- <binding.rest
uri="http://localhost:9090/rest/sample.customer.CustomerComponent/Customer"/>
+ <binding.rest
uri="http://localhost:9190/rest/sample.customer.CustomerComponent/CustomerResource"/>
+ </reference>
+
+ <reference name="CustomerCommand">
+ <binding.rest
uri="http://localhost:9190/rest/sample.customer.CustomerComponent/CustomerCommand"/>
</reference>
</composite>
Added:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py?view=auto&rev=481633
==============================================================================
---
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
(added)
+++
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
Sat Dec 2 13:43:28 2006
@@ -0,0 +1,59 @@
+# 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.
+#
+#
+
+#
+# This Python code implements a simple SCA component that
+# manages Customer resources.
+#
+
+import os
+import shutil
+from xml.etree import ElementTree as et
+
+qname = "{http://sample.customer}id"
+dir = os.environ["CUSTOMER_DIR"]
+
+class CustomerResourceImpl:
+ "A class that manages Customer resources"
+
+ def create(self, customer):
+ id = customer.findtext(qname)
+ print "Python - CustomerResourceImpl.create " + id
+ f = open(dir + "/" + id + ".xml", "w")
+ f.write(et.tostring(customer))
+ f.close()
+ return id
+
+ def retrieve(self, id):
+ print "Python - CustomerResourceImpl.retrieve " + id
+ f = open(dir + "/" + id + ".xml", "r")
+ customer = et.fromstring(f.read())
+ f.close()
+ return customer
+
+ def update(self, id, customer):
+ print "Python - CustomerResourceImpl.update " + id
+ f = open(dir + "/" + id + ".xml", "w")
+ f.write(et.tostring(customer))
+ f.close()
+
+ def delete(self, id):
+ print "Python - CustomerResourceImpl.delete " + id
+ shutil.copyfile(dir + "/" + id + ".xml", dir + "/" + id + "-bak.xml")
+ os.remove(dir + "/" + id + ".xml")
Propchange:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/CustomerResourceImpl.py
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/sample.customer.composite
URL:
http://svn.apache.org/viewvc/incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/sample.customer.composite?view=diff&rev=481633&r1=481632&r2=481633
==============================================================================
---
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/sample.customer.composite
(original)
+++
incubator/tuscany/cpp/sca/samples/RestCustomer/sample.customer/sample.customer.composite
Sat Dec 2 13:43:28 2006
@@ -21,14 +21,19 @@
<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
name="sample.customer">
- <service name="Customer">
+ <service name="CustomerResource">
<interface.rest/>
<binding.rest/>
<reference>CustomerComponent</reference>
</service>
+ <service name="CustomerCommand">
+ <binding.rest/>
+ <reference>CustomerComponent</reference>
+ </service>
+
<component name="CustomerComponent">
- <implementation.python module="CustomerResource"
class="CustomerResourceImpl"/>
+ <implementation.python module="CustomerResourceImpl"
class="CustomerResourceImpl"/>
</component>
</composite>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]