diff options
-rw-r--r-- | cpp/sca/samples/Makefile.am | 2 | ||||
-rw-r--r-- | cpp/sca/samples/configure.ac | 1 | ||||
-rw-r--r-- | cpp/sca/samples/store/Makefile.am | 26 | ||||
-rw-r--r-- | cpp/sca/samples/store2/Makefile.am | 27 | ||||
-rw-r--r-- | cpp/sca/samples/store2/cart.hpp | 70 | ||||
-rw-r--r-- | cpp/sca/samples/store2/catalog.hpp | 54 | ||||
-rw-r--r-- | cpp/sca/samples/store2/catalogs.composite | 43 | ||||
-rw-r--r-- | cpp/sca/samples/store2/currency-composite.hpp | 37 | ||||
-rw-r--r-- | cpp/sca/samples/store2/currency.composite | 32 | ||||
-rw-r--r-- | cpp/sca/samples/store2/currency.hpp | 58 | ||||
-rw-r--r-- | cpp/sca/samples/store2/item.hpp | 54 | ||||
-rw-r--r-- | cpp/sca/samples/store2/service.hpp | 35 | ||||
-rw-r--r-- | cpp/sca/samples/store2/store-composite.hpp | 47 | ||||
-rw-r--r-- | cpp/sca/samples/store2/store-solution.hpp | 41 | ||||
-rw-r--r-- | cpp/sca/samples/store2/store-ui.hpp | 64 | ||||
-rw-r--r-- | cpp/sca/samples/store2/store.composite | 64 | ||||
-rw-r--r-- | cpp/sca/samples/store2/store2-test.cpp | 50 |
17 files changed, 684 insertions, 21 deletions
diff --git a/cpp/sca/samples/Makefile.am b/cpp/sca/samples/Makefile.am index 66c4cd260a..9ccf905d72 100644 --- a/cpp/sca/samples/Makefile.am +++ b/cpp/sca/samples/Makefile.am @@ -16,7 +16,7 @@ # under the License. if WANT_ALL_SAMPLES - CPP_SAMPLES = CppCalculator CppBigBank store + CPP_SAMPLES = CppCalculator CppBigBank store store2 PYTHON_SAMPLES = PythonCalculator PythonWeatherForecast RestCustomer AlertAggregator RUBY_SAMPLES = RubyCalculator RubyBigBank HttpdBigBank RestCalculator PYTHON_RUBY_SAMPLES = RestYahoo diff --git a/cpp/sca/samples/configure.ac b/cpp/sca/samples/configure.ac index e03204ba66..c4021401fe 100644 --- a/cpp/sca/samples/configure.ac +++ b/cpp/sca/samples/configure.ac @@ -163,6 +163,7 @@ AM_CONDITIONAL([WANT_RUBY_SAMPLES], [test x$want_ruby_samples = xtrue]) AC_CONFIG_FILES([Makefile store/Makefile + store2/Makefile AlertAggregator/Makefile AlertAggregator/sample.alerter/Makefile AlertAggregator/sample.display/Makefile diff --git a/cpp/sca/samples/store/Makefile.am b/cpp/sca/samples/store/Makefile.am index 0277b96cfe..01f90d4a4a 100644 --- a/cpp/sca/samples/store/Makefile.am +++ b/cpp/sca/samples/store/Makefile.am @@ -15,27 +15,13 @@ # specific language governing permissions and limitations # under the License. -deploydir=$(prefix)/store/deploy -EXTRA_DIST = *.composite -deploy_DATA = *.composite - -storedir=$(deploydir) - store_PROGRAMS = store-test +storedir=$(prefix)/store/deploy -store_test_SOURCES = \ -store-test.cpp +store_test_SOURCES = store-test.cpp -store_test_LDADD = \ --L${TUSCANY_SCACPP}/lib \ - -ltuscany_sca \ --L${TUSCANY_SCACPP}/extensions/cpp/lib \ - -ltuscany_sca_cpp \ --L${TUSCANY_SDOCPP}/lib \ - -ltuscany_sdo +INCLUDES = -I. -I${TUSCANY_SCACPP}/include +store_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca -INCLUDES = \ --I$(TUSCANY_SCACPP)/extensions/cpp/include \ --I${TUSCANY_SCACPP}/include \ --I${TUSCANY_SDOCPP}/include \ --I. +EXTRA_DIST = *.composite +store_DATA = *.composite diff --git a/cpp/sca/samples/store2/Makefile.am b/cpp/sca/samples/store2/Makefile.am new file mode 100644 index 0000000000..a729335093 --- /dev/null +++ b/cpp/sca/samples/store2/Makefile.am @@ -0,0 +1,27 @@ +# 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. + +store2_PROGRAMS = store2-test +store2dir=$(prefix)/store2/deploy + +store2_test_SOURCES = store2-test.cpp + +INCLUDES = -I. -I${TUSCANY_SCACPP}/include +store2_test_LDADD = -L${TUSCANY_SCACPP}/lib -ltuscany_sca + +EXTRA_DIST = *.composite +store2_DATA = *.composite diff --git a/cpp/sca/samples/store2/cart.hpp b/cpp/sca/samples/store2/cart.hpp new file mode 100644 index 0000000000..f3b0f6195e --- /dev/null +++ b/cpp/sca/samples/store2/cart.hpp @@ -0,0 +1,70 @@ +/* + * 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$ */ + +#ifndef tuscany_cart_hpp +#define tuscany_cart_hpp + +#include <string> +#include "service.hpp" +#include "item.hpp" + +namespace store +{ + +const double accumTotal(const double total, const ItemType& item) { + return total + itemPrice(item); +} + +tuscany::list<ItemType> cart; + +const tuscany::list<ItemType> shoppingCart_getAll() { + return cart; +} + +const bool shoppingCart_post(const ItemType& item) { + cart = cons(item, cart); + return true; +} + +const bool shoppingCart_deleteAll() { + cart = tuscany::list<ItemType>(); + return true; +} + +const double shoppingCart_getTotal() { + tuscany::lambda<double(double, ItemType)> a(accumTotal); + return reduce(a, 0.0, cart); +} + +const tuscany::value shoppingCart_service(const tuscany::list<tuscany::value>& args) { + if (car(args) == "getAll") + return shoppingCart_getAll(); + if (car(args) == "post") + return shoppingCart_post(cadr(args)); + if (car(args) == "deleteAll") + return shoppingCart_deleteAll(); + if (car(args) == "getTotal") + return shoppingCart_getTotal(); + return tuscany::value(); +} + +} +#endif /* tuscany_cart_hpp */ diff --git a/cpp/sca/samples/store2/catalog.hpp b/cpp/sca/samples/store2/catalog.hpp new file mode 100644 index 0000000000..82a2a458a9 --- /dev/null +++ b/cpp/sca/samples/store2/catalog.hpp @@ -0,0 +1,54 @@ +/* + * 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$ */ + +#ifndef tuscany_catalog_hpp +#define tuscany_catalog_hpp + +#include <string> +#include "service.hpp" +#include "currency.hpp" +#include "item.hpp" + +namespace store +{ + +std::string catalog_currencyCode = "USD"; + +double catalog_convert(const service& currencyConverter, const double price) { + return currencyConverter(makeList(tuscany::value("convert"), tuscany::value("USD"), tuscany::value(catalog_currencyCode), tuscany::value(price))); +} + +const tuscany::list<ItemType> catalog_get(const service& currencyConverter) { + const std::string currencySymbol = currencyConverter_service(makeList(tuscany::value("getSymbol"), tuscany::value(catalog_currencyCode))); + return makeList( + makeItem("Apple", catalog_currencyCode, currencySymbol, catalog_convert(currencyConverter, 2.99)), + makeItem("Orange", catalog_currencyCode, currencySymbol, catalog_convert(currencyConverter, 3.55)), + makeItem("Pear", catalog_currencyCode, currencySymbol, catalog_convert(currencyConverter, 1.55))); +} + +const tuscany::value catalog_service(const service& currencyConverter, const tuscany::list<tuscany::value>& args) { + if (car(args) == "get") + return catalog_get(currencyConverter); + return tuscany::value(); +} + +} +#endif /* tuscany_catalog_hpp */ diff --git a/cpp/sca/samples/store2/catalogs.composite b/cpp/sca/samples/store2/catalogs.composite new file mode 100644 index 0000000000..1638ed0a05 --- /dev/null +++ b/cpp/sca/samples/store2/catalogs.composite @@ -0,0 +1,43 @@ +<?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/200903" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" + targetNamespace="http://services" + name="catalogs"> + + <component name="FruitsCatalogWebService"> + <implementation.java class="services.FruitsCatalogImpl"/> + <service name="Catalog"> + <binding.ws/> + </service> + <property name="currencyCode">USD</property> + <reference name="currencyConverter" target="CurrencyConverterWebService"> + <binding.ws/> + </reference> + </component> + + <component name="VegetablesCatalogWebService"> + <implementation.java class="services.VegetablesCatalogImpl"/> + <service name="Catalog"> + <binding.ws/> + </service> + </component> + +</composite> diff --git a/cpp/sca/samples/store2/currency-composite.hpp b/cpp/sca/samples/store2/currency-composite.hpp new file mode 100644 index 0000000000..ae28471538 --- /dev/null +++ b/cpp/sca/samples/store2/currency-composite.hpp @@ -0,0 +1,37 @@ +/* + * 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$ */ + +#ifndef tuscany_currencycomposite_hpp +#define tuscany_currencycomposite_hpp + +#include <string> +#include "service.hpp" +#include "currency.hpp" + +namespace store +{ + +const tuscany::value currency_service(const tuscany::list<tuscany::value>& args) { + return currencyConverter_service(args); +} + +} +#endif /* tuscany_currencycomposite_hpp */ diff --git a/cpp/sca/samples/store2/currency.composite b/cpp/sca/samples/store2/currency.composite new file mode 100644 index 0000000000..aefd474f1f --- /dev/null +++ b/cpp/sca/samples/store2/currency.composite @@ -0,0 +1,32 @@ +<?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/200903" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" + targetNamespace="http://services" + name="currency"> + + <component name="CurrencyConverterWebService"> + <implementation.java class="services.CurrencyConverterImpl"/> + <service name="CurrencyConverter"> + <binding.ws/> + </service> + </component> + +</composite> diff --git a/cpp/sca/samples/store2/currency.hpp b/cpp/sca/samples/store2/currency.hpp new file mode 100644 index 0000000000..453a5e1e81 --- /dev/null +++ b/cpp/sca/samples/store2/currency.hpp @@ -0,0 +1,58 @@ +/* + * 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$ */ + +#ifndef tuscany_currency_hpp +#define tuscany_currency_hpp + +#include <math.h> +#include <string> +#include "service.hpp" +#include "item.hpp" + +namespace store +{ + +const double currencyConverter_convert(const std::string& fromCurrencyCode, const std::string& toCurrencyCode, const double amount) { + if(toCurrencyCode == "USD") + return amount; + if(toCurrencyCode == "EUR") + return round(amount * 0.7256 * 100) / 100; + return amount; +} + +const std::string currencyConverter_getSymbol(const std::string& currencyCode) { + if(currencyCode == "USD") + return "$"; + if(currencyCode == "EUR") + return "E"; + return "?"; +} + +const tuscany::value currencyConverter_service(const tuscany::list<tuscany::value>& args) { + if (car(args) == "convert") + return currencyConverter_convert(cadr(args), car(cdr(cdr(args))), car(cdr(cdr(cdr(args))))); + if (car(args) == "getSymbol") + return currencyConverter_getSymbol(cadr(args)); + return tuscany::value(); +} + +} +#endif /* tuscany_currency_hpp */ diff --git a/cpp/sca/samples/store2/item.hpp b/cpp/sca/samples/store2/item.hpp new file mode 100644 index 0000000000..8a121124a3 --- /dev/null +++ b/cpp/sca/samples/store2/item.hpp @@ -0,0 +1,54 @@ +/* + * 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$ */ + +#ifndef tuscany_item_hpp +#define tuscany_item_hpp + +#include <string> +#include "service.hpp" + +namespace store +{ + +typedef tuscany::value ItemType; + +const ItemType makeItem(const std::string& name, const std::string& currencyCode, const std::string& currencySymbol, const double price) { + return tuscany::value(makeList(tuscany::value(name), tuscany::value(currencyCode), tuscany::value(currencySymbol), tuscany::value(price))); +} + +const std::string itemName(const ItemType& item) { + return car((tuscany::list<tuscany::value>)item); +} + +const std::string itemCurrencyCode(const ItemType& item) { + return car(cdr((tuscany::list<tuscany::value>)item)); +} + +const std::string itemCurrencySymbol(const ItemType& item) { + return car(cdr(cdr((tuscany::list<tuscany::value>)item))); +} + +const double itemPrice(const ItemType& item) { + return car(cdr(cdr(cdr((tuscany::list<tuscany::value>)item)))); +} + +} +#endif /* tuscany_item_hpp */ diff --git a/cpp/sca/samples/store2/service.hpp b/cpp/sca/samples/store2/service.hpp new file mode 100644 index 0000000000..9cf8abdb52 --- /dev/null +++ b/cpp/sca/samples/store2/service.hpp @@ -0,0 +1,35 @@ +/* + * 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$ */ + +#ifndef tuscany_service_hpp +#define tuscany_service_hpp + +#include "tuscany/function.hpp" +#include "tuscany/list.hpp" +#include "tuscany/value.hpp" + +namespace store +{ + +typedef tuscany::lambda<tuscany::value(tuscany::list<tuscany::value>)> service; + +} +#endif /* tuscany_service_hpp */ diff --git a/cpp/sca/samples/store2/store-composite.hpp b/cpp/sca/samples/store2/store-composite.hpp new file mode 100644 index 0000000000..351c905eae --- /dev/null +++ b/cpp/sca/samples/store2/store-composite.hpp @@ -0,0 +1,47 @@ +/* + * 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$ */ + +#ifndef tuscany_storecomposite_hpp +#define tuscany_storecomposite_hpp + +#include <string> +#include "service.hpp" +#include "currency.hpp" +#include "currency-composite.hpp" +#include "item.hpp" +#include "catalog.hpp" +#include "cart.hpp" +#include "store-ui.hpp" + +namespace store +{ + +const tuscany::value store_service(const service& currency, const tuscany::list<tuscany::value>& args) { + const tuscany::lambda<tuscany::value(service, tuscany::list<tuscany::value>)> catalogService(catalog_service); + const service catalog(curry(catalogService, currency)); + const service cart(shoppingCart_service); + const tuscany::lambda<tuscany::value(service, service, tuscany::list<tuscany::value>)> storeUIService(storeUI_service); + const service configuredStoreUIService(curry(storeUIService, catalog, cart)); + return configuredStoreUIService(args); +} + +} +#endif /* tuscany_storecomposite_hpp */ diff --git a/cpp/sca/samples/store2/store-solution.hpp b/cpp/sca/samples/store2/store-solution.hpp new file mode 100644 index 0000000000..e0addcba12 --- /dev/null +++ b/cpp/sca/samples/store2/store-solution.hpp @@ -0,0 +1,41 @@ +/* + * 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$ */ + +#ifndef tuscany_storesolution_hpp +#define tuscany_storesolution_hpp + +#include <string> +#include "service.hpp" +#include "store-composite.hpp" +#include "currency-composite.hpp" + +namespace store +{ + +const tuscany::value storeSolution_service(const tuscany::list<tuscany::value>& args) { + const service currency(currency_service); + const tuscany::lambda<tuscany::value(service, tuscany::list<tuscany::value>)> storeService(store_service); + const service configuredStoreService(curry(storeService, currency)); + return configuredStoreService(args); +} + +} +#endif /* tuscany_storesolution_hpp */ diff --git a/cpp/sca/samples/store2/store-ui.hpp b/cpp/sca/samples/store2/store-ui.hpp new file mode 100644 index 0000000000..3be7480339 --- /dev/null +++ b/cpp/sca/samples/store2/store-ui.hpp @@ -0,0 +1,64 @@ +/* + * 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$ */ + +#ifndef tuscany_storeui_hpp +#define tuscany_storeui_hpp + +#include <string> +#include "service.hpp" +#include "currency.hpp" +#include "item.hpp" +#include "catalog.hpp" +#include "cart.hpp" + +namespace store +{ + +const tuscany::list<ItemType> storeUI_getCatalog(const service& catalog) { + return catalog(makeList(tuscany::value("get"))); +} + +const tuscany::list<ItemType> storeUI_getCart(const service& cart) { + return cart(makeList(tuscany::value("getAll"))); +} + +const double storeUI_getTotal(const service& cart) { + return cart(makeList(tuscany::value("getTotal"))); +} + +const bool storeUI_post(const service& cart, const ItemType& item) { + return cart(makeList(tuscany::value("post"), tuscany::value(item))); +} + +const tuscany::value storeUI_service(const service& catalog, const service& cart, const tuscany::list<tuscany::value>& args) { + if (car(args) == "getCatalog") + return storeUI_getCatalog(catalog); + if (car(args) == "getCart") + return storeUI_getCart(cart); + if (car(args) == "getTotal") + return storeUI_getTotal(cart); + if (car(args) == "post") + return storeUI_post(cart, cadr(args)); + return tuscany::value(); +} + +} +#endif /* STOREUI_HPP_ */ diff --git a/cpp/sca/samples/store2/store.composite b/cpp/sca/samples/store2/store.composite new file mode 100644 index 0000000000..124adff853 --- /dev/null +++ b/cpp/sca/samples/store2/store.composite @@ -0,0 +1,64 @@ +<?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/200903" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1" + targetNamespace="http://store" + name="store"> + + <component name="Store"> + <t:implementation.widget location="uiservices/store.html"/> + <service name="Widget"> + <t:binding.http uri="/ui"/> + </service> + <reference name="catalog" target="StoreCatalog"> + <t:binding.jsonrpc/> + </reference> + <reference name="shoppingCart" target="StoreShoppingCart/Cart"> + <t:binding.atom/> + </reference> + <reference name="shoppingTotal" target="StoreShoppingCart/Total"> + <t:binding.jsonrpc/> + </reference> + </component> + + <component name="StoreCatalog"> + <implementation.java class="services.FruitsCatalogImpl"/> + <property name="currencyCode">USD</property> + <service name="Catalog"> + <t:binding.jsonrpc/> + </service> + <reference name="currencyConverter" target="StoreCurrencyConverter"/> + </component> + + <component name="StoreShoppingCart"> + <implementation.java class="services.ShoppingCartImpl"/> + <service name="Cart"> + <t:binding.atom uri="/ShoppingCart/Cart"/> + </service> + <service name="Total"> + <t:binding.jsonrpc/> + </service> + </component> + + <component name="StoreCurrencyConverter"> + <implementation.java class="services.CurrencyConverterImpl"/> + </component> + +</composite> diff --git a/cpp/sca/samples/store2/store2-test.cpp b/cpp/sca/samples/store2/store2-test.cpp new file mode 100644 index 0000000000..e71ecfd633 --- /dev/null +++ b/cpp/sca/samples/store2/store2-test.cpp @@ -0,0 +1,50 @@ +/* + * 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$ */ + +/** + * Store Test case. + */ + +#include <assert.h> +#include <iostream> +#include <string> +#include "store-solution.hpp" + +namespace store +{ + +bool testComponentAssembly() { + const service store(storeSolution_service); + assert(length((tuscany::list<tuscany::value>)store(makeList(tuscany::value("getCatalog")))) == 3); + return true; +} + +} + +int main() { + + std::cout << "Testing..." << std::endl; + + store::testComponentAssembly(); + std::cout << "OK" << std::endl; + + return 0; +} |