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 be...@apache.org on 2009/09/05 16:41:19 UTC

svn commit: r811675 [8/9] - in /incubator/stonehenge/trunk: ./ stocktrader/metro/ stocktrader/metro/business_service/ stocktrader/metro/business_service/etc/ stocktrader/metro/business_service/src/ stocktrader/metro/business_service/src/org/ stocktrade...

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/ConfigServiceBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/ConfigServiceBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/ConfigServiceBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/ConfigServiceBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,66 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import org.apache.stonehenge.stocktrader.service.ConfigServiceClient;
+import org.datacontract.schemas._2004._07.trade.ServiceLocation;
+
+import javax.faces.model.SelectItem;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class ConfigServiceBean {
+
+    private ConfigServiceClient configServiceClient;
+
+    private String selectedBS;
+    private String selectedOPS;
+
+    public ConfigServiceBean() {
+        configServiceClient = ConfigServiceClient.getInstance();
+        selectedBS = configServiceClient.getSelectedBS();
+        selectedOPS = configServiceClient.getSelectedOPS();
+    }
+
+    public String getSelectedBS() {
+        return selectedBS;
+    }
+
+    public String getSelectedOPS() {
+        return selectedOPS;
+    }
+
+    public void setSelectedBS(String selectedBS) {
+        this.selectedBS = selectedBS;
+    }
+
+    public void setSelectedOPS(String selectedOPS) {
+        this.selectedOPS = selectedOPS;
+    }
+
+    public Collection getBsNames() {
+        Collection bs = new ArrayList();
+        List<ServiceLocation> bsServiceLocationList = configServiceClient.getBSLocations();
+        for (ServiceLocation location : bsServiceLocationList) {
+            SelectItem selectItem = new SelectItem(location.getServiceName(), location.getServiceName());
+            bs.add(selectItem);
+        }
+        return bs;
+    }
+
+    public Collection getOpsNames() {
+        Collection ops = new ArrayList();
+        List<ServiceLocation> opsServiceLocationList = configServiceClient.getOPSLocations();
+        for (ServiceLocation location : opsServiceLocationList) {
+            ops.add(new SelectItem(location.getServiceName(), location.getServiceName()));
+        }
+        return ops;
+    }
+
+    public String setBSAndOPS() {
+        if (configServiceClient.setConfig("METRO_CLIENT", selectedBS, selectedOPS)) {
+            return "success";
+        }
+        return "failure";
+    }
+
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/HoldingInfo.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/HoldingInfo.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/HoldingInfo.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/HoldingInfo.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,76 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.GetHoldings;
+import com.ibm.websphere.samples.trade.GetQuote;
+import com.ibm.websphere.samples.trade.GetQuoteResponse;
+import com.ibm.websphere.samples.trade.HoldingDataBean;
+
+public class HoldingInfo {
+
+	private double totalHoldings;
+	private int noOfHoldings;
+	private double purchaseBasis;
+	private HashMap<String, Double> quoteInfo = new HashMap<String, Double>();
+	private final ITradeServices businessService;
+	private final String currentUser;
+	private Collection<HoldingDataBean> holdingsReturn;
+
+	public HoldingInfo(ITradeServices businessService, String currentUser) {
+		this.businessService = businessService;
+		this.currentUser = currentUser;
+		holdingsReturn = getHoldings();
+		noOfHoldings = holdingsReturn.size();
+		for (HoldingDataBean bean : holdingsReturn) {
+			double quoteInfoOfHold = getQuoteInfo(bean.getQuoteID());
+			totalHoldings = totalHoldings + quoteInfoOfHold
+					* bean.getQuantity();
+			purchaseBasis = purchaseBasis + bean.getQuantity().doubleValue()
+					* bean.getPurchasePrice().doubleValue();
+			quoteInfo.put(bean.getQuoteID(), quoteInfoOfHold);
+		}
+	}
+
+	private List<HoldingDataBean> getHoldings() {
+		GetHoldings holdingsParameter = new GetHoldings();
+		holdingsParameter.setUserID(currentUser);
+		return businessService.getHoldings(holdingsParameter)
+				.getGetHoldingsReturn().getHoldingDataBean();
+	}
+
+	private double getQuoteInfo(String quoteID) {
+		GetQuote quoteParameter = new GetQuote();
+		quoteParameter.setSymbol(quoteID);
+		GetQuoteResponse quotes = businessService.getQuote(quoteParameter);
+		return quotes.getGetQuoteReturn().getPrice().doubleValue();
+	}
+
+	public double getTotalHoldings() {
+		return totalHoldings;
+	}
+
+	public double getPurchaseBasis() {
+		return purchaseBasis;
+	}
+
+	public double getGain() {
+		return totalHoldings - purchaseBasis;
+	}
+
+	public int getNoOfHoldings() {
+		return noOfHoldings;
+	}
+
+	public Map getQuoteInfo() {
+		return quoteInfo;
+	}
+	public Collection<HoldingDataBean> getHoldingsReturn() {
+		return holdingsReturn;
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/LoginBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/LoginBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/LoginBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/LoginBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,67 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import org.apache.stonehenge.stocktrader.service.BusinessServiceClient;
+import org.apache.stonehenge.stocktrader.service.CookieManager;
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.Login;
+import com.ibm.websphere.samples.trade.LoginResponse;
+import com.ibm.websphere.samples.trade.Logout;
+
+public class LoginBean {
+    private static final CookieManager cookieManager = new CookieManager();
+
+    private String username;
+    private String password;
+
+    public LoginBean() {
+        String user = cookieManager.getCurrentUser();
+        if (user != null) {
+            logout(user);
+            cookieManager.deleteUserCookie();
+        }
+    }
+
+    private void logout(String username) {
+        ITradeServices service = BusinessServiceClient.getInstance().getBusinessService();
+        Logout logoutParam = new Logout();
+        logoutParam.setUserID(username);
+        service.logout(logoutParam);
+    }
+    
+    public String getUsername() {
+    	return cookieManager.getCurrentUser();
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public void setPassword(String password) {
+        this.password = password;
+    }
+
+    public String login() {
+        if (loginBusinessService(this.username, this.password)) {
+            cookieManager.writeUserCookie(this.username);
+            return "success";
+        } else {
+            this.username = "";
+            this.password = "";
+            return "faliure";
+        }
+    }
+
+    private boolean loginBusinessService(String username, String password) {
+        ITradeServices service = BusinessServiceClient.getInstance().getBusinessService();
+        Login loginParam = new Login();
+        loginParam.setUserID(username);
+        loginParam.setPassword(password);
+        LoginResponse response = service.login(loginParam);
+        return response.getLoginReturn() != null;
+    }
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/PortfolioBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/PortfolioBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/PortfolioBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/PortfolioBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,40 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.swing.plaf.ListUI;
+
+import org.apache.stonehenge.stocktrader.service.BusinessServiceClient;
+import org.apache.stonehenge.stocktrader.service.CookieManager;
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.GetClosedOrders;
+import com.ibm.websphere.samples.trade.GetHoldings;
+import com.ibm.websphere.samples.trade.HoldingDataBean;
+import com.ibm.websphere.samples.trade.OrderDataBean;
+
+public class PortfolioBean {
+	private ITradeServices businessService;
+	private String currentUser;
+	private List<OrderDataBean> closedOrdersReturn;
+	public void setBusinessService(ITradeServices businessService) {
+		this.businessService = businessService;
+	}
+
+	public void setCurrentUser(String currentUser) {
+		this.currentUser = currentUser;
+	}
+
+	public List<OrderDataBean> getClosedOrdersReturn()
+	{
+		if (closedOrdersReturn == null || closedOrdersReturn.size() == 0) {
+			GetClosedOrders closedOrders = new GetClosedOrders();
+			closedOrders.setUserID(currentUser);
+			closedOrdersReturn = businessService.getClosedOrders(closedOrders)
+					.getGetClosedOrdersReturn().getOrderDataBean();
+		}
+		return closedOrdersReturn;
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/QuoteBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/QuoteBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/QuoteBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/QuoteBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,57 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.GetQuote;
+import com.ibm.websphere.samples.trade.QuoteDataBean;
+
+public class QuoteBean {
+
+	private ITradeServices businessService;
+
+	public void setBusinessService(ITradeServices businessService) {
+		this.businessService = businessService;
+	}
+
+	public List<QuoteDataBean> getQuoteBeanReturns() {
+		FacesContext facesContext = FacesContext.getCurrentInstance();
+		HttpServletRequest request = (HttpServletRequest) facesContext
+				.getExternalContext().getRequest();
+
+		request.getParameterMap();
+		String symbol = request.getParameter("SYMBOLS");
+		if (symbol == null) {
+			return getDefaultQuotes();
+		}
+		return getQunote(symbol);
+	}
+
+	private List<QuoteDataBean> getDefaultQuotes() {
+		List<QuoteDataBean> quoteBeanReturns = new ArrayList<QuoteDataBean>();
+		for (int i = 0; i < 5; i++) {
+			quoteBeanReturns.add(getQunote("s:" + i).get(0));
+		}
+		return quoteBeanReturns;
+	}
+
+	private List<QuoteDataBean> getQunote(String symbols) {
+		String[] symbolArray = symbols.split(";");
+		GetQuote quote = new GetQuote();
+		List<QuoteDataBean> quoteBeanReturns = new ArrayList<QuoteDataBean>();
+		for (String symbol : symbolArray) {
+			quote.setSymbol(symbol);
+			QuoteDataBean getQuoteReturn = businessService.getQuote(quote)
+					.getGetQuoteReturn();
+			if (getQuoteReturn != null) {
+				quoteBeanReturns.add(getQuoteReturn);
+			}
+		}
+		return quoteBeanReturns;
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/RegisterBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/RegisterBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/RegisterBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/RegisterBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,166 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import java.math.BigDecimal;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.AccountProfileDataBean;
+import com.ibm.websphere.samples.trade.GetAccountProfileData;
+import com.ibm.websphere.samples.trade.Register;
+import com.ibm.websphere.samples.trade.UpdateAccountProfile;
+
+public class RegisterBean {
+	private String userId;
+	private BigDecimal openBalance;
+	private String fullName;
+	private String email;
+	private String address;
+	private String password;
+	private String creditCard;
+	private String confPassword;
+	private ITradeServices businessService;
+	private String currentUser;
+
+	public void setBusinessService(ITradeServices businessService) {
+		this.businessService = businessService;
+	}	
+
+	public void setCurrentUser(String currentUser) {
+		this.currentUser = currentUser;
+	}
+	
+	@javax.annotation.PostConstruct
+	public void initialize(){
+		if(currentUser != null){
+			AccountProfileDataBean userAccount = getUserAccountProfileDataReturn();
+			userId = userAccount.getUserID();
+			email = userAccount.getEmail();
+			fullName = userAccount.getFullName();
+			address = userAccount.getAddress();
+			password = userAccount.getPassword();
+			confPassword = userAccount.getPassword();
+			creditCard = userAccount.getCreditCard();
+		}
+	}
+	
+	public AccountProfileDataBean getUserAccountProfileDataReturn() {
+			GetAccountProfileData profileData = new GetAccountProfileData();
+			profileData.setUserID(currentUser);
+			return businessService.getAccountProfileData(profileData).getGetAccountProfileDataReturn();
+	}
+
+	public BigDecimal getOpenBalance() {
+		return openBalance;
+	}
+
+	public void setOpenBalance(BigDecimal openBalance) {
+		this.openBalance = openBalance;
+	}
+
+	public String getAddress() {
+		return address;
+	}
+
+	public void setAddress(String address) {
+		this.address = address;
+	}
+
+	public String getFullName() {
+		return fullName;
+	}
+
+	public void setFullName(String fullname) {
+		this.fullName = fullname;
+	}
+
+	public String getEmail() {
+		return email;
+	}
+
+	public void setEmail(String email) {
+		this.email = email;
+	}
+
+	public String getPassword() {
+		return password;
+	}
+
+	public void setPassword(String password) {
+		this.password = password;
+	}
+
+	public String getCreditCard() {
+		return creditCard;
+	}
+
+	public void setCreditCard(String creditcard) {
+		this.creditCard = creditcard;
+	}
+
+	public String getConfPassword() {
+		return confPassword;
+	}
+
+	public void setConfPassword(String confpassword) {
+		this.confPassword = confpassword;
+	}
+
+	public ITradeServices getBusinessService() {
+		return businessService;
+	}
+
+	public String getUserId() {
+		return userId;
+	}
+
+	public void setUserId(String userId) {
+		this.userId = userId;
+	}
+	
+	public String register() {
+		Register register = new Register();
+		register.setAddress(address);
+		register.setCreditcard(creditCard);
+		register.setEmail(email);
+		register.setFullname(fullName);
+		register.setOpenBalance(openBalance);
+		register.setPassword(password);
+		register.setUserID(userId);
+		businessService.register(register);
+		return "success";
+	}
+
+	public void passwordValidate(FacesContext context, UIComponent component,
+			Object value) {
+		HttpServletRequest request = (HttpServletRequest) context
+				.getExternalContext().getRequest();
+		request.getParameterMap();
+		String password = request.getParameter("AccountProfile:Password");
+		String confirmPassword = (String) value;
+		if (!password.equals(confirmPassword)) {
+			FacesMessage message = new FacesMessage();
+			message.setSeverity(FacesMessage.SEVERITY_ERROR);
+			message.setSummary("Passwords Don't Match!");
+			message.setDetail("Passwords Don't Match!");
+			context.addMessage("AccountProfile:Confirm Password :", message);
+		}
+	}
+	public void updateProfile()
+	{
+		UpdateAccountProfile profile = new UpdateAccountProfile();
+		AccountProfileDataBean profileToBeUpdated = new AccountProfileDataBean();
+		profileToBeUpdated.setAddress(address);
+		profileToBeUpdated.setUserID(userId);
+		profileToBeUpdated.setEmail(email);
+		profileToBeUpdated.setPassword(password);
+		profileToBeUpdated.setFullName(fullName);
+		profileToBeUpdated.setCreditCard(creditCard);
+		profile.setProfileData(profileToBeUpdated);
+		businessService.updateAccountProfile(profile);
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/TradeBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/TradeBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/TradeBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/TradeBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,131 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.Buy;
+import com.ibm.websphere.samples.trade.OrderDataBean;
+import com.ibm.websphere.samples.trade.Sell;
+import com.ibm.websphere.samples.trade.SellEnhanced;
+
+public class TradeBean {
+	private String symbol;
+	private double quantity;
+	private double price;
+	private String type;
+	private Integer holdingId;
+	private OrderDataBean orderReturn;
+	private ITradeServices businessService;
+	private String currentUser;
+	
+	public void setBusinessService(ITradeServices businessService) {
+		this.businessService = businessService;
+	}
+
+	public void setCurrentUser(String currentUser) {
+		this.currentUser = currentUser;
+	}
+
+	public OrderDataBean getOrderReturn() {
+		return orderReturn;
+	}
+
+	public void setOrderReturn(OrderDataBean orderReturn) {
+		this.orderReturn = orderReturn;
+	}
+
+	public Integer getHoldingId() {
+		return holdingId;
+	}
+
+	public void setHoldingId(Integer holdingId) {
+		this.holdingId = holdingId;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public String getSymbol() {
+		return symbol;
+	}
+
+	public void setSymbol(String symbol) {
+		this.symbol = symbol;
+	}
+
+	public double getPrice() {
+		return price;
+	}
+
+	public void setPrice(double price) {
+		this.price = price;
+	}
+
+	public double getQuantity() {
+		return quantity;
+	}
+
+	public void setQuantity(double quantity) {
+		this.quantity = quantity;
+	}
+
+	public String submitToConfirm() {
+		FacesContext facesContext = FacesContext.getCurrentInstance();
+		HttpServletRequest request = (HttpServletRequest) facesContext
+				.getExternalContext().getRequest();
+
+		request.getParameterMap();
+		type = request.getParameter("type");
+		symbol = request.getParameter("symbol");
+		quantity = Double.parseDouble(request.getParameter("quantity"));
+		if (type.equals("Buy")) {
+			price = Double.parseDouble(request.getParameter("price"));
+		}
+
+		if (type.equals("Sell")) {
+			holdingId = Integer.parseInt(request.getParameter("holdingId"));
+		}
+		return "success";
+	}
+
+	public String buy() {
+		Buy buyParam = new Buy();
+        buyParam.setOrderProcessingMode(1);
+		buyParam.setUserID(currentUser);
+		buyParam.setQuantity(quantity);
+		buyParam.setSymbol(symbol);
+		try {
+			orderReturn = businessService.buy(buyParam).getBuyReturn();
+		} catch (Exception e) {
+			return "failure";
+		}
+		return "success";
+	}
+
+	public String sell() {
+		SellEnhanced sellParam = new SellEnhanced();
+        sellParam.setQuantity(quantity);
+		sellParam.setHoldingID(holdingId);
+		sellParam.setUserID(currentUser);
+		try {
+			orderReturn = businessService.sellEnhanced(sellParam).getSellEnhancedReturn();
+		} catch (Exception e) {
+			return "failure";
+		}
+		return "success";
+	}
+	
+	public String cancelBuy(){
+		return "success";
+	}
+	public String cancelSell(){
+		return "success";
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/UserBean.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/UserBean.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/UserBean.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/bean/UserBean.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,129 @@
+package org.apache.stonehenge.stocktrader.bean;
+
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.DecimalFormat;
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+import org.tempuri.ITradeServices;
+
+import com.ibm.websphere.samples.trade.AccountDataBean;
+import com.ibm.websphere.samples.trade.GetAccountData;
+import com.ibm.websphere.samples.trade.GetMarketSummary;
+import com.ibm.websphere.samples.trade.MarketSummaryDataBeanWS;
+import com.ibm.websphere.samples.trade.QuoteDataBean;
+
+public class UserBean {
+	private static final String DATE_TIME_FORMAT = "MM/dd/yyyy hh:mm:ss a";
+	private static final DateFormat formater = new SimpleDateFormat(
+			DATE_TIME_FORMAT); // 05/21/2008 04:01:00 PM
+	private static final DecimalFormat percentFormater = new DecimalFormat(
+			"0.00%");
+	private static final DecimalFormat roundFormater = new DecimalFormat("0.00");
+	private AccountDataBean account;
+	private MarketSummaryDataBeanWS marketSummary;
+	private ITradeServices businessService;
+	private String currentUser;
+	private HoldingInfo holdingInfo;
+
+	public void setBusinessService(ITradeServices businessService) {
+		this.businessService = businessService;
+	}
+
+	public void setCurrentUser(String currentUser) {
+		this.currentUser = currentUser;
+	}
+
+	private AccountDataBean getAccount() {
+		if (account == null) {
+			GetAccountData accountParameter = new GetAccountData();
+			accountParameter.setUserID(currentUser);
+			account = businessService.getAccountData(accountParameter)
+					.getGetAccountDataReturn();
+		}
+		return account;
+	}
+
+	public HoldingInfo getHoldingInfo(){
+		holdingInfo = new HoldingInfo(businessService, currentUser);			
+		return holdingInfo;
+	}
+
+	public double getSumOfCashHolding() {
+		return getAccount().getBalance().doubleValue() + holdingInfo.getTotalHoldings();
+	}
+
+	public String getCurrentUserName() {
+		return currentUser;
+	}
+
+	public String getCreationDate() {
+		return formater.format(getAccount().getCreationDate().getTime());
+	}
+
+	public String getLastLoginDate() {
+		return formater.format(getAccount().getLastLogin().getTime());
+	}
+
+	public Integer getAccountID() {
+		return getAccount().getAccountID();
+	}
+
+	public Integer getLoginCount() {
+		return getAccount().getLoginCount();
+	}
+
+	public BigDecimal getBalance() {
+		return getAccount().getBalance();
+	}
+
+	public BigDecimal getOpenBalance() {
+		return getAccount().getOpenBalance();
+	}
+
+	public String getCurrentGainString() {
+		Double currentGain = getCurrentGain();
+		if (currentGain >= 0) {
+			return currentGain.toString();
+		}
+		return "(" + Math.abs(currentGain) + ")";
+	}
+
+	public double getCurrentGain() {
+		return getAccount().getBalance().doubleValue() + holdingInfo.getTotalHoldings()
+				- getAccount().getOpenBalance().doubleValue();
+	}
+
+	public BigDecimal getGainPercent() {
+		return BigDecimal.valueOf(getCurrentGain()).divide(getOpenBalance());
+	}
+
+	public String getGainPercentString() {
+		return percentFormater.format(getGainPercent());
+	}
+
+	private MarketSummaryDataBeanWS getMarketSummary() {
+		if(marketSummary == null ){
+			marketSummary = businessService.getMarketSummary(new GetMarketSummary())
+			.getGetMarketSummaryReturn();
+		}
+		return marketSummary;
+	}
+
+	public String getTradeStockIndex() {
+		return roundFormater.format(getMarketSummary().getTSIA());
+	}
+
+	public String getVolume() {
+		return getMarketSummary().getVolume().toString();
+	}
+
+	public List<QuoteDataBean> getTopGainers() {
+		return getMarketSummary().getTopGainers().getQuoteDataBean();
+	}
+
+	public List<QuoteDataBean> getTopLosers() {
+		return getMarketSummary().getTopLosers().getQuoteDataBean();
+	}
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/filter/LoginFilter.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/filter/LoginFilter.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/filter/LoginFilter.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/filter/LoginFilter.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,32 @@
+package org.apache.stonehenge.stocktrader.filter;
+
+import java.io.IOException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.stonehenge.stocktrader.service.CookieManager;
+
+public class LoginFilter implements Filter {
+    private static CookieManager cookieManager = new CookieManager();
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        String user = cookieManager.getCurrentUser((HttpServletRequest)request);
+        if (user != null) {
+            chain.doFilter(request, response);
+        } else {
+            ((HttpServletResponse)response).sendRedirect("login.jsf");
+        }
+    }
+
+    public void destroy() {
+    }
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceClient.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceClient.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceClient.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceClient.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,46 @@
+package org.apache.stonehenge.stocktrader.service;
+
+import org.tempuri.ITradeServices;
+import org.tempuri.TradeServiceWsas;
+
+import javax.xml.ws.BindingProvider;
+
+import com.ibm.websphere.samples.trade.Login;
+import com.ibm.websphere.samples.trade.LoginResponse;
+
+public final class BusinessServiceClient {
+    private static BusinessServiceClient self = null;
+    private static ConfigServiceClient configServiceClient = null;
+    private static ITradeServices tradeServices = null;
+
+    public BusinessServiceClient() {
+        configServiceClient = ConfigServiceClient.getInstance();
+        TradeServiceWsas service = new TradeServiceWsas();
+        tradeServices = service.getBasicHttpBindingITradeServices();
+    }
+
+    public static BusinessServiceClient getInstance() {
+        if (self == null) {
+            self = new BusinessServiceClient();
+        }
+        return self;
+    }
+
+    public ITradeServices getBusinessService() {
+        BusinessServiceConfig config = configServiceClient.getConfig();
+        ((BindingProvider) tradeServices).getRequestContext()
+                .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, config.getEndpointURL());
+        return tradeServices;
+    }
+
+    public static void main(String[] args) {
+        BusinessServiceClient businessServiceClient = BusinessServiceClient.getInstance();
+        ITradeServices service = businessServiceClient.getBusinessService();
+        Login loginParam = new Login();
+        loginParam.setUserID("uid:0");
+        loginParam.setPassword("xxx");
+        LoginResponse response = service.login(loginParam);
+        assert response.getLoginReturn() != null;
+        System.out.println("connect successfully!!!");
+    }
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceConfig.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceConfig.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceConfig.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/BusinessServiceConfig.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,19 @@
+package org.apache.stonehenge.stocktrader.service;
+
+import org.tempuri.ConfigServiceService;
+
+import java.util.Properties;
+import java.io.InputStream;
+import java.io.IOException;
+
+public class BusinessServiceConfig {
+    private String endpointURL;
+
+    public String getEndpointURL() {
+        return endpointURL;
+    }
+
+    public void setEndpointURL(String endpointURL) {
+        this.endpointURL = endpointURL;
+    }
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/ConfigServiceClient.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/ConfigServiceClient.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/ConfigServiceClient.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/ConfigServiceClient.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,115 @@
+package org.apache.stonehenge.stocktrader.service;
+
+import org.datacontract.schemas._2004._07.trade.*;
+import org.tempuri.ConfigService;
+import org.tempuri.ConfigServiceService;
+import traderconfighost.trade.*;
+
+import javax.xml.ws.BindingProvider;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Properties;
+
+public final class ConfigServiceClient {
+
+    private static final String CONFIG_SERVICE_PROPERTY_FILE = "TradeServiceConfig.properties";
+    private static final String CONFIG_SERVICE_URL = "org.apache.stonehenge.stocktrader.TradeConfigService.url";
+
+    private static Properties prop = new Properties();
+
+    private static ConfigServiceService service;
+
+    private static ConfigServiceClient configServiceClient;
+
+    static {
+        ClassLoader cl = ConfigServiceClient.class.getClassLoader();
+        InputStream is = cl.getResourceAsStream(CONFIG_SERVICE_PROPERTY_FILE);
+        try {
+            prop.load(is);
+        } catch (IOException e) {
+        }
+    }
+
+    private ConfigServiceClient() {
+        ConfigService configService = new ConfigService();
+        service = configService.getBasicHttpBindingConfigServiceService();
+        ((BindingProvider) service).getRequestContext()
+                .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, prop.getProperty(CONFIG_SERVICE_URL));
+
+    }
+
+    public static ConfigServiceClient getInstance() {
+        if (configServiceClient == null) {
+            configServiceClient = new ConfigServiceClient();
+        }
+        return configServiceClient;
+    }
+
+    public List<ServiceLocation> getBSLocations() {
+        return service.getBSLocations(new GetBSLocations()).getGetBSLocationsResult().getServiceLocation();
+    }
+
+    public BusinessServiceConfig getConfig() {
+        ClientConfigResponse response = getClientConfigResponse();
+
+        BusinessServiceConfig config = new BusinessServiceConfig();
+        config.setEndpointURL(response.getBS());
+        return config;
+    }
+
+    private ClientConfigResponse getClientConfigResponse() {
+        GetClientConfig getClientConfig = new GetClientConfig();
+        ClientConfigRequest configRequest = new ClientConfigRequest();
+        configRequest.setClientName("METRO_CLIENT");
+        getClientConfig.setClient(configRequest);
+        GetClientConfigResponse clientConfigResponse = service.getClientConfig(getClientConfig);
+        ClientConfigResponse response = clientConfigResponse.getGetClientConfigResult();
+        return response;
+    }
+
+    public boolean setConfig(String client, String bs, String ops) {
+        try {
+            SetClientToBS setClientToBs = new SetClientToBS();
+            ClientToBS clientToBS = new ClientToBS();
+            clientToBS.setBs(bs);
+            clientToBS.setClient(client);
+            setClientToBs.setClientConfig(clientToBS);
+            service.setClientToBS(setClientToBs);
+
+            SetBSToOPS setBsToOps = new SetBSToOPS();
+            BSToOPS bsToOps = new BSToOPS();
+            bsToOps.setBs(bs);
+            bsToOps.setOps(ops);
+            setBsToOps.setBsConfig(bsToOps);
+            service.setBSToOPS(setBsToOps);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+    }
+
+    public String getSelectedOPS() {
+        GetBSConfig getBSConfig = new GetBSConfig();
+        BSConfigRequest bsConfigRequest = new BSConfigRequest();
+        bsConfigRequest.setBSName(getClientConfigResponse().getBSName());
+        getBSConfig.setBs(bsConfigRequest);
+        return service.getBSConfig(getBSConfig).getGetBSConfigResult().getOPSName();
+    }
+
+    public String getSelectedBS() {
+        ClientConfigResponse response = getClientConfigResponse();
+        return response.getBSName();
+    }
+
+    public List<ServiceLocation> getOPSLocations() {
+        return service.getOPSLocations(new GetOPSLocations()).getGetOPSLocationsResult().getServiceLocation();
+    }
+
+    public static void main(String[] args) {
+        ConfigServiceClient configServiceClient = ConfigServiceClient.getInstance();
+        assert configServiceClient.getBSLocations().size() == 3;
+        System.out.println("connect successfully!!");
+    }
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/CookieManager.java
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/CookieManager.java?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/CookieManager.java (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/src/org/apache/stonehenge/stocktrader/service/CookieManager.java Sat Sep  5 16:41:14 2009
@@ -0,0 +1,68 @@
+package org.apache.stonehenge.stocktrader.service;
+
+import javax.faces.context.FacesContext;
+import javax.servlet.http.Cookie;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+public class CookieManager {
+
+    private static final String COOKIE_USERNAME = "username";
+    private static final int MAX_AGE = 3600;
+
+    public static CookieManager getInstance(){
+    	return new CookieManager();
+    }
+    
+    public String getCurrentUser() {
+        return getCurrentUser(getRequest());
+    }
+
+    public String getCurrentUser(HttpServletRequest request) {
+        final Cookie requestCookie = getRequestCookie(request, COOKIE_USERNAME);
+        if (requestCookie != null) {
+            return requestCookie.getValue();
+        }
+
+        return null;
+    }
+
+    public void writeUserCookie(String username) {
+        Cookie cookie = new Cookie(COOKIE_USERNAME, username);
+        cookie.setMaxAge(MAX_AGE);
+        cookie.setVersion(1);
+        getResponse().addCookie(cookie);
+    }
+
+    public void deleteUserCookie() {
+        Cookie cookie = getRequestCookie(getRequest(), COOKIE_USERNAME);
+		if (cookie != null) {
+		    cookie.setMaxAge(0);
+		    getResponse().addCookie(cookie);
+		}
+    }
+
+    private Cookie getRequestCookie(HttpServletRequest request, String name) {
+        Cookie[] cookies = request.getCookies();
+        if (cookies == null) {
+            return null;
+        }
+
+        for (Cookie cookie : cookies) {
+            if (name.equals(cookie.getName())) {
+                return cookie;
+            }
+        }
+        return null;
+    }
+    
+    private HttpServletRequest getRequest() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        return (HttpServletRequest) facesContext.getExternalContext().getRequest();
+    }
+
+    private HttpServletResponse getResponse() {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
+        return (HttpServletResponse) facesContext.getExternalContext().getResponse();
+    }
+}
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/currency.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/currency.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/currency.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/currency.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,11 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core">
+<ui:composition>
+	<h:outputText value="#{value}">
+		<f:convertNumber currencySymbol="$" type="currency"
+			maxFractionDigits="2" minFractionDigits="2" groupingUsed="false" />
+	</h:outputText>
+</ui:composition>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/price.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/price.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/price.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/price.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,15 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:c="http://java.sun.com/jstl/core">
+<ui:composition>
+	<h:outputText  value="#{displayValue == null ? value : displayValue}" styleClass="#{ (value == 0) ? null : (value > 0 ? 'price-gain' : 'price-loss')}">
+	<f:convertNumber currencySymbol="$" type="currency"
+			maxFractionDigits="2" minFractionDigits="2" groupingUsed="false"  />
+	</h:outputText>
+</ui:composition>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/stonehenge.taglib.xml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/stonehenge.taglib.xml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/stonehenge.taglib.xml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/facelets/tags/stonehenge.taglib.xml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<!DOCTYPE facelet-taglib PUBLIC
+  "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN"
+  "facelet-taglib_1_0.dtd">
+<facelet-taglib>
+      <namespace>http://stonehenge.apache.com/jsf</namespace>
+	<tag>
+		<tag-name>price</tag-name>
+		<source>price.xhtml</source>
+	</tag>
+	
+	<tag>
+		<tag-name>currency</tag-name>
+		<source>currency.xhtml</source>
+	</tag>
+</facelet-taglib>

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/faces-config.xml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/faces-config.xml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/faces-config.xml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,196 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<faces-config xmlns="http://java.sun.com/xml/ns/javaee"
+              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd"
+              version="1.2"> 
+  <application>
+    <view-handler>
+      com.sun.facelets.FaceletViewHandler
+    </view-handler>    
+  </application> 
+     
+    <navigation-rule>
+        <from-view-id>/login.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>success</from-outcome>
+            <to-view-id>/home.xhtml</to-view-id>
+            <redirect/>
+        </navigation-case>
+        <navigation-case>
+            <from-outcome>failure</from-outcome>
+            <to-view-id>/login.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>/quotes.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>success</from-outcome>
+            <to-view-id>/confirmation.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>/portfolio.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>success</from-outcome>
+            <to-view-id>/confirmation.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+    
+     <navigation-rule>
+        <from-view-id>/register.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>success</from-outcome>
+            <to-view-id>/registerSuccess.xhtml</to-view-id>
+        </navigation-case>
+    </navigation-rule>
+
+    <navigation-rule>
+        <from-view-id>/configService.xhtml</from-view-id>
+        <navigation-case>
+            <from-outcome>success</from-outcome>
+            <to-view-id>/login.xhtml</to-view-id>
+            <redirect/>
+        </navigation-case>
+    </navigation-rule>
+    
+    <navigation-rule>
+        <from-view-id>/confirmation.xhtml</from-view-id>
+        <navigation-case>        	
+        	<from-action>#{tradeBean.buy}</from-action> 
+            <from-outcome>success</from-outcome>
+            <to-view-id>/newOrder.xhtml</to-view-id>
+        </navigation-case>
+		<navigation-case>
+			<from-action>#{tradeBean.buy}</from-action> 
+            <from-outcome>failure</from-outcome>
+            <to-view-id>/login.xhtml</to-view-id>
+        </navigation-case>
+        <navigation-case>        	
+        	<from-action>#{tradeBean.sell}</from-action> 
+            <from-outcome>success</from-outcome>
+            <to-view-id>/newOrder.xhtml</to-view-id>
+        </navigation-case>
+		<navigation-case>
+			<from-action>#{tradeBean.sell}</from-action> 
+            <from-outcome>failure</from-outcome>
+            <to-view-id>/login.xhtml</to-view-id>
+        </navigation-case>
+        <navigation-case>    
+        	<from-action>#{tradeBean.cancelBuy}</from-action> 
+        	<from-outcome>success</from-outcome> 
+            <to-view-id>/quotes.xhtml</to-view-id> 
+        </navigation-case>
+        <navigation-case>    
+        	<from-action>#{tradeBean.cancelSell}</from-action> 
+        	<from-outcome>success</from-outcome> 
+            <to-view-id>/portfolio.xhtml</to-view-id> 
+        </navigation-case>
+    </navigation-rule>
+    
+	<managed-bean>
+        <managed-bean-name>cookieManager</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.service.CookieManager</managed-bean-class>
+        <managed-bean-scope>application</managed-bean-scope>
+    </managed-bean>
+    
+    <managed-bean>
+        <managed-bean-name>businessServiceClient</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.service.BusinessServiceClient</managed-bean-class>
+        <managed-bean-scope>application</managed-bean-scope>
+    </managed-bean>
+    
+    <managed-bean>
+        <managed-bean-name>loginBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.LoginBean</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+    </managed-bean>
+
+    <managed-bean>
+        <managed-bean-name>configServiceBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.ConfigServiceBean</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+    </managed-bean>
+    
+	<managed-bean>
+        <managed-bean-name>userBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.UserBean</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+         <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+        <managed-property>
+        	<property-name>currentUser</property-name>
+        	<value>#{cookieManager.currentUser}</value>
+        </managed-property>
+    </managed-bean>
+
+	<managed-bean>
+        <managed-bean-name>accountBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.AccountBean</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+        <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+        <managed-property>
+        	<property-name>currentUser</property-name>
+        	<value>#{cookieManager.currentUser}</value>
+        </managed-property>
+    </managed-bean> 
+    
+    <managed-bean>
+        <managed-bean-name>portfolioBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.PortfolioBean</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+        <managed-property>
+        	<property-name>currentUser</property-name>
+        	<value>#{cookieManager.currentUser}</value>
+        </managed-property>
+    </managed-bean>  
+    
+    <managed-bean>
+        <managed-bean-name>quoteBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.QuoteBean</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+        <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+    </managed-bean> 
+    
+    <managed-bean>
+        <managed-bean-name>registerBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.RegisterBean</managed-bean-class>
+        <managed-bean-scope>request</managed-bean-scope>
+        <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+        <managed-property>
+        	<property-name>currentUser</property-name>
+        	<value>#{cookieManager.currentUser}</value>
+        </managed-property>
+    </managed-bean>     
+    
+    
+    <managed-bean>
+        <managed-bean-name>tradeBean</managed-bean-name>
+        <managed-bean-class>org.apache.stonehenge.stocktrader.bean.TradeBean</managed-bean-class>
+        <managed-bean-scope>session</managed-bean-scope>
+        <managed-property>
+        	<property-name>businessService</property-name>
+        	<value>#{businessServiceClient.businessService}</value>
+        </managed-property>
+        <managed-property>
+        	<property-name>currentUser</property-name>
+        	<value>#{cookieManager.currentUser}</value>
+        </managed-property>
+    </managed-bean> 
+</faces-config>

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/web.xml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/web.xml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/WEB-INF/web.xml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
+  <!-- Use Documents Saved as *.xhtml -->	
+  <context-param>
+    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+    <param-value>.xhtml</param-value>
+  </context-param>
+  
+  <!-- Special Debug Output for Development -->
+  <context-param>
+    <param-name>facelets.DEVELOPMENT</param-name>
+    <param-value>true</param-value>
+  </context-param>
+	  
+  <!-- Optional JSF-RI Parameters to Help Debug -->
+  <context-param>
+    <param-name>com.sun.faces.validateXml</param-name>
+    <param-value>true</param-value>
+  </context-param>
+  <context-param>
+    <param-name>com.sun.faces.verifyObjects</param-name>
+    <param-value>true</param-value>
+  </context-param>
+    
+  <context-param>
+	<param-name>facelets.LIBRARIES</param-name>
+	<param-value>
+		/WEB-INF/facelets/tags/stonehenge.taglib.xml
+	</param-value>
+  </context-param>
+  
+  <filter>
+    <filter-name>Login Filter</filter-name>
+    <filter-class>org.apache.stonehenge.stocktrader.filter.LoginFilter</filter-class>
+  </filter>
+  <filter-mapping>
+    <filter-name>Login Filter</filter-name>
+    <url-pattern>*.faces</url-pattern>
+    <dispatcher>REQUEST</dispatcher>
+  </filter-mapping>
+  
+  <servlet>
+    <servlet-name>Faces Servlet</servlet-name>
+    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+    <load-on-startup>1</load-on-startup>
+  </servlet>
+  
+  <servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>/faces/*</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>*.faces</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>Faces Servlet</servlet-name>
+    <url-pattern>*.jsf</url-pattern>
+  </servlet-mapping>
+  
+  <welcome-file-list>
+    <welcome-file>faces/welcome.xhtml</welcome-file>
+  </welcome-file-list>
+  
+</web-app>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/account.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/account.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/account.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/account.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,256 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:c="http://java.sun.com/jstl/core"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:s="http://stonehenge.apache.com/jsf">
+<body>
+<ui:composition template="/template.xhtml">
+	<ui:define name="title">
+		Account Information
+    </ui:define>
+	<ui:define name="body">
+		<c:if test="#{!empty portfolioBean.closedOrdersReturn}">
+			<ui:include src="alertInfo.jsf" />
+		</c:if>
+		<div align="center">
+		<h:dataTable styleClass="table-outer"
+			cellspacing="0" value="#{accountBean.accountSummary}"
+			var="accountSummary">
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Subtotal Buys" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{accountSummary.totalBuys}" />
+				</h:outputText>
+			</h:column>
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Subtotal Sells" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{accountSummary.totalSells}" />
+				</h:outputText>
+			</h:column>
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Subtotal Fees" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{accountSummary.totalTax}" />
+				</h:outputText>
+			</h:column>
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Net Impact Cash Balance" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:price value="#{accountSummary.totalImpact}" />
+				</h:outputText>
+			</h:column>
+		</h:dataTable>
+		</div>
+		<div>
+		<p><b>Total Orders Shown</b></p>
+		</div>
+		
+		<h:dataTable styleClass="table-outer"
+			cellspacing="0"
+			value="#{accountBean.ordersReturn}"
+			columnClasses=",,,,currency,,,currency,currency,currency"
+			var="order">
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Order ID" />
+				</f:facet>
+				<h:outputText>
+					<h:outputText value="#{order.orderID}" />
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Order Status" />
+				</f:facet>
+				<h:outputText>
+					<h:outputText value="#{order.orderStatus}" />
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Creation Date" />
+				</f:facet>
+				<h:outputText>
+					<h:outputText value="#{order.openDate.time}">
+						<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+					</h:outputText>
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Completion Date" />
+				</f:facet>
+				<h:outputText>
+					<h:outputText value="#{order.completionDate.time}">
+						<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+					</h:outputText>
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Txn Fee" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{order.orderFee}" />
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Type" />
+				</f:facet>
+				<h:outputText value="#{order.orderType}" />
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Symbol" />
+				</f:facet>
+				<form action="quotes.faces" method="post">
+					<input type="hidden" name="SYMBOLS" value="#{order.symbol}" />
+					<input type="submit" name="GETQUOTE" value="#{order.symbol}" />
+				</form>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Quantity" />
+				</f:facet>
+				<h:outputText class="currency" value="#{order.quantity}" />
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Price" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{order.price}" />
+				</h:outputText>
+			</h:column>
+			
+			<h:column>
+				<f:facet name="header">
+					<h:outputText value="Total" />
+				</f:facet>
+				<h:outputText class="currency">
+					<s:currency value="#{order.quantity*order.price+order.orderFee}" />
+				</h:outputText>
+			</h:column>
+						
+		</h:dataTable>
+		
+		<form>
+		<table class="profile" cellspacing="0" width="100%">
+			<thead>
+				<tr>
+					<th><h:outputText
+						value="Update Account Profile: #{userBean.currentUserName}" /></th>
+				</tr>
+			</thead>
+			<tbody>
+			<h:messages style="color: red" align="center" />
+				<tr>
+					<td><h:form id="AccountProfile">
+						<table cellspacing="0" align="center">
+							<tr>
+								<td>Full Name:</td>
+								<td><h:inputText id="FULLNAME" 
+									value="#{registerBean.fullName}" required="true"
+									size="25" /></td>
+								<td>Email Address:</td>
+								<td><h:inputText id="EMAILADDRESS" 
+									value="#{registerBean.email}"  required="true"
+									size="25" /></td>
+							</tr>
+							<tr>
+								<td>Address:</td>
+								<td><h:inputText id="ADDRESS" 
+									value="#{registerBean.address}" required="true"
+									 size="25" /></td>
+								<td>Password:</td>
+								<td><h:inputSecret id="Password"
+									value="#{registerBean.password}" required="true"
+									 size="25" /></td>
+							</tr>
+							<tr>
+								<td>Credit Card:</td>
+								<td><h:inputText id="CREDITCARD" 
+									value="#{registerBean.creditCard}" required="true"
+									 size="25" /></td>
+								<td>Confirm Password:</td>
+								<td><h:inputSecret id="ConPASSWORD" validator="#{registerBean.passwordValidate}" required="true"
+									value="#{registerBean.confPassword}"
+									 size="25" /></td>
+							</tr>
+							<tr>
+								<td colspan="4" class="button"><h:commandButton
+									action="#{registerBean.updateProfile}" id="UPDATEUSERPROFILE"
+									value="Update" class="button" /></td>
+							</tr>
+						</table>
+					</h:form>
+
+					<table align="center" class="profile-content" cellspacing="0">
+						<tbody>
+							<tr>
+								<td class="left">Account ID:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.accountID}" /></td>
+								<td class="left">Account Created</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.creationDate.time}">
+									<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+								</h:outputText></td>
+							</tr>
+							<tr>
+								<td class="left">User ID:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.profileID}" /></td>
+								<td class="left">Last Login:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.lastLogin.time}">
+									<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+								</h:outputText></td>
+							</tr>
+							<tr>
+								<td class="left">Opening Balance:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.openBalance}" /></td>
+								<td class="left">Total Logins:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.loginCount}" /></td>
+							</tr>
+							<tr>
+								<td class="left">Cash Balance:</td>
+								<td><s:price
+									value="#{accountBean.userAccountDataReturn.balance}" /></td>
+								<td class="left">Total Logouts:</td>
+								<td><h:outputText
+									value="#{accountBean.userAccountDataReturn.logoutCount}" /></td>
+							</tr>
+						</tbody>
+					</table>
+					</td>
+				</tr>
+			</tbody>
+		</table>
+		</form>
+		<ui:include src="getQuote.jsf" />
+	</ui:define>
+</ui:composition>
+</body>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/alertInfo.jsf
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/alertInfo.jsf?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/alertInfo.jsf (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/alertInfo.jsf Sat Sep  5 16:41:14 2009
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns="http://www.w3.org/1999/xhtml">
+<body>
+<ui:composition>
+	<p style="color: red" align="center">Trade Alert: The following
+	orders have completed.</p>
+	<table class="table-outer" cellspacing="0" align="center">
+		<thead>
+			<tr>
+				<th>Order ID</th>
+				<th>Order Status</th>
+				<th>Creation Date</th>
+				<th>Completion Date</th>
+				<th>Txn Fee</th>
+				<th>Type</th>
+				<th>Symbol</th>
+				<th>Quantity</th>
+			</tr>
+		</thead>
+		<tbody>
+			<ui:repeat value="#{portfolioBean.closedOrdersReturn}"
+				var="closedOrder">
+				<tr>
+					<td><h:outputText value="#{closedOrder.orderID}" /></td>
+					<td><h:outputText value="#{closedOrder.orderStatus}" /></td>
+					<td><h:outputText value="#{closedOrder.openDate.time}">
+						<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+					</h:outputText></td>
+					<td><h:outputText value="#{closedOrder.completionDate.time}">
+						<f:convertDateTime pattern="#{accountBean.dateFormat}" />
+					</h:outputText></td>
+					<td><h:outputText value="#{closedOrder.orderFee}" /></td>
+					<td><h:outputText value="#{closedOrder.orderType}" /></td>
+					<td><h:outputText value="#{closedOrder.symbol}" /></td>
+					<td><h:outputText value="#{closedOrder.quantity}" /></td>
+				</tr>
+			</ui:repeat>
+		</tbody>
+	</table>
+	<br/>
+</ui:composition>
+</body>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/configService.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/configService.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/configService.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/configService.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,40 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+      xmlns:ui="http://java.sun.com/jsf/facelets"
+      xmlns:h="http://java.sun.com/jsf/html"
+      xmlns:c="http://java.sun.com/jstl/core"
+      xmlns:f="http://java.sun.com/jsf/core"
+      xmlns:s="http://stonehenge.apache.com/jsf">
+<body>
+<ui:composition template="/template.xhtml">
+    <ui:define name="title">
+        Configuration
+    </ui:define>
+    <ui:define name="body">
+       <br/>
+        <div class="login" style="text-align:left">
+        <h:form>
+            <h:panelGrid columns="2" cellspacing="5" width="320px">
+               <h:outputLabel for="bses" >
+                    <h:outputText value="Business Service"/>
+                </h:outputLabel>
+
+                <h:selectOneMenu id="bses" value="#{configServiceBean.selectedBS}" >
+                    <f:selectItems id="bs" value="#{configServiceBean.bsNames}"/>
+                </h:selectOneMenu>
+                <h:outputLabel for="opses" >
+                    <h:outputText value="Order Processing Service"/>
+                </h:outputLabel>
+
+                <h:selectOneMenu id="opses" value="#{configServiceBean.selectedOPS}">
+                    <f:selectItems id="op" value="#{configServiceBean.opsNames}"/>
+                </h:selectOneMenu>
+
+                <h:panelGroup/>
+                <h:commandButton title="Set" value="Set" action="#{configServiceBean.setBSAndOPS}"/>
+            </h:panelGrid>
+        </h:form>
+        </div>
+     </ui:define>
+</ui:composition>
+</body>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/confirmation.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/confirmation.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/confirmation.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/confirmation.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,49 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:c="http://java.sun.com/jstl/core"
+	xmlns:s="http://stonehenge.apache.com/jsf">
+<body>
+<ui:composition template="/template.xhtml">
+	<ui:define name="title">
+		Trade
+    </ui:define>
+	<ui:define name="body">
+		<div id="confirm">
+		<h2>Trade Confirmation</h2>
+		<div class="confirm-content"><c:if
+			test="#{tradeBean.type=='Buy'}">
+			<h:outputFormat
+				value="You have requested to buy shares of {0} which is currently
+		trading at {1}.">
+				<f:param value="#{tradeBean.symbol}" />
+				<f:param value="#{tradeBean.price}" />
+			</h:outputFormat>
+		</c:if> <c:if test="#{tradeBean.type=='Sell'}">
+			<h:outputFormat
+				value="You have requested to sell all or part of your holding {0}. This holding has a total of {2} shares of stock {0}. Please indicate how many share to sell.">
+				<f:param value="#{tradeBean.symbol}" />
+				<f:param value="#{tradeBean.price}" />
+				<f:param value="#{tradeBean.quantity}" />
+			</h:outputFormat>
+		</c:if> <br />
+		<br />
+		<h:form>
+			<h:outputText value="Number of Shares:" />
+			<h:inputText id="quantity" value="#{tradeBean.quantity}" size="10" />
+			<c:if test="#{tradeBean.type=='Buy'}">
+				<h:commandButton value="Buy" action="#{tradeBean.buy}" />
+				<h:commandButton value="Cancel" action="#{tradeBean.cancelBuy}"/>
+			</c:if>
+			<c:if test="#{tradeBean.type=='Sell'}">
+				<h:commandButton value="Sell" action="#{tradeBean.sell}" />
+				<h:commandButton value="Cancel" action="#{tradeBean.cancelSell}"/>
+			</c:if>
+		</h:form></div>
+		</div>
+		<ui:include src="getQuote.jsf" />
+	</ui:define>
+</ui:composition>
+</body>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/css/style.css
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/css/style.css?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/css/style.css (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/css/style.css Sat Sep  5 16:41:14 2009
@@ -0,0 +1,392 @@
+/*
+ * 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.
+ */
+body {
+background-image: url(../images/bg.gif);
+background-repeat: repeat-x;
+background-position: left top;
+background-attachment: scroll;
+font-size: 11px;
+font-family: Verdana, Arial, Helvetica, san-serif;
+padding: 0px;
+margin: 0px;
+}
+
+p { }
+
+h3 {
+margin-top:5px;
+font-size: 16px;
+font-weight: normal;
+color:  #711D1E;
+}
+
+td { }
+
+a:link { 
+color: #D17270;
+text-decoration: none;
+}
+
+a:visited {
+
+}
+
+a:hover {
+text-decoration: underline;
+}
+
+a:active { }
+
+input {
+border-left: solid 1px #999;
+border-bottom: solid 1px #333;
+border-right: solid 1px #333;
+border-top: solid 1px #999;
+margin-right: 7px;
+}
+input.button {
+background-image: url(../images/button-bg.gif);
+background-repeat: repeat-x;
+background-position: left top;
+background-attachment: scroll;
+border-left: solid 1px #C0372D;
+border-bottom: solid 2px  #C0472D;
+border-right: solid 2px #C0572D;
+border-top: solid 1px #C0672D;
+height: 22px;
+font-weight: bold;
+padding-left: 10px;
+padding-right: 10px;
+cursor: pointer;
+}  
+td {
+vertical-align: top;
+}
+
+div#content {
+width: 902px;
+margin: auto;
+margin-top: 15px;
+}
+div#header {
+background-image: url(../images/header-bg.gif);
+background-repeat: no-repeat;
+background-position: left top;
+background-attachment: scroll;
+background-color: #fff;
+height: 57px;
+}
+div#header div.logo {
+float: left;
+margin-top: 0px;
+margin-left: 20px;
+}
+div#header div.powered {
+float: right;
+margin-top: 10px;
+margin-right: 20px;
+}
+div#header-links {
+border-left: solid 2px #d17270;
+border-right: solid 2px #d17270;
+height: 35px;
+padding-left: 70px;
+padding-right: 20px;
+padding-top: 0px;
+background-image: url(../images/header-links-bg.gif);
+background-repeat: no-repeat;
+background-position: left top;
+background-attachment: scroll;
+}
+div#header-links table {
+height: 30px;
+
+}
+div#header-links table td {
+}
+div#header-links table td a {
+display: block;
+text-decoration: none;
+color: #fff;
+padding-left: 15px;
+padding-right: 15px;
+padding-top: 7px;
+background-image: url(../images/header-link-bg.gif);
+background-repeat: repeat-x;
+background-position: left top;
+background-attachment: scroll;
+height: 23px;
+font-size: 12px;
+font-weight: bold;
+}
+div#header-links table td a:hover {
+background-image: url(../images/header-link-bg-hover.gif);
+background-repeat: repeat-x;
+background-position: left top;
+background-attachment: scroll;
+}
+div#middle {
+background-image: url(../images/middle-bg.gif);
+background-repeat: repeat-y;
+background-position: left top;
+background-attachment: scroll;
+background-color: #fff;
+min-height: 300px;
+padding-left: 40px;
+padding-right: 40px;
+padding-top: 20px;
+padding-bottom: 20px;
+}
+div#middle div.main-title {
+border-bottom: solid 1px #d17270;
+text-align: right;
+vertical-align: bottom;
+height: 30px;
+margin-bottom: 20px;
+}
+div#middle div.main-title h1{
+margin-top: 0px;
+padding-top: 0px;
+font-size: 22px;
+color: #711D1E;
+float: left;
+}
+div#middle div.main-title span.time {
+}
+div.left {
+width: 400px;
+}
+div.right {
+border: solid 1px #d17270;
+margin-left: 40px;
+width: 373px;
+}
+div.right p {
+padding-left: 10px;
+padding-right: 10px;
+}
+div.right h3{
+margin: 0px;
+background-color: #d17270;
+color: #fff;
+padding: 5px;
+font-size: 12px;
+}
+
+div.login {
+text-align: center;
+}
+div.login table {
+margin: auto;
+font-size: 12px;
+}
+div.login p.new-user {
+font-size: 12px;
+font-weight: bold;
+}
+div.quotes {
+text-align: center;
+width: auto;
+margin: auto;
+}
+div#middle table.normal {
+margin-bottom: 20px;
+}
+div#middle table.normal tr{
+text-align: left;
+font-size: 12px;
+}
+div#middle table.normal tr th {
+font-size: 12px;
+border-bottom: solid 1px #333;
+border-left: 0px;
+border-right: 0px;
+border-top: 0px;
+padding-bottom: 3px;
+color: #d17270;
+}
+div#middle table.normal tr td.left {
+text-align: right;
+color: #d17270;
+padding-top: 3px;
+vertical-align: top;
+}
+
+table.table-inner {
+border: solid 1px #999;
+width: 100%;
+}
+table.table-inner tr td,th{
+border: solid 1px #333;
+padding: 5px;
+}
+table.table-inner tr th {
+background-color: #999;
+color: #fff;
+}
+table.table-inner tbody tr td {
+background-color: #ccc;
+text-align: right;
+}
+
+table.table-outer {
+border: solid 0px #333;
+width: auto;
+}
+table.table-outer tr td,th{
+	border: solid 1px #fff;
+	padding: 5px;
+}
+table.table-outer thead tr th {
+background-color: #999;
+border: solid 1px #fff;
+color: #fff;
+padding: 3px;
+}
+table.table-outer tbody tr td {
+background-color: #ededed;
+text-align: center;
+}
+table.table-outer tbody tr td.special {
+background-color: #ccc;
+font-weight: bold;
+text-align: left;
+}
+table.table-outer tbody tr td.currency {
+text-align: right;
+}
+table.table-outer tbody tr.total td{
+background-color: #BCBEC0;
+font-weight: bold;
+text-align: right;
+}
+span.price {
+color: #711d1e;
+}
+span.price-gain {
+color: #711d1e;
+background-image: url(../images/green-arrow.gif);
+background-repeat: no-repeat;
+background-position: right top;
+background-attachment: scroll;
+padding-right: 17px;
+}
+span.price-loss {
+color: #C0272D;
+background-image: url(../images/red-arrow.gif);
+background-repeat: no-repeat;
+background-position: right bottom;
+background-attachment: scroll;
+padding-right: 17px;
+}
+table.profile {
+border: solid 1px #711d1e;
+width: 100%;
+margin-top: 15px;
+background-color: #ededed;
+}
+table.profile tr td,th{
+padding: 2px;
+}
+table.profile thead tr th {
+color: #711d1e;
+border-bottom: solid 1px #711d1e;
+font-size: 12px;
+padding: 5px;
+}
+table.profile tbody tr td {
+background-color: #ededed;
+text-align: right;
+}
+table.profile tbody tr td.button {
+text-align: center;
+padding: 7px;
+}
+table.profile-content {
+width: auto;
+margin-bottom: 10px;
+} 
+table.profile-content tbody tr td {
+padding: 5px;
+border: solid 1px #999;
+}
+table.profile-content tbody tr td.left {
+color: #D17270;
+}
+table.glossary {
+width: 80%;
+background-color: #ccc;
+}
+table.glossary thead tr th {
+background-color: #666;
+color: #fff;
+border: 0px;
+padding: 5px;
+}
+table.glossary tbody tr td {
+background-color: #fff;
+padding: 5px;
+}
+table.glossary td.left {
+font-weight: bold;
+}
+div#confirm {
+margin-top: 7%;
+margin-bottom: 7%;
+width: 60%;
+margin-left: auto;
+margin-right: auto;
+}
+div#confirm h2 {
+color: #711D1E;
+text-align: center;
+font-size: 18px;
+}
+div#confirm div.confirm-content {
+background-color: #F89C8F;
+border-top: solid 1px #CF6A67;
+border-left: solid 1px #CF6A67;
+border-right: solid 2px #CF6A67;
+border-bottom: solid 2px #CF6A67;
+padding-top: 10px;
+padding-bottom: 20px;
+padding-left: 20px;
+padding-right: 20px;
+text-align: center;
+}
+div.bottom {
+margin-top: 10px;
+border-top: solid 1px #711d1e;
+padding-top: 10px;
+padding-bottom: 0px;
+text-align: center;
+vertical-align: middle;
+}
+div#footer {
+background-image: url(../images/footer-bg.gif);
+background-repeat: no-repeat;
+background-position: left top;
+background-attachment: scroll;
+background-color: #fff;
+height: 30px;
+padding-top: 25px;
+padding-left: 20px;
+color: #711D1E;
+}
+a img {
+	border: none;
+}

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/getQuote.jsf
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/getQuote.jsf?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/getQuote.jsf (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/getQuote.jsf Sat Sep  5 16:41:14 2009
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html xmlns:ui="http://java.sun.com/jsf/facelets">
+<body>
+<ui:composition>
+	<div class="bottom">
+	<form action="quotes.faces" method="post"><input type="text"
+		value="" name="SYMBOLS" id="" size="25" /><input type="submit"
+		name="GETQUOTE" value="Get Quote" class="button" /></form>
+	</div>
+</ui:composition>
+</body>
+</html>
\ No newline at end of file

Added: incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/glossary.xhtml
URL: http://svn.apache.org/viewvc/incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/glossary.xhtml?rev=811675&view=auto
==============================================================================
--- incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/glossary.xhtml (added)
+++ incubator/stonehenge/trunk/stocktrader/metro/trader_client/web/glossary.xhtml Sat Sep  5 16:41:14 2009
@@ -0,0 +1,172 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:c="http://java.sun.com/jsp/jstl/core"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:ui="http://java.sun.com/jsf/facelets">
+<body>
+<ui:composition template="/template.xhtml">
+	<ui:define name="title">
+		Glossary
+    </ui:define>
+	<ui:define name="body">
+        <table align="center" class="glossary">
+            <thead>
+            <tr>
+                <th>Term</th>
+                <th>Description</th>
+            </tr>
+            </thead>
+            <tbody>
+            <tr>
+                <td class="left">Account ID</td>
+                <td>A unique Integer based key. Each user is assigned an account ID at account creation time.</td>
+            </tr>
+            <tr>
+                <td class="left">Account Created</td>
+                <td>The time and date the users account was first created.</td>
+            </tr>
+            <tr>
+                <td class="left">Cash Balance</td>
+                <td>The current cash balance in the users account. This does not include current stock holdings.</td>
+            </tr>
+            <td class="left">Company</td>
+            <td>The full company name for an individual stock.</td>
+            <tr>
+                <td class="left">Current Gain/Loss</td>
+                <td>The total gain or loss of this account, computed by substracting the current sum of cash/holdings
+                    minus the opening account balance.
+                </td>
+            </tr>
+            <td class="left">Current Price</td>
+            <td>The current trading price for a given stock symbol.</td>
+            <tr>
+                <td class="left">Gain/Loss</td>
+                <td>The current gain or loss of an individual stock holding, computed as (current market value - holding
+                    basis).
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Last Login</td>
+                <td>The date and time this user last logged in to Trade.</td>
+            </tr>
+            <tr>
+                <td class="left">Market Value</td>
+                <td>The current total value of a stock holding, computed as (quantity * current price).</td>
+            </tr>
+            <tr>
+                <td class="left">Number of Holdings</td>
+                <td>The total number of stocks currently owned by this account.</td>
+            </tr>
+            <tr>
+                <td class="left">Open Price</td>
+                <td>The price of a given stock at the open of the trading session.</td>
+            </tr>
+            <tr>
+                <td class="left">Order ID</td>
+                <td>A unique Integer based key. Each order is assigned an order ID at order creation time.</td>
+            </tr>
+            <tr>
+                <td class="left">Opening Balance</td>
+                <td>The initial cash balance in this account when it was opened.</td>
+            </tr>
+            <tr>
+                <td class="left">Order Status</td>
+                <td>orders are opened, processed, closed and completed. Order status shows the current stat for this
+                    order.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Price Range</td>
+                <td>The low and high prices for this stock during the current trading session</td>
+            </tr>
+            <tr>
+                <td class="left">Purchase Date</td>
+                <td>The date and time the a stock was purchased.</td>
+            </tr>
+            <tr>
+                <td class="left">Purchase Price</td>
+                <td>The price used when purchasing the stock.</td>
+            </tr>
+            <tr>
+                <td class="left">Purchase Basis</td>
+                <td>The total cost to purchase this holding. This is computed as (quantity * purchase price).</td>
+            </tr>
+            <tr>
+                <td class="left">Quantity</td>
+                <td>The number of stock shares in the order or user holding.</td>
+            </tr>
+            <tr>
+                <td class="left">Session Created</td>
+                <td>An HTTP session is created for each user at during login. Session created shows the time and day
+                    when the session was created.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Sum of Cash/Holdings</td>
+                <td>The total current value of this account. This is the sum of the cash balance along with the value of
+                    current stock holdings.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Symbol</td>
+                <td>The symbol for a Trade stock.</td>
+            </tr>
+            <tr>
+                <td class="left">Total Logins</td>
+                <td>The total number of logins performed by this user.</td>
+            </tr>
+            <tr>
+                <td class="left">Total Logouts</td>
+                <td>The total number of logouts performed by this user.</td>
+            </tr>
+            <tr>
+                <td class="left">Total of Holdings</td>
+                <td>The current total value of all stock holdings in this account given the current valuation of each
+                    stock held.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Top gainers</td>
+                <td>The list of stocks (matching LIKE CLAUSE 's:1__%' per WebSphere Trade 6.1 behavior) gaining the most
+                    in price during the current trading session.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Top Losers</td>
+                <td>The list of stocks (matching LIKE CLAUSE 's:1__%' per WebSphere Trade 6.1 behavior) falling the most
+                    in price during the current trading session.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Trader Stock Index (TSIA)</td>
+                <td>A computed index of the top 20 stocks (matching LIKE CLAUSE 's:1__%' per WebSphere Trade 6.1
+                    behavior) in Trade.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Trading Volume</td>
+                <td>The total number of shares traded for stocks (matching LIKE CLAUSE 's:1__%' per WebSphere Trade 6.1
+                    behavior) during this trading session.
+                </td>
+            </tr>
+            <tr>
+                <td class="left">Txn Fee</td>
+                <td>The fee charged by the brokerage to process this order.</td>
+            </tr>
+            <tr>
+                <td class="left">Type</td>
+                <td>The order type (buy or sell).</td>
+            </tr>
+            <tr>
+                <td class="left">User ID</td>
+                <td>The unique user ID for the account chosen by the user at account registration.</td>
+            </tr>
+            <tr>
+                <td class="left">Volume</td>
+                <td>The total number of shares traded for this stock.</td>
+            </tr>
+            </tbody>
+        </table>
+        </ui:define>
+        </ui:composition>
+</body>
+</html>
\ No newline at end of file