From 1c21d758af81d880ad6e045d18f8bc62ad8be89e Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Sun, 24 Jan 2010 09:27:44 +0000 Subject: Minor improvements to java component support, use one classloader per component, use Iterables instead of arrays to represent lists, added more tests and a working java version of the store integration test. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@902539 13f79535-47bb-0310-9956-ffa450edef68 --- sca-cpp/trunk/test/store-cpp/fruits-catalog.cpp | 5 +- sca-cpp/trunk/test/store-java/Makefile.am | 10 ++ sca-cpp/trunk/test/store-java/start | 2 + sca-cpp/trunk/test/store-java/stop | 2 + sca-cpp/trunk/test/store-java/store.composite | 10 -- .../test/store-java/store/CurrencyConverter.java | 28 +++++ .../store-java/store/CurrencyConverterImpl.java | 45 +++++++ .../test/store-java/store/FruitsCatalogImpl.java | 57 +++++++++ .../test/store-java/store/ShoppingCartImpl.java | 130 +++++++++++++++++++++ 9 files changed, 278 insertions(+), 11 deletions(-) create mode 100644 sca-cpp/trunk/test/store-java/store/CurrencyConverter.java create mode 100644 sca-cpp/trunk/test/store-java/store/CurrencyConverterImpl.java create mode 100644 sca-cpp/trunk/test/store-java/store/FruitsCatalogImpl.java create mode 100644 sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java (limited to 'sca-cpp/trunk/test') diff --git a/sca-cpp/trunk/test/store-cpp/fruits-catalog.cpp b/sca-cpp/trunk/test/store-cpp/fruits-catalog.cpp index a7d502a9b9..4c93b2a58e 100644 --- a/sca-cpp/trunk/test/store-cpp/fruits-catalog.cpp +++ b/sca-cpp/trunk/test/store-cpp/fruits-catalog.cpp @@ -33,7 +33,7 @@ namespace tuscany { namespace store { /** - * Returns a catalog. + * Returns the catalog. */ struct convert { const lambda&)> converter; @@ -61,6 +61,9 @@ const failable get(const lambda&)> converter) { mkfruit("Pear", currency, symbol, conv(1.55))); } +/** + * TODO remove this JSON-RPC specific function. + */ const failable listMethods(unused const lambda&)> converter) { return value(mklist(string("Service.get"))); } diff --git a/sca-cpp/trunk/test/store-java/Makefile.am b/sca-cpp/trunk/test/store-java/Makefile.am index f18bb991c1..a381f0a3fd 100644 --- a/sca-cpp/trunk/test/store-java/Makefile.am +++ b/sca-cpp/trunk/test/store-java/Makefile.am @@ -15,6 +15,16 @@ # specific language governing permissions and limitations # under the License. +JAVAROOT = ${top_builddir}/test/store-java + if WANT_JAVA +AM_JAVACFLAGS = -classpath ${top_builddir}/modules/java/libmod-tuscany-java-${PACKAGE_VERSION}.jar + +noinst_JAVA = store/*.java + +CLEANFILES = store/*.class + +TESTS = server-test + endif diff --git a/sca-cpp/trunk/test/store-java/start b/sca-cpp/trunk/test/store-java/start index eb8c174999..43a2b90c2a 100755 --- a/sca-cpp/trunk/test/store-java/start +++ b/sca-cpp/trunk/test/store-java/start @@ -28,6 +28,8 @@ SCAComposite store.composite EOF +export CLASSPATH=`pwd`/../../modules/java/libmod-tuscany-java-1.0.jar:`pwd` + apachectl -k start -d `pwd`/tmp mc="memcached -l 127.0.0.1 -m 4 -p 11211" diff --git a/sca-cpp/trunk/test/store-java/stop b/sca-cpp/trunk/test/store-java/stop index 34731dbbe1..3c4f59e76e 100755 --- a/sca-cpp/trunk/test/store-java/stop +++ b/sca-cpp/trunk/test/store-java/stop @@ -17,6 +17,8 @@ # specific language governing permissions and limitations # under the License. +export CLASSPATH=`pwd`/../../modules/java/libmod-tuscany-java-1.0.jar:`pwd` + apachectl -k stop -d `pwd`/tmp mc="memcached -l 127.0.0.1 -m 4 -p 11211" kill `ps -f | grep -v grep | grep "$mc" | awk '{ print $2 }'` diff --git a/sca-cpp/trunk/test/store-java/store.composite b/sca-cpp/trunk/test/store-java/store.composite index 15e778ca36..5024d79ee6 100644 --- a/sca-cpp/trunk/test/store-java/store.composite +++ b/sca-cpp/trunk/test/store-java/store.composite @@ -22,16 +22,6 @@ targetNamespace="http://store" name="store"> - - - - - - - - - - USD diff --git a/sca-cpp/trunk/test/store-java/store/CurrencyConverter.java b/sca-cpp/trunk/test/store-java/store/CurrencyConverter.java new file mode 100644 index 0000000000..1ed15a670a --- /dev/null +++ b/sca-cpp/trunk/test/store-java/store/CurrencyConverter.java @@ -0,0 +1,28 @@ +/* + * 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. + */ + +package store; + +public interface CurrencyConverter { + + Double convert(String from, String to, Double amount); + + String symbol(String currency); + +} diff --git a/sca-cpp/trunk/test/store-java/store/CurrencyConverterImpl.java b/sca-cpp/trunk/test/store-java/store/CurrencyConverterImpl.java new file mode 100644 index 0000000000..a6d0fd00b3 --- /dev/null +++ b/sca-cpp/trunk/test/store-java/store/CurrencyConverterImpl.java @@ -0,0 +1,45 @@ +/* + * 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. + */ + +package store; + +/** + * Currency converter component implementation. + */ +public class CurrencyConverterImpl { + + /** + * Convert an amount from USD to a currency. + */ + public Double convert(String from, String to, Double amount) { + if ("EUR".equals(to)) + return amount * 0.70; + return amount; + } + + /** + * Return a currency symbol. + */ + public String symbol(String currency) { + if ("EUR".equals(currency)) + return "E"; + return "$"; + } + +} diff --git a/sca-cpp/trunk/test/store-java/store/FruitsCatalogImpl.java b/sca-cpp/trunk/test/store-java/store/FruitsCatalogImpl.java new file mode 100644 index 0000000000..3caa785416 --- /dev/null +++ b/sca-cpp/trunk/test/store-java/store/FruitsCatalogImpl.java @@ -0,0 +1,57 @@ +/* + * 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. + */ + +package store; + +import static org.apache.tuscany.IterableUtil.list; + +/** + * Catalog component implementation. + */ +public class FruitsCatalogImpl { + + /** + * Returns the catalog. + */ + public Iterable get(final CurrencyConverter converter) { + class Converter { + Double convert(Double price) { + return converter.convert("USD", "USD", price); + } + }; + Converter c = new Converter(); + + String code = "USD"; + String symbol = converter.symbol(code); + + return list( + list(list("'javaClass", "services.Item"), list("'name", "Apple"), list("'currencyCode", code), list("'currencySymbol", symbol), list("'price", c.convert(2.99))), + list(list("'javaClass", "services.Item"), list("'name", "Orange"), list("'currencyCode", code), list("'currencySymbol", symbol), list("'price", c.convert(3.55))), + list(list("'javaClass", "services.Item"), list("'name", "Pear"), list("'currencyCode", code), list("'currencySymbol", symbol), list("'price", c.convert(1.55))) + ); + } + + /** + * TODO remove this JSON-RPC specific function. + */ + public Iterable listMethods(final CurrencyConverter converter) { + return list("Service.get"); + } + +} diff --git a/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java b/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java new file mode 100644 index 0000000000..30ee59932a --- /dev/null +++ b/sca-cpp/trunk/test/store-java/store/ShoppingCartImpl.java @@ -0,0 +1,130 @@ +/* + * 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. + */ + +package store; + +import org.apache.tuscany.Service; +import java.lang.System; +import java.util.UUID; +import static org.apache.tuscany.IterableUtil.*; + +/** + * Shopping cart component implementation. + */ +public class ShoppingCartImpl { + + static String cartId = "1234"; + + /** + * Get the shopping cart from the cache. Return an empty + * cart if not found. + */ + public Iterable getcart(String id, Service cache) { + Iterable cart = cache.get(id); + if (cart == null) + return list(); + return cart; + } + + /** + * Returns a UUID. + */ + String uuid() { + return UUID.randomUUID().toString(); + } + + /** + * Post a new item to the cart. Create a new cart if necessary. + */ + public String post(Iterable item, Service cache) { + String id = uuid(); + Iterable newItem = list(car(item), id, caddr(item)); + Iterable cart = cons(newItem, getcart(cartId, cache)); + cache.put(cartId, cart); + return id; + } + + /** + * Return the contents of the cart. + */ + public Iterable getall(Service cache) { + return cons("Your Cart", cons(cartId, getcart(cartId, cache))); + } + + /** + * Find an item in the cart. + */ + public Iterable find(String id, Iterable cart) { + if (isNil(cart)) + return cons("Item", list("0", list())); + if (id.equals(cadr(car(cart)))) + return car(cart); + return find(id, cdr(cart)); + } + + public Iterable get(String id, Service cache) { + return find(id, getcart(cartId, cache)); + } + + /** + * Delete the whole cart. + */ + public Boolean deleteall(Service cache) { + return cache.delete(cartId); + } + + /** + * Delete an item from the cart. + */ + public Boolean delete(String id, Service cache) { + return true; + } + + /** + * Return the price of an item. + */ + Double price(Iterable item) { + return Double.valueOf((String)cadr(assoc("'price", caddr(item)))); + } + + /** + * Sum the prices of a list of items. + */ + Double sum(Iterable items) { + if (isNil(items)) + return 0.0; + return price((Iterable)car(items)) + sum(cdr(items)); + } + + /** + * Return the total price of the items in the cart. + */ + public Double gettotal(Service cache) { + Iterable cart = getcart(cartId, cache); + return sum(cart); + } + + /** + * TODO remove this JSON-RPC specific function. + */ + public Iterable listMethods(final CurrencyConverter converter) { + return list("Service.gettotal"); + } + +} -- cgit v1.2.3