bad.robot.excel.workbook.NavigablePoiWorkbook.java Source code

Java tutorial

Introduction

Here is the source code for bad.robot.excel.workbook.NavigablePoiWorkbook.java

Source

/*
 * Copyright (c) 2012-2013, bad robot (london) ltd.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package bad.robot.excel.workbook;

import bad.robot.excel.cell.Cell;
import bad.robot.excel.cell.Formula;
import bad.robot.excel.cell.Hyperlink;
import bad.robot.excel.column.ColumnIndex;
import bad.robot.excel.row.Row;
import bad.robot.excel.row.RowIndex;
import bad.robot.excel.sheet.Coordinate;
import bad.robot.excel.sheet.SheetIndex;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import static bad.robot.excel.matchers.CellType.adaptPoi;
import static org.apache.poi.ss.usermodel.Row.CREATE_NULL_AS_BLANK;

/** @since 1.1 */
@Deprecated /** can't remember why this is here, seems to be more or less the same as {@link PoiWorkbook} **/
public class NavigablePoiWorkbook implements Navigable, Editable {

    private final Workbook poi;
    private final PoiWorkbook workbook;

    // TODO more constructors

    public NavigablePoiWorkbook(Workbook workbook) {
        this.poi = workbook;
        this.workbook = new PoiWorkbook(workbook);
    }

    @Override
    public Cell getCellAt(Coordinate coordinate) {
        return adaptPoi(getCellForCoordinate(coordinate));
    }

    @Override
    public Row getRowAt(RowIndex rowIndex, SheetIndex sheetIndex) {
        org.apache.poi.ss.usermodel.Row row = getRowForCoordinate(rowIndex, sheetIndex);
        Map<ColumnIndex, Cell> cells = new HashMap<ColumnIndex, Cell>();
        for (org.apache.poi.ss.usermodel.Cell cell : row) {
            cells.put(null, adaptPoi(cell));
        }
        return new Row(cells);
    }

    @Override
    public Editable blankCell(Coordinate coordinate) {
        workbook.blankCell(coordinate);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Cell cell) {
        workbook.replaceCell(coordinate, cell);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, String value) {
        workbook.replaceCell(coordinate, value);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Formula formula) {
        workbook.replaceCell(coordinate, formula);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Date date) {
        workbook.replaceCell(coordinate, date);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Double number) {
        workbook.replaceCell(coordinate, number);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Hyperlink hyperlink) {
        workbook.replaceCell(coordinate, hyperlink);
        return this;
    }

    @Override
    public Editable replaceCell(Coordinate coordinate, Boolean value) {
        workbook.replaceCell(coordinate, value);
        return this;
    }

    @Override
    public Editable copyRow(Workbook workbook, Sheet worksheet, RowIndex from, RowIndex to) {
        this.workbook.copyRow(workbook, worksheet, from, to);
        return this;
    }

    @Override
    public Editable insertSheet(String name) {
        workbook.insertSheet(name);
        return this;
    }

    @Override
    public Editable insertSheet() {
        workbook.insertSheet();
        return this;
    }

    @Override
    public Editable insertRowToFirstSheet(Row row, RowIndex index) {
        workbook.insertRowToFirstSheet(row, index);
        return this;
    }

    @Override
    public Editable insertRowToSheet(Row row, RowIndex index, SheetIndex sheet) {
        workbook.insertRowToSheet(row, index, sheet);
        return this;
    }

    @Override
    public Editable appendRowToFirstSheet(Row row) {
        workbook.appendRowToFirstSheet(row);
        return this;
    }

    @Override
    public Editable appendRowToSheet(Row row, SheetIndex index) {
        workbook.appendRowToSheet(row, index);
        return this;
    }

    @Override
    public Editable refreshFormulas() {
        workbook.refreshFormulas();
        return this;
    }

    private org.apache.poi.ss.usermodel.Cell getCellForCoordinate(Coordinate coordinate) {
        org.apache.poi.ss.usermodel.Row row = getRowForCoordinate(coordinate.getRow(), coordinate.getSheet());
        return row.getCell(coordinate.getColumn().value(), CREATE_NULL_AS_BLANK);
    }

    private org.apache.poi.ss.usermodel.Row getRowForCoordinate(RowIndex rowIndex, SheetIndex sheetIndex) {
        Sheet sheet = poi.getSheetAt(sheetIndex.value());
        org.apache.poi.ss.usermodel.Row row = sheet.getRow(rowIndex.value());
        if (row == null)
            row = sheet.createRow(rowIndex.value());
        return row;
    }

}