Author: jsdelfino
Date: Thu Nov  1 22:10:02 2007
New Revision: 591228

URL: http://svn.apache.org/viewvc?rev=591228&view=rev
Log:
First cut of implementation of shopping cart backed by a database using JDBC.

Added:
    incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql
Modified:
    incubator/tuscany/java/sca/tutorial/assets/pom.xml
    
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
    incubator/tuscany/java/sca/tutorial/pom.xml
    incubator/tuscany/java/sca/tutorial/store/   (props changed)
    incubator/tuscany/java/sca/tutorial/store-eu/   (props changed)
    incubator/tuscany/java/sca/tutorial/store-eu/pom.xml
    incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite
    incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java
    incubator/tuscany/java/sca/tutorial/store/pom.xml
    incubator/tuscany/java/sca/tutorial/store/store-db.composite

Modified: incubator/tuscany/java/sca/tutorial/assets/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/assets/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/assets/pom.xml Thu Nov  1 22:10:02 2007
@@ -44,15 +44,8 @@
 
         <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-implementation-data</artifactId>
             <version>1.1-incubating-SNAPSHOT</version>
-            <scope>runtime</scope>
         </dependency>
 
         <dependency>

Modified: 
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- 
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
 (original)
+++ 
incubator/tuscany/java/sca/tutorial/assets/services/db/ShoppingCartTableImpl.java
 Thu Nov  1 22:10:02 2007
@@ -19,112 +19,118 @@
 
 package services.db;
 
-import java.util.ArrayList;
-import java.util.Date;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
 import java.util.HashMap;
-import java.util.List;
 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 org.apache.tuscany.sca.implementation.data.collection.Collection;
+import org.apache.tuscany.sca.implementation.data.collection.NotFoundException;
+import org.osoa.sca.ServiceRuntimeException;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Property;
 
-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;
+import services.Total;
 
