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

net.objectlab.kit.fxcalc.CurrencyPair Maven / Gradle / Ivy

package net.objectlab.kit.fxcalc;

import java.util.Optional;

import net.objectlab.kit.util.StringUtil;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;

/**
 * Immutable class representing a Currency pair, ccy1/ccy2; thread-safe and able to be used in Collections.
 * Note that the currencies will be converted to UPPER CASE.
 */
public class CurrencyPair {
    private final String ccy1;
    private final String ccy2;

    /**
     * @throws IllegalArgumentException if ccy1 or ccy2 are blank.
     */
    public CurrencyPair(final String ccy1, final String ccy2) {
        super();
        if (!StringUtil.noneBlank(ccy1, ccy2)) {
            throw new IllegalArgumentException("ccy1 and ccy2 cannot be blank");
        }
        this.ccy1 = StringUtil.toUpperCase(ccy1);
        this.ccy2 = StringUtil.toUpperCase(ccy2);
    }

    public static CurrencyPair of(final String ccy1, final String ccy2) {
        return new CurrencyPair(ccy1, ccy2);
    }

    public String getCcy1() {
        return ccy1;
    }

    public String getCcy2() {
        return ccy2;
    }

    @Override
    public int hashCode() {
        return HashCodeBuilder.reflectionHashCode(this);
    }

    @Override
    public boolean equals(final Object obj) {
        return EqualsBuilder.reflectionEquals(this, obj);
    }

    @Override
    public String toString() {
        return ccy1 + "." + ccy2;
    }

    public boolean containsCcy(final String ccy) {
        return ccy1.equalsIgnoreCase(StringUtil.toUpperCase(ccy)) || ccy2.equalsIgnoreCase(StringUtil.toUpperCase(ccy));
    }

    /**
     * Given another CurrencyPair find the common Currency (if any) or the first if both are identical
     * @param otherPair
     * @return the common ccy or Empty optional
     */
    public Optional findCommonCcy(final CurrencyPair otherPair) {
        if (containsCcy(otherPair.getCcy1())) {
            return Optional.of(otherPair.getCcy1());
        }
        return containsCcy(otherPair.getCcy2()) ? Optional.of(otherPair.getCcy2()) : Optional.empty();
    }

    /**
     * Returns a new CurrencyPair ccy2 / ccy1 (useful for FxRate).
     */
    public CurrencyPair createInverse() {
        return new CurrencyPair(ccy2, ccy1);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy