You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by sl...@apache.org on 2009/10/11 17:39:33 UTC

svn commit: r824091 - in /tuscany/sandbox/travelsample/contributions/payment-spring/src: main/java/com/tuscanyscatours/customer/ main/java/com/tuscanyscatours/customer/impl/ main/java/com/tuscanyscatours/payment/impl/ main/resources/ test/java/scatours...

Author: slaws
Date: Sun Oct 11 15:39:32 2009
New Revision: 824091

URL: http://svn.apache.org/viewvc?rev=824091&view=rev
Log:
Add customer registry into the spring component

Added:
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java   (with props)
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java   (with props)
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java   (with props)
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java   (with props)
Modified:
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/payment/impl/PaymentImpl.java
    tuscany/sandbox/travelsample/contributions/payment-spring/src/main/resources/Payment-context.xml
    tuscany/sandbox/travelsample/contributions/payment-spring/src/test/java/scatours/payment/PaymentTestCase.java

Added: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java?rev=824091&view=auto
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java (added)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java Sun Oct 11 15:39:32 2009
@@ -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.    
+ */
+
+package com.tuscanyscatours.customer;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+
+/**
+ * Customer data
+ */
+public class Customer {
+    private String id;
+    private String email;
+    private String name;
+
+    private CreditCardDetailsType creditCard;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public CreditCardDetailsType getCreditCard() {
+        return creditCard;
+    }
+
+    public void setCreditCard(CreditCardDetailsType creditCard) {
+        this.creditCard = creditCard;
+    }
+
+    public String toString() {
+        return "id: " + id + " name: " + name + " e-mail: " + email;
+    }
+
+}

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/Customer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java?rev=824091&view=auto
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java (added)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java Sun Oct 11 15:39:32 2009
@@ -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.    
+ */
+
+package com.tuscanyscatours.customer;
+
+
+public class CustomerNotFoundException extends Exception {
+    private static final long serialVersionUID = -129752837478357452L;
+
+    /**
+     * 
+     */
+    public CustomerNotFoundException() {
+
+    }
+
+    /**
+     * @param message
+     */
+    public CustomerNotFoundException(String message) {
+        super(message);
+
+    }
+
+    /**
+     * @param cause
+     */
+    public CustomerNotFoundException(Throwable cause) {
+        super(cause);
+
+    }
+
+    /**
+     * @param message
+     * @param cause
+     */
+    public CustomerNotFoundException(String message, Throwable cause) {
+        super(message, cause);
+
+    }
+
+}

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerNotFoundException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java?rev=824091&view=auto
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java (added)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java Sun Oct 11 15:39:32 2009
@@ -0,0 +1,39 @@
+/*
+ * 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 com.tuscanyscatours.customer;
+
+import java.util.Collection;
+
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+
+/**
+ * Customer registry interface
+ */
+public interface CustomerRegistry {
+    Customer createCustomer(String name, String email, CreditCardDetailsType creditCard);
+
+    boolean updateCustomer(Customer customer);
+
+    Customer getCustomer(String id) throws CustomerNotFoundException;
+
+    Collection<Customer> getAllCustomers();
+
+    boolean deleteCustomer(String id);
+}

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/CustomerRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java?rev=824091&view=auto
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java (added)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java Sun Oct 11 15:39:32 2009
@@ -0,0 +1,115 @@
+/*
+ * 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 com.tuscanyscatours.customer.impl;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.osoa.sca.annotations.Destroy;
+import org.osoa.sca.annotations.EagerInit;
+import org.osoa.sca.annotations.Init;
+import org.osoa.sca.annotations.Requires;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
+import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
+import com.tuscanyscatours.payment.creditcard.CreditCardTypeType;
+import com.tuscanyscatours.payment.creditcard.ObjectFactory;
+import com.tuscanyscatours.payment.creditcard.PayerType;
+
+/**
+ * An in-memory customer registry implementation
+ */
+@Service(CustomerRegistry.class)
+@Scope("COMPOSITE")
+@EagerInit
+@Requires("{http://www.osoa.org/xmlns/sca/1.0}managedTransaction.global")
+public class CustomerRegistryImpl implements CustomerRegistry {
+    private volatile static int idGenerator = 0;
+    private Map<String, Customer> customers = new HashMap<String, Customer>();
+
+    @Init
+    public void init() {
+        // Load the customers
+        ObjectFactory factory = new ObjectFactory();
+        CreditCardDetailsType cc = factory.createCreditCardDetailsType();
+        PayerType john = factory.createPayerType();
+        john.setName("John Smith");
+        cc.setCardOwner(john);
+        cc.setCreditCardNumber("1111-2222-3333-4444");
+        cc.setCreditCardType(CreditCardTypeType.VISA);
+        cc.setCVV2("1234");
+        cc.setExpMonth(1);
+        cc.setExpYear(2012);
+        createCustomer("John Smith", "john@xyz.com", cc);
+    }
+    
+    @Destroy
+    public void destroy() {
+        // Save the customers
+    }
+    
+    public Customer createCustomer(String name, String email, CreditCardDetailsType creditCard) {
+        Customer customer = new Customer();
+        customer.setId("c-" + idGenerator++);
+        customer.setName(name);
+        customer.setEmail(email);
+        customer.setCreditCard(creditCard);
+        customers.put(customer.getId(), customer);
+        return customer;
+    }
+
+    public boolean deleteCustomer(String id) {
+        return customers.remove(id) != null;
+    }
+
+    public Collection<Customer> getAllCustomers() {
+        return customers.values();
+    }
+
+    public Customer getCustomer(String id) throws CustomerNotFoundException {
+        Customer customer = customers.get(id);
+        
+        if (customer == null){
+            throw new CustomerNotFoundException("Customer " + id + " not found");
+        }
+        
+        return customer;
+    }
+
+    public boolean updateCustomer(Customer customer) {
+        Customer current = null;
+        try {
+            current = getCustomer(customer.getId());
+        } catch (Exception ex) {
+            return false;
+        }
+
+        current.setEmail(customer.getEmail());
+        current.setName(customer.getName());
+        current.setCreditCard(customer.getCreditCard());
+        return true;
+    }
+
+}

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/customer/impl/CustomerRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/payment/impl/PaymentImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/payment/impl/PaymentImpl.java?rev=824091&r1=824090&r2=824091&view=diff
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/payment/impl/PaymentImpl.java (original)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/java/com/tuscanyscatours/payment/impl/PaymentImpl.java Sun Oct 11 15:39:32 2009
@@ -19,18 +19,18 @@
 
 package com.tuscanyscatours.payment.impl;
 
