bug 56958: replace java.awt.Rectangle#intersects with native implementation to determine if CellRangeAddresses intersect; patch from Yaniv Kunda
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749226 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ebd55552bf
commit
778fa8aa3d
@ -17,15 +17,13 @@
|
|||||||
|
|
||||||
package org.apache.poi.ss.util;
|
package org.apache.poi.ss.util;
|
||||||
|
|
||||||
import java.awt.Rectangle;
|
|
||||||
|
|
||||||
import org.apache.poi.ss.SpreadsheetVersion;
|
import org.apache.poi.ss.SpreadsheetVersion;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See OOO documentation: excelfileformat.pdf sec 2.5.14 - 'Cell Range Address'<p/>
|
* See OOO documentation: excelfileformat.pdf sec 2.5.14 - 'Cell Range Address'<p/>
|
||||||
*
|
*
|
||||||
* Common subclass of 8-bit and 16-bit versions
|
* Common superclass of 8-bit and 16-bit versions
|
||||||
*/
|
*/
|
||||||
public abstract class CellRangeAddressBase {
|
public abstract class CellRangeAddressBase {
|
||||||
|
|
||||||
@ -133,35 +131,10 @@ public abstract class CellRangeAddressBase {
|
|||||||
* @return returns true if this range and other range have at least 1 cell in common
|
* @return returns true if this range and other range have at least 1 cell in common
|
||||||
*/
|
*/
|
||||||
public boolean intersects(CellRangeAddressBase other) {
|
public boolean intersects(CellRangeAddressBase other) {
|
||||||
// see java.awt.Rectangle.intersects
|
return this._firstRow <= other._lastRow &&
|
||||||
// http://stackoverflow.com/questions/13390333/two-rectangles-intersection
|
this._firstCol <= other._lastCol &&
|
||||||
|
other._firstRow <= this._lastRow &&
|
||||||
// TODO: Replace with an intersection code that doesn't rely on java.awt
|
other._firstCol <= this._lastCol;
|
||||||
return getRectangle().intersects(other.getRectangle());
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Replace with an intersection code that doesn't rely on java.awt
|
|
||||||
// Don't let this temporary implementation detail leak outside of this class
|
|
||||||
private final Rectangle getRectangle() {
|
|
||||||
int firstRow, firstCol, lastRow, lastCol;
|
|
||||||
|
|
||||||
if (!isFullColumnRange()) {
|
|
||||||
firstRow = Math.min(_firstRow, _lastRow);
|
|
||||||
lastRow = Math.max(_firstRow, _lastRow);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
firstRow = 0;
|
|
||||||
lastRow = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
if (!isFullRowRange()) {
|
|
||||||
firstCol = Math.min(_firstCol, _lastCol);
|
|
||||||
lastCol = Math.max(_firstCol, _lastCol);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
firstCol = 0;
|
|
||||||
lastCol = Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
return new Rectangle(firstRow, firstCol, lastRow-firstRow+1, lastCol-firstCol+1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user