/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.report.framework.format; import java.util.List; import java.util.Objects; import java.util.function.DoubleFunction; import java.util.function.IntFunction; import com.google.common.base.Strings; import com.opengamma.strata.market.param.CurrencyParameterSensitivity; import com.opengamma.strata.market.param.ParameterMetadata; /** * Formatter for currency parameter sensitivity. */ final class CurrencyParameterSensitivityValueFormatter implements ValueFormatter<CurrencyParameterSensitivity> { /** * The single shared instance of this formatter. */ static final CurrencyParameterSensitivityValueFormatter INSTANCE = new CurrencyParameterSensitivityValueFormatter(); private static final int PADDED_FIELD_WIDTH = 15; private final DoubleValueFormatter doubleFormatter = DoubleValueFormatter.INSTANCE; // restricted constructor private CurrencyParameterSensitivityValueFormatter() { } //------------------------------------------------------------------------- @Override public String formatForCsv(CurrencyParameterSensitivity sensitivity) { return getSensitivityString(sensitivity, doubleFormatter::formatForCsv, false); } @Override public String formatForDisplay(CurrencyParameterSensitivity sensitivity) { return getSensitivityString(sensitivity, doubleFormatter::formatForDisplay, true); } private String getSensitivityString( CurrencyParameterSensitivity sensitivity, DoubleFunction<String> formatFn, boolean pad) { StringBuilder sb = new StringBuilder(); List<ParameterMetadata> parameterMetadata = sensitivity.getParameterMetadata(); IntFunction<String> labelProvider = i -> Objects.toString(Strings.emptyToNull(parameterMetadata.get(i).getLabel()), String.valueOf(i + 1)); for (int i = 0; i < sensitivity.getSensitivity().size(); i++) { String formattedSensitivity = formatFn.apply(sensitivity.getSensitivity().get(i)); String field = labelProvider.apply(i) + " = " + formattedSensitivity; if (pad) { field = Strings.padEnd(field, PADDED_FIELD_WIDTH, ' '); } sb.append(field); if (i < sensitivity.getSensitivity().size() - 1) { sb.append(" | "); } } return sb.toString(); } }