Package com.barchart.feed.base.provider

Source Code of com.barchart.feed.base.provider.RegTaker

/**
* Copyright (C) 2011-2012 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 static com.barchart.feed.base.market.enums.MarketField.*;

import java.util.Arrays;
import java.util.List;

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

import com.barchart.feed.base.instrument.values.MarketInstrument;
import com.barchart.feed.base.market.api.MarketTaker;
import com.barchart.feed.base.market.enums.MarketEvent;
import com.barchart.feed.base.market.enums.MarketField;
import com.barchart.util.anno.NotMutable;
import com.barchart.util.anno.NotThreadSafe;
import com.barchart.util.thread.Runner;
import com.barchart.util.thread.RunnerLoop;
import com.barchart.util.values.api.Value;

@NotMutable
@NotThreadSafe
public class RegTaker<V extends Value<V>> implements RunnerLoop<MarketEvent> {

  private static final Logger log = LoggerFactory.getLogger(RegTaker.class);

  private final MarketTaker<V> taker;

  private volatile MarketField<V> field;

  private volatile EventSet eventSet;

  private volatile MarketInstrument[] instruments;

  public RegTaker(final MarketTaker<V> taker) {

    this.taker = taker;

    bind();

  }

  final void bind() {

    this.field = taker.bindField();

    this.eventSet = new EventSet(taker.bindEvents());

    this.instruments = taker.bindInstruments().clone();

  }

  final MarketTaker<V> getTaker() {
    return taker;
  }

  final void fire(final RegCenter regCenter, final MarketEvent event) {

    final MarketInstrument inst = regCenter.cache(INSTRUMENT);

    final V value = regCenter.cache(field);

    taker.onMarketEvent(event, inst, value);

  }

  @Override
  public final <R> void runLoop(final Runner<R, MarketEvent> task,
      final List<R> list) {

    eventSet.runLoop(task, list);

  }

  final EventSet getEvents() {
    return eventSet;
  }

  final MarketField<V> getField() {
    return field;
  }

  final MarketInstrument[] getInstruments() {
    return instruments;
  }

  public static final boolean isValid(final MarketTaker<?> taker) {

    if (taker == null) {
      log.debug("invalid : taker == null");
      return false;
    }

    final MarketEvent[] events = taker.bindEvents();

    if (events == null || events.length == 0) {
      log.debug("invalid : taker.bindEvents()");
      return false;
    }

    final MarketField<?> field = taker.bindField();

    if (field == null) {
      log.debug("invalid : taker.bindField()");
      return false;
    }

    final MarketInstrument[] insts = taker.bindInstruments();

    if (insts == null) { // Removed size check
      log.debug("invalid : bindInstruments()");
      return false;
    }

    return true;

  }

  @Override
  public String toString() {

    final StringBuilder text = new StringBuilder(128);

    text.append("filed = ");
    text.append(getField().name());

    // text.append("events = ");
    // text.append(eventSet);

    text.append("instruments = ");
    text.append(Arrays.toString(getInstruments()));

    return text.toString();
  }

}
TOP

Related Classes of com.barchart.feed.base.provider.RegTaker

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.