MidiDeviceReportFormatter.java

package com.github.dakusui.symfonion.utils.midi;

import javax.sound.midi.MidiDevice;
import java.util.List;

import static java.util.Collections.emptyList;

public interface MidiDeviceReportFormatter {
  static MidiDeviceReportFormatter createDefaultInstance() {
    return new MidiDeviceReportFormatter() {
      @Override
      public List<String> header(MidiDevice.Info info, String title) {
        return List.of(
            "   " + title,
            String.format("   %s", MidiUtils.formatMidiDeviceInfo(info)),
            "-------------------------------------------------------------------------"
        );
      }


      @Override
      public String formatRecord(MidiDeviceRecord record) {
        return String.format("%1s%1s %s", record.in() ? "I" : "", record.out() ? "O" : "", MidiUtils.formatMidiDeviceInfo(record.info()));
      }

      @Override
      public List<String> footer() {
        return emptyList();
      }

      @Override
      public String formatResult(boolean matched, String formattedRecord) {
        return String.format("%1s%s", matched ? "*" : "", formattedRecord);
      }
    };
  }

  List<String> header(MidiDevice.Info info, String title);

  String formatRecord(MidiDeviceRecord record);

  List<String> footer();

  String formatResult(boolean matched, String formattedRecord);
}