package org.marketcetera.core.position; import java.math.BigDecimal; import java.util.concurrent.atomic.AtomicLong; import org.marketcetera.core.position.PositionKey; import org.marketcetera.core.position.PositionKeyFactory; import org.marketcetera.core.position.Trade; import org.marketcetera.trade.Currency; import org.marketcetera.trade.Equity; import org.marketcetera.trade.Instrument; import org.marketcetera.trade.Option; import org.marketcetera.trade.OptionType; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Simple implementation of the {@link Trade} interface. * * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: MockTrade.java 16395 2012-12-10 16:29:14Z colin $ * @since 1.5.0 */ @ClassVersion("$Id: MockTrade.java 16395 2012-12-10 16:29:14Z colin $") public class MockTrade<T extends Instrument> implements Trade<T> { protected final PositionKey<T> mKey; protected final BigDecimal mPrice; protected final BigDecimal mQuantity; protected final long mSequence; protected static final AtomicLong mSequenceGenerator = new AtomicLong(); public static MockTrade<Equity> createEquityTrade(String symbol, String account, String traderId, String quantity, String price) { return createTrade(PositionKeyFactory.createEquityKey(symbol, account, traderId), quantity, price); } public static MockTrade<Option> createOptionTrade(String symbol, String expiry, String strikePrice, OptionType type, String account, String traderId, String quantity, String price) { return createTrade(PositionKeyFactory.createOptionKey(symbol, expiry, new BigDecimal(strikePrice), type, account, traderId), quantity, price); } public static MockTrade<Currency> createCurrencyTrade(String leftCcy, String rightCcy, String account, String traderId, String quantity, String price) { return createTrade(PositionKeyFactory.createCurrencyKey(leftCcy, rightCcy,"","", account, traderId), quantity, price); } public static <T extends Instrument> MockTrade<T> createTrade(T instrument, String account, String traderId, String quantity, String price) { return createTrade(PositionKeyFactory.createKey(instrument, account, traderId), quantity, price); } public static <T extends Instrument> MockTrade<T> createTrade( PositionKey<T> key, String quantity, String price) { return new MockTrade<T>(key, new BigDecimal(quantity), new BigDecimal( price)); } public MockTrade(PositionKey<T> key, BigDecimal quantity, BigDecimal price) { this(key, quantity, price, mSequenceGenerator.incrementAndGet()); } public MockTrade(PositionKey<T> key, BigDecimal quantity, BigDecimal price, long sequence) { mKey = key; mPrice = price; mQuantity = quantity; mSequence = sequence; } @Override public PositionKey<T> getPositionKey() { return mKey; } @Override public BigDecimal getPrice() { return mPrice; } @Override public BigDecimal getQuantity() { return mQuantity; } @Override public long getSequenceNumber() { return mSequence; } }