summaryrefslogtreecommitdiffstats
path: root/sandbox/travelsample/shared-contributions/payment-java-contribution
diff options
context:
space:
mode:
authorrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-02-28 00:19:32 +0000
committerrfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68>2009-02-28 00:19:32 +0000
commitc0820807441e7eada782a13741fbe2a273554a32 (patch)
treef690e0e75d5ba53b11e7dd06aa5d787507622052 /sandbox/travelsample/shared-contributions/payment-java-contribution
parent572f63e1887a382d33bea739eebad977bce8ffaa (diff)
Add a fine-grained payment assembly for java
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@748759 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java40
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java70
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java39
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java101
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java31
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java35
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java2
-rw-r--r--sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite12
8 files changed, 315 insertions, 15 deletions
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
index aa8f3cd01a..a0218aa583 100644
--- a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/payment/PaymentImpl.java
@@ -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("order@tuscanyscatours.com", customer.getEmail(), "Status for your payment", body
+ .toString());
+
return status;
}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
new file mode 100644
index 0000000000..f80a691d96
--- /dev/null
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/Customer.java
@@ -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;
+ }
+
+}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
new file mode 100644
index 0000000000..7b339cc60d
--- /dev/null
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistry.java
@@ -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);
+}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
new file mode 100644
index 0000000000..8807d037ba
--- /dev/null
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/customer/CustomerRegistryImpl.java
@@ -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", "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) {
+ 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;
+ }
+
+}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
new file mode 100644
index 0000000000..13c34878cf
--- /dev/null
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGateway.java
@@ -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);
+
+}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
new file mode 100644
index 0000000000..b5a5debd38
--- /dev/null
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/main/java/scatours/emailgateway/EmailGatewayImpl.java
@@ -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;
+ }
+
+}
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
index 21bf6ff428..9acf17e5e6 100644
--- a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/java/payment/PaymentTestCase.java
@@ -46,7 +46,7 @@ public class PaymentTestCase {
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
diff --git a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
index 90665e86e0..00ea330e79 100644
--- a/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
+++ b/sandbox/travelsample/shared-contributions/payment-java-contribution/src/test/resources/payment.composite
@@ -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