package org.marketcetera.photon.views; import java.math.BigDecimal; import java.util.EnumSet; import org.marketcetera.photon.commons.databinding.ITypedObservableValue; import org.marketcetera.photon.ui.databinding.OptionObservable; import org.marketcetera.trade.Instrument; import org.marketcetera.trade.OptionType; import org.marketcetera.trade.OrderCapacity; import org.marketcetera.trade.PositionEffect; import org.marketcetera.trade.Side; import org.marketcetera.util.misc.ClassVersion; import com.google.common.collect.ObjectArrays; /* $License$ */ /** * The model for an option order ticket. * * @author gmiller * @author <a href="mailto:will@marketcetera.com">Will Horn</a> * @version $Id: OptionOrderTicketModel.java 16154 2012-07-14 16:34:05Z colin $ * @since 1.0.0 */ @ClassVersion("$Id") public class OptionOrderTicketModel extends OrderTicketModel { private final ITypedObservableValue<OrderCapacity> mOrderCapacity; private final ITypedObservableValue<PositionEffect> mPositionEffect; private final ITypedObservableValue<String> mSymbol; private final ITypedObservableValue<String> mOptionExpiry; private final ITypedObservableValue<OptionType> mOptionType; private final ITypedObservableValue<BigDecimal> mStrikePrice; /** * Constructor. */ public OptionOrderTicketModel() { ITypedObservableValue<Instrument> instrument = getOrderObservable() .observeInstrument(); OptionObservable optionObservable = new OptionObservable(instrument); mSymbol = optionObservable.observeSymbol(); mOptionExpiry = optionObservable.observeExpiry(); mStrikePrice = optionObservable.observeStrikePrice(); mOptionType = optionObservable.observeOptionType(); mOrderCapacity = getOrderObservable().observeOrderCapacity(); mPositionEffect = getOrderObservable().observePositionEffect(); } @Override public final ITypedObservableValue<String> getSymbol() { return mSymbol; } /** * Returns an observable that tracks the expiry of the current order. * * @return the option expiry observable */ public final ITypedObservableValue<String> getOptionExpiry() { return mOptionExpiry; } /** * Returns an observable that tracks the strike price of the current order. * * @return the option strike price observable */ public final ITypedObservableValue<BigDecimal> getStrikePrice() { return mStrikePrice; } /** * Returns an observable that tracks the option type of the current order. * * @return the option type observable */ public final ITypedObservableValue<OptionType> getOptionType() { return mOptionType; } /** * Returns an observable that tracks the order capacity of the current * order. * * @return the order capacity observable */ public final ITypedObservableValue<OrderCapacity> getOrderCapacity() { return mOrderCapacity; } /** * Returns an observable that tracks the position effect of the current * order. * * @return the position effect observable */ public final ITypedObservableValue<PositionEffect> getPositionEffect() { return mPositionEffect; } @Override public Object[] getValidSideValues() { return EnumSet.of(Side.Buy, Side.Sell).toArray(); } /** * Get the valid values for the order capacity. * * @return the valid order capacity values */ public Object[] getValidOrderCapacityValues() { return ObjectArrays.concat(BLANK, EnumSet.of(OrderCapacity.Agency, OrderCapacity.Principal, OrderCapacity.RisklessPrincipal) .toArray()); } /** * Get the valid values for the position effect. * * @return the valid position effect values */ public Object[] getValidPositionEffectValues() { return ObjectArrays.concat(BLANK, EnumSet.complementOf( EnumSet.of(PositionEffect.Unknown)).toArray()); } }