// Path: src/main/java/com/github/kokorin/jdbunit/table/Column.java
// public class Column {
//     private final String name;
//     private final Type type;
// 
//     public Column(String name, Type type) {
//         Objects.requireNonNull(name);
//         Objects.requireNonNull(type);
// 
//         if (name.isEmpty()) {
//             throw new IllegalArgumentException("Column name must be non empty");
//         }
// 
//         this.name = name;
//         this.type = type;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Type getType() {
//         return type;
//     }
// }
// 
// Path: src/main/java/com/github/kokorin/jdbunit/table/Row.java
// public class Row {
//     private final List<Object> values;
// 
//     public static final Object ANY_VALUE = new Object(){
//         @Override
//         public String toString() {
//             return "ANY_VALUE";
//         }
//     };
// 
//     public Row(List<Object> values) {
//         Objects.requireNonNull(values);
//         if (values.isEmpty()) {
//             throw new IllegalArgumentException("At least one value in a row is required");
//         }
// 
//         values = Collections.unmodifiableList(new ArrayList<>(values));
//         this.values = values;
//     }
// 
//     public List<Object> getValues() {
//         return values;
//     }
// 
//     public static class ValueCaptor {
//         private final String name;
// 
//         public ValueCaptor(String name) {
//             this.name = name;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         @Override
//         public String toString() {
//             return "Cap:" + name + ":";
//         }
//     }
// 
//     public static class ValueReference {
//         private final String name;
// 
//         public ValueReference(String name) {
//             this.name = name;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         @Override
//         public String toString() {
//             return "Ref=" + name + "=";
//         }
//     }
// }
// 
// Path: src/main/java/com/github/kokorin/jdbunit/table/Table.java
// public class Table {
//     private final String name;
//     private final List<Column> columns;
//     private final List<Row> rows;
// 
//     public Table(String name, List<Column> columns, List<Row> rows) {
//         Objects.requireNonNull(name);
//         Objects.requireNonNull(columns);
//         Objects.requireNonNull(rows);
// 
//         if (name.isEmpty()) {
//             throw new IllegalArgumentException("Table name must be non empty");
//         }
//         if (columns.isEmpty() && !rows.isEmpty()) {
//             throw new IllegalArgumentException("At least one column is required for non-empty table");
//         }
// 
//         for (Row row : rows) {
//             if (row.getValues().size() != columns.size()) {
//                 throw new IllegalArgumentException("Every row must have value for every column.");
//             }
//         }
// 
//         this.name = name;
//         this.columns = Collections.unmodifiableList(new ArrayList<>(columns));
//         this.rows = Collections.unmodifiableList(new ArrayList<>(rows));
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public List<Column> getColumns() {
//         return columns;
//     }
// 
//     public List<Row> getRows() {
//         return rows;
//     }
// }


import com.github.kokorin.jdbunit.table.Column;
import com.github.kokorin.jdbunit.table.Row;
import com.github.kokorin.jdbunit.table.Table;
import java.util.ArrayList;
import java.util.List;
package com.github.kokorin.jdbunit;



public class TablePrinter {
    static String print(Table table) {
        StringBuilder result = new StringBuilder();
        List<Integer> widths = calcColumnWidths(table);

        printName(result, table.getName());
        printHeaderSeparator(result, widths);

        printHeader(result, table.getColumns(), widths);
        printContentSeparator(result, widths);

        for (Row row : table.getRows()) {
            printRow(result, row, widths);
        }

        return result.toString();
    }

    static List<Integer> calcColumnWidths(Table table) {
        return new ArrayList<>();
    }

    static void printName(StringBuilder builder, String name) {

    }

    static void printHeaderSeparator(StringBuilder builder, List<Integer> widths) {

    }

    static void printHeader(StringBuilder builder, List<Column> columns, List<Integer> widths) {

    }

    static void printContentSeparator(StringBuilder builder, List<Integer> widths) {

    }

// Path: src/main/java/com/github/kokorin/jdbunit/table/Column.java
// public class Column {
//     private final String name;
//     private final Type type;
// 
//     public Column(String name, Type type) {
//         Objects.requireNonNull(name);
//         Objects.requireNonNull(type);
// 
//         if (name.isEmpty()) {
//             throw new IllegalArgumentException("Column name must be non empty");
//         }
// 
//         this.name = name;
//         this.type = type;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public Type getType() {
//         return type;
//     }
// }
// 
// Path: src/main/java/com/github/kokorin/jdbunit/table/Row.java
// public class Row {
//     private final List<Object> values;
// 
//     public static final Object ANY_VALUE = new Object(){
//         @Override
//         public String toString() {
//             return "ANY_VALUE";
//         }
//     };
// 
//     public Row(List<Object> values) {
//         Objects.requireNonNull(values);
//         if (values.isEmpty()) {
//             throw new IllegalArgumentException("At least one value in a row is required");
//         }
// 
//         values = Collections.unmodifiableList(new ArrayList<>(values));
//         this.values = values;
//     }
// 
//     public List<Object> getValues() {
//         return values;
//     }
// 
//     public static class ValueCaptor {
//         private final String name;
// 
//         public ValueCaptor(String name) {
//             this.name = name;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         @Override
//         public String toString() {
//             return "Cap:" + name + ":";
//         }
//     }
// 
//     public static class ValueReference {
//         private final String name;
// 
//         public ValueReference(String name) {
//             this.name = name;
//         }
// 
//         public String getName() {
//             return name;
//         }
// 
//         @Override
//         public String toString() {
//             return "Ref=" + name + "=";
//         }
//     }
// }
// 
// Path: src/main/java/com/github/kokorin/jdbunit/table/Table.java
// public class Table {
//     private final String name;
//     private final List<Column> columns;
//     private final List<Row> rows;
// 
//     public Table(String name, List<Column> columns, List<Row> rows) {
//         Objects.requireNonNull(name);
//         Objects.requireNonNull(columns);
//         Objects.requireNonNull(rows);
// 
//         if (name.isEmpty()) {
//             throw new IllegalArgumentException("Table name must be non empty");
//         }
//         if (columns.isEmpty() && !rows.isEmpty()) {
//             throw new IllegalArgumentException("At least one column is required for non-empty table");
//         }
// 
//         for (Row row : rows) {
//             if (row.getValues().size() != columns.size()) {
//                 throw new IllegalArgumentException("Every row must have value for every column.");
//             }
//         }
// 
//         this.name = name;
//         this.columns = Collections.unmodifiableList(new ArrayList<>(columns));
//         this.rows = Collections.unmodifiableList(new ArrayList<>(rows));
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
//     public List<Column> getColumns() {
//         return columns;
//     }
// 
//     public List<Row> getRows() {
//         return rows;
//     }
// }


// Path: src/main/java/com/github/kokorin/jdbunit/TablePrinter.java
import com.github.kokorin.jdbunit.table.Column;
import com.github.kokorin.jdbunit.table.Row;
import com.github.kokorin.jdbunit.table.Table;
import java.util.ArrayList;
import java.util.List;

package com.github.kokorin.jdbunit;



public class TablePrinter {
    static String print(Table table) {
        StringBuilder result = new StringBuilder();
        List<Integer> widths = calcColumnWidths(table);

        printName(result, table.getName());
        printHeaderSeparator(result, widths);

        printHeader(result, table.getColumns(), widths);
        printContentSeparator(result, widths);

        for (Row row : table.getRows()) {
            printRow(result, row, widths);
        }

        return result.toString();
    }

    static List<Integer> calcColumnWidths(Table table) {
        return new ArrayList<>();
    }

    static void printName(StringBuilder builder, String name) {

    }

    static void printHeaderSeparator(StringBuilder builder, List<Integer> widths) {

    }

    static void printHeader(StringBuilder builder, List<Column> columns, List<Integer> widths) {

    }

    static void printContentSeparator(StringBuilder builder, List<Integer> widths) {

    }

    static void printRow(StringBuilder builder, Row row, List<Integer> widths) {