All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.tigerbrokers.stock.openapi.client.util.builder.HeaderBuilder Maven / Gradle / Ivy

package com.tigerbrokers.stock.openapi.client.util.builder;

import com.tigerbrokers.stock.openapi.client.constant.ReqProtocolType;
import com.tigerbrokers.stock.openapi.client.constant.TigerApiConstants;
import com.tigerbrokers.stock.openapi.client.struct.enums.Subject;
import com.tigerbrokers.stock.openapi.client.util.SdkVersionUtils;
import io.netty.handler.codec.stomp.DefaultStompHeaders;
import io.netty.handler.codec.stomp.StompHeaders;
import io.netty.util.AsciiString;
import java.util.Collection;
import java.util.Set;

import static io.netty.handler.codec.stomp.StompHeaders.HEART_BEAT;

/**
 * Description:
 * Created by lijiawen on 2018/05/23.
 */
public class HeaderBuilder {

  public static final String REQ_TYPE = ReqProtocolType.REQ_HEADER;
  public static final String FOCUS_KEYS = "keys";
  public static final String STOMP_VERSION_10 = "1.0";
  public static final String STOMP_VERSION_11 = "1.1";
  public static final String STOMP_VERSION_12 = "1.2";
  public static final String PROTOBUF_VERSION_3 = "3";
  public static final String DEFAULT_VERSION = PROTOBUF_VERSION_3;
  public static final String HOST = "localhost";
  public static final String ACCOUNT = "account";
  public static final String SYMBOLS = "symbols";
  private static AsciiString SDK_VERSION_HEADER = AsciiString.cached(TigerApiConstants.SDK_VERSION);

  private static String USE_VERSION = PROTOBUF_VERSION_3;
  private StompHeaders stompHeaders;

  private HeaderBuilder() {
    stompHeaders = new DefaultStompHeaders();
  }

  public static HeaderBuilder instance() {
    return new HeaderBuilder();
  }

  public static String getUseVersion() {
    return USE_VERSION;
  }

  public static void setUseVersion(String version) {
    if (PROTOBUF_VERSION_3.equals(version)
        || STOMP_VERSION_12.equals(version)
        || STOMP_VERSION_11.equals(version)
        || STOMP_VERSION_10.equals(version)) {
      USE_VERSION = version;
    }
  }

  public HeaderBuilder version(String version) {
    this.stompHeaders.set(StompHeaders.ACCEPT_VERSION, version);
    return this;
  }

  public HeaderBuilder sdkVersion() {
    this.stompHeaders.set(SDK_VERSION_HEADER, SdkVersionUtils.getSdkVersion());
    return this;
  }

  public HeaderBuilder host() {
    this.stompHeaders.set(StompHeaders.HOST, HOST);
    return this;
  }

  public HeaderBuilder login(String login) {
    this.stompHeaders.set(StompHeaders.LOGIN, login);
    return this;
  }

  public HeaderBuilder passcode(String passcode) {
    this.stompHeaders.set(StompHeaders.PASSCODE, passcode);
    return this;
  }

  public HeaderBuilder id(int id) {
    this.stompHeaders.set(StompHeaders.ID, String.valueOf(id));
    return this;
  }

  public HeaderBuilder reqType(int reqType) {
    this.stompHeaders.set(REQ_TYPE, String.valueOf(reqType));
    return this;
  }

  public HeaderBuilder subject(Subject subject) {
    this.stompHeaders.set(StompHeaders.SUBSCRIPTION, subject.name());
    return this;
  }

  public HeaderBuilder subject(String subject) {
    this.stompHeaders.set(StompHeaders.SUBSCRIPTION, subject);
    return this;
  }

  public HeaderBuilder focusKeys(Set focusKeys) {
    if (focusKeys != null && !focusKeys.isEmpty()) {
      this.stompHeaders.set(FOCUS_KEYS, join(focusKeys));
    }
    return this;
  }

  public HeaderBuilder account(String account) {
    if (null != account) {
      this.stompHeaders.set(ACCOUNT, account);
    }
    return this;
  }

  public HeaderBuilder heartBeat(int cx, int cy) {
    String value = String.format("%d,%d", cx, cy);
    this.stompHeaders.set(HEART_BEAT, value);
    return this;
  }

  public static String join(Collection collection) {
    StringBuilder builder = new StringBuilder();
    boolean isFirst = true;
    for (String symbol : collection) {
      if (!isFirst) {
        builder.append(",").append(symbol);
      } else {
        builder.append(symbol);
        isFirst = false;
      }
    }

    return builder.toString();
  }

  public HeaderBuilder symbols(Set symbols) {
    if (symbols != null && !symbols.isEmpty()) {
      this.stompHeaders.set(SYMBOLS, join(symbols));
    }
    return this;
  }

  public StompHeaders build() {
    return this.stompHeaders;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy