/** * Copyright (C) 2015 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.strata.report.trade; import java.util.ArrayList; import java.util.List; import java.util.Locale; import com.opengamma.strata.collect.io.IniFile; import com.opengamma.strata.collect.io.PropertySet; import com.opengamma.strata.report.ReportTemplateIniLoader; /** * Loads a trade report template from the standard INI file format. * <p> * In a trade report template, the sections in the INI file (other than the special settings * section) correspond to the columns in the report, in the order they are declared. * <p> * Each section can specify the following properties: * <ul> * <li>value - identifies the value to display in the column's cells * <li>ignoreFailures - optional boolean flag to disable failure messages in this column * </ul> */ public class TradeReportTemplateIniLoader implements ReportTemplateIniLoader<TradeReportTemplate> { /** * The report type. */ private static final String REPORT_TYPE = "trade"; /** * The value property name. */ private static final String VALUE_PROPERTY = "value"; /** * The ignore-failures property name. */ private static final String IGNORE_FAILURES_PROPERTY = "ignoreFailures"; //------------------------------------------------------------------------- @Override public String getReportType() { return REPORT_TYPE; } @Override public TradeReportTemplate load(IniFile iniFile) { List<TradeReportColumn> reportColumns = new ArrayList<TradeReportColumn>(); for (String columnName : iniFile.sections()) { if (columnName.toLowerCase(Locale.ENGLISH).equals(SETTINGS_SECTION)) { continue; } PropertySet properties = iniFile.section(columnName); reportColumns.add(parseColumn(columnName, properties)); } return TradeReportTemplate.builder() .columns(reportColumns) .build(); } private TradeReportColumn parseColumn(String columnName, PropertySet properties) { TradeReportColumn.Builder columnBuilder = TradeReportColumn.builder(); columnBuilder.header(columnName); if (properties.contains(VALUE_PROPERTY)) { columnBuilder.value(properties.value(VALUE_PROPERTY)); } if (properties.contains(IGNORE_FAILURES_PROPERTY)) { String ignoreFailuresValue = properties.value(IGNORE_FAILURES_PROPERTY); boolean ignoresFailure = Boolean.valueOf(ignoreFailuresValue); columnBuilder.ignoreFailures(ignoresFailure); } return columnBuilder.build(); } }