/** * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.forex.method; import java.util.Collections; import java.util.Map; import com.opengamma.util.money.Currency; /** * An immutable and empty FXMatrix. This is written as a singleton pattern. */ public final class EmptyFXMatrix extends FXMatrix { private static final long serialVersionUID = 1L; private static final double[][] RATES_MATRIX = new double[0][0]; private static final Map<Currency, Integer> CURRENCIES_MAP = Collections.emptyMap(); /** * The singleton instance. */ public static final EmptyFXMatrix INSTANCE = new EmptyFXMatrix(); private EmptyFXMatrix() { } @Override public void addCurrency(Currency ccyToAdd, Currency ccyReference, double fxRate) { throw new UnsupportedOperationException("Cannot modify EmptyFXMatrix()"); } @Override public double getFxRate(Currency ccy1, Currency ccy2) { if (ccy1.equals(ccy2)) { return 1; } throw new UnsupportedOperationException("No currencies in an EmptyFXMatrix"); } @Override public boolean containsPair(Currency ccy1, Currency ccy2) { return false; } @Override public void updateRates(Currency ccyToUpdate, Currency ccyReference, double fxRate) { throw new UnsupportedOperationException("Cannot modify EmptyFXMatrix()"); } @Override public Map<Currency, Integer> getCurrencies() { return CURRENCIES_MAP; } @Override public double[][] getRates() { return RATES_MATRIX; } @Override public int getNumberOfCurrencies() { return 0; } @Override public FXMatrix copy() { return this; } @Override public int hashCode() { // Every EmptyFXMatrix is identical. So this actually works. // Special Magic Number. return 19760811; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj instanceof EmptyFXMatrix) { return true; } return super.equals(obj); } }