Package com.xeiam.xchange.utils.jackson

Source Code of com.xeiam.xchange.utils.jackson.CurrencyPairDeserializer

package com.xeiam.xchange.utils.jackson;

import java.io.IOException;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.ObjectCodec;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonNode;
import com.xeiam.xchange.currency.CurrencyPair;

public class CurrencyPairDeserializer extends JsonDeserializer<CurrencyPair> {

  @Override
  public CurrencyPair deserialize(final JsonParser jsonParser, final DeserializationContext ctxt) throws IOException, JsonProcessingException {

    final ObjectCodec oc = jsonParser.getCodec();
    final JsonNode node = oc.readTree(jsonParser);
    final String currencyPairString = node.asText();

    return getCurrencyPairFromString(currencyPairString);
  }

  public static CurrencyPair getCurrencyPairFromString(String currencyPairString) {

    if (currencyPairString == null || currencyPairString.isEmpty())
      return null;

    /*
     * Preserve case if exchange is sending mixed-case, otherwise toUpperCase()
     */
    final boolean isMixedCase = currencyPairString.matches(".*[a-z]+.*") && currencyPairString.matches(".*[A-Z]+.*");
    if (!isMixedCase)
      currencyPairString = currencyPairString.toUpperCase();

    /*
     * Assume all symbols are alphanumeric; anything else is a separator
     */
    final String symbols[] = currencyPairString.split("[^a-zA-Z0-9]");
    if (symbols.length == 2)
      return new CurrencyPair(symbols[0], symbols[1]);

    /*
     * Last-ditch effort to obtain the correct CurrencyPair (eg: "BTCUSD")
     * XXX: What about a "DOGEBTC" or "BCBTC" string??
     */
    final String tradeCurrency = currencyPairString.substring(0, 3);
    final String priceCurrency = currencyPairString.substring(currencyPairString.length() - 3);
    return new CurrencyPair(tradeCurrency, priceCurrency);
  }
}
TOP

Related Classes of com.xeiam.xchange.utils.jackson.CurrencyPairDeserializer

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.