// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/EPaperValidationException.java
// public class EPaperValidationException extends EPaperException {
// 	private static final long serialVersionUID = 1L;
// 
// 	public EPaperValidationException(String message) {
// 		super(message);
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Border.java
// public class Border {
// 	private final int size;
// 
// 	private final Color color;
// 
// 	public Border(int size, Color color) {
// 		this.size = size;
// 		this.color = color;
// 	}
// 
// 	public int getSize() {
// 		return size;
// 	}
// 
// 	public Color getColor() {
// 		return color;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Cell.java
// public class Cell {
// 	private final int columnIndex;
// 
// 	private final int rowIndex;
// 
// 	private final int zIndex;
// 
// 	private final Color backgroundColor;
// 
// 	private final CellContent cellContent;
// 
// 	public Cell(int columnIndex, int rowIndex, int zIndex, Color backgroundColor, CellContent cellContent) {
// 		this.columnIndex = columnIndex;
// 		this.rowIndex = rowIndex;
// 		this.zIndex = zIndex;
// 		this.backgroundColor = backgroundColor;
// 		this.cellContent = cellContent;
// 	}
// 
// 	public int getColumnIndex() {
// 		return columnIndex;
// 	}
// 
// 	public int getRowIndex() {
// 		return rowIndex;
// 	}
// 
// 	public int getZIndex() {
// 		return zIndex;
// 	}
// 
// 	public Color getBackgroundColor() {
// 		return backgroundColor;
// 	}
// 
// 	public CellContent getCellContent() {
// 		return cellContent;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Column.java
// public class Column {
// 	private final double width;
// 
// 	public Column(double width) {
// 		this.width = width;
// 	}
// 
// 	public double getWidth() {
// 		return width;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Row.java
// public class Row {
// 	private final double height;
// 
// 	public Row(double height) {
// 		this.height = height;
// 	}
// 
// 	public double getHeight() {
// 		return height;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Table.java
// public class Table {
// 	private final List<Column> columns;
// 
// 	private final List<Border> verticalBorders;
// 
// 	private final List<Row> rows;
// 
// 	private final List<Border> horizontalBorders;
// 
// 	private final List<Cell> cells;
// 
// 	public Table() {
// 		this.columns = new ArrayList<>();
// 		this.verticalBorders = new ArrayList<>();
// 		this.rows = new ArrayList<>();
// 		this.horizontalBorders = new ArrayList<>();
// 		this.cells = new ArrayList<>();
// 	}
// 
// 	public List<Column> getColumns() {
// 		return columns;
// 	}
// 
// 	public List<Border> getVerticalBorders() {
// 		return verticalBorders;
// 	}
// 
// 	public List<Row> getRows() {
// 		return rows;
// 	}
// 
// 	public List<Border> getHorizontalBorders() {
// 		return horizontalBorders;
// 	}
// 
// 	public List<Cell> getCells() {
// 		return cells;
// 	}
// }


import java.util.ArrayList;
import java.util.List;
import java.util.NavigableMap;
import java.util.Objects;
import java.util.Optional;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import fr.romainmoreau.epaper.client.api.EPaperValidationException;
import fr.romainmoreau.epaper.client.api.table.Border;
import fr.romainmoreau.epaper.client.api.table.Cell;
import fr.romainmoreau.epaper.client.api.table.Column;
import fr.romainmoreau.epaper.client.api.table.Row;
import fr.romainmoreau.epaper.client.api.table.Table;
package fr.romainmoreau.epaper.client.common.table;



public class Tables {
	public static DrawableTable getDrawableTable(int width, int height, int topLeftX, int topLeftY, Table table) {
		DrawableTable drawableTable = new DrawableTable();
		List<Integer> columnWidths = getSizes(width, table.getVerticalBorders(), table.getColumns(), Column::getWidth);
		List<Border> verticalBorders = table.getVerticalBorders().subList(0, columnWidths.size() + 1);
		List<Integer> rowHeights = getSizes(height, table.getHorizontalBorders(), table.getRows(), Row::getHeight);
		List<Border> horizontalBorders = table.getHorizontalBorders().subList(0, rowHeights.size() + 1);
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/EPaperValidationException.java
// public class EPaperValidationException extends EPaperException {
// 	private static final long serialVersionUID = 1L;
// 
// 	public EPaperValidationException(String message) {
// 		super(message);
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Border.java
// public class Border {
// 	private final int size;
// 
// 	private final Color color;
// 
// 	public Border(int size, Color color) {
// 		this.size = size;
// 		this.color = color;
// 	}
// 
// 	public int getSize() {
// 		return size;
// 	}
// 
// 	public Color getColor() {
// 		return color;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Cell.java
// public class Cell {
// 	private final int columnIndex;
// 
// 	private final int rowIndex;
// 
// 	private final int zIndex;
// 
// 	private final Color backgroundColor;
// 
// 	private final CellContent cellContent;
// 
// 	public Cell(int columnIndex, int rowIndex, int zIndex, Color backgroundColor, CellContent cellContent) {
// 		this.columnIndex = columnIndex;
// 		this.rowIndex = rowIndex;
// 		this.zIndex = zIndex;
// 		this.backgroundColor = backgroundColor;
// 		this.cellContent = cellContent;
// 	}
// 
// 	public int getColumnIndex() {
// 		return columnIndex;
// 	}
// 
// 	public int getRowIndex() {
// 		return rowIndex;
// 	}
// 
// 	public int getZIndex() {
// 		return zIndex;
// 	}
// 
// 	public Color getBackgroundColor() {
// 		return backgroundColor;
// 	}
// 
// 	public CellContent getCellContent() {
// 		return cellContent;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Column.java
// public class Column {
// 	private final double width;
// 
// 	public Column(double width) {
// 		this.width = width;
// 	}
// 
// 	public double getWidth() {
// 		return width;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Row.java
// public class Row {
// 	private final double height;
// 
// 	public Row(double height) {
// 		this.height = height;
// 	}
// 
// 	public double getHeight() {
// 		return height;
// 	}
// }
// 
// Path: e-paper-client-api/src/main/java/fr/romainmoreau/epaper/client/api/table/Table.java
// public class Table {
// 	private final List<Column> columns;
// 
// 	private final List<Border> verticalBorders;
// 
// 	private final List<Row> rows;
// 
// 	private final List<Border> horizontalBorders;
// 
// 	private final List<Cell> cells;
// 
// 	public Table() {
// 		this.columns = new ArrayList<>();
// 		this.verticalBorders = new ArrayList<>();
// 		this.rows = new ArrayList<>();
// 		this.horizontalBorders = new ArrayList<>();
// 		this.cells = new ArrayList<>();
// 	}
// 
// 	public List<Column> getColumns() {
// 		return columns;
// 	}
// 
// 	public List<Border> getVerticalBorders() {
// 		return verticalBorders;
// 	}
// 
// 	public List<Row> getRows() {
// 		return rows;
// 	}
// 
// 	public List<Border> getHorizontalBorders() {
// 		return horizontalBorders;
// 	}
// 
// 	public List<Cell> getCells() {
// 		return cells;
// 	}
// }


// Path: e-paper-client-common/src/main/java/fr/romainmoreau/epaper/client/common/table/Tables.java
import java.util.ArrayList;
import java.util.List;
import java.util.NavigableMap;
import java.util.Objects;
import java.util.Optional;
import java.util.TreeMap;
import java.util.function.Function;
import java.util.stream.Collectors;
import fr.romainmoreau.epaper.client.api.EPaperValidationException;
import fr.romainmoreau.epaper.client.api.table.Border;
import fr.romainmoreau.epaper.client.api.table.Cell;
import fr.romainmoreau.epaper.client.api.table.Column;
import fr.romainmoreau.epaper.client.api.table.Row;
import fr.romainmoreau.epaper.client.api.table.Table;

package fr.romainmoreau.epaper.client.common.table;



public class Tables {
	public static DrawableTable getDrawableTable(int width, int height, int topLeftX, int topLeftY, Table table) {
		DrawableTable drawableTable = new DrawableTable();
		List<Integer> columnWidths = getSizes(width, table.getVerticalBorders(), table.getColumns(), Column::getWidth);
		List<Border> verticalBorders = table.getVerticalBorders().subList(0, columnWidths.size() + 1);
		List<Integer> rowHeights = getSizes(height, table.getHorizontalBorders(), table.getRows(), Row::getHeight);
		List<Border> horizontalBorders = table.getHorizontalBorders().subList(0, rowHeights.size() + 1);
		NavigableMap<Integer, NavigableMap<Integer, List<Cell>>> cells = table.getCells().stream()