You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by on...@apache.org on 2015/10/31 12:10:28 UTC

svn commit: r1711592 - in /poi/trunk/src: java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java

Author: onealj
Date: Sat Oct 31 11:10:28 2015
New Revision: 1711592

URL: http://svn.apache.org/viewvc?rev=1711592&view=rev
Log:
bug 58442: in-place reorganize an AreaPtg as upper-left and lower-right

Modified:
    poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java
    poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java

Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java?rev=1711592&r1=1711591&r2=1711592&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/AreaPtgBase.java Sat Oct 31 11:10:28 2015
@@ -44,9 +44,9 @@ public abstract class AreaPtgBase extend
 	/** zero based, unsigned 16 bit */
 	private int             field_2_last_row;
 	/** zero based, unsigned 8 bit */
-	private int             field_3_first_column;
+	private int             field_3_first_column; //BitFields: (first row relative, first col relative, first column number)
 	/** zero based, unsigned 8 bit */
-	private int             field_4_last_column;
+	private int             field_4_last_column; //BitFields: (last row relative, last col relative, last column number)
 
 	private final static BitField   rowRelative = BitFieldFactory.getInstance(0x8000);
 	private final static BitField   colRelative = BitFieldFactory.getInstance(0x4000);
@@ -96,6 +96,35 @@ public abstract class AreaPtgBase extend
 			setLastColRelative(firstColRelative);
 		}
 	}
+	
+	/**
+	 * Sort the first and last row and columns in-place to the preferred (top left:bottom right) order
+	 * Note: Sort only occurs when an instance is constructed or when this method is called.
+	 * 
+	 * <p>For example, <code>$E5:B$10</code> becomes <code>B5:$E$10</code></p>
+	 */
+	public void sortTopLeftToBottomRight() {
+		if (getFirstRow() > getLastRow()) {
+			//swap first row and last row numbers and relativity
+			//Note: cannot just swap the fields because row relativity is stored in fields 3 and 4
+			final int firstRow = getFirstRow();
+			final boolean firstRowRel = isFirstRowRelative();
+			setFirstRow(getLastRow());
+			setFirstRowRelative(isLastRowRelative());
+			setLastRow(firstRow);
+			setLastRowRelative(firstRowRel);
+		}
+		if (getFirstColumn() > getLastColumn()) {
+			//swap first column and last column numbers and relativity
+			//Note: cannot just swap the fields because row relativity is stored in fields 3 and 4
+			final int firstCol = getFirstColumn();
+			final boolean firstColRel = isFirstColRelative();
+			setFirstColumn(getLastColumn());
+			setFirstColRelative(isLastColRelative());
+			setLastColumn(firstCol);
+			setLastColRelative(firstColRel);
+		}
+	}
 
 	protected final void readCoordinates(LittleEndianInput in)  {
 		field_1_first_row = in.readUShort();

Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java?rev=1711592&r1=1711591&r2=1711592&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java Sat Oct 31 11:10:28 2015
@@ -33,6 +33,7 @@ public final class TestAreaPtg extends T
 	AreaPtg relative;
 	AreaPtg absolute;
 	
+	@Override
 	protected void setUp() {
 		short firstRow=5;
 		short lastRow=13;
@@ -41,6 +42,17 @@ public final class TestAreaPtg extends T
 		relative = new AreaPtg(firstRow,lastRow,firstCol,lastCol,true,true,true,true);
 		absolute = new AreaPtg(firstRow,lastRow,firstCol,lastCol,false,false,false,false);
 	}
+	
+	public static void testSortTopLeftToBottomRight() {
+	    AreaPtg ptg = new AreaPtg("A$1:$B5");
+	    assertEquals("A$1:$B5", ptg.toFormulaString());
+	    ptg.setFirstColumn(3);
+	    assertEquals("Area Ptg should not implicitly re-sort itself (except during construction)",
+	            "D$1:$B5", ptg.toFormulaString());
+	    ptg.sortTopLeftToBottomRight();
+	    assertEquals("Area Ptg should restore itself to top-left to lower-right order when explicitly asked",
+	            "$B$1:D5", ptg.toFormulaString());
+	}
 
 	public void testSetColumnsAbsolute()
 	{



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org