-public class ShoppingCartTableImpl implements Collection {
+public class ShoppingCartTableImpl implements Collection<String, String>, 
Total {
     
-    private static Map<String, String> cart = new HashMap<String, String>();
-
-    public Feed getFeed() {
-        Feed feed = new Feed();
-        feed.setTitle("shopping cart");
-        for (Map.Entry<String, String> item: getAllData().entrySet()) {
-            feed.getEntries().add(createEntry(item.getKey(), item.getValue()));
-        }
-        return feed;
-    }
+    @Property
+    public String database;
     
-    private Entry createEntry(String key, String item) {
-        Entry entry = new Entry();
-        entry.setId(key);
-        entry.setTitle("cart-item");
-
-        Content content = new Content();
-        content.setType(Content.TEXT);
-        content.setValue(item);
-        List contents = new ArrayList();
-        contents.add(content);
-        entry.setContents(contents);
-
-        Link link = new Link();
-        link.setRel("edit");
-        link.setHref(key);
-        entry.getOtherLinks().add(link);
-        link = new Link();
-        link.setRel("alternate");
-        link.setHref(key);
-        entry.getAlternateLinks().add(link);
-
-        entry.setCreated(new Date());
-
-        return entry;
-    }
-
-    public Entry get(String id) throws NotFoundException {
-        return createEntry(id, cart.get(id));
-    }
-
-    public Entry post(Entry entry) {
-        System.out.println("post" + entry);
-        String item = ((Content)entry.getContents().get(0)).getValue();
-        String key = postData(item);
-        return createEntry(key, item);
-    }
-
-    public Entry put(String id, Entry entry) throws NotFoundException {
-        String item = ((Content)entry.getContents().get(0)).getValue();
-        item = putData(id, item);
-        return createEntry(id, item);
-    }
+    private Connection connection;
 
-    public void delete(String id) throws NotFoundException {
-        deleteData(id);
-    }
-
-    private Map<String, String> getAllData() {
-        return cart;
+    @Init
+    public void init() throws Exception {
+        Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
+        connection = DriverManager.getConnection("jdbc:derby:target/" + 
database, "", "");
+    }
+
+    public Map<String, String> getAll() {
+        try {
+            Statement statement = connection.createStatement();
+            ResultSet resultSet = statement.executeQuery("select * from Cart");
+            Map<String, String> result = new HashMap<String, String>();
+            while (resultSet.next()) {
+                result.put(resultSet.getString("id"), 
resultSet.getString("item"));
+            }
+            return result;
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
 
-    private String getData(String key) throws NotFoundException {
-        return cart.get(key);
+    public String get(String key) throws NotFoundException {
+        try {
+            Statement statement = connection.createStatement();
+            ResultSet resultSet = statement.executeQuery("select * from Cart 
where id = '" + key + "'");
+            if (resultSet.next()) {
+                return resultSet.getString("item");
+            } else {
+                throw new NotFoundException(key);
+            }
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
 
-    private String postData(String item) {
+    public String post(String item) {
         String key = "cart-" + UUID.randomUUID().toString();
-        cart.put(key, item);
+        try {
+            Statement statement = connection.createStatement();
+            statement.executeUpdate("insert into Cart values ('" + key + "', 
'" + item + "')");
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
         return key;
     }
 
-    private String putData(String key, String item) throws NotFoundException {
-        cart.put(key, item);
+    public String put(String key, String item) throws NotFoundException {
+        try {
+            Statement statement = connection.createStatement();
+            int count = statement.executeUpdate("update into Cart set item = 
'" + item + "' where id = '" + key + "'");
+            if (count == 0)
+                throw new NotFoundException(key);
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
         return item;
     }
     
-    private void deleteData(String key) throws NotFoundException {
-        if (key == null || key.equals(""))
-            cart.clear();
-        else
-            cart.remove(key);
+    public void delete(String key) throws NotFoundException {
+        try {
+            Statement statement = connection.createStatement();
+            if (key == null || key.equals("")) {
+                statement.executeUpdate("delete from Cart");
+            } else {
+                int count = statement.executeUpdate("delete from Cart where id 
= '" + key + "'");
+                if (count == 0)
+                    throw new NotFoundException(key);
+            }
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
 
-    private Map<String, String> queryData(String queryString) {
-        return getAllData();
+    public Map<String, String> query(String queryString) {
+        try {
+            Statement statement = connection.createStatement();
+            ResultSet resultSet = statement.executeQuery("select * from Cart 
where " + queryString);
+            Map<String, String> result = new HashMap<String, String>();
+            while (resultSet.next()) {
+                result.put(resultSet.getString("id"), 
resultSet.getString("item"));
+            }
+            return result;
+        } catch (SQLException e) {
+            throw new ServiceRuntimeException(e);
+        }
     }
     
     public String getTotal() {
+        Map<String, String> cart = getAll(); 
         double total = 0;
         String currencySymbol = "";
         if (!cart.isEmpty()) {

Added: incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql?rev=591228&view=auto
==============================================================================
--- incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql (added)
+++ incubator/tuscany/java/sca/tutorial/assets/services/db/cart.sql Thu Nov  1 
22:10:02 2007
@@ -0,0 +1,7 @@
+DROP TABLE CART;
+
+CREATE TABLE CART(
+   id VARCHAR(50) NOT NULL,
+   item VARCHAR(50),
+   primary key (id)
+);

Modified: incubator/tuscany/java/sca/tutorial/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/pom.xml Thu Nov  1 22:10:02 2007
@@ -39,7 +39,6 @@
                 <module>assets</module>
                 <module>cloud</module>
                 <module>store</module>
-                <module>store-db</module>
                 <module>store-eu</module>
                 <module>www-cloud</module>
             </modules>

Propchange: incubator/tuscany/java/sca/tutorial/store/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Nov  1 22:10:02 2007
@@ -13,3 +13,5 @@
 .wtpmodules
 build.xml
 work
+derby.log
+

Propchange: incubator/tuscany/java/sca/tutorial/store-eu/
------------------------------------------------------------------------------
--- svn:ignore (original)
+++ svn:ignore Thu Nov  1 22:10:02 2007
@@ -13,3 +13,5 @@
 .wtpmodules
 build.xml
 work
+derby.log
+

Modified: incubator/tuscany/java/sca/tutorial/store-eu/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store-eu/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store-eu/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/store-eu/pom.xml Thu Nov  1 22:10:02 
2007
@@ -135,6 +135,40 @@
                     </execution>
                 </executions>
             </plugin>
+
+               <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>sql-maven-plugin</artifactId>
+                    <version>1.0</version>
+       
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.derby</groupId>
+                            <artifactId>derby</artifactId>
+                            <version>10.1.2.1</version>
+                        </dependency>
+                    </dependencies>
+       
+                    <executions>
+                        <execution>
+                            <id>create-db</id>
+                            <phase>generate-resources</phase>
+                            <goals>
+                                <goal>execute</goal>
+                            </goals>
+                            <configuration>
+                                
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+                                
<url>jdbc:derby:target/cart-eu-db;create=true</url>
+                                <autocommit>true</autocommit>
+                                <onError>continue</onError>
+                                <delimiter>;</delimiter>
+                                <srcFiles>
+                                    
<srcFile>${pom.basedir}/../assets/services/db/cart.sql</srcFile>
+                                </srcFiles>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
        </plugins>
     </build>
 

Modified: incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite (original)
+++ incubator/tuscany/java/sca/tutorial/store-eu/store-eu.composite Thu Nov  1 
22:10:02 2007
@@ -52,6 +52,7 @@
        
        <component name="ShoppingCart">
                <implementation.java class="services.db.ShoppingCartTableImpl"/>
+               <property name="database">cart-eu-db</property>
                <service name="Collection">
                        <t:binding.atom/>
                </service>      

Modified: incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java 
(original)
+++ incubator/tuscany/java/sca/tutorial/store/launch/LaunchStoreDB.java Thu Nov 
 1 22:10:02 2007
@@ -39,7 +39,7 @@
         node.addToDomainLevelComposite(new QName("http://store";, "store-db"));
         node.start();
 
-        System.out.println("store.composite ready for big business !!!");
+        System.out.println("store-db.composite ready for big business !!!");
         System.in.read();
         
         System.out.println("Stopping ...");

Modified: incubator/tuscany/java/sca/tutorial/store/pom.xml
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/pom.xml?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/pom.xml (original)
+++ incubator/tuscany/java/sca/tutorial/store/pom.xml Thu Nov  1 22:10:02 2007
@@ -80,6 +80,7 @@
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-binding-feed</artifactId>
             <version>1.1-incubating-SNAPSHOT</version>
+            <scope>runtime</scope>
         </dependency>
 
         <dependency>
@@ -135,6 +136,40 @@
                     </execution>
                 </executions>
             </plugin>
+
+               <plugin>
+                    <groupId>org.codehaus.mojo</groupId>
+                    <artifactId>sql-maven-plugin</artifactId>
+                    <version>1.0</version>
+       
+                    <dependencies>
+                        <dependency>
+                            <groupId>org.apache.derby</groupId>
+                            <artifactId>derby</artifactId>
+                            <version>10.1.2.1</version>
+                        </dependency>
+                    </dependencies>
+       
+                    <executions>
+                        <execution>
+                            <id>create-db</id>
+                            <phase>generate-resources</phase>
+                            <goals>
+                                <goal>execute</goal>
+                            </goals>
+                            <configuration>
+                                
<driver>org.apache.derby.jdbc.EmbeddedDriver</driver>
+                                
<url>jdbc:derby:target/cart-db;create=true</url>
+                                <autocommit>true</autocommit>
+                                <onError>continue</onError>
+                                <delimiter>;</delimiter>
+                                <srcFiles>
+                                    
<srcFile>${pom.basedir}/../assets/services/db/cart.sql</srcFile>
+                                </srcFiles>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
        </plugins>
     </build>
 

Modified: incubator/tuscany/java/sca/tutorial/store/store-db.composite
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tutorial/store/store-db.composite?rev=591228&r1=591227&r2=591228&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tutorial/store/store-db.composite (original)
+++ incubator/tuscany/java/sca/tutorial/store/store-db.composite Thu Nov  1 
22:10:02 2007
@@ -58,6 +58,7 @@
        
        <component name="ShoppingCart">
                <implementation.java class="services.db.ShoppingCartTableImpl"/>
+               <property name="database">cart-db</property>
                <service name="Collection">
                        <t:binding.atom/>
                </service>      



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to