diff options
Diffstat (limited to 'sandbox/travelsample/scatours-contribution')
4 files changed, 75 insertions, 26 deletions
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 @@ <import.java package="scatours.currencyconverter"/> <import.java package="scatours.travelcatalog"/> <import.java package="scatours.tripbooking"/> + <import.java package="scatours.paymentprocess"/> + <import.java package="scatours.shoppingcart"/> <export.java package="scatours"/> </contribution>
\ 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 @@ <groupId>org.apache.tuscany.sca</groupId> <artifactId>scatours-shoppingcart-contribution</artifactId> <version>1.5-SNAPSHOT</version> - </dependency> + </dependency> + + <dependency> + <groupId>org.apache.tuscany.sca</groupId> + <artifactId>scatours-paymentprocess-contribution</artifactId> + <version>1.5-SNAPSHOT</version> + </dependency> <dependency> <groupId>junit</groupId> 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<String,ShoppingCart> carts = new HashMap<String,ShoppingCart>(); private Map<String,TripBooking> trips = new HashMap<String,TripBooking>(); private Map<String, TripItem> searchItemsCache = new HashMap<String, TripItem>(); - // 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> 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<TripBooking> 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<TripItem> returnTripItems = new ArrayList<TripItem>(); + + 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); } } |