package fauxExchange; class Trade{ private int size; private double price; private BuyOrder buyOrder; private SellOrder sellOrder; private long time; private int tradeId; private static int lastTradeId = -1; synchronized static int getNextTradeId () { lastTradeId++; return lastTradeId; } public Trade(Order order1, Order order2, double price, int size){ if (order1 instanceof BuyOrder) { this.buyOrder = (BuyOrder)order1; this.sellOrder = (SellOrder)order2; }else{ this.sellOrder = (SellOrder)order1; this.buyOrder = (BuyOrder)order2; } this.price = price; this.size = size; this.time = System.currentTimeMillis(); this.tradeId = getNextTradeId(); } /** Returns the order that was the selling order in this trade */ public SellOrder getSellOrder(){ return sellOrder; } /** Returns the order that bought in this trade */ public BuyOrder getBuyOrder(){ return buyOrder; } /** Returns the price at which this trade occured */ public double getPrice(){ return price; } /** Returns the size of this trade */ public int getSize(){ return size; } /** Returns the time the trade was executed */ public long getTime(){ return time; } void setTradeId(int id){ this.tradeId = id; } public int getTradeId(){ return this.tradeId; } /** Outputs this Trade to a PrintStream */ public void print(java.io.PrintStream io){ if (io == null) io = System.out; java.util.Date date = new java.util.Date(time); java.text.NumberFormat nf = java.text.NumberFormat.getCurrencyInstance(); io.println("[" + date + "] Trade: Participant " + sellOrder.getParticipant() + " sold " + size + " shares of " + sellOrder.getSecurityID() + " to Participant " + buyOrder.getParticipant() + " for " + nf.format(price) + " at " + new java.util.Date(time)); } public static void main (String [] args){ Order buy = new BuyOrder(100, 90.0, 10, false, 1029); Order sell = new SellOrder(200, 89.5, 11, false, 1029); Trade t = new Trade(buy, sell, 89.5, 100); t.print(null); } }