You are viewing a plain text version of this content. The canonical link for it is here.
Posted to stonehenge-commits@incubator.apache.org by dr...@apache.org on 2009/06/04 07:04:27 UTC
svn commit: r781666 [6/6] - in
/incubator/stonehenge/contrib/stocktrader/metro: ./ business_service/
business_service/config/ business_service/etc/
business_service/etc/order_processor/ business_service/lib/
business_service/lib/commons/ business_servi...
Added: incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/service/OrderProcessorImpl.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/service/OrderProcessorImpl.java?rev=781666&view=auto
==============================================================================
--- incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/service/OrderProcessorImpl.java (added)
+++ incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/service/OrderProcessorImpl.java Thu Jun 4 07:04:21 2009
@@ -0,0 +1,65 @@
+/*
+ * 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 org.wso2.stocktrader.service;
+
+import org.tempuri.OrderProcessorService;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.stocktrader.CustomOrderBean;
+import org.wso2.stocktrader.util.OrderProcessorUtility;
+import org.wso2.stocktrader.dal.DAOException;
+
+import javax.jws.WebParam;
+import javax.jws.WebService;
+
+import traderorderhost.trade.SubmitOrder;
+import traderorderhost.trade.IsOnline;
+import com.ibm.websphere.samples.trade.OrderDataBean;
+
+@WebService(endpointInterface = "org.tempuri.OrderProcessorService")
+public class OrderProcessorImpl implements OrderProcessorService {
+ private static final Log logger = LogFactory
+ .getLog(OrderProcessorImpl.class);
+ // OrderProcessManager is the controller for managing order processing.
+ private final OrderProcessManager orderProcessManager = new OrderProcessManager();
+
+ public void submitOrder(@WebParam(name = "SubmitOrder", targetNamespace = "http://Trade.TraderOrderHost", partName =
+ "parameters") SubmitOrder submitOrder) {
+ OrderDataBean order = submitOrder.getOrder();
+ CustomOrderBean orderData = new CustomOrderBean(order);
+ try {
+ processOrder(orderData);
+ } catch (DAOException e) {
+ logger.error("", e);
+ }
+ }
+
+ public void isOnline(@WebParam(name = "isOnline", targetNamespace = "http://Trade.TraderOrderHost", partName =
+ "parameters") IsOnline parameters) {
+ logger.debug("OrderProcessorImpl.isOnline(IsOnlines)");
+ }
+
+ private void processOrder(CustomOrderBean queueOrder) throws DAOException {
+ // 2 seconds delay to ensure that MSFT-BL has committed new order
+ // entries to the database which will happen when it gets HTTP 202
+ // accepted header
+ OrderProcessorUtility.pauseForTwoSeconds();
+ orderProcessManager.processAndCompleteOrder(queueOrder);
+ }
+}
Added: incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/OrderProcessorUtility.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/OrderProcessorUtility.java?rev=781666&view=auto
==============================================================================
--- incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/OrderProcessorUtility.java (added)
+++ incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/OrderProcessorUtility.java Thu Jun 4 07:04:21 2009
@@ -0,0 +1,40 @@
+/*
+ * 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 org.wso2.stocktrader.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+/**
+ * A class which contains utility functions for order processing.
+ */
+public class OrderProcessorUtility {
+ private static final Log logger = LogFactory
+ .getLog(OrderProcessorUtility.class);
+
+ public static void pauseForTwoSeconds() {
+ logger.debug("OrderProcessorImpl.sleepForTwoSec()");
+ try {
+ Thread.sleep(2 * 1000);
+ } catch (InterruptedException e) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("Unable to sleep for 2 sec", e);
+ }
+ }
+ }
+}
Added: incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/StockTraderUtility.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/StockTraderUtility.java?rev=781666&view=auto
==============================================================================
--- incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/StockTraderUtility.java (added)
+++ incubator/stonehenge/contrib/stocktrader/metro/order_processor/src/org/wso2/stocktrader/util/StockTraderUtility.java Thu Jun 4 07:04:21 2009
@@ -0,0 +1,100 @@
+/*
+ * 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 org.wso2.stocktrader.util;
+
+import java.math.BigDecimal;
+import java.sql.Date;
+import java.util.Calendar;
+import java.util.Random;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class StockTraderUtility {
+
+ public static final String TRADE_ORDER_SERVICE_PROPERTY_FILE = "TradeServiceConfig.properties";
+ public static final String TRADE_ORDER_SERVICE_SECURITY_FILE = "security-policy.xml";
+ public static final String MSSQL_DB_PROPERRTIES_FILE = "mssql-db.properties";
+ public static final String ORDER_TYPE_BUY = "buy";
+ public static final String ORDER_TYPE_SELL = "sell";
+ public static final String ORDER_TYPE_SELL_ENHANCED = "sellEnhanced";
+ public static final String ORDER_STATUS_CLOSED = "closed";
+ public static final String ORDER_STATUS_OPEN = "open";
+
+ public static final int MAX_QUERY_TOP_ORDERS = 5;
+ public static final int MAX_QUERY_ORDERS = 5;
+
+ public static final BigDecimal PENNY_STOCK_P = BigDecimal.valueOf(0.1);
+ public static final BigDecimal JUNK_STOCK_MIRACLE_MULTIPLIER = BigDecimal
+ .valueOf(500);
+ public static final BigDecimal STOCK_P_HIGH_BAR = BigDecimal.valueOf(1000);
+ public static final BigDecimal STOCK_P_HIGH_BAR_CRASH = BigDecimal
+ .valueOf(0.05);
+ public static final BigDecimal STOCK_CHANGE_MAX_PERCENT = BigDecimal
+ .valueOf(5);
+ public static final BigDecimal BUY_FEE = BigDecimal.valueOf(15.95);
+ public static final BigDecimal SELL_FEE = BigDecimal.valueOf(25.95);
+
+ private static final Log logger = LogFactory
+ .getLog(StockTraderUtility.class);
+
+ public static BigDecimal getRandomPriceChangeFactor(BigDecimal currentPrice) {
+ if (currentPrice.compareTo(PENNY_STOCK_P) == -1
+ || currentPrice.compareTo(PENNY_STOCK_P) == 0) {
+ return JUNK_STOCK_MIRACLE_MULTIPLIER;
+ } else if (currentPrice.compareTo(STOCK_P_HIGH_BAR) == 1
+ || currentPrice.compareTo(STOCK_P_HIGH_BAR) == 0) {
+ return STOCK_P_HIGH_BAR_CRASH;
+ }
+
+ BigDecimal factor = BigDecimal.valueOf(0);
+ Random rand = new Random();
+ int y = rand.nextInt(STOCK_CHANGE_MAX_PERCENT.subtract(BigDecimal.ONE)
+ .intValue());
+ y = y + 1;
+ int x = rand.nextInt();
+
+ if (x % 2 == 0) {
+ factor = BigDecimal.ONE.subtract((BigDecimal.valueOf(y))
+ .divide(BigDecimal.valueOf(100)));// / 100m;
+ } else
+ factor = BigDecimal.ONE.add(BigDecimal.ONE.add(BigDecimal
+ .valueOf(y).divide(BigDecimal.valueOf(100))));
+ return factor;
+ }
+
+ public static Date convertToSqlDate(Calendar calendar) {
+ return new Date(calendar.getTimeInMillis());
+ }
+
+ public static Calendar convertToCalendar(Date date) {
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTimeInMillis(date.getTime());
+ return calendar;
+ }
+
+ public static BigDecimal getOrderFee(String orderType) {
+ if (StockTraderUtility.ORDER_TYPE_BUY.equals(orderType)
+ || StockTraderUtility.ORDER_TYPE_SELL.equals(orderType)) {
+ return BUY_FEE;
+ } else {
+ return SELL_FEE;
+ }
+ }
+
+}