Package com.barchart.feed.base.provider

Source Code of com.barchart.feed.base.provider.DefMarket$LastPriceImpl

/**
* Copyright (C) 2011-2013 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package com.barchart.feed.base.provider;

import java.util.EnumSet;
import java.util.Set;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.barchart.feed.api.model.data.Book;
import com.barchart.feed.api.model.data.Cuvol;
import com.barchart.feed.api.model.data.Market;
import com.barchart.feed.api.model.data.Market.LastPrice.Source;
import com.barchart.feed.api.model.data.Session;
import com.barchart.feed.api.model.data.Session.Type;
import com.barchart.feed.api.model.data.SessionData;
import com.barchart.feed.api.model.data.SessionSet;
import com.barchart.feed.api.model.data.Trade;
import com.barchart.feed.api.model.meta.Instrument;
import com.barchart.feed.base.market.enums.MarketField;
import com.barchart.feed.base.values.api.Value;
import com.barchart.util.common.anno.NotMutable;
import com.barchart.util.value.api.Price;
import com.barchart.util.value.api.Time;

@NotMutable
public class DefMarket extends NulMarket {
 
  @SuppressWarnings("unused")
  private static final Logger log = LoggerFactory
      .getLogger(DefMarket.class);

  protected final static int ARRAY_SIZE = MarketField.size();

  protected final Value<?>[] valueArray;
 
  protected volatile Time lastUpdateTime = Time.NULL;
 
  protected volatile Instrument instrument;
 
  protected final Set<Component> changeSet =
    EnumSet.noneOf(Component.class);

  public DefMarket(final Instrument instrument) {
    this.instrument = instrument;
    valueArray = new Value<?>[ARRAY_SIZE];
  }

  @SuppressWarnings("unchecked")
  @Override
  public <V extends Value<V>> V get(final MarketField<V> field) {

    assert field != null;

    final V value = (V) valueArray[field.ordinal()];

    if (value == null) {
      return field.value();
    } else {
      return value;
    }

  }
 
  @Override
  public Instrument instrument() {
    return instrument;
  }

  @Override
  public Trade trade() {
    return get(MarketField.TRADE);
  }

  @Override
  public Book book() {
    return get(MarketField.BOOK);
  }

  @Override
  public Cuvol cuvol() {
    return get(MarketField.CUVOL);
  }

  @Override
  public Session session() {
    return get(MarketField.BAR_CURRENT)
  }

  @Override
  public SessionSet sessionSet() {
    return new FrozenSessionSet(instrument,
        get(MarketField.BAR_CURRENT),
        get(MarketField.BAR_CURRENT_EXT),
        get(MarketField.BAR_PREVIOUS),
        get(MarketField.BAR_PREVIOUS_EXT));
  }
 
  @Override
  public Time updated() {
    return ValueConverter.time(get(MarketField.MARKET_TIME));
  }
 
  @Override
  public Set<Component> change() {
    return EnumSet.copyOf(changeSet);
  }
 
  @Override
  public LastPrice lastPrice() {
   
    final Session current = session();
    if (!current.isSettled().isNull() && current.isSettled().value()) {
      return new LastPriceImpl(Source.SETTLE, current.settle());
    }
   
    if(!current.close().isNull()) {
      return new LastPriceImpl(Source.LAST_TRADE, current.close());
    }
   
    final SessionData previous = sessionSet().session(Type.DEFAULT_PREVIOUS);
   
    if (!previous.isSettled().isNull() && previous.isSettled().value()) {
      return new LastPriceImpl(Source.PREV_SETTLE, previous.settle());
    }
   
    if(!previous.close().isNull()) {
      return new LastPriceImpl(Source.PREV_CLOSE, previous.close());
    }
   
    return LastPrice.NULL;
  }
 
  private class LastPriceImpl implements Market.LastPrice {

    private final Source source;
    private final Price price;
   
    public LastPriceImpl(final Source source, final Price price) {
      this.source = source;
      this.price = price;
    }
   
    @Override
    public Source source() {
      return source;
    }

    @Override
    public Price price() {
      return price;
    }
   
    @Override
    public boolean isNull() {
      return false;
    }
   
    @Override
    public String toString() {
      return source + " " + price;
    }
   
  }
 
}
TOP

Related Classes of com.barchart.feed.base.provider.DefMarket$LastPriceImpl

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.