From 6ecc521d85871c1bc0d37927717434edcaccf234 Mon Sep 17 00:00:00 2001 From: slaws Date: Mon, 5 Jan 2009 11:49:06 +0000 Subject: Add in shopping cart and extend scenario to talk to payment process. Now needs a revamp to simplify and to allow preconfigured trips to be added to the cart. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@731534 13f79535-47bb-0310-9956-ffa450edef68 --- .../META-INF/sca-contribution.xml | 2 + sandbox/travelsample/scatours-contribution/pom.xml | 8 ++- .../src/scatours/SCAToursBooking.java | 13 ++-- .../src/scatours/SCAToursImpl.java | 78 ++++++++++++++++------ 4 files changed, 75 insertions(+), 26 deletions(-) (limited to 'sandbox/travelsample/scatours-contribution') diff --git a/sandbox/travelsample/scatours-contribution/META-INF/sca-contribution.xml b/sandbox/travelsample/scatours-contribution/META-INF/sca-contribution.xml index f34665c92d..6d6a563b74 100644 --- a/sandbox/travelsample/scatours-contribution/META-INF/sca-contribution.xml +++ b/sandbox/travelsample/scatours-contribution/META-INF/sca-contribution.xml @@ -22,5 +22,7 @@ + + \ No newline at end of file diff --git a/sandbox/travelsample/scatours-contribution/pom.xml b/sandbox/travelsample/scatours-contribution/pom.xml index 8470e06b05..500d23f4b8 100644 --- a/sandbox/travelsample/scatours-contribution/pom.xml +++ b/sandbox/travelsample/scatours-contribution/pom.xml @@ -69,7 +69,13 @@ org.apache.tuscany.sca scatours-shoppingcart-contribution 1.5-SNAPSHOT - + + + + org.apache.tuscany.sca + scatours-paymentprocess-contribution + 1.5-SNAPSHOT + junit diff --git a/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursBooking.java b/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursBooking.java index cc1cb960fe..611b4d8945 100644 --- a/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursBooking.java +++ b/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursBooking.java @@ -28,9 +28,12 @@ import scatours.common.TripItem; */ @Remotable public interface SCAToursBooking { - String newTrip(); - void addTripItem(String tripId, String tripItemId); - void removeTripItem(String tripId, String tripItemId); - TripItem[] getTripItems(String tripId); - double getTotalPrice(String tripId); + String addCart(); + String addTrip(String cartId); + void removeTrip(String cartId, String tripId); + void addTripItem(String cartId, String tripId, String tripItemId); + void removeTripItem(String cartId, String tripId, String tripItemId); + TripItem[] getTripItems(String cartId); + double getTotalPrice(String cartId); + void checkout(String name); } diff --git a/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursImpl.java b/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursImpl.java index 2896997326..d36a6604ce 100644 --- a/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursImpl.java +++ b/sandbox/travelsample/scatours-contribution/src/scatours/SCAToursImpl.java @@ -19,28 +19,23 @@ package scatours; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import org.apache.tuscany.sca.data.collection.Entry; -import org.apache.tuscany.sca.data.collection.NotFoundException; -import org.osoa.sca.CallableReference; import org.osoa.sca.ComponentContext; -import org.osoa.sca.RequestContext; import org.osoa.sca.ServiceReference; import org.osoa.sca.annotations.Context; -import org.osoa.sca.annotations.Property; import org.osoa.sca.annotations.Reference; import org.osoa.sca.annotations.Scope; import org.osoa.sca.annotations.Service; -import scatours.common.Search; -import scatours.common.SearchCallback; import scatours.common.TripItem; import scatours.common.TripLeg; -import scatours.currencyconverter.CurrencyConverter; +import scatours.paymentprocess.PaymentProcess; +import scatours.shoppingcart.ShoppingCart; import scatours.travelcatalog.TravelCatalogSearch; import scatours.tripbooking.TripBooking; @@ -57,13 +52,20 @@ public class SCAToursImpl implements TravelCatalogSearch, SCAToursBooking{ @Reference protected TripBooking tripBooking; + @Reference + protected ShoppingCart shoppingCart; + + @Reference + protected PaymentProcess paymentProcess; + @Context protected ComponentContext componentContext; + private Map carts = new HashMap(); private Map trips = new HashMap(); private Map searchItemsCache = new HashMap(); - // TravelSearch methods + // TravelCatalogSearch methods public TripItem[] search(TripLeg tripLeg) { @@ -75,34 +77,70 @@ public class SCAToursImpl implements TravelCatalogSearch, SCAToursBooking{ return searchItems; } - // TravelBooking methods + // SCAToursBooking methods - public String newTrip(){ + public String addCart(){ + String cartId = UUID.randomUUID().toString(); + ServiceReference shoppingCart = componentContext.getServiceReference(ShoppingCart.class, + "shoppingCart"); + shoppingCart.setConversationID(cartId); + carts.put(cartId, shoppingCart.getService()); + + return cartId; + } + + public String addTrip(String cartId){ String tripId = UUID.randomUUID().toString(); ServiceReference tripReference = componentContext.getServiceReference(TripBooking.class, "tripBooking"); tripReference.setConversationID(tripId); trips.put(tripId, tripReference.getService()); + + carts.get(cartId).addItem(tripId); return tripId; } - public void addTripItem(String tripId, String tripItemId){ - trips.get(tripId).addTripItem(searchItemsCache.get(tripItemId)); + public void removeTrip(String cartId, String tripId) { + carts.get(cartId).removeItem(tripId); + } + + public void addTripItem(String cartId, String tripId, String tripItemId){ + TripItem item = searchItemsCache.get(tripItemId); + TripItem itemCopy = new TripItem(item); + itemCopy.setTripId(tripId); + trips.get(tripId).addTripItem(itemCopy); } - public void removeTripItem(String tripId, String tripItemId){ + public void removeTripItem(String cartId, String tripId, String tripItemId){ trips.get(tripId).removeTripItem(tripItemId); } - public TripItem[] getTripItems(String tripId) { - return trips.get(tripId).getTripItems(); + public TripItem[] getTripItems(String cartId) { + List returnTripItems = new ArrayList(); + + for( String tripId : carts.get(cartId).getItems()){ + returnTripItems.addAll(Arrays.asList(trips.get(tripId).getTripItems())); + } + + return returnTripItems.toArray(new TripItem[returnTripItems.size()]); } - public double getTotalPrice(String tripId){ - return trips.get(tripId).getTripPrice(); + public double getTotalPrice(String cartId){ + double total = 0.0; + + for( String tripId : carts.get(cartId).getItems()){ + total += trips.get(tripId).getTripPrice(); + } + + return total; } - public void bookTrip(String tripId) { - trips.get(tripId).bookTrip(); + public void checkout(String cartId){ + // get users credentials. Hard coded for now but should + // come from the security context + String customerId = "Fred Bloggs"; + float amount = (float)getTotalPrice(cartId); + + paymentProcess.makePayment(customerId, amount); } } -- cgit v1.2.3