From 8759a126a1bb9eec550c37b5b14642b0cfeb797b Mon Sep 17 00:00:00 2001 From: jsdelfino Date: Mon, 16 Nov 2009 06:23:13 +0000 Subject: Cleaning up SVN structure, moving branch under sca-cpp/branches. git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@880612 13f79535-47bb-0310-9956-ffa450edef68 --- .../BigBank/Accounts/AccountServiceImpl.cpp | 186 +++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 sca-cpp/branches/cpp-M1/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp (limited to 'sca-cpp/branches/cpp-M1/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp') diff --git a/sca-cpp/branches/cpp-M1/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp b/sca-cpp/branches/cpp-M1/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp new file mode 100644 index 0000000000..c78b5963bf --- /dev/null +++ b/sca-cpp/branches/cpp-M1/sca/samples/BigBank/Accounts/AccountServiceImpl.cpp @@ -0,0 +1,186 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed 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. + */ + +#if defined(WIN32) || defined (_WINDOWS) +#pragma warning(disable: 4786) +#endif + +#include "AccountServiceImpl.h" +#include "StockQuoteService.h" +#include "AccountDataService.h" + +#include "osoa/sca/sca.h" + +using namespace osoa::sca; + + +namespace com +{ + namespace bigbank + { + namespace account + { + + AccountServiceImpl::AccountServiceImpl() + { + initialized = false; + // Note - cannot use the component context within the constructor - need to move this + // code out to lazy init on first use. + + //ComponentContext myContext = ComponentContext::getCurrent(); + + //dataService = + // (AccountDataService*)myContext.getService("AccountDataService"); + + //stockService = + // (StockQuoteService*)myContext.getService("StockQuoteService"); + + } + + //void AccountServiceImpl::lazyGetDependencies() + //{ + // cant do this either - the context cannot be instantiated + // resolve the references on call only + + //theContext = ComponentContext::getCurrent(); + + //dataService = + // (AccountDataService*)theContext.getService("AccountDataService"); + + //stockService = + // (StockQuoteService*)theContext.getService("stockQuote"); + + //initialized = true; + //} + + AccountServiceImpl::~AccountServiceImpl() + { + } + + DataObjectPtr /*AccountReport**/ + AccountServiceImpl::getAccountReport(DataObjectPtr cid) + { + try { + + commonj::sdo::DataFactoryPtr factory = + commonj::sdo::DataFactory::getDataFactory(); + + commonj::sdo::XSDHelperPtr helper = + commonj::sdo::HelperProvider::getXSDHelper(factory); + + helper->defineFile("AccountService.wsdl"); + + const char* id = cid->getCString("customerID"); + + commonj::sdo::DataObjectPtr newReport = + factory->create("http://www.bigbank.com/AccountService","AccountReport"); + + ComponentContext theContext = ComponentContext::getCurrent(); + + com::bigbank::account::AccountDataService *dataService = + (com::bigbank::account::AccountDataService*)theContext.getService("AccountDataService"); + + if (dataService == 0) + { + std::cout << "No Account Data Service registered" << std::endl; + return newReport; + } + + // would be better to return a list of accounts - this only + // gets the first of each. + + commonj::sdo::DataObjectPtr checking = + dataService->getCheckingAccount(id); + + if (checking != 0) + { + commonj::sdo::DataObjectList& dl = newReport->getList("checking"); + checking->setFloat("balance", + fromUSDollarToCurrency(checking->getFloat("balance"))); + dl.append(checking); + } + + commonj::sdo::DataObjectPtr savings = dataService->getSavingsAccount(id); + + if (savings != 0) + { + commonj::sdo::DataObjectList& dl = newReport->getList("savings"); + savings->setFloat("balance", + fromUSDollarToCurrency(savings->getFloat("balance"))); + dl.append(savings); + } + + com::bigbank::stockquote::StockQuoteService* stockService = + (StockQuoteService*)theContext.getService("stockQuote"); + + if (stockService == 0) + { + std::cout << "No Stock Quote Data Service registered" << std::endl; + return newReport; + } + + commonj::sdo::DataObjectPtr stocks = dataService->getStockAccount(id); + + if (stocks != 0) + { + commonj::sdo::DataObjectList& dl = newReport->getList("stocks"); + + float value = 10.0f; + try { + value = stockService->getQuote( + stocks->getCString("symbol")); + } + catch (ServiceRuntimeException& e) + { + std::cout << "Fault from stock quote service" << e << std::endl; + } + stocks->setFloat("balance", + fromUSDollarToCurrency(stocks->getInteger("quantity") * + value)); + dl.append(stocks); + } + return newReport; + } + catch (SDORuntimeException& e) + { + std::cout << "Error from SDO: " << e << std::endl; + return 0; + } + } + + + float AccountServiceImpl::fromUSDollarToCurrency(float value) + { + // get the property "currency" + ComponentContext myContext = ComponentContext::getCurrent(); + + commonj::sdo::DataObjectInstance properties = myContext.getProperties(); + if (properties) + { + const char* currency = properties->getCString("currency"); + if (currency != 0) + { + std::cout << "Currency is : " << currency << std::endl; + if (!strcmp(currency,"USD")) return value; + if (!strcmp(currency,"EURO")) return 0.8f * value; + } + } + return 0.0f; + } + } + } +} // namespaces -- cgit v1.2.3