+import com.tuscanyscatours.customer.Customer;
+import com.tuscanyscatours.customer.CustomerNotFoundException;
+import com.tuscanyscatours.customer.CustomerRegistry;
 import com.tuscanyscatours.emailgateway.EmailGateway;
 import com.tuscanyscatours.emailgateway.EmailType;
 import com.tuscanyscatours.payment.Payment;
-import com.tuscanyscatours.payment.creditcard.CreditCardDetailsType;
 import com.tuscanyscatours.payment.creditcard.CreditCardPayment;
-import com.tuscanyscatours.payment.creditcard.CreditCardTypeType;
-import com.tuscanyscatours.payment.creditcard.ObjectFactory;
-import com.tuscanyscatours.payment.creditcard.PayerType;
 
 public class PaymentImpl implements Payment {
 
     private CreditCardPayment creditCardPayment;
+    private CustomerRegistry customerRegistry;
     private EmailGateway emailGateway;
     private float transactionFee;
     
@@ -38,6 +38,10 @@
         this.creditCardPayment = creditCardPayment;
     }
     
+    public void setCustomerRegistry(CustomerRegistry customerRegistry) {
+        this.customerRegistry = customerRegistry;
+    }    
+    
     public void setEmailGateway(EmailGateway emailGateway) {
         this.emailGateway = emailGateway;
     }
@@ -47,27 +51,27 @@
     }
     
     public String makePaymentMember(String customerId, float amount) {
-        
-        ObjectFactory objectFactory = new ObjectFactory();
-        CreditCardDetailsType ccDetails = objectFactory.createCreditCardDetailsType();
-        ccDetails.setCreditCardType(CreditCardTypeType.fromValue("Visa"));
-        PayerType ccOwner = objectFactory.createPayerType();
-        ccOwner.setName(customerId);
-        ccDetails.setCardOwner(ccOwner);
-        
-        amount += transactionFee;
-        
-        String status = creditCardPayment.authorize(ccDetails, amount);
-        
-        com.tuscanyscatours.emailgateway.ObjectFactory emailFactory
-            = new com.tuscanyscatours.emailgateway.ObjectFactory();
-        EmailType email = emailFactory.createEmailType();
-        email.setTitle("Payment Received");
-        email.setTo(customerId);
-        
-        emailGateway.sendEmail(email);
-        
-        return status;
+        try {
+            Customer customer = customerRegistry.getCustomer(customerId);
+            
+            amount += transactionFee;
+            
+            String status = creditCardPayment.authorize(customer.getCreditCard(), amount);
+            
+            com.tuscanyscatours.emailgateway.ObjectFactory emailFactory
+                = new com.tuscanyscatours.emailgateway.ObjectFactory();
+            EmailType email = emailFactory.createEmailType();
+            email.setTitle("Payment Received");
+            email.setTo(customerId);
+            
+            emailGateway.sendEmail(email);
+            
+            return status;
+        } catch (CustomerNotFoundException ex) {
+            return "Payment failed due to " + ex.getMessage();
+        } catch (Throwable t) {
+            return "Payment failed due to system error " + t.getMessage();
+        }         
     }
 
 }

Modified: tuscany/sandbox/travelsample/contributions/payment-spring/src/main/resources/Payment-context.xml
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/main/resources/Payment-context.xml?rev=824091&r1=824090&r2=824091&view=diff
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/main/resources/Payment-context.xml (original)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/main/resources/Payment-context.xml Sun Oct 11 15:39:32 2009
@@ -26,10 +26,14 @@
     <bean id="Payment" class="com.tuscanyscatours.payment.impl.PaymentImpl">
         <property name="creditCardPayment" ref="creditCardPaymentReference"/>
         <property name="emailGateway" ref="EmailGateway"/>
+        <property name="customerRegistry" ref="CustomerRegistry"/>
         <property name="transactionFee" value="0.5f"/>
     </bean>
 
-    <bean id="EmailGateway" class="com.tuscanyscatours.emailgateway.impl.EmailGatewayImpl">
+    <bean id="CustomerRegistry" class="com.tuscanyscatours.customer.impl.CustomerRegistryImpl">
     </bean>
+    
+    <bean id="EmailGateway" class="com.tuscanyscatours.emailgateway.impl.EmailGatewayImpl">
+    </bean>    
   
 </beans>

Modified: tuscany/sandbox/travelsample/contributions/payment-spring/src/test/java/scatours/payment/PaymentTestCase.java
URL: http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/contributions/payment-spring/src/test/java/scatours/payment/PaymentTestCase.java?rev=824091&r1=824090&r2=824091&view=diff
==============================================================================
--- tuscany/sandbox/travelsample/contributions/payment-spring/src/test/java/scatours/payment/PaymentTestCase.java (original)
+++ tuscany/sandbox/travelsample/contributions/payment-spring/src/test/java/scatours/payment/PaymentTestCase.java Sun Oct 11 15:39:32 2009
@@ -53,7 +53,7 @@
     public void testPayment() {
         SCAClient client = (SCAClient) paymentNode;
         Payment payment = client.getService(Payment.class, "PaymentClient");
-        System.out.println("Result = " + payment.makePaymentMember("Fred", 100.00f));
+        System.out.println("Result = " + payment.makePaymentMember("c-0", 100.00f));
     }
 
     @AfterClass