summaryrefslogtreecommitdiffstats
path: root/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/old/contrib/old-samples/standalone/loanapplication/src/main')
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/ClientService.java28
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/impl/ClientServiceImpl.java85
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/Application.java47
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/LoanPackage.java45
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/ApplicationImpl.java75
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/LoanPackageImpl.java75
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/CreditService.java34
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanService.java55
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanServiceCallback.java51
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/RateService.java28
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/CreditServiceImpl.java32
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/LoanServiceImpl.java101
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/RateServiceImpl.java38
-rw-r--r--sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/resources/META-INF/sca/default.scdl68
14 files changed, 762 insertions, 0 deletions
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/ClientService.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/ClientService.java
new file mode 100644
index 0000000000..2c2fcaf1e0
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/ClientService.java
@@ -0,0 +1,28 @@
+/*
+ * 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 loanapplication.client;
+
+/**
+ * Interacts with the {@link loanapplication.provider.LoanService}, initiating a loan application process that
+ * demonstrates the use of conversational services and callbacks
+ */
+public interface ClientService {
+
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/impl/ClientServiceImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/impl/ClientServiceImpl.java
new file mode 100644
index 0000000000..cfda4558f6
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/client/impl/ClientServiceImpl.java
@@ -0,0 +1,85 @@
+/*
+ * 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 loanapplication.client.impl;
+
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+import loanapplication.client.ClientService;
+import loanapplication.message.Application;
+import loanapplication.message.LoanPackage;
+import loanapplication.message.impl.ApplicationImpl;
+import loanapplication.provider.LoanService;
+import loanapplication.provider.LoanServiceCallback;
+
+/**
+ * Demonstrates a client to the conversational loan service that receives a set of callbacks. This component
+ * implementation is configured as a Tuscany "launched" component type. The standalone launcher will invoke {@link
+ * #main(String[])} when the application is started.
+ */
+@Service(ClientService.class)
+@Scope("COMPOSITE")
+public class ClientServiceImpl implements ClientService, LoanServiceCallback {
+ private LoanService loanService;
+
+ /**
+ * Instantiates a new client with a reference to the loan service
+ *
+ * @param loanService the loan service
+ */
+ public ClientServiceImpl(@Reference(name = "loanService")LoanService loanService) {
+ this.loanService = loanService;
+ }
+
+ /**
+ * The method invoked to initiate a new application process.
+ *
+ * @param args startup parameters
+ * @return the return code
+ */
+ public int main(String[] args) {
+ System.out.println("Client applying for loan");
+ Application app = new ApplicationImpl();
+ app.setCustomerID("12345");
+ app.setAmount(100000);
+ app.setTerm(30);
+ app.setType(Application.FIXED);
+ loanService.apply(app);
+ return 1;
+ }
+
+ public void creditScoreResult(int code) {
+ System.out.println("Callback: credit score was " + code);
+ }
+
+ public void applicationResult(int code) {
+ if (code == APPROVED) {
+ System.out.println("Callback: the loan has been approved");
+ System.out.println("Client securing loan");
+ loanService.secureLoan();
+ } else {
+ System.out.println("Callback: the loan has been declined");
+ }
+ }
+
+ public void loanPackage(LoanPackage loanPackage) {
+ System.out.println("Callback: loan package received");
+ }
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/Application.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/Application.java
new file mode 100644
index 0000000000..0d689f79b7
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/Application.java
@@ -0,0 +1,47 @@
+/*
+ * 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 loanapplication.message;
+
+/**
+ * A loan application
+ */
+public interface Application {
+ int FIXED = 1;
+ int FIVE_YEAR_VARIABLE = 2;
+
+ String getCustomerID();
+
+ void setCustomerID(String customerID);
+
+ float getAmount();
+
+ void setAmount(float amount);
+
+ float getDownPayment();
+
+ void setDownPayment(float downPayment);
+
+ int getType();
+
+ void setType(int type);
+
+ int getTerm();
+
+ void setTerm(int term);
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/LoanPackage.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/LoanPackage.java
new file mode 100644
index 0000000000..cd8cdcc04d
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/LoanPackage.java
@@ -0,0 +1,45 @@
+/*
+ * 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 loanapplication.message;
+
+/**
+ * Contains information for a completed loan
+ */
+public interface LoanPackage {
+
+ String getLoanNumber();
+
+ void setLoanNumber(String loanNumber);
+
+ int getType();
+
+ void setType(int type);
+
+ float getAmount();
+
+ void setAmount(float amount);
+
+ float getRate();
+
+ void setRate(float rate);
+
+ int getTerm();
+
+ void setTerm(int term);
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/ApplicationImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/ApplicationImpl.java
new file mode 100644
index 0000000000..7b0049b8a5
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/ApplicationImpl.java
@@ -0,0 +1,75 @@
+/*
+ * 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 loanapplication.message.impl;
+
+import java.io.Serializable;
+
+import loanapplication.message.Application;
+
+/**
+ * A simple implementation of an Application
+ */
+public class ApplicationImpl implements Application, Serializable {
+ private static final long serialVersionUID = -4289535647716763141L;
+ private float amount;
+ private float downPayment;
+ private String customerID;
+ private int type;
+ private int term;
+
+ public float getAmount() {
+ return amount;
+ }
+
+ public void setAmount(float amount) {
+ this.amount = amount;
+ }
+
+ public float getDownPayment() {
+ return downPayment;
+ }
+
+ public void setDownPayment(float downPayment) {
+ this.downPayment = downPayment;
+ }
+
+ public String getCustomerID() {
+ return customerID;
+ }
+
+ public void setCustomerID(String customerID) {
+ this.customerID = customerID;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public int getTerm() {
+ return term;
+ }
+
+ public void setTerm(int term) {
+ this.term = term;
+ }
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/LoanPackageImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/LoanPackageImpl.java
new file mode 100644
index 0000000000..4beee06b57
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/message/impl/LoanPackageImpl.java
@@ -0,0 +1,75 @@
+/*
+ * 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 loanapplication.message.impl;
+
+import java.io.Serializable;
+
+import loanapplication.message.LoanPackage;
+
+/**
+ * A simple implementation of a LoanPackage
+ */
+public class LoanPackageImpl implements LoanPackage, Serializable {
+ private static final long serialVersionUID = 51755060138169723L;
+ private int type;
+ private float amount;
+ private float rate;
+ private int term;
+ private String loanNumber;
+
+ public String getLoanNumber() {
+ return loanNumber;
+ }
+
+ public void setLoanNumber(String loanNumber) {
+ this.loanNumber = loanNumber;
+ }
+
+ public int getType() {
+ return type;
+ }
+
+ public void setType(int type) {
+ this.type = type;
+ }
+
+ public float getAmount() {
+ return amount;
+ }
+
+ public void setAmount(float amount) {
+ this.amount = amount;
+ }
+
+ public float getRate() {
+ return rate;
+ }
+
+ public void setRate(float rate) {
+ this.rate = rate;
+ }
+
+ public int getTerm() {
+ return term;
+ }
+
+ public void setTerm(int term) {
+ this.term = term;
+ }
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/CreditService.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/CreditService.java
new file mode 100644
index 0000000000..38444abbd4
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/CreditService.java
@@ -0,0 +1,34 @@
+/*
+ * 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 loanapplication.provider;
+
+/**
+ * Performs a credit check on a customer
+ */
+public interface CreditService {
+
+ /**
+ * Returns the customer credit score
+ *
+ * @param customerID the customer ID
+ * @return the credit score
+ */
+ int getCreditScore(String customerID);
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanService.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanService.java
new file mode 100644
index 0000000000..c9eb01dbb3
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanService.java
@@ -0,0 +1,55 @@
+/*
+ * 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 loanapplication.provider;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Conversational;
+import org.osoa.sca.annotations.EndsConversation;
+
+import loanapplication.message.Application;
+
+/**
+ * Defines the loan service contract.
+ */
+@Conversational
+@Callback(LoanServiceCallback.class)
+public interface LoanService {
+
+ /**
+ * Submits a new loan application. Calling this method will start a new conversation if one has not been previously
+ * initiated.
+ *
+ * @param application the loan application
+ */
+ void apply(Application application);
+
+ /**
+ * Called after the loan has been approved and when the client is read to complete the process. Calling this method
+ * will end the conversation.
+ */
+ @EndsConversation
+ void secureLoan();
+
+ /**
+ * Called to cancel a loan application. Calling this method will end the conversation.
+ */
+ @EndsConversation
+ void cancel();
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanServiceCallback.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanServiceCallback.java
new file mode 100644
index 0000000000..8b67017a55
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/LoanServiceCallback.java
@@ -0,0 +1,51 @@
+/*
+ * 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 loanapplication.provider;
+
+import loanapplication.message.LoanPackage;
+
+/**
+ * Defines the callback contract for loan service clients
+ */
+public interface LoanServiceCallback {
+ int APPROVED = 1;
+ int DECLINED = -1;
+
+ /**
+ * Called when the customer's credit score is received from the credit check process.
+ *
+ * @param code the customer's credit score.
+ */
+ void creditScoreResult(int code);
+
+ /**
+ * Called to the loan has been {@link LoanServiceCallback#APPROVED} or {@link LoanServiceCallback#DECLINED}.
+ *
+ * @param code if the loan application was approved or declined.
+ */
+ void applicationResult(int code);
+
+ /**
+ * Called after the loan has been secured to provide the completed loan information.
+ *
+ * @param loanPackage the loan information.
+ */
+ void loanPackage(LoanPackage loanPackage);
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/RateService.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/RateService.java
new file mode 100644
index 0000000000..6d53c7d6b7
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/RateService.java
@@ -0,0 +1,28 @@
+/*
+ * 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 loanapplication.provider;
+
+/**
+ *
+ */
+public interface RateService {
+
+ float getRate(int type);
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/CreditServiceImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/CreditServiceImpl.java
new file mode 100644
index 0000000000..86c5f722d1
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/CreditServiceImpl.java
@@ -0,0 +1,32 @@
+/*
+ * 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 loanapplication.provider.impl;
+
+import loanapplication.provider.CreditService;
+
+/**
+ * The credit service implementation
+ */
+public class CreditServiceImpl implements CreditService {
+
+ public int getCreditScore(String customerID) {
+ System.out.println("Credit Service: Performing credit check");
+ return 700;
+ }
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/LoanServiceImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/LoanServiceImpl.java
new file mode 100644
index 0000000000..fc36ec1d53
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/LoanServiceImpl.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 loanapplication.provider.impl;
+
+import java.io.Serializable;
+import java.util.UUID;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+
+import loanapplication.message.Application;
+import loanapplication.provider.CreditService;
+import loanapplication.provider.LoanService;
+import loanapplication.provider.LoanServiceCallback;
+import loanapplication.provider.RateService;
+
+/**
+ * The loan service implementation
+ */
+@Scope("CONVERSATION")
+public class LoanServiceImpl implements LoanService, Serializable {
+ private static final long serialVersionUID = 7801583139613235069L;
+ // the loan number, demonstrates the use of conversational state
+ private String loanNumber;
+ private CreditService creditService;
+ private RateService rateService;
+ private LoanServiceCallback callback;
+
+ /**
+ * Instantiates a new component instance, passing in references to the credit and rate services
+ *
+ * @param creditService the credit service
+ * @param rateService the rate service
+ */
+ public LoanServiceImpl(@Reference(name = "creditService", required = true)CreditService creditService,
+ @Reference(name = "rateService", required = true)RateService rateService) {
+ this.creditService = creditService;
+ this.rateService = rateService;
+ }
+
+ /**
+ * A setter method for injecting the client callback reference. The reference will be injected by the runtime
+ *
+ * @param callback the client callback reference
+ */
+ @Callback
+ public void setCallback(LoanServiceCallback callback) {
+ this.callback = callback;
+ }
+
+ public void apply(Application application) {
+ String id = application.getCustomerID();
+ loanNumber = UUID.randomUUID().toString();
+ System.out.println("---------------------------------------------------------------------");
+ System.out.println("Application received for customer");
+ System.out.println("Assigned loan number: " + loanNumber);
+ System.out.println("---------------------------------------------------------------------");
+ int rating = creditService.getCreditScore(id);
+ if (rating > 500) {
+ // approve the loan
+ callback.creditScoreResult(rating);
+ rateService.getRate(application.getType());
+ callback.applicationResult(LoanServiceCallback.APPROVED);
+ } else {
+ // reject the loan
+ callback.creditScoreResult(rating);
+ callback.applicationResult(LoanServiceCallback.DECLINED);
+ }
+ }
+
+ public void secureLoan() {
+ System.out.println("---------------------------------------------------------------------");
+ System.out.println("Loan secured");
+ System.out.println("Loan number: " + loanNumber);
+ System.out.println("---------------------------------------------------------------------");
+ }
+
+ public void cancel() {
+ System.out.println("---------------------------------------------------------------------");
+ System.out.println("Loan cancelled");
+ System.out.println("Loan number: " + loanNumber);
+ System.out.println("---------------------------------------------------------------------");
+ }
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/RateServiceImpl.java b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/RateServiceImpl.java
new file mode 100644
index 0000000000..6860b465ea
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/java/loanapplication/provider/impl/RateServiceImpl.java
@@ -0,0 +1,38 @@
+/*
+ * 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 loanapplication.provider.impl;
+
+import loanapplication.message.Application;
+import loanapplication.provider.RateService;
+
+/**
+ * The rate service implementation
+ */
+public class RateServiceImpl implements RateService {
+
+ public float getRate(int type) {
+ System.out.println("Rate Service: Calculating rate");
+ if (type == Application.FIVE_YEAR_VARIABLE) {
+ return 6.0f;
+ } else {
+ return 6.5f;
+ }
+ }
+
+}
diff --git a/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/resources/META-INF/sca/default.scdl b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/resources/META-INF/sca/default.scdl
new file mode 100644
index 0000000000..7b9c840588
--- /dev/null
+++ b/sandbox/old/contrib/old-samples/standalone/loanapplication/src/main/resources/META-INF/sca/default.scdl
@@ -0,0 +1,68 @@
+<?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
+ * 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.
+-->
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/2.0-alpha"
+ name="LoanApplication">
+
+ <component name="LoanClient">
+ <tuscany:launched class="loanapplication.client.impl.ClientServiceImpl"/>
+ <reference name="loanService" target="LoanService"/>
+ </component>
+
+ <component name="LoanService">
+ <implementation.java class="loanapplication.provider.impl.LoanServiceImpl"/>
+ <reference name="creditService" target="CreditService"/>
+ <reference name="rateService" target="RateService"/>
+ </component>
+
+ <component name="CreditService">
+ <implementation.java class="loanapplication.provider.impl.CreditServiceImpl"/>
+ </component>
+
+ <component name="RateService">
+ <implementation.java class="loanapplication.provider.impl.RateServiceImpl"/>
+ </component>
+
+</composite>
+
+<!-- Alternatively, the following demonstrates the same assembly using autowire instead of direct reference targets -->
+<!--
+<composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/2.0-alpha"
+ name="LoanApplication"
+ autowire="true">
+ <component name="LoanClient">
+ <tuscany:launched class="loanapplication.client.impl.ClientServiceImpl"/>
+ </component>
+
+ <component name="LoanService">
+ <implementation.java class="loanapplication.provider.impl.LoanServiceImpl"/>
+ </component>
+
+ <component name="CreditService">
+ <implementation.java class="loanapplication.provider.impl.CreditServiceImpl"/>
+ </component>
+
+ <component name="RateService">
+ <implementation.java class="loanapplication.provider.impl.RateServiceImpl"/>
+ </component>
+
+</composite>
+-->