All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.toucanpdf.state.Table.StateTableColumnUsageDetector Maven / Gradle / Ivy

package org.toucanpdf.state.Table;

import java.util.List;

import org.toucanpdf.model.Cell;

public class StateTableColumnUsageDetector {

    private int columnAmount;

    public StateTableColumnUsageDetector(int columnAmount) {
        this.columnAmount = columnAmount;
    }

    public boolean columnsNotInUse(int checkedColumn, int checkedColumnSpan, List rows, int checkedRow) {
        //we need to go through all rows and columns to make sure the requested columns are not occupied due to rowspawn/columnspan of other cells
        for (int rowNumber = 0; rowNumber <= checkedRow; ++rowNumber) {
            Cell[] row = rows.get(rowNumber).getContent();
            for (int column = 0; column < this.columnAmount; ++column) {
                Cell cell = row[column];
                if (cell != null &&
                        (rowNumber == checkedRow && cellOccupiesCheckedColumn(checkedColumn, column, cell.getColumnSpan()) ||
                        (column <= checkedColumn && cellOccupiesCheckedCell(checkedColumn, checkedColumnSpan, checkedRow, rowNumber, column, cell)))) {
                    return false;
                }
            }
        }
        return true;
    }

    private boolean cellOccupiesCheckedCell(int checkedColumn, int checkedColumnSpan, int checkedRow, int rowNumber, int column, Cell cell) {
        return cellOccupiesCheckedColumns(column, cell.getColumnSpan(), checkedColumn, checkedColumnSpan) &&
                cellOccupiesCheckedRows(checkedRow, rowNumber, cell.getRowSpan());
    }

    private boolean cellOccupiesCheckedRows(int checkedRow, int rowNumber, int rowSpan) {
        return (rowNumber + rowSpan - 1) >= checkedRow;
    }

    private boolean cellOccupiesCheckedColumn(int checkedColumn, int column, int columnSpan) {
        return (column + columnSpan - 1) >= checkedColumn;
    }

    private boolean cellOccupiesCheckedColumns(int cellColumn, int cellColumnSpan, int checkedColumn, int checkedColumnSpan) {
        for (int i = cellColumn; i <= (cellColumn + cellColumnSpan - 1); ++i) {
            if (i >= checkedColumn && i <= (checkedColumn + checkedColumnSpan - 1)) {
                return true;
            }
        }
        return false;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy