package org.marketcetera.event.impl; import java.math.BigDecimal; import javax.annotation.concurrent.ThreadSafe; import javax.xml.bind.annotation.*; import org.marketcetera.event.HasOption; import org.marketcetera.event.MarketstatEvent; import org.marketcetera.event.OptionMarketstatEvent; import org.marketcetera.event.beans.MarketstatBean; import org.marketcetera.event.beans.OptionBean; import org.marketcetera.options.ExpirationType; import org.marketcetera.trade.Instrument; import org.marketcetera.trade.Option; import org.marketcetera.util.misc.ClassVersion; /* $License$ */ /** * Provides an Option representation of {@link MarketstatEvent}. * * @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a> * @version $Id: OptionMarketstatEventImpl.java 16854 2014-03-12 01:54:42Z colin $ * @since 2.0.0 */ @ThreadSafe @XmlAccessorType(XmlAccessType.NONE) @XmlRootElement(name="optionMarketstat") @ClassVersion("$Id: OptionMarketstatEventImpl.java 16854 2014-03-12 01:54:42Z colin $") public class OptionMarketstatEventImpl extends AbstractMarketstatEventImpl implements HasOption, OptionMarketstatEvent { /* (non-Javadoc) * @see org.marketcetera.event.OptionEvent#getExpirationType() */ @Override public ExpirationType getExpirationType() { return option.getExpirationType(); } /* (non-Javadoc) * @see org.marketcetera.event.OptionEvent#getMultiplier() */ @Override public BigDecimal getMultiplier() { return option.getMultiplier(); } /* (non-Javadoc) * @see org.marketcetera.event.OptionEvent#hasDeliverable() */ @Override public boolean hasDeliverable() { return option.hasDeliverable(); } /* (non-Javadoc) * @see org.marketcetera.event.HasOption#getInstrument() */ @Override public Option getInstrument() { return option.getInstrument(); } /* (non-Javadoc) * @see org.marketcetera.event.HasUnderlyingInstrument#getUnderlyingInstrument() */ @Override public Instrument getUnderlyingInstrument() { return option.getUnderlyingInstrument(); } /* (non-Javadoc) * @see org.marketcetera.event.OptionEvent#getOpraSymbol() */ @Override public String getProviderSymbol() { return option.getProviderSymbol(); } /* (non-Javadoc) * @see org.marketcetera.event.OptionMarketstatEvent#getInterestChange() */ @Override public BigDecimal getInterestChange() { return interestChange; } /* (non-Javadoc) * @see org.marketcetera.event.OptionMarketstatEvent#getVolumeChange() */ @Override public BigDecimal getVolumeChange() { return volumeChange; } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(super.toString()); builder.append(option.toString()); builder.append(" volumeChange=").append(getVolumeChange()); //$NON-NLS-1$ builder.append(" interestChange=").append(getInterestChange()); //$NON-NLS-1$ return builder.toString(); } /** * Create a new OptionMarketstatEventImpl instance. * * @param inMarketstatBean a <code>MarketstatBean</code> value * @param inOptionBean an <code>OptionBean</code> value * @throws IllegalArgumentException if <code>MessageId</code> < 0 * @throws IllegalArgumentException if <code>Timestamp</code> is <code>null</code> * @throws IllegalArgumentException if <code>Instrument</code> is <code>null</code> * @throws IllegalArgumentException if <code>UnderlyingInstrument</code> is <code>null</code> * @throws IllegalArgumentException if <code>ExpirationType</code> is <code>null</code> */ OptionMarketstatEventImpl(MarketstatBean inMarketstat, OptionBean inOption, BigDecimal inVolumeChange, BigDecimal inInterestChange) { super(inMarketstat); option = OptionBean.copy(inOption); option.validate(); volumeChange = inVolumeChange; interestChange = inInterestChange; } /** * Create a new OptionMarketstatEventImpl instance. * * <p>This constructor is intended to be used by JAXB. */ @SuppressWarnings("unused") private OptionMarketstatEventImpl() { option = new OptionBean(); volumeChange = BigDecimal.ZERO; interestChange = BigDecimal.ZERO; } /** * the option attributes */ @XmlElement private final OptionBean option; /** * the change in volume since the previous close, may be <code>null</code> */ @XmlAttribute private final BigDecimal volumeChange; /** * the change in interest since the previous close, may be <code>null</code> */ @XmlAttribute private final BigDecimal interestChange; private static final long serialVersionUID = 1L; }