package com.after_sunrise.oss.otdb.lib.tick.impl; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.ACCUMULATED_VOLUME; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.ASK_PRICE_01; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.ASK_SIZE_01; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.BID_PRICE_01; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.BID_SIZE_01; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.LAST_PRICE; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.LAST_SIZE; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.TICK_TYPE; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.TRADE_TYPE; import static com.after_sunrise.oss.otdb.lib.tick.LibTickValueType.VWAP; import static com.google.common.base.Preconditions.checkNotNull; import java.math.BigDecimal; import java.util.Collections; import java.util.HashMap; import java.util.Map; import com.after_sunrise.oss.otdb.api.tick.Tick; import com.after_sunrise.oss.otdb.lib.tick.LibTick; import com.after_sunrise.oss.otdb.lib.tick.LibTickTradeType; import com.after_sunrise.oss.otdb.lib.tick.LibTickType; import com.after_sunrise.oss.otdb.lib.tick.LibTickValueType; import com.google.common.base.MoreObjects; /** * @author takanori.takase */ public class LibTickImpl implements LibTick { private final Tick tick; public LibTickImpl(Tick tick) { this.tick = checkNotNull(tick); } @Override public boolean equals(Object o) { if (o instanceof LibTickImpl) { return tick.equals(((LibTickImpl) o).tick); } return false; } @Override public int hashCode() { return tick.hashCode(); } @Override public String toString() { return MoreObjects.toStringHelper(this).add("tick", tick).toString(); } private BigDecimal get(LibTickValueType type) { if (type == null) { return null; } return tick.getDecimals().get(type.getId()); } private Map<Integer, BigDecimal> get(LibTickValueType[] types) { Map<Integer, BigDecimal> map = new HashMap<>(); for (LibTickValueType type : types) { Integer id = type.getId(); BigDecimal value = tick.getDecimals().get(id); map.put(id, value); } return Collections.unmodifiableMap(map); } @Override public String getCode() { return tick.getCode(); } @Override public Long getTimestamp() { return tick.getTimestamp(); } @Override public Long getSequence() { return tick.getSequence(); } @Override public LibTickType getTickType() { return LibTickType.find(get(TICK_TYPE)); } @Override public LibTickTradeType getTradeType() { return LibTickTradeType.find(get(TRADE_TYPE)); } @Override public BigDecimal getAskPrice() { return get(ASK_PRICE_01); } @Override public BigDecimal getAskPrice(int level) { return get(LibTickValueType.getAskPrice(level)); } @Override public Map<Integer, BigDecimal> getAskPrices() { return get(LibTickValueType.getAskPrices()); } @Override public BigDecimal getAskSize() { return get(ASK_SIZE_01); } @Override public BigDecimal getAskSize(int level) { return get(LibTickValueType.getAskSize(level)); } @Override public Map<Integer, BigDecimal> getAskSizes() { return get(LibTickValueType.getAskSizes()); } @Override public BigDecimal getBidPrice() { return get(BID_PRICE_01); } @Override public BigDecimal getBidPrice(int level) { return get(LibTickValueType.getBidPrice(level)); } @Override public Map<Integer, BigDecimal> getBidPrices() { return get(LibTickValueType.getBidPrices()); } @Override public BigDecimal getBidSize() { return get(BID_SIZE_01); } @Override public BigDecimal getBidSize(int level) { return get(LibTickValueType.getBidSize(level)); } @Override public Map<Integer, BigDecimal> getBidSizes() { return get(LibTickValueType.getBidSizes()); } @Override public BigDecimal getLastPrice() { return get(LAST_PRICE); } @Override public BigDecimal getLastSize() { return get(LAST_SIZE); } @Override public BigDecimal getAccumulatedVolume() { return get(ACCUMULATED_VOLUME); } @Override public BigDecimal getVwap() { return get(VWAP); } }