Author: rfeng
Date: Sat Feb 28 00:19:32 2009
New Revision: 748759

URL: http://svn.apache.org/viewvc?rev=748759&view=rev
Log:
Add a fine-grained payment assembly for java

Added:
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
   (with props)
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
   (with props)
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
   (with props)
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
   (with props)
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
   (with props)
Modified:
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
    
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite

Modified: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java?rev=748759&r1=748758&r2=748759&view=diff
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
 (original)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
 Sat Feb 28 00:19:32 2009
@@ -19,35 +19,47 @@
 
 package payment;
 
+import org.osoa.sca.annotations.Property;
 import org.osoa.sca.annotations.Reference;
 import org.osoa.sca.annotations.Service;
 
 import payment.creditcard.CreditCardDetailsType;
 import payment.creditcard.CreditCardPayment;
-import payment.creditcard.CreditCardTypeType;
-import payment.creditcard.ObjectFactory;
-import payment.creditcard.PayerType;
+import scatours.customer.Customer;
+import scatours.customer.CustomerRegistry;
+import scatours.emailgateway.EmailGateway;
 
 /**
- * 
+ * The payment implementation
  */
 @Service(Payment.class)
 public class PaymentImpl implements Payment {
 
     @Reference
+    protected CustomerRegistry customerRegistry;
+
+    @Reference
     protected CreditCardPayment creditCardPayment;
-    
+
+    @Reference
+    protected EmailGateway emailGateway;
+
+    @Property
+    protected float transactionFeeRate = 0.01f;
+
     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);
-        
+        Customer customer = customerRegistry.getCustomer(customerId);
+
+        CreditCardDetailsType ccDetails = customer.getCreditCard();
+
         String status = creditCardPayment.authorize(ccDetails, amount);
-        
+
+        StringBuffer body = new StringBuffer();
+        body.append(customer);
+        body.append("\n").append("Status: ").append(status).append("\n");
+        emailGateway.sendEmail("[email protected]", 
customer.getEmail(), "Status for your payment", body
+            .toString());
+
         return status;
     }
 

Added: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java?rev=748759&view=auto
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
 (added)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
 Sat Feb 28 00:19: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 scatours.customer;
+
+import 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/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java?rev=748759&view=auto
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
 (added)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
 Sat Feb 28 00:19: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 scatours.customer;
+
+import java.util.Collection;
+
+import payment.creditcard.CreditCardDetailsType;
+
+/**
+ * 
+ */
+public interface CustomerRegistry {
+    Customer createCustomer(String name, String email, CreditCardDetailsType 
creditCard);
+
+    boolean updateCustomer(Customer customer);
+
+    Customer getCustomer(String id);
+
+    Collection<Customer> getAllCustomers();
+
+    boolean deleteCustomer(String id);
+}

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java?rev=748759&view=auto
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
 (added)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
 Sat Feb 28 00:19:32 2009
@@ -0,0 +1,101 @@
+/*
+ * 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 scatours.customer;
+
+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.Scope;
+import org.osoa.sca.annotations.Service;
+
+import payment.creditcard.CreditCardDetailsType;
+import payment.creditcard.CreditCardTypeType;
+import payment.creditcard.ObjectFactory;
+import payment.creditcard.PayerType;
+
+/**
+ * An in-memory customer registry implementation
+ */
+...@service(CustomerRegistry.class)
+...@scope("COMPOSITE")
+...@eagerinit
+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", "[email protected]", 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) {
+        return customers.get(id);
+    }
+
+    public boolean updateCustomer(Customer customer) {
+        Customer current = getCustomer(customer.getId());
+        if (current == null) {
+            return false;
+        }
+        current.setEmail(customer.getEmail());
+        current.setName(customer.getName());
+        current.setCreditCard(customer.getCreditCard());
+        return true;
+    }
+
+}

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java?rev=748759&view=auto
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
 (added)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
 Sat Feb 28 00:19:32 2009
@@ -0,0 +1,31 @@
+/*
+ * 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 scatours.emailgateway;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * A gateway to send e-mail
+ */
+...@remotable
+public interface EmailGateway {
+    public boolean sendEmail(String sender, String recipient, String subject, 
String body);
+
+}

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java?rev=748759&view=auto
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
 (added)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
 Sat Feb 28 00:19:32 2009
@@ -0,0 +1,35 @@
+/*
+ * 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 scatours.emailgateway;
+
+import org.osoa.sca.annotations.Service;
+
+...@service(EmailGateway.class)
+public class EmailGatewayImpl implements EmailGateway {
+
+    public boolean sendEmail(String sender, String recipient, String subject, 
String body) {
+        System.out.println("From: " + sender);
+        System.out.println("To: " + recipient);
+        System.out.println("Subject: " + subject);
+        System.out.println(body);
+        return true;
+    }
+
+}

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java?rev=748759&r1=748758&r2=748759&view=diff
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
 (original)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
 Sat Feb 28 00:19:32 2009
@@ -46,7 +46,7 @@
     public void testCreditCardPayment() {
         SCAClient client = (SCAClient) node;
         Payment payment = client.getService(Payment.class, "PaymentComponent");
-        System.out.println(payment.makePaymentMember("Fred Bloggs", 100.00f));
+        System.out.println(payment.makePaymentMember("c-0", 100.00f));
     }
     
     @Test

Modified: 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite?rev=748759&r1=748758&r2=748759&view=diff
==============================================================================
--- 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
 (original)
+++ 
tuscany/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
 Sat Feb 28 00:19:32 2009
@@ -25,10 +25,22 @@
            
     <component name="PaymentComponent">
         <implementation.java class="payment.PaymentImpl" />
+        <reference name="customerRegistry" target="CustomerRegistryComponent"/>
         <reference name="creditCardPayment" 
target="CreditCardPaymentComponent"/>
+        <reference name="emailGateway" target="EmailGatewayComponent"/>
+        <property name="transactionFeeRate">0.02</property>
     </component>
     
+    <component name="CustomerRegistryComponent">
+        <implementation.java class="scatours.customer.CustomerRegistryImpl" />
+    </component>
+    
+    <component name="EmailGatewayComponent">
+        <implementation.java class="scatours.emailgateway.EmailGatewayImpl" />
+    </component>    
+    
     <component name="CreditCardPaymentComponent">
         <implementation.java class="payment.creditcard.CreditCardPaymentImpl" 
/>
     </component>
+    
 </composite>
\ No newline at end of file


Reply via email to