private static ImmutableMap<String, ImmutableMap<String, String>> parseExternals(IniFile config) { ImmutableMap.Builder<String, ImmutableMap<String, String>> builder = ImmutableMap.builder(); for (String sectionName : config.sections()) { if (sectionName.startsWith(EXTERNALS_SECTION)) { String group = sectionName.substring(EXTERNALS_SECTION.length()); builder.put(group, config.section(sectionName).asMap()); } } return builder.build(); }
@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(); }
/** * Loads a report template from an .ini file. * * @param iniFile the .ini file containing the definition of a report template * @return the template defined in the .ini file * @throws RuntimeException if the ini file cannot be parsed */ public static ReportTemplate load(IniFile iniFile) { String settingsSectionKey = iniFile.sections().stream() .filter(k -> k.toLowerCase(Locale.ENGLISH).equals(ReportTemplateIniLoader.SETTINGS_SECTION)) .findFirst() .orElseThrow(() -> new IllegalArgumentException(Messages.format( "Report template INI file must contain a {} section", ReportTemplateIniLoader.SETTINGS_SECTION))); PropertySet settingsSection = iniFile.section(settingsSectionKey); String reportType = settingsSection.value(ReportTemplateIniLoader.SETTINGS_REPORT_TYPE); ReportTemplateIniLoader<? extends ReportTemplate> iniLoader = LOADERS.stream() .filter(loader -> loader.getReportType().equalsIgnoreCase(reportType)) .findFirst() .orElseThrow(() -> new IllegalArgumentException(Messages.format("Unsupported report type: {}", reportType))); return iniLoader.load(iniFile); }
@VisibleForTesting static ImmutableMap<String, HolidayCalendar> loadFromIni(String filename) { List<ResourceLocator> resources = ResourceConfig.orderedResources(filename); Map<String, HolidayCalendar> map = new HashMap<>(); for (ResourceLocator resource : resources) { try { IniFile ini = IniFile.of(resource.getCharSource()); for (String sectionName : ini.sections()) { PropertySet section = ini.section(sectionName); HolidayCalendar parsed = parseHolidayCalendar(sectionName, section); map.put(parsed.getName(), parsed); map.putIfAbsent(parsed.getName().toUpperCase(Locale.ENGLISH), parsed); } } catch (RuntimeException ex) { log.log(Level.SEVERE, "Error processing resource as Holiday Calendar INI file: " + resource, ex); return ImmutableMap.of(); } } return ImmutableMap.copyOf(map); }