diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-05-26 17:58:40 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2009-05-26 17:58:40 +0000 |
commit | 403ff4abf708d2beb7a97babb60f8c0318ff8450 (patch) | |
tree | fec9a5991a7e775a8c67a7a0a6dfb40c767fce84 /sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src | |
parent | e2153aa948efc7d8b05c641784b30a665c598748 (diff) |
Adding CurrencyConverter
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@778816 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src')
11 files changed, 178 insertions, 169 deletions
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/payment/creditcard/impl/CreditCardPaymentImpl.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/payment/creditcard/impl/CreditCardPaymentImpl.java deleted file mode 100644 index 1ddf5be7d6..0000000000 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/payment/creditcard/impl/CreditCardPaymentImpl.java +++ /dev/null @@ -1,47 +0,0 @@ -/*
- * 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 payment.creditcard.impl;
-
-import org.oasisopen.sca.annotation.Service;
-
-import payment.creditcard.CreditCardDetailsType;
-import payment.creditcard.CreditCardPayment;
-
-/**
- *
- */
-@Service(CreditCardPayment.class)
-public class CreditCardPaymentImpl implements CreditCardPayment {
-
- public String authorize(CreditCardDetailsType creditCard, float amount) {
- if (creditCard != null){
- System.out.println("Checking card: name = " +
- creditCard.getCardOwner().getName() +
- " number = " +
- creditCard.getCreditCardNumber() +
- " for amount " +
- amount);
- } else {
- System.out.println("Checking card is null");
- }
-
- return "OK";
- }
-}
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/creditcard.composite b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/currency/CurrencyConverter.java index 9c69035a10..49e1f6a119 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/creditcard.composite +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/currency/CurrencyConverter.java @@ -1,5 +1,4 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!--
+/*
* 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
@@ -16,19 +15,19 @@ * KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
--->
-<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
- targetNamespace="http://creditcard"
- xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1"
- xmlns:c="http://creditcard"
- name="creditcard">
+ */
+package scatours.currency;
- <component name="CreditCardPaymentComponent">
- <implementation.java class="payment.creditcard.impl.CreditCardPaymentImpl" />
- <service name="CreditCardPayment">
- <binding.ws uri="http://localhost:8086/CreditCardPayment" />
- <binding.sca/>
- </service>
- </component>
+import org.oasisopen.sca.annotation.Remotable;
-</composite>
\ No newline at end of file +/**
+ * The CurrencyConverter service interface
+ */
+@Remotable
+public interface CurrencyConverter {
+
+ float getExchangeRate(String fromCurrencyCode, String toCurrencyCode);
+
+ float convert(String fromCurrencyCode, String toCurrencyCode, float amount);
+
+}
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/currency/impl/CurrencyConverterImpl.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/currency/impl/CurrencyConverterImpl.java new file mode 100644 index 0000000000..52d7c60c31 --- /dev/null +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/currency/impl/CurrencyConverterImpl.java @@ -0,0 +1,53 @@ +/*
+ * 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.currency.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.oasisopen.sca.annotation.Service;
+
+import scatours.currency.CurrencyConverter;
+
+/**
+ * An implementation of the CurrencyConverter service
+ */
+@Service(CurrencyConverter.class)
+public class CurrencyConverterImpl implements CurrencyConverter {
+
+ // currency index
+ private Map<String, Integer> currencyIndex = new HashMap<String, Integer>();
+
+ // exchange rates
+ private final float rates[][] = { {1.00f, 0.50f, 0.66f}, {2.00f, 1.00f, 1.33f}, {1.50f, 0.75f, 1.00f}};
+
+ public CurrencyConverterImpl() {
+ currencyIndex.put("USD", new Integer(0));
+ currencyIndex.put("GBP", new Integer(1));
+ currencyIndex.put("EUR", new Integer(2));
+ }
+
+ public float getExchangeRate(String fromCurrencyCode, String toCurrencyCode) {
+ return rates[currencyIndex.get(fromCurrencyCode).intValue()][currencyIndex.get(toCurrencyCode).intValue()];
+ }
+
+ public float convert(String fromCurrencyCode, String toCurrencyCode, float amount) {
+ return amount * getExchangeRate(fromCurrencyCode, toCurrencyCode);
+ }
+}
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/payment/creditcard/impl/CreditCardPaymentActivator.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/payment/creditcard/impl/CreditCardPaymentActivator.java index 43a7c3519b..ba09b15de4 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/payment/creditcard/impl/CreditCardPaymentActivator.java +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/payment/creditcard/impl/CreditCardPaymentActivator.java @@ -17,12 +17,12 @@ * under the License.
*/
-package payment.creditcard.impl;
+package scatours.payment.creditcard.impl;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
-import payment.creditcard.CreditCardPayment;
+import scatours.payment.creditcard.CreditCardPayment;
/**
*
@@ -31,7 +31,7 @@ public class CreditCardPaymentActivator implements BundleActivator { public void start(BundleContext context) throws Exception {
System.out.println("Registering CreditCardPayment service...");
- context.registerService(CreditCardPayment.class.getName(), new CreditCardPaymentImpl(), null);
+ context.registerService(CreditCardPayment.class.getName(), new CreditCardPaymentImpl(context), null);
}
public void stop(BundleContext context) throws Exception {
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/payment/creditcard/impl/CreditCardPaymentImpl.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/payment/creditcard/impl/CreditCardPaymentImpl.java new file mode 100644 index 0000000000..657ef71c8b --- /dev/null +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/java/scatours/payment/creditcard/impl/CreditCardPaymentImpl.java @@ -0,0 +1,64 @@ +/*
+ * 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.payment.creditcard.impl;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+
+import scatours.currency.CurrencyConverter;
+import scatours.payment.creditcard.CreditCardDetailsType;
+import scatours.payment.creditcard.CreditCardPayment;
+
+public class CreditCardPaymentImpl implements CreditCardPayment {
+ private BundleContext context;
+
+ public CreditCardPaymentImpl(BundleContext context) {
+ super();
+ this.context = context;
+ }
+
+ public String authorize(CreditCardDetailsType creditCard, float amount) {
+ if (creditCard != null) {
+ System.out.println("Checking card: name = " + creditCard.getCardOwner().getName()
+ + " number = "
+ + creditCard.getCreditCardNumber()
+ + " for amount "
+ + amount + " EUR");
+ amount = convertCurrency(amount);
+ } else {
+ System.out.println("Credit card is null");
+ }
+
+ return "OK";
+ }
+
+ private float convertCurrency(float amount) {
+ ServiceReference ref = context.getServiceReference(CurrencyConverter.class.getName());
+ if (ref != null) {
+ CurrencyConverter converter = (CurrencyConverter)context.getService(ref);
+ if (converter != null) {
+ amount = converter.convert("EUR", "USD", amount);
+ context.ungetService(ref);
+ return amount;
+ }
+ }
+ throw new IllegalArgumentException("Currency cannot be converted");
+ }
+}
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/CreditCardPayment.wsdl b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/CreditCardPayment.wsdl index dbf89924cc..1fac949ea1 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/CreditCardPayment.wsdl +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/CreditCardPayment.wsdl @@ -7,29 +7,29 @@ * 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.
+ * under the License.
-->
-<wsdl:definitions name="CreditCardPayment"
+<wsdl:definitions name="CreditCardPayment"
targetNamespace="http://www.tuscanyscatours.com/CreditCardPayment/"
- xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
- xmlns:tns="http://www.tuscanyscatours.com/CreditCardPayment/"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://www.tuscanyscatours.com/CreditCardPayment/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:bpws="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2004/03/partner-link/">
<wsdl:types>
- <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.tuscanyscatours.com/CreditCardPayment/"
xmlns:tns="http://www.tuscanyscatours.com/CreditCardPayment/">
-
+
<xsd:element name="authorize" type="tns:AuthorizeType"/>
<xsd:complexType name="AuthorizeType">
<xsd:sequence>
@@ -106,11 +106,11 @@ </wsdl:binding>
<wsdl:service name="CreditCardPaymentService">
<wsdl:port name="CreditCardPaymentPort" binding="tns:CreditCardPaymentBinding">
- <soap:address location="http://localhost:8080/CreditCardPayment" />
+ <soap:address location="http://localhost:8086/CreditCardPayment" />
</wsdl:port>
</wsdl:service>
-
+
<plnk:partnerLinkType name="CreditCardPaymentLinkType">
<plnk:role name="forward" portType="tns:CreditCardPayment"/>
- </plnk:partnerLinkType>
+ </plnk:partnerLinkType>
</wsdl:definitions>
\ No newline at end of file diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.componentType b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.componentType index 70852d88a9..c14c60c21d 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.componentType +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.componentType @@ -30,12 +30,8 @@ </service>
<!-- The reference elment defines an SCA proxy to a remote OSGi service -->
- <!--
<reference name="currencyConverter">
<interface.java interface="currency.CurrencyConverter"/>
- <t:osgi.property name="prop1">1</t:osgi.property>
- <t:osgi.property name="prop2">ABC</t:osgi.property>
</reference>
- -->
</componentType>
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.composite b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.composite index 071cff731d..97550f027c 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.composite +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/main/resources/OSGI-INF/sca/bundle.composite @@ -28,18 +28,15 @@ <service name="CreditCardPayment">
<binding.ws uri="http://localhost:8086/CreditCardPayment"/>
</service>
- <!--
<reference name="currencyConverter">
<tuscany:binding.rmi uri="rmi://localhost:8085/CurrencyConverter"/>
</reference>
- -->
</component>
- <component name="CreditCardPaymentJavaComponent">
- <implementation.java class="payment.creditcard.impl.CreditCardPaymentImpl" />
- <service name="CreditCardPayment">
- <binding.ws uri="http://localhost:8087/CreditCardPayment" />
- <binding.sca/>
+ <component name="CurrencyConverterComponent">
+ <implementation.java class="scatours.currency.impl.CurrencyConverterImpl" />
+ <service name="CurrencyConverter">
+ <tuscany:binding.rmi uri="rmi://localhost:8085/CurrencyConverter" />
</service>
</component>
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/CreditCardPaymentTestCase.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/CreditCardPaymentTestCase.java deleted file mode 100644 index 5149aac90d..0000000000 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/CreditCardPaymentTestCase.java +++ /dev/null @@ -1,75 +0,0 @@ -/*
- * 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 payment.creditcard.test;
-
-import org.apache.tuscany.sca.node.Node;
-import org.apache.tuscany.sca.node.NodeFactory;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import payment.creditcard.CreditCardDetailsType;
-import payment.creditcard.CreditCardPayment;
-import payment.creditcard.CreditCardTypeType;
-import payment.creditcard.ObjectFactory;
-import payment.creditcard.PayerType;
-
-/**
- *
- */
-public class CreditCardPaymentTestCase {
- private static Node node;
-
- /**
- * @throws java.lang.Exception
- */
- @BeforeClass
- public static void setUpBeforeClass() throws Exception {
- NodeFactory factory = NodeFactory.newInstance();
- node = factory.createNode("creditcard.composite", CreditCardPayment.class.getClassLoader());
- node.start();
- }
-
- @Test
- public void testCreditCardPayment() {
- CreditCardPayment cc = node.getService(CreditCardPayment.class, "CreditCardPaymentComponent/CreditCardPayment");
-
- ObjectFactory objectFactory = new ObjectFactory();
- CreditCardDetailsType ccDetails = objectFactory.createCreditCardDetailsType();
- ccDetails.setCreditCardType(CreditCardTypeType.fromValue("Visa"));
- PayerType ccOwner = objectFactory.createPayerType();
- ccOwner.setName("Fred");
- ccDetails.setCardOwner(ccOwner);
-
- System.out.println(cc.authorize(ccDetails, 100.00f));
- }
-
- /**
- * @throws java.lang.Exception
- */
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
- if (node != null) {
- node.stop();
- node = null;
- }
- }
-
-}
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/CreditCardPaymentOSGiTestCase.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/scatours/payment/creditcard/test/CreditCardPaymentOSGiTestCase.java index 122e380164..f981e31efa 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/CreditCardPaymentOSGiTestCase.java +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/scatours/payment/creditcard/test/CreditCardPaymentOSGiTestCase.java @@ -17,9 +17,9 @@ * under the License.
*/
-package payment.creditcard.test;
+package scatours.payment.creditcard.test;
-import static payment.creditcard.test.OSGiTestUtils.bundleStatus;
+import static scatours.payment.creditcard.test.OSGiTestUtils.bundleStatus;
import java.io.InputStream;
import java.io.InputStreamReader;
@@ -30,11 +30,19 @@ import org.apache.tuscany.sca.node.equinox.launcher.EquinoxHost; import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
+import org.junit.Ignore;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
+import scatours.payment.creditcard.CreditCardDetailsType;
+import scatours.payment.creditcard.CreditCardPayment;
+import scatours.payment.creditcard.CreditCardPaymentService;
+import scatours.payment.creditcard.CreditCardTypeType;
+import scatours.payment.creditcard.ObjectFactory;
+import scatours.payment.creditcard.PayerType;
+
/**
*
*/
@@ -83,9 +91,7 @@ public class CreditCardPaymentOSGiTestCase { }
@Test
- /**
- * Test the Web service exposed by the Calculator
- */
+ @Ignore("Now we use the testClient")
public void testWS() throws Exception {
URL url = new URL("http://localhost:8086/CreditCardPayment?wsdl");
InputStream is = url.openStream();
@@ -106,6 +112,22 @@ public class CreditCardPaymentOSGiTestCase { }
/**
+ * Test the Web service exposed by the Calculator
+ */
+ @Test
+ public void testClient() {
+ CreditCardPaymentService service = new CreditCardPaymentService();
+ ObjectFactory objectFactory = new ObjectFactory();
+ CreditCardDetailsType ccDetails = objectFactory.createCreditCardDetailsType();
+ ccDetails.setCreditCardType(CreditCardTypeType.fromValue("Visa"));
+ PayerType ccOwner = objectFactory.createPayerType();
+ ccOwner.setName("Fred");
+ ccDetails.setCardOwner(ccOwner);
+ CreditCardPayment cc = service.getCreditCardPaymentPort();
+ System.out.println(cc.authorize(ccDetails, 100.00f));
+ }
+
+ /**
* @throws java.lang.Exception
*/
@AfterClass
diff --git a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/OSGiTestUtils.java b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/scatours/payment/creditcard/test/OSGiTestUtils.java index 1fe64b80a4..de8a77a818 100644 --- a/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/payment/creditcard/test/OSGiTestUtils.java +++ b/sandbox/rfeng/scatours-creditcard-payment-dosgi-contribution/src/test/java/scatours/payment/creditcard/test/OSGiTestUtils.java @@ -17,7 +17,7 @@ * under the License.
*/
-package payment.creditcard.test;
+package scatours.payment.creditcard.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
|