package org.marketcetera.event.impl;
import java.math.BigDecimal;
import java.util.Date;
import javax.annotation.concurrent.ThreadSafe;
import javax.xml.bind.annotation.XmlElement;
import org.marketcetera.event.EventType;
import org.marketcetera.event.QuoteAction;
import org.marketcetera.event.QuoteEvent;
import org.marketcetera.event.beans.EventBean;
import org.marketcetera.event.beans.HasEventBean;
import org.marketcetera.event.beans.QuoteBean;
import org.marketcetera.event.util.EventServices;
import org.marketcetera.trade.Instrument;
import org.marketcetera.util.misc.ClassVersion;
/* $License$ */
/**
* Implements {@link QuoteEvent}.
*
* @author <a href="mailto:colin@marketcetera.com">Colin DuPlantis</a>
* @version $Id: AbstractQuoteEventImpl.java 16854 2014-03-12 01:54:42Z colin $
* @since 2.0.0
*/
@ThreadSafe
@ClassVersion("$Id: AbstractQuoteEventImpl.java 16854 2014-03-12 01:54:42Z colin $")
public abstract class AbstractQuoteEventImpl
implements QuoteEvent, HasEventBean
{
/* (non-Javadoc)
* @see org.marketcetera.event.beans.HasEventBean#getEventBean()
*/
@Override
public EventBean getEventBean()
{
return quote;
}
/* (non-Javadoc)
* @see org.marketcetera.event.QuoteEvent#getExchange()
*/
@Override
public String getExchange()
{
return quote.getExchange();
}
/* (non-Javadoc)
* @see org.marketcetera.event.QuoteEvent#getPrice()
*/
@Override
public BigDecimal getPrice()
{
return quote.getPrice();
}
/* (non-Javadoc)
* @see org.marketcetera.event.QuoteEvent#getExchangeTimestamp()
*/
@Override
public String getExchangeTimestamp()
{
return quote.getExchangeTimestamp();
}
/* (non-Javadoc)
* @see org.marketcetera.event.QuoteEvent#getQuoteDate()
*/
@Override
public String getQuoteDate()
{
return getExchangeTimestamp();
}
/* (non-Javadoc)
* @see org.marketcetera.event.QuoteEvent#getSize()
*/
@Override
public BigDecimal getSize()
{
return quote.getSize();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getInstrument()
*/
@Override
public Instrument getInstrument()
{
return quote.getInstrument();
}
/* (non-Javadoc)
* @see org.marketcetera.event.HasInstrument#getInstrumentAsString()
*/
@Override
public String getInstrumentAsString()
{
return quote.getInstrumentAsString();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getMessageId()
*/
@Override
public long getMessageId()
{
return quote.getMessageId();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getTimestamp()
*/
@Override
public Date getTimestamp()
{
return quote.getTimestamp();
}
/* (non-Javadoc)
* @see org.marketcetera.event.TimestampCarrier#getTimeMillis()
*/
@Override
public long getTimeMillis()
{
return quote.getTimeMillis();
}
/**
* Get the action value.
*
* @return a <code>QuoteAction</code> value
*/
public QuoteAction getAction()
{
return quote.getAction();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getSource()
*/
@Override
public Object getSource()
{
return quote.getSource();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#setSource(java.lang.Object)
*/
@Override
public void setSource(Object inSource)
{
quote.setSource(inSource);
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getProvider()
*/
@Override
public String getProvider()
{
return quote.getProvider();
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#setProvider(java.lang.String)
*/
@Override
public void setProvider(String inProvider)
{
quote.setProvider(inProvider);
}
/* (non-Javadoc)
* @see org.marketcetera.event.Event#getMetaType()
*/
@Override
public EventType getEventType()
{
return quote.getEventType();
}
/* (non-Javadoc)
* @see org.marketcetera.event.MarketDataEvent#setEventType(org.marketcetera.event.EventType)
*/
@Override
public void setEventType(EventType inEventType)
{
quote.setEventType(inEventType);
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
@Override
public final int hashCode()
{
return EventServices.eventHashCode(this);
}
/* (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public final boolean equals(Object obj)
{
return EventServices.eventEquals(this,
obj);
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
*/
@Override
public final String toString()
{
StringBuffer output = new StringBuffer();
output.append(getDescription()).append("(").append(getAction()).append("-").append(getMessageId()).append(" ").append(getEventType()).append(") for ").append(getInstrument()).append(": ").append(getPrice()).append(" ").append(getSize()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
output.append(" ").append(getInstrument()).append(" ").append(getExchange()).append(" at ").append(getExchangeTimestamp()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
return output.toString();
}
/**
* Gets a description of the type of event.
*
* @return a <code>String</code> value
*/
protected abstract String getDescription();
/**
* Create a new QuoteEventImpl instance.
*
* @param inQuote a <code>QuoteBean</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>Price</code> is <code>null</code>
* @throws IllegalArgumentException if <code>Size</code> is <code>null</code>
* @throws IllegalArgumentException if <code>Exchange</code> is <code>null</code> or empty
* @throws IllegalArgumentException if <code>ExchangeTimestamp</code> is <code>null</code> or empty
* @throws IllegalArgumentException if <code>Action</code> is <code>null</code>
*/
protected AbstractQuoteEventImpl(QuoteBean inQuote)
{
quote = QuoteBean.copy(inQuote);
quote.setDefaults();
quote.validate();
}
/**
* Create a new AbstractQuoteEventImpl instance.
*
* <p>Intended to be used by JAXB only.
*/
protected AbstractQuoteEventImpl()
{
quote = new QuoteBean();
}
/**
* quote attributes
*/
@XmlElement
private final QuoteBean quote;
private static final long serialVersionUID = 1L;
}