Java tutorial
package com.vaadin.addon.spreadsheet.command; /* * #%L * Vaadin Spreadsheet * %% * Copyright (C) 2013 - 2015 Vaadin Ltd * %% * This program is available under Commercial Vaadin Add-On License 3.0 * (CVALv3). * * See the file license.html distributed with this software for more * information about licensing. * * You should have received a copy of the CVALv3 along with this program. * If not, see <http://vaadin.com/license/cval-3>. * #L% */ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeUtil; import org.apache.poi.ss.util.CellReference; import com.vaadin.addon.spreadsheet.Spreadsheet; import com.vaadin.addon.spreadsheet.SpreadsheetUtil; /** * Command for shifting the value(s) of one or more cells. * * @author Vaadin Ltd. * @since 1.0 */ public class CellShiftValuesCommand extends CellValueCommand { private boolean undone; private boolean decrease; /** * Creates a new CellShiftValuesCommand targeting the given spreadsheet. * * @param spreadsheet * Target spreadsheet * @param decrease */ public CellShiftValuesCommand(Spreadsheet spreadsheet, boolean decrease) { super(spreadsheet); this.decrease = decrease; } @Override public void execute() { super.execute(); undone = !undone; } @Override public CellReference getSelectedCellReference() { CellReference selectedCellReference = super.getSelectedCellReference(); CellRangeAddress paintedCellRange = getPaintedCellRange(); if (paintedCellRange == null || SpreadsheetUtil.isCellInRange(selectedCellReference, paintedCellRange)) { return selectedCellReference; } else { return new CellReference(paintedCellRange.getFirstRow(), paintedCellRange.getFirstColumn()); } } @Override public CellRangeAddress getPaintedCellRange() { CellRangeAddress paintedCellRange = super.getPaintedCellRange(); if (undone || paintedCellRange == null) { return paintedCellRange; } else { CellRangeValue crv = (CellRangeValue) values.get(0); if (decrease) { int col2 = crv.col1 == paintedCellRange.getFirstColumn() ? crv.col2 : crv.col1 - 1; int row2 = crv.row1 == paintedCellRange.getFirstRow() ? crv.row2 : crv.row1 - 1; return new CellRangeAddress(paintedCellRange.getFirstRow(), row2, paintedCellRange.getFirstColumn(), col2); } else { return CellRangeUtil.mergeCellRanges(new CellRangeAddress[] { paintedCellRange, new CellRangeAddress(crv.row1, crv.row2, crv.col1, crv.col2) })[0]; } } } }