package org.eclipse.packagedrone.utils.deb; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; import java.util.Optional; public class ControlFileWriter { private final Appendable writer; private final Map<String, FieldFormatter> alternateFormatters; public ControlFileWriter ( final OutputStream os ) { this ( os, null ); } public ControlFileWriter ( final Appendable writer ) { this ( writer, null ); } public ControlFileWriter ( final OutputStream os, final Map<String, FieldFormatter> alternateFormatters ) { this ( new OutputStreamWriter ( os, StandardCharsets.UTF_8 ), alternateFormatters ); } public ControlFileWriter ( final Appendable writer, final Map<String, FieldFormatter> alternateFormatters ) { this.writer = writer; this.alternateFormatters = alternateFormatters == null ? Collections.emptyMap () : alternateFormatters; } public void writeEntries ( final Map<String, String> entries ) throws IOException { for ( final Map.Entry<String, String> entry : entries.entrySet () ) { writeEntry ( entry.getKey (), entry.getValue () ); } } public void writeEntry ( final String key, final String value ) throws IOException { writeEntry ( key, value, Optional.empty () ); } public void writeEntry ( final String key, final String value, final Optional<FieldFormatter> overrideFormatter ) throws IOException { final FieldFormatter formatter = overrideFormatter.orElseGet ( () -> this.alternateFormatters.getOrDefault ( key, FieldFormatter.SINGLE ) ); formatter.append ( key, value, this.writer ); this.writer.append ( '\n' ); } }