class FileBasedSource extends OffsetBasedSource<T> {

  @Override
  public String toString() {
    switch (mode) {
      case FILEPATTERN:
        return fileOrPatternSpec.toString();
      case SINGLE_FILE_OR_SUBRANGE:
        return fileOrPatternSpec + " range " + super.toString();
      default:
        throw new IllegalStateException("Unexpected mode: " + mode);
    }
  }

  protected  FileBasedSource(
      ValueProvider<String> fileOrPatternSpec,
      EmptyMatchTreatment emptyMatchTreatment,
      long minBundleSize);
  protected  FileBasedSource(ValueProvider<String> fileOrPatternSpec, long minBundleSize);
  protected  FileBasedSource(
      Metadata fileMetadata, long minBundleSize, long startOffset, long endOffset);

}