Package com.opengamma.financial.security.lookup

Source Code of com.opengamma.financial.security.lookup.FXAmounts

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.security.lookup;

import com.opengamma.financial.currency.CurrencyPair;
import com.opengamma.financial.currency.CurrencyPairs;
import com.opengamma.financial.currency.CurrencyUtils;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;

/**
* The two currency amounts in an FX trade.
*/
public final class FXAmounts {

  /** The base currency. */
  private final Currency _baseCurrency;
  /** The counter currency. */
  private final Currency _counterCurrency;
  /** The amount in the base currency. */
  private final double _counterAmount;
  /** The amount in the counter currency. */
  private final double _baseAmount;

  /**
   * @param baseCurrency The base currency
   * @param counterCurrency The counter currency
   * @param baseAmount The amount in the base currency
   * @param counterAmount The amount in the counter currency
   */
  private FXAmounts(Currency baseCurrency, Currency counterCurrency, double baseAmount, double counterAmount) {
    ArgumentChecker.notNull(baseCurrency, "baseCurrency");
    ArgumentChecker.notNull(counterCurrency, "counterCurrency");
    _baseCurrency = baseCurrency;
    _counterCurrency = counterCurrency;
    _baseAmount = baseAmount;
    _counterAmount = counterAmount;
  }

  /**
   * @return The base currency
   */
  public Currency getBaseCurrency() {
    return _baseCurrency;
  }

  /**
   * @return The counter currency
   */
  public Currency getCounterCurrency() {
    return _counterCurrency;
  }

  /**
   * @return The amount in the base currency.
   */
  public double getBaseAmount() {
    return _baseAmount;
  }

  /**
   * @return The amount in the counter currency.
   */
  public double getCounterAmount() {
    return _counterAmount;
  }

  /* package */ static FXAmounts forForward(Currency payCurrency,
                                            Currency receiveCurrency,
                                            double payAmount,
                                            double receiveAmount,
                                            CurrencyPairs currencyPairs) {
    return forAmounts(payCurrency, receiveCurrency, payAmount, receiveAmount, currencyPairs);
  }

  /* package */ static FXAmounts forOption(Currency putCurrency,
                                           Currency callCurrency,
                                           double putAmount,
                                           double callAmount,
                                           boolean isLong,
                                           CurrencyPairs currencyPairs) {
    if (isLong) {
      return forAmounts(putCurrency, callCurrency, putAmount, callAmount, currencyPairs);
    } else {
      return forAmounts(callCurrency, putCurrency, callAmount, putAmount, currencyPairs);
    }
  }

  private static FXAmounts forAmounts(Currency payCurrency,
                                      Currency receiveCurrency,
                                      double payAmount,
                                      double receiveAmount,
                                      CurrencyPairs currencyPairs) {
    Double baseAmount = CurrencyUtils.getBaseAmount(payCurrency, receiveCurrency, payAmount, receiveAmount, currencyPairs);
    Double counterAmount = CurrencyUtils.getCounterAmount(payCurrency, receiveCurrency, payAmount, receiveAmount, currencyPairs);
    CurrencyPair currencyPair = currencyPairs.getCurrencyPair(payCurrency, receiveCurrency);
    if (currencyPair == null || baseAmount == null || counterAmount == null) {
      return null;
    }
    if (currencyPair.getBase().equals(payCurrency)) {
      baseAmount = baseAmount * -1;
    } else {
      counterAmount = counterAmount * -1;
    }
    return new FXAmounts(currencyPair.getBase(), currencyPair.getCounter(), baseAmount, counterAmount);
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    FXAmounts fxAmounts = (FXAmounts) o;

    if (Double.compare(fxAmounts._baseAmount, _baseAmount) != 0) {
      return false;
    }
    if (Double.compare(fxAmounts._counterAmount, _counterAmount) != 0) {
      return false;
    }
    if (!_baseCurrency.equals(fxAmounts._baseCurrency)) {
      return false;
    }
    if (!_counterCurrency.equals(fxAmounts._counterCurrency)) {
      return false;
    }
    return true;
  }

  @Override
  public int hashCode() {
    int result;
    long temp;
    result = _baseCurrency.hashCode();
    result = 31 * result + _counterCurrency.hashCode();
    temp = _counterAmount != +0.0d ? Double.doubleToLongBits(_counterAmount) : 0L;
    result = 31 * result + (int) (temp ^ (temp >>> 32));
    temp = _baseAmount != +0.0d ? Double.doubleToLongBits(_baseAmount) : 0L;
    result = 31 * result + (int) (temp ^ (temp >>> 32));
    return result;
  }

  @Override
  public String toString() {
    return "FXAmounts [" +
        "_baseCurrency=" + _baseCurrency +
        ", _counterCurrency=" + _counterCurrency +
        ", _counterAmount=" + _counterAmount +
        ", _baseAmount=" + _baseAmount +
        "]";
  }
}
TOP

Related Classes of com.opengamma.financial.security.lookup.FXAmounts

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.