diff options
Diffstat (limited to 'sca-java-1.x/branches/sca-java-1.1/samples/store')
14 files changed, 1075 insertions, 0 deletions
diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/README b/sca-java-1.x/branches/sca-java-1.1/samples/store/README new file mode 100644 index 0000000000..ff3b99d64b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/README @@ -0,0 +1,28 @@ +Store Sample +====================================== + +This is a sample store scenario that is used as a getting started guide +for Tuscany SCA. For detailed information, please see : + +http://incubator.apache.org/tuscany/getting-started-with-tuscany.html + +or + +http://incubator.apache.org/tuscany/getting-started-with-tuscany-using-tuscany-eclipse-plugin.html + + +Building And Running The Sample Using Ant +----------------------------------------- +With the binary distribution the sample can be built using Ant as +follows + +cd store +ant compile + +and then, to run + +ant run + +Once the web app is deployed use your browser to visit the following URL; + +http://localhost:8080/store/store.html diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/build.xml b/sca-java-1.x/branches/sca-java-1.1/samples/store/build.xml new file mode 100644 index 0000000000..652afc3570 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/build.xml @@ -0,0 +1,79 @@ +<!-- + * 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. +--> +<project name="store" default="compile"> + <property name="test.class" value="launch.Launch" /> + <property name="test.jar" value="sample-store.jar" /> + + <target name="init"> + <mkdir dir="target/classes"/> + </target> + + <target name="compile" depends="init"> + <javac srcdir="src/main/java" + destdir="target/classes" + debug="on" + source="1.5" + target="1.5"> + <classpath> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + <fileset refid="3rdparty.jars"/> + </classpath> + </javac> + <copy todir="target/classes"> + <fileset dir="src/main/resources"/> + </copy> + <jar destfile="target/${test.jar}" basedir="target/classes"> + <manifest> + <attribute name="Main-Class" value="${test.class}" /> + </manifest> + </jar> + </target> + + <target name="run-classes"> + <java classname="${test.class}" + fork="true"> + <classpath> + <pathelement path="target/classes"/> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + <fileset refid="3rdparty.jars"/> + </classpath> + </java> + </target> + + <target name="run"> + <java classname="${test.class}" + fork="true"> + <classpath> + <pathelement path="target/classes"/> + <pathelement location="../../lib/tuscany-sca-manifest.jar"/> + <fileset refid="3rdparty.jars"/> + </classpath> + </java> + </target> + + <target name="clean"> + <delete quiet="true" includeemptydirs="true"> + <fileset dir="target"/> + </delete> + </target> + + <fileset id="3rdparty.jars" dir="../../lib"> + <include name="saxon-9.0.0.2.jar"/> + </fileset> +</project> diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/pom.xml b/sca-java-1.x/branches/sca-java-1.1/samples/store/pom.xml new file mode 100644 index 0000000000..13e9eddda1 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/pom.xml @@ -0,0 +1,99 @@ +<?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. +--> +<project> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-sca</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <relativePath>../pom.xml</relativePath> + </parent> + <artifactId>sample-store</artifactId> + <name>Apache Tuscany SCA Getting Started Online Store Sample</name> + + <repositories> + <repository> + <id>apache.incubator</id> + <url>http://people.apache.org/repo/m2-incubating-repository</url> + </repository> + </repositories> + + <dependencies> + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-embedded</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-implementation-java-runtime</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-implementation-widget</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-feed</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-jsonrpc</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-binding-http</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>tuscany-host-tomcat</artifactId> + <version>1.1-incubating-SNAPSHOT</version> + <scope>runtime</scope> + </dependency> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.2</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <finalName>${artifactId}</finalName> + </build> + +</project> diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/launch/Launch.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/launch/Launch.java new file mode 100644 index 0000000000..801697abea --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/launch/Launch.java @@ -0,0 +1,34 @@ +/* + * 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 launch; + +import org.apache.tuscany.sca.host.embedded.SCADomain; + +public class Launch { + public static void main(String[] args) throws Exception { + System.out.println("Starting ..."); + SCADomain scaDomain = SCADomain.newInstance("store.composite"); + System.out.println("store.composite ready for big business !!!"); + System.in.read(); + System.out.println("Stopping ..."); + scaDomain.close(); + System.out.println(); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/Catalog.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/Catalog.java new file mode 100644 index 0000000000..9f784b0848 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/Catalog.java @@ -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. + */ + +package services; + +import org.osoa.sca.annotations.Remotable; + +@Remotable +public interface Catalog { + String[] get(); +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CatalogImpl.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CatalogImpl.java new file mode 100644 index 0000000000..fd44c66bf6 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CatalogImpl.java @@ -0,0 +1,49 @@ +/* + * 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 services; + +import java.util.ArrayList; +import java.util.List; + +import org.osoa.sca.annotations.Init; +import org.osoa.sca.annotations.Property; +import org.osoa.sca.annotations.Reference; + +public class CatalogImpl implements Catalog { + @Property + public String currencyCode = "USD"; + @Reference + public CurrencyConverter currencyConverter; + private List<String> catalog = new ArrayList<String>(); + + @Init + public void init() { + String currencySymbol = currencyConverter.getCurrencySymbol(currencyCode); + catalog.add("Apple - " + currencySymbol + currencyConverter.getConversion("USD", currencyCode, 2.99f)); + catalog.add("Orange - " + currencySymbol + currencyConverter.getConversion("USD", currencyCode, 3.55f)); + catalog.add("Pear - " + currencySymbol + currencyConverter.getConversion("USD", currencyCode, 1.55f)); + } + + public String[] get() { + String[] catalogArray = new String[catalog.size()]; + catalog.toArray(catalogArray); + return catalogArray; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverter.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverter.java new file mode 100644 index 0000000000..8b0f70907d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverter.java @@ -0,0 +1,29 @@ +/* + * 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 services; + +import org.osoa.sca.annotations.Remotable; + +@Remotable +public interface CurrencyConverter { + public float getConversion(String fromCurrenycCode, String toCurrencyCode, float amount); + + public String getCurrencySymbol(String currencyCode); +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverterImpl.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverterImpl.java new file mode 100644 index 0000000000..56b5a64c8a --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/CurrencyConverterImpl.java @@ -0,0 +1,46 @@ +/* + * 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 services; + +import org.osoa.sca.annotations.Property; + +public class CurrencyConverterImpl implements CurrencyConverter { + @Property + public Float rate = 0.7256f; + + public float getConversion(String fromCurrencyCode, String toCurrencyCode, float amount) { + if (fromCurrencyCode.equals(toCurrencyCode)) + return amount; + + if (toCurrencyCode.equals("USD")) + return amount / rate; + else if (toCurrencyCode.equals("EUR")) + return amount * rate; + return 0; + } + + public String getCurrencySymbol(String currencyCode) { + if (currencyCode.equals("USD")) + return "$ "; + else if (currencyCode.equals("EUR")) + return "€ "; + return "?"; + } +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/ShoppingCartImpl.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/ShoppingCartImpl.java new file mode 100644 index 0000000000..41e9a9eaa3 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/services/ShoppingCartImpl.java @@ -0,0 +1,105 @@ +/* + * 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 services; + +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import org.apache.tuscany.sca.binding.feed.collection.Collection; +import org.apache.tuscany.sca.binding.feed.collection.NotFoundException; + +import com.sun.syndication.feed.atom.Content; +import com.sun.syndication.feed.atom.Entry; +import com.sun.syndication.feed.atom.Feed; +import com.sun.syndication.feed.atom.Link; + +public class ShoppingCartImpl implements Collection { + + private static Map<String, Entry> cart = new HashMap<String, Entry>(); + + public Feed getFeed() { + Feed feed = new Feed(); + feed.setTitle("shopping cart"); + Content subtitle = new Content(); + subtitle.setValue("Total : " + getTotal()); + feed.setSubtitle(subtitle); + feed.getEntries().addAll(cart.values()); + return feed; + } + + public Entry get(String id) throws NotFoundException { + return cart.get(id); + } + + public Entry post(Entry entry) { + System.out.println("post" + entry); + String id = "cart-" + UUID.randomUUID().toString(); + entry.setId(id); + + Link link = new Link(); + link.setRel("edit"); + link.setHref(id); + entry.getOtherLinks().add(link); + link = new Link(); + link.setRel("alternate"); + link.setHref(id); + entry.getAlternateLinks().add(link); + + entry.setCreated(new Date()); + + cart.put(id, entry); + return entry; + } + + public void put(String id, Entry entry) throws NotFoundException { + entry.setUpdated(new Date()); + cart.put(id, entry); + } + + public void delete(String id) throws NotFoundException { + if (id.equals("")) + cart.clear(); + else + cart.remove(id); + } + + private String getTotal() { + float total = 0; + String currencySymbol = ""; + if (!cart.isEmpty()) { + String item = ((Content)cart.values().iterator().next().getContents().get(0)).getValue(); + currencySymbol = item.substring(item.indexOf("-") + 2, item.indexOf("-") + 3); + } + for (Entry entry : cart.values()) { + String item = ((Content)entry.getContents().get(0)).getValue(); + + int index = item.length()-1; + char digit; + while ((digit = item.charAt(index)) == '.' || Character.isDigit(digit)) { + index--; + } + + total += Float.valueOf(item.substring(index)); + } + return currencySymbol + String.valueOf(total); + } +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/util/CreateDB.java b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/util/CreateDB.java new file mode 100644 index 0000000000..b8177ee25b --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/java/util/CreateDB.java @@ -0,0 +1,97 @@ +/* + * 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 util; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class CreateDB { + + public static void main(String[] args) { + System.out.println("Creating database ..."); + + Connection connection = null; + PreparedStatement preparedStatement = null; + + try { + //initialize driver and register it with DriverManager + Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); + + //connect and create the db if not present + connection = DriverManager.getConnection( + "jdbc:derby:target/store_db;create=true", + "", + ""); + + + try { + preparedStatement = connection.prepareStatement("DROP TABLE CATALOG"); + preparedStatement.execute(); + }catch(Exception e) { + //ignore to avoid erros when db is being created from scratch + } + + + preparedStatement = connection.prepareStatement("CREATE TABLE CATALOG(" + + "id NUMERIC(5 , 0) NOT NULL," + + "product_name VARCHAR(30)," + + "currency_code CHAR(3)," + + "price REAL," + + "primary key (id)" + + ")"); + preparedStatement.execute(); + + preparedStatement = connection.prepareStatement("INSERT INTO CATALOG VALUES(0,'Apple', 'USD', 2.99)"); + preparedStatement.execute(); + + preparedStatement = connection.prepareStatement("INSERT INTO CATALOG VALUES(1,'Orange', 'USD', 3.55)"); + preparedStatement.execute(); + + preparedStatement = connection.prepareStatement("INSERT INTO CATALOG VALUES(2,'Pear', 'USD', 1.55)"); + preparedStatement.execute(); + + System.out.println("Done !"); + + } catch (SQLException ex) { + ex.printStackTrace(); + }catch (ClassNotFoundException ex) { + ex.printStackTrace(); + } finally { + if (preparedStatement!=null) { + try { + preparedStatement.close(); + } catch (SQLException ex) { + ex.printStackTrace(); + } + } + + if (connection!=null) { + try { + connection.close(); + } catch (SQLException ex) { + ex.printStackTrace(); + } + } + } + } + +} diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/store.composite b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/store.composite new file mode 100644 index 0000000000..a2933104b5 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/store.composite @@ -0,0 +1,59 @@ +<?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://www.osoa.org/xmlns/sca/1.0" + xmlns:t="http://tuscany.apache.org/xmlns/sca/1.0" + targetNamespace="http://store" + name="store"> + + <component name="store"> + <t:implementation.widget location="ufservices/store.html"/> + <service name="Widget"> + <t:binding.http/> + </service> + <reference name="catalog" target="Catalog"> + <t:binding.jsonrpc/> + </reference> + <reference name="shoppingCart" target="ShoppingCart"> + <t:binding.atom/> + </reference> + </component> + + <component name="Catalog"> + <implementation.java class="services.CatalogImpl"/> + <property name="currencyCode">USD</property> + <service name="Catalog"> + <t:binding.jsonrpc/> + </service> + <reference name="currencyConverter" target="CurrencyConverter"/> + </component> + + <component name="ShoppingCart"> + <implementation.java class="services.ShoppingCartImpl"/> + <service name="Collection"> + <t:binding.atom/> + </service> + </component> + + <component name="CurrencyConverter"> + <implementation.java class="services.CurrencyConverterImpl"/>
+ <property name="rate">0.7256</property> + </component> + +</composite> diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/ufservices/store.html b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/ufservices/store.html new file mode 100644 index 0000000000..abef20a494 --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/src/main/resources/ufservices/store.html @@ -0,0 +1,119 @@ +<!-- + * 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>Store</TITLE>
+
+<script type="text/javascript" src="store.js"></script>
+ +<script language="JavaScript">
+
+ //@Reference
+ var catalog = new Reference("catalog"); +
+ //@Reference
+ var shoppingCart = new Reference("shoppingCart");
+ +
+ function catalog_getResponse(items) {
+ var catalog = "";
+ for (var i=0; i<items.length; i++)
+ catalog += '<input name="items" type="checkbox" value="' +
+ items[i] + '">' + items[i]+ ' <br>';
+ document.getElementById('catalog').innerHTML=catalog;
+ }
+
+ function shoppingCart_getResponse(feed) {
+ if (feed != null) {
+ var entries = feed.getElementsByTagName("entry");
+ var list = "";
+ for (var i=0; i<entries.length; i++) {
+ var item = entries[i].getElementsByTagName("content")[0].firstChild.nodeValue;
+ list += item + ' <br>'; + }
+ document.getElementById("shoppingCart").innerHTML = list; + document.getElementById('total').innerHTML = feed.getElementsByTagName("subtitle")[0].firstChild.nodeValue;
+ }
+ }
+ function shoppingCart_postResponse(entry) {
+ shoppingCart.get("", shoppingCart_getResponse);
+ }
+
+
+ function addToCart() {
+ var items = document.catalogForm.items;
+ var j = 0;
+ for (var i=0; i<items.length; i++)
+ if (items[i].checked) {
+ var entry = '<entry xmlns="http://www.w3.org/2005/Atom"><title>cart-item</title><content type="text">'+items[i].value+'</content></entry>'
+ shoppingCart.post(entry, shoppingCart_postResponse);
+ items[i].checked = false;
+ }
+ }
+ function checkoutCart() {
+ document.getElementById('store').innerHTML='<h2>' +
+ 'Thanks for Shopping With Us!</h2>'+
+ '<h2>Your Order</h2>'+
+ '<form name="orderForm" action="store.html">'+
+ document.getElementById('shoppingCart').innerHTML+
+ '<br>'+
+ document.getElementById('total').innerHTML+
+ '<br>'+
+ '<br>'+
+ '<input type="submit" value="Continue Shopping">'+
+ '</form>';
+ shoppingCart.del("", null);
+ }
+ function deleteCart() {
+ shoppingCart.del("", null);
+ document.getElementById('shoppingCart').innerHTML = "";
+ document.getElementById('total').innerHTML = "";
+ }
+
+ catalog.get(catalog_getResponse);
+ shoppingCart.get("", shoppingCart_getResponse); +</script>
+
+</head>
+
+<body>
+<h1>Store</h1>
+ <div id="store">
+ <h2>Catalog</h2>
+ <form name="catalogForm">
+ <div id="catalog" ></div>
+ <br>
+ <input type="button" onClick="addToCart()" value="Add to Cart">
+ </form>
+
+ <br>
+
+ <h2>Your Shopping Cart</h2> + <form name="shoppingCartForm">
+ <div id="shoppingCart"></div> + <br> + <div id="total"></div>
+ <br>
+ <input type="button" onClick="checkoutCart()" value="Checkout">
+ <input type="button" onClick="deleteCart()" value="Empty">
+ <a href="../ShoppingCart/">(feed)</a> + </form>
+ </div>
+</body>
+</html>
diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/store.png b/sca-java-1.x/branches/sca-java-1.1/samples/store/store.png Binary files differnew file mode 100644 index 0000000000..da413edeee --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/store.png diff --git a/sca-java-1.x/branches/sca-java-1.1/samples/store/store.svg b/sca-java-1.x/branches/sca-java-1.1/samples/store/store.svg new file mode 100644 index 0000000000..74f8ecd36d --- /dev/null +++ b/sca-java-1.x/branches/sca-java-1.1/samples/store/store.svg @@ -0,0 +1,304 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- + * 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. +--> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1052.3622" + height="744.09448" + id="svg2" + sodipodi:version="0.32" + inkscape:version="0.45.1" + sodipodi:docbase="C:\simon\tuscany\java-head\sca\samples\store" + sodipodi:docname="store.svg" + version="1.0" + inkscape:output_extension="org.inkscape.output.svg.inkscape" + inkscape:export-filename="C:\simon\tuscany\java-head\sca\samples\store\store.png" + inkscape:export-xdpi="52.84" + inkscape:export-ydpi="52.84"> + <defs + id="defs4" /> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + gridtolerance="10000" + guidetolerance="10" + objecttolerance="10" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.4" + inkscape:cx="538.06165" + inkscape:cy="341.69129" + inkscape:document-units="px" + inkscape:current-layer="g2997" + inkscape:window-width="1466" + inkscape:window-height="831" + inkscape:window-x="117" + inkscape:window-y="80" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g2997"> + <rect + rx="14.335117" + ry="17.743465" + y="197.1973" + x="447.35422" + height="419.39099" + width="464.23727" + id="rect2067" + style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.28840661;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> + <flowRoot + id="flowRoot2954" + xml:space="preserve" + transform="translate(189.90868,1.0101522)"><flowRegion + id="flowRegion2956"><rect + y="212.66591" + x="281.42856" + height="61.42857" + width="170" + id="rect2958" /></flowRegion><flowPara + id="flowPara2171">store</flowPara></flowRoot> <rect + style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.30182266;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2175" + width="118.21779" + height="111.27543" + x="491.60019" + y="247.75989" + rx="7.1507306" + ry="9.2311935" /> + <flowRoot + xml:space="preserve" + id="flowRoot2177" + transform="translate(223.8585,41.670449)"><flowRegion + id="flowRegion2179"><rect + id="rect2181" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" /></flowRegion><flowPara + id="flowPara2183">ufs</flowPara></flowRoot> <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 474.29877,279.45598 L 507.63381,279.45598 L 513.69472,292.58796 L 506.62366,304.7098 L 474.29877,304.7098 L 481.87492,292.58796 L 474.29877,279.45598 z " + id="path2187" /> + <rect + style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2191" + width="115.66247" + height="85.862968" + x="493.07068" + y="503.27759" + rx="6.9961648" + ry="7.1230249" /> + <flowRoot + xml:space="preserve" + id="flowRoot2193" + transform="translate(225.47992,297.33908)"><flowRegion + id="flowRegion2195"><rect + id="rect2197" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" /></flowRegion><flowPara + id="flowPara2199">ShoppingCart</flowPara></flowRoot> <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 475.92019,535.12461 L 509.25523,535.12461 L 515.31614,548.25659 L 508.24508,560.37843 L 475.92019,560.37843 L 483.49634,548.25659 L 475.92019,535.12461 z " + id="path2203" /> + <rect + style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2207" + width="115.66247" + height="85.862968" + x="761.44415" + y="391.31604" + rx="6.9961648" + ry="7.1230249" /> + <flowRoot + xml:space="preserve" + id="flowRoot2209" + transform="translate(487.8534,185.37751)"><flowRegion + id="flowRegion2211"><rect + id="rect2213" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" /></flowRegion><flowPara + id="flowPara2215">CurrencyConverter</flowPara></flowRoot> <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 744.29367,423.16304 L 777.62871,423.16304 L 783.68962,436.29502 L 776.61856,448.41686 L 744.29367,448.41686 L 751.86982,436.29502 L 744.29367,423.16304 z " + id="path2219" /> + <rect + style="opacity:1;fill:#0064ff;fill-opacity:1;stroke:#000000;stroke-width:0.9612025;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2223" + width="104.08451" + height="113.17588" + x="138.37151" + y="350.1156" + rx="0" + ry="0.048917599" /> + <path + style="fill:#1a73fe;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1" + d="M 138.21429,462.66591 L 115.35714,479.80877 L 267.85714,479.80877 L 241.78571,463.02305 L 138.21429,462.66591 z " + id="path3197" /> + <rect + style="opacity:1;fill:#f1f4f8;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3199" + width="92.5" + height="97.14286" + x="143.57143" + y="358.38019" + ry="3.6203461" + rx="3.9285715" /> + <image + y="366.6889" + x="156.24066" + id="image3323" + height="78.571434" + width="58.57143" + sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" + xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" /> + <image + y="270.52304" + x="526.42859" + id="image3342" + height="78.571434" + width="58.57143" + sodipodi:absref="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" + xlink:href="C:\simon\tuscany\evangelism\whitepapers\shoppingcart.png" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 242.85714,374.80877 C 245.71429,374.80877 345.71429,374.80877 345.71429,374.80877 L 345.71429,291.95162 L 481.42858,291.95162" + id="path3348" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 210.71429,406.95163 L 345,406.95163 L 345,437.66591 L 481.42857,437.66591" + id="path3350" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 210.71429,439.09448 L 325.71429,439.09448 L 325.71429,548.3802 L 482.85714,548.3802" + id="path3352" + sodipodi:nodetypes="cccc" /> + <path + style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 626.42857,436.23734 C 750,437.66591 752.14286,436.23734 752.14286,436.23734" + id="path3354" + sodipodi:nodetypes="cc" /> + <flowRoot + xml:space="preserve" + id="flowRoot3356" + transform="translate(-94.285714,25)"><flowRegion + id="flowRegion3358"><rect + id="rect3360" + width="142.14285" + height="21.428572" + x="655" + y="349.80878" /></flowRegion><flowPara + id="flowPara3362">CurrenyCode</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3364" + transform="translate(-250.76562,-76.210859)"><flowRegion + id="flowRegion3366"><rect + id="rect3368" + width="142.14285" + height="21.428572" + x="655" + y="349.80878" /></flowRegion><flowPara + id="flowPara3370">HTTP</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3372" + transform="translate(-273.62277,70.931998)"><flowRegion + id="flowRegion3374"><rect + id="rect3376" + width="142.14285" + height="21.428572" + x="655" + y="349.80878" /></flowRegion><flowPara + id="flowPara3378">JSONRPC</flowPara></flowRoot> <flowRoot + xml:space="preserve" + id="flowRoot3380" + transform="translate(-243.62277,183.07485)"><flowRegion + id="flowRegion3382"><rect + id="rect3384" + width="142.14285" + height="21.428572" + x="655" + y="349.80878" /></flowRegion><flowPara + id="flowPara3386">Atom</flowPara></flowRoot> </g> + <rect + style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect2988" + width="115.66247" + height="85.862968" + x="491.56897" + y="392.70135" + rx="6.9961648" + ry="7.1230249" /> + <flowRoot + xml:space="preserve" + id="flowRoot2966" + transform="translate(223.97819,186.76283)"><flowRegion + id="flowRegion2968"><rect + id="rect2970" + width="170" + height="61.42857" + x="281.42856" + y="212.66591" /></flowRegion><flowPara + id="flowPara2972">Catalog</flowPara></flowRoot> <rect + style="opacity:1;fill:#fff62c;fill-opacity:1;stroke:#060000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + id="rect3006" + width="21.718224" + height="20.708065" + x="537.53094" + y="377.04398" + rx="10.859112" + ry="0" /> + <path + style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 474.41846,424.54836 L 507.7535,424.54836 L 513.81441,437.68034 L 506.74335,449.80218 L 474.41846,449.80218 L 481.99461,437.68034 L 474.41846,424.54836 z " + id="path3017" /> + <path + style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 587.6709,422.71008 L 621.00594,422.71008 L 627.06685,435.84206 L 619.99579,447.9639 L 587.6709,447.9639 L 595.24705,435.84206 L 587.6709,422.71008 z " + id="path3019" /> + </g> +</svg> |