com.opengamma.financial.analytics.cashflow.FixedPaymentMatrix.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.financial.analytics.cashflow.FixedPaymentMatrix.java

Source

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

import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;

import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.StringUtils;
import org.threeten.bp.LocalDate;

import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.CurrencyAmount;
import com.opengamma.util.money.MultipleCurrencyAmount;

/**
 *
 */
public class FixedPaymentMatrix {
    private final NavigableMap<LocalDate, MultipleCurrencyAmount> _values;
    private final int _maxCurrencyAmounts;

    public FixedPaymentMatrix() {
        _values = new TreeMap<LocalDate, MultipleCurrencyAmount>();
        _maxCurrencyAmounts = 0;
    }

    public FixedPaymentMatrix(final Map<LocalDate, MultipleCurrencyAmount> values) {
        ArgumentChecker.notNull(values, "values");
        _values = new TreeMap<LocalDate, MultipleCurrencyAmount>(values);
        int count = 0;
        for (final MultipleCurrencyAmount mca : values.values()) {
            if (mca.size() > count) {
                count = mca.size();
            }
        }
        _maxCurrencyAmounts = count;
    }

    public FixedPaymentMatrix(final Map<LocalDate, MultipleCurrencyAmount> values, final int maxCurrencyAmounts) {
        ArgumentChecker.notNull(values, "values");
        ArgumentChecker.notNegative(maxCurrencyAmounts, "max currency amounts");
        _values = new TreeMap<LocalDate, MultipleCurrencyAmount>(values);
        _maxCurrencyAmounts = maxCurrencyAmounts;
    }

    public FixedPaymentMatrix add(final Map<LocalDate, MultipleCurrencyAmount> payments) {
        ArgumentChecker.notNull(payments, "payments");
        final Map<LocalDate, MultipleCurrencyAmount> values = new TreeMap<LocalDate, MultipleCurrencyAmount>(
                _values);
        int count = getMaxCurrencyAmounts();
        for (final Map.Entry<LocalDate, MultipleCurrencyAmount> entry : payments.entrySet()) {
            final LocalDate date = entry.getKey();
            final MultipleCurrencyAmount mca = entry.getValue();
            if (mca.size() > count) {
                count = mca.size();
            }
            if (values.containsKey(date)) {
                values.put(date, values.get(date).plus(mca));
            } else {
                values.put(date, mca);
            }
        }
        return new FixedPaymentMatrix(values, count);
    }

    public FixedPaymentMatrix add(final FixedPaymentMatrix matrix) {
        ArgumentChecker.notNull(matrix, "matrix");
        return add(matrix.getValues());
    }

    public Map<LocalDate, MultipleCurrencyAmount> getValues() {
        return _values;
    }

    public int getMaxCurrencyAmounts() {
        return _maxCurrencyAmounts;
    }

    public LocalDate[] getDatesAsArray() {
        return _values.keySet().toArray(new LocalDate[_values.size()]);
    }

    public String[][] getCurrencyAmountsAsStringArray() {
        final String[][] matrix = new String[_values.size()][getMaxCurrencyAmounts()];
        int i = 0;
        for (final MultipleCurrencyAmount mca : _values.values()) {
            final CurrencyAmount[] ca = mca.getCurrencyAmounts();
            for (int j = 0; j < getMaxCurrencyAmounts(); j++) {
                if (j < mca.size()) {
                    matrix[i][j] = ca.toString();
                } else {
                    matrix[i][j] = StringUtils.EMPTY;
                }
            }
            i++;
        }
        return matrix;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + _values.hashCode();
        return result;
    }

    @Override
    public boolean equals(final Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final FixedPaymentMatrix other = (FixedPaymentMatrix) obj;
        return ObjectUtils.equals(_values, other._values);
    }

}