Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MemFuncPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,10 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -61,18 +65,15 @@ public final class MemFuncPtg extends Op public int getLenRefSubexpression() { return field_1_len_ref_subexpression; } - @Override - public final String toString() { - StringBuilder sb = new StringBuilder(64); - sb.append(getClass().getName()).append(" [len="); - sb.append(field_1_len_ref_subexpression); - sb.append("]"); - return sb.toString(); - } @Override public MemFuncPtg copy() { // immutable return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties("lenRefSubexpression", this::getLenRefSubexpression); + } } \ No newline at end of file
Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/MissingArgPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,9 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.util.LittleEndianOutput; /** @@ -49,4 +52,9 @@ public final class MissingArgPtg extends public MissingArgPtg copy() { return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NamePtg.java Sun Apr 12 22:03:52 2020 @@ -17,8 +17,12 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.WorkbookDependentFormula; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -90,4 +94,9 @@ public final class NamePtg extends Opera public NamePtg copy() { return new NamePtg(this); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties("index", this::getIndex); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPtg.java Sun Apr 12 22:03:52 2020 @@ -17,8 +17,12 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.WorkbookDependentFormula; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -78,11 +82,6 @@ public final class NameXPtg extends Oper throw new RuntimeException("3D references need a workbook to determine formula text"); } - public String toString(){ - return "NameXPtg:[sheetRefIndex:" + _sheetRefIndex + - " , nameNumber:" + _nameNumber + "]"; - } - public byte getDefaultOperandClass() { return Ptg.CLASS_VALUE; } @@ -99,4 +98,12 @@ public final class NameXPtg extends Oper // immutable return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "sheetRefIndex", this::getSheetRefIndex, + "nameIndex", this::getNameIndex + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NameXPxg.java Sun Apr 12 22:03:52 2020 @@ -17,7 +17,11 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.formula.SheetNameFormatter; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianOutput; /** @@ -52,23 +56,6 @@ public final class NameXPxg extends Oper this(-1, null, nameName); } - public String toString(){ - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getName()); - sb.append(" ["); - if (externalWorkbookNumber >= 0) { - sb.append(" ["); - sb.append("workbook=").append(getExternalWorkbookNumber()); - sb.append("] "); - } - sb.append("sheet=").append(getSheetName()); - sb.append(" ! "); - sb.append("name="); - sb.append(nameName); - sb.append("]"); - return sb.toString(); - } - public int getExternalWorkbookNumber() { return externalWorkbookNumber; } @@ -118,4 +105,13 @@ public final class NameXPxg extends Oper public NameXPxg copy() { return new NameXPxg(this); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "externalWorkbookNumber", this::getExternalWorkbookNumber, + "sheetName", this::getSheetName, + "nameName", this::getNameName + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NumberPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NumberPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NumberPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/NumberPtg.java Sun Apr 12 22:03:52 2020 @@ -17,7 +17,11 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.util.NumberToTextConverter; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -70,4 +74,9 @@ public final class NumberPtg extends Sca public NumberPtg copy() { return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties("value", this::getValue); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperationPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperationPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperationPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/OperationPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,9 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + /** * defines a Ptg that is an operation instead of an operand * @author andy @@ -44,4 +47,9 @@ public abstract class OperationPtg exten public byte getDefaultOperandClass() { return Ptg.CLASS_VALUE; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,9 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.util.LittleEndianOutput; /** @@ -55,4 +58,9 @@ public final class ParenthesisPtg extend public ParenthesisPtg copy() { return instance; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ptg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ptg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ptg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ptg.java Sun Apr 12 22:03:52 2020 @@ -21,6 +21,8 @@ import java.util.ArrayList; import java.util.List; import org.apache.poi.common.Duplicatable; +import org.apache.poi.common.usermodel.GenericRecord; +import org.apache.poi.util.GenericRecordJsonWriter; import org.apache.poi.util.LittleEndianByteArrayOutputStream; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -37,7 +39,7 @@ import org.apache.poi.util.LittleEndianO * <em>Reverse-Polish Notation</em> order. The RPN ordering also simplifies formula * evaluation logic, so POI mostly accesses <tt>Ptg</tt>s in the same way. */ -public abstract class Ptg implements Duplicatable { +public abstract class Ptg implements Duplicatable, GenericRecord { public static final Ptg[] EMPTY_PTG_ARRAY = { }; public static final byte CLASS_REF = 0x00; @@ -62,7 +64,7 @@ public abstract class Ptg implements Dup boolean hasArrayPtgs = false; while (pos < size) { Ptg ptg = Ptg.createPtg(in); - if (ptg instanceof ArrayPtg.Initial) { + if (ptg instanceof ArrayInitialPtg) { hasArrayPtgs = true; } pos += ptg.getSize(); @@ -74,8 +76,8 @@ public abstract class Ptg implements Dup if (hasArrayPtgs) { Ptg[] result = toPtgArray(temp); for (int i=0;i<result.length;i++) { - if (result[i] instanceof ArrayPtg.Initial) { - result[i] = ((ArrayPtg.Initial) result[i]).finishReading(in); + if (result[i] instanceof ArrayInitialPtg) { + result[i] = ((ArrayInitialPtg) result[i]).finishReading(in); } } return result; @@ -107,7 +109,7 @@ public abstract class Ptg implements Dup int baseId = id & 0x1F | 0x20; switch (baseId) { - case ArrayPtg.sid: return new ArrayPtg.Initial(in);//0x20, 0x40, 0x60 + case ArrayPtg.sid: return new ArrayInitialPtg(in);//0x20, 0x40, 0x60 case FuncPtg.sid: return FuncPtg.create(in); // 0x21, 0x41, 0x61 case FuncVarPtg.sid: return FuncVarPtg.create(in);//0x22, 0x42, 0x62 case NamePtg.sid: return new NamePtg(in); // 0x23, 0x43, 0x63 @@ -245,13 +247,9 @@ public abstract class Ptg implements Dup */ public abstract String toFormulaString(); - /** Overridden toString method to ensure object hash is not printed. - * This helps get rid of gratuitous diffs when comparing two dumps - * Subclasses may output more relevant information by overriding this method - **/ @Override - public String toString(){ - return this.getClass().toString(); + public final String toString() { + return GenericRecordJsonWriter.marshal(this); } public final void setClass(byte thePtgClass) { Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref2DPtgBase.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref2DPtgBase.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref2DPtgBase.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref2DPtgBase.java Sun Apr 12 22:03:52 2020 @@ -61,14 +61,4 @@ abstract class Ref2DPtgBase extends RefP public final int getSize() { return SIZE; } - - @Override - public final String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPtg.java Sun Apr 12 22:03:52 2020 @@ -17,10 +17,14 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.formula.ExternSheetReferenceToken; import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.WorkbookDependentFormula; import org.apache.poi.ss.util.CellReference; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -57,17 +61,6 @@ public final class Ref3DPtg extends RefP setExternSheetIndex(externIdx); } - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append("sheetIx=").append(getExternSheetIndex()); - sb.append(" ! "); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } - public void write(LittleEndianOutput out) { out.writeByte(sid + getPtgClass()); out.writeShort(getExternSheetIndex()); @@ -103,4 +96,12 @@ public final class Ref3DPtg extends RefP public Ref3DPtg copy() { return new Ref3DPtg(this); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "base", super::getGenericProperties, + "externSheetIndex", this::getExternSheetIndex + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/Ref3DPxg.java Sun Apr 12 22:03:52 2020 @@ -17,10 +17,14 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.formula.SheetIdentifier; import org.apache.poi.ss.formula.SheetRangeAndWorkbookIndexFormatter; import org.apache.poi.ss.formula.SheetRangeIdentifier; import org.apache.poi.ss.util.CellReference; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianOutput; /** @@ -64,26 +68,6 @@ public final class Ref3DPxg extends RefP this(-1, sheetName, c); } - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(getClass().getName()); - sb.append(" ["); - if (externalWorkbookNumber >= 0) { - sb.append(" ["); - sb.append("workbook=").append(getExternalWorkbookNumber()); - sb.append("] "); - } - sb.append("sheet=").append(firstSheetName); - if (lastSheetName != null) { - sb.append(" : "); - sb.append("sheet=").append(lastSheetName); - } - sb.append(" ! "); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } - public int getExternalWorkbookNumber() { return externalWorkbookNumber; } @@ -125,4 +109,14 @@ public final class Ref3DPxg extends RefP public Ref3DPxg copy() { return new Ref3DPxg(this); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "base", super::getGenericProperties, + "externalWorkbookNumber", this::getExternalWorkbookNumber, + "firstSheetName", this::getSheetName, + "lastSheetName", this::getLastSheetName + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java Sun Apr 12 22:03:52 2020 @@ -17,7 +17,11 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.usermodel.FormulaError; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -43,10 +47,6 @@ public final class RefErrorPtg extends O field_1_reserved = in.readInt(); } - public String toString() { - return getClass().getName(); - } - public void write(LittleEndianOutput out) { out.writeByte(sid + getPtgClass()); out.writeInt(field_1_reserved); @@ -69,4 +69,9 @@ public final class RefErrorPtg extends O public RefErrorPtg copy() { return new RefErrorPtg(this); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties("reserved", () -> field_1_reserved); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/RefPtgBase.java Sun Apr 12 22:03:52 2020 @@ -17,9 +17,13 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -118,4 +122,15 @@ public abstract class RefPtgBase extends public final byte getDefaultOperandClass() { return Ptg.CLASS_REF; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "row", this::getRow, + "rowRelative", this::isRowRelative, + "column", this::getColumn, + "colRelative", this::isColRelative, + "formatReference", this::formatReferenceAsString + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ScalarConstantPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ScalarConstantPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ScalarConstantPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/ScalarConstantPtg.java Sun Apr 12 22:03:52 2020 @@ -29,14 +29,4 @@ public abstract class ScalarConstantPtg public final byte getDefaultOperandClass() { return Ptg.CLASS_VALUE; } - - public final String toString() { - StringBuilder sb = new StringBuilder(64); - sb.append(getClass().getName()).append(" ["); - sb.append(toFormulaString()); - sb.append("]"); - return sb.toString(); - } - - } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/StringPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/StringPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/StringPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/StringPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,10 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.StringUtil; @@ -106,4 +110,9 @@ public final class StringPtg extends Sca public StringPtg copy() { return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties("value", this::getValue); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/TblPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/TblPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/TblPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/TblPtg.java Sun Apr 12 22:03:52 2020 @@ -17,6 +17,10 @@ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + +import org.apache.poi.util.GenericRecordUtil; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -72,16 +76,17 @@ public final class TblPtg extends Contro throw new RuntimeException("Table and Arrays are not yet supported"); } - public String toString() { - StringBuilder buffer = new StringBuilder("[Data Table - Parent cell is an interior cell in a data table]\n"); - buffer.append("top left row = ").append(getRow()).append("\n"); - buffer.append("top left col = ").append(getColumn()).append("\n"); - return buffer.toString(); - } - @Override public TblPtg copy() { // immutable return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "row", this::getRow, + "column", this::getColumn + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java Sun Apr 12 22:03:52 2020 @@ -16,6 +16,9 @@ ==================================================================== */ package org.apache.poi.ss.formula.ptg; +import java.util.Map; +import java.util.function.Supplier; + import org.apache.poi.util.LittleEndianOutput; public class UnknownPtg extends Ptg { @@ -48,4 +51,9 @@ public class UnknownPtg extends Ptg { public UnknownPtg copy() { return this; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } } Modified: poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressBase.java Sun Apr 12 22:03:52 2020 @@ -19,12 +19,16 @@ package org.apache.poi.ss.util; import java.util.EnumSet; import java.util.Iterator; +import java.util.Map; import java.util.NoSuchElementException; import java.util.Set; +import java.util.function.Supplier; import org.apache.poi.common.Duplicatable; +import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.util.GenericRecordUtil; /** @@ -32,7 +36,7 @@ import org.apache.poi.ss.usermodel.Cell; * * Common superclass of 8-bit and 16-bit versions */ -public abstract class CellRangeAddressBase implements Iterable<CellAddress>, Duplicatable { +public abstract class CellRangeAddressBase implements Iterable<CellAddress>, Duplicatable, GenericRecord { /** * Indicates a cell or range is in the given relative position in a range. @@ -378,4 +382,14 @@ public abstract class CellRangeAddressBa (getMinRow() << 16) + (getMaxRow() << 24)); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "firstRow", this::getFirstRow, + "firstCol", this::getFirstColumn, + "lastRow", this::getLastRow, + "lastCol", this::getLastColumn + ); + } } Modified: poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressList.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressList.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressList.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/util/CellRangeAddressList.java Sun Apr 12 22:03:52 2020 @@ -20,7 +20,10 @@ package org.apache.poi.ss.util; import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.function.Supplier; +import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.hssf.record.RecordInputStream; import org.apache.poi.util.LittleEndianByteArrayOutputStream; import org.apache.poi.util.LittleEndianOutput; @@ -35,32 +38,27 @@ import org.apache.poi.util.LittleEndianO * with the number of ranges and the list of the range addresses. Each cell * range address (called an ADDR structure) contains 4 16-bit-values. * </p> - * - * @author Dragos Buleandra (dragos.bulean...@trade2b.ro) */ -public class CellRangeAddressList { +public class CellRangeAddressList implements GenericRecord { /** * List of <tt>CellRangeAddress</tt>es. Each structure represents a cell range */ - protected final List<CellRangeAddress> _list; + protected final List<CellRangeAddress> _list = new ArrayList<>(); public CellRangeAddressList() { - _list = new ArrayList<>(); } /** * Convenience constructor for creating a <tt>CellRangeAddressList</tt> with a single * <tt>CellRangeAddress</tt>. Other <tt>CellRangeAddress</tt>es may be added later. */ public CellRangeAddressList(int firstRow, int lastRow, int firstCol, int lastCol) { - this(); addCellRangeAddress(firstRow, firstCol, lastRow, lastCol); } /** * @param in the RecordInputstream to read the record from */ public CellRangeAddressList(RecordInputStream in) { - this(); int nItems = in.readUShort(); for (int k = 0; k < nItems; k++) { @@ -139,18 +137,14 @@ public class CellRangeAddressList { public void serialize(LittleEndianOutput out) { int nItems = _list.size(); out.writeShort(nItems); - for (int k = 0; k < nItems; k++) { - CellRangeAddress region = _list.get(k); + for (CellRangeAddress region : _list) { region.serialize(out); } } public CellRangeAddressList copy() { CellRangeAddressList result = new CellRangeAddressList(); - - int nItems = _list.size(); - for (int k = 0; k < nItems; k++) { - CellRangeAddress region = _list.get(k); + for (CellRangeAddress region : _list) { result.addCellRangeAddress(region.copy()); } return result; @@ -160,4 +154,14 @@ public class CellRangeAddressList { _list.toArray(result); return result; } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } + + @Override + public List<CellRangeAddress> getGenericChildren() { + return _list; + } } Modified: poi/trunk/src/java/org/apache/poi/ss/util/CellReference.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/CellReference.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/ss/util/CellReference.java (original) +++ poi/trunk/src/java/org/apache/poi/ss/util/CellReference.java Sun Apr 12 22:03:52 2020 @@ -20,13 +20,17 @@ package org.apache.poi.ss.util; import static org.apache.poi.util.StringUtil.endsWithIgnoreCase; import java.util.Locale; +import java.util.Map; import java.util.Objects; +import java.util.function.Supplier; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.poi.common.usermodel.GenericRecord; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.util.GenericRecordUtil; /** * <p>Common conversion functions between Excel style A1, C27 style @@ -41,7 +45,7 @@ import org.apache.poi.ss.usermodel.Cell; * of a cell comment). * <tt>CellReference</tt>s have a concept of "sheet", while <tt>CellAddress</tt>es do not.</p> */ -public class CellReference { +public class CellReference implements GenericRecord { /** * Used to classify identifiers found in formulas as cell references or not. */ @@ -587,4 +591,16 @@ public class CellReference { public int hashCode() { return Objects.hash(_rowIndex,_colIndex,_isRowAbs,_isColAbs,_sheetName); } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return GenericRecordUtil.getGenericProperties( + "sheetName", this::getSheetName, + "rowIndex", this::getRow, + "colIndex", this::getCol, + "rowAbs", this::isRowAbsolute, + "colAbs", this::isColAbsolute, + "formatAsString", this::formatAsString + ); + } } Modified: poi/trunk/src/java/org/apache/poi/util/BitField.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/BitField.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/util/BitField.java (original) +++ poi/trunk/src/java/org/apache/poi/util/BitField.java Sun Apr 12 22:03:52 2020 @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.util; @@ -317,5 +317,10 @@ public class BitField return flag ? setByte(holder) : clearByte(holder); } -} // end public class BitField + + + public int getMask() { + return _mask; + } +} Modified: poi/trunk/src/java/org/apache/poi/util/GenericRecordJsonWriter.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/GenericRecordJsonWriter.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/util/GenericRecordJsonWriter.java (original) +++ poi/trunk/src/java/org/apache/poi/util/GenericRecordJsonWriter.java Sun Apr 12 22:03:52 2020 @@ -73,7 +73,7 @@ public class GenericRecordJsonWriter imp boolean print(GenericRecordJsonWriter record, String name, Object object); } - private static final List<Map.Entry<Class,GenericRecordHandler>> handler = new ArrayList<>(); + private static final List<Map.Entry<Class<?>,GenericRecordHandler>> handler = new ArrayList<>(); static { char[] t = new char[255]; @@ -96,7 +96,7 @@ public class GenericRecordJsonWriter imp handler(Object.class, GenericRecordJsonWriter::printObject); } - private static void handler(Class c, GenericRecordHandler printer) { + private static void handler(Class<?> c, GenericRecordHandler printer) { handler.add(new AbstractMap.SimpleEntry<>(c,printer)); } @@ -147,7 +147,7 @@ public class GenericRecordJsonWriter imp public void write(GenericRecord record) { final String tabs = tabs(); - Enum type = record.getGenericRecordType(); + Enum<?> type = record.getGenericRecordType(); String recordName = (type != null) ? type.name() : record.getClass().getSimpleName(); fw.append(tabs); fw.append("{"); @@ -241,7 +241,7 @@ public class GenericRecordJsonWriter imp return result; } - protected static boolean matchInstanceOrArray(Class key, Object instance) { + protected static boolean matchInstanceOrArray(Class<?> key, Object instance) { return key.isInstance(instance) || (Array.class.equals(key) && instance.getClass().isArray()); } @@ -302,8 +302,7 @@ public class GenericRecordJsonWriter imp fw.println("["); int oldChildIndex = childIndex; childIndex = 0; - //noinspection unchecked - ((List)o).forEach(e -> { writeValue(null, e); childIndex++; }); + ((List<?>)o).forEach(e -> { writeValue(null, e); childIndex++; }); childIndex = oldChildIndex; fw.write(tabs() + "\t]"); return true; @@ -533,7 +532,7 @@ public class GenericRecordJsonWriter imp if (holdBack != null) { if (appender != null) { appender.append(holdBack); - } else { + } else if (writer != null) { writer.write(holdBack); } holdBack = null; @@ -541,7 +540,7 @@ public class GenericRecordJsonWriter imp if (appender != null) { appender.append(String.valueOf(cbuf), off, len); - } else { + } else if (writer != null) { writer.write(cbuf, off, len); } } Modified: poi/trunk/src/java/org/apache/poi/util/GenericRecordUtil.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/GenericRecordUtil.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/util/GenericRecordUtil.java (original) +++ poi/trunk/src/java/org/apache/poi/util/GenericRecordUtil.java Sun Apr 12 22:03:52 2020 @@ -19,6 +19,7 @@ package org.apache.poi.util; +import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -38,7 +39,7 @@ public final class GenericRecordUtil { String val1, Supplier<?> sup1, String val2, Supplier<?> sup2 ) { - return getGenericProperties(val1, sup1, val2, sup2, null, null, null, null, null, null, null, null); + return getGenericProperties(val1, sup1, val2, sup2, null, null, null, null, null, null, null, null, null, null, null, null, null, null); } public static Map<String, Supplier<?>> getGenericProperties( @@ -46,7 +47,7 @@ public final class GenericRecordUtil { String val2, Supplier<?> sup2, String val3, Supplier<?> sup3 ) { - return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, null, null, null, null, null, null); + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, null, null, null, null, null, null, null, null, null, null, null, null); } public static Map<String, Supplier<?>> getGenericProperties( @@ -55,7 +56,7 @@ public final class GenericRecordUtil { String val3, Supplier<?> sup3, String val4, Supplier<?> sup4 ) { - return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, null, null, null, null); + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, null, null, null, null, null, null, null, null, null, null); } @@ -66,7 +67,7 @@ public final class GenericRecordUtil { String val4, Supplier<?> sup4, String val5, Supplier<?> sup5 ) { - return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, val5, sup5, null, null); + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, val5, sup5, null, null, null, null, null, null, null, null); } public static Map<String, Supplier<?>> getGenericProperties( @@ -77,10 +78,49 @@ public final class GenericRecordUtil { String val5, Supplier<?> sup5, String val6, Supplier<?> sup6 ) { + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, val5, sup5, val6, sup6, null, null, null, null, null, null); + } + + public static Map<String, Supplier<?>> getGenericProperties( + String val1, Supplier<?> sup1, + String val2, Supplier<?> sup2, + String val3, Supplier<?> sup3, + String val4, Supplier<?> sup4, + String val5, Supplier<?> sup5, + String val6, Supplier<?> sup6, + String val7, Supplier<?> sup7 + ) { + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, val5, sup5, val6, sup6, val7, sup7, null, null, null, null); + } + + public static Map<String, Supplier<?>> getGenericProperties( + String val1, Supplier<?> sup1, + String val2, Supplier<?> sup2, + String val3, Supplier<?> sup3, + String val4, Supplier<?> sup4, + String val5, Supplier<?> sup5, + String val6, Supplier<?> sup6, + String val7, Supplier<?> sup7, + String val8, Supplier<?> sup8 + ) { + return getGenericProperties(val1, sup1, val2, sup2, val3, sup3, val4, sup4, val5, sup5, val6, sup6, val7, sup7, val8, sup8, null, null); + } + + public static Map<String, Supplier<?>> getGenericProperties( + String val1, Supplier<?> sup1, + String val2, Supplier<?> sup2, + String val3, Supplier<?> sup3, + String val4, Supplier<?> sup4, + String val5, Supplier<?> sup5, + String val6, Supplier<?> sup6, + String val7, Supplier<?> sup7, + String val8, Supplier<?> sup8, + String val9, Supplier<?> sup9 + ) { final Map<String,Supplier<?>> m = new LinkedHashMap<>(); - final String[] vals = { val1, val2, val3, val4, val5, val6 }; - final Supplier<?>[] sups = { sup1, sup2, sup3, sup4, sup5, sup6 }; + final String[] vals = { val1, val2, val3, val4, val5, val6, val7, val8, val9 }; + final Supplier<?>[] sups = { sup1, sup2, sup3, sup4, sup5, sup6, sup7, sup8, sup9 }; for (int i=0; i<vals.length && vals[i] != null; i++) { assert(sups[i] != null); @@ -97,15 +137,20 @@ public final class GenericRecordUtil { return Collections.unmodifiableMap(m); } - public static <T extends Enum> Supplier<T> safeEnum(T[] values, Supplier<Number> ordinal) { + public static <T extends Enum<?>> Supplier<T> safeEnum(T[] values, Supplier<Number> ordinal) { return safeEnum(values, ordinal, null); } - public static <T extends Enum> Supplier<T> safeEnum(T[] values, Supplier<Number> ordinal, T defaultVal) { + public static <T extends Enum<?>> Supplier<T> safeEnum(T[] values, Supplier<Number> ordinal, T defaultVal) { int ord = ordinal.get().intValue(); return () -> (0 <= ord && ord < values.length) ? values[ord] : defaultVal; } + public static Supplier<AnnotatedFlag> getBitsAsString(Supplier<Number> flags, final BitField[] masks, final String[] names) { + int[] iMasks = Arrays.stream(masks).mapToInt(BitField::getMask).toArray(); + return () -> new AnnotatedFlag(flags, iMasks, names, false); + } + public static Supplier<AnnotatedFlag> getBitsAsString(Supplier<Number> flags, final int[] masks, final String[] names) { return () -> new AnnotatedFlag(flags, masks, names, false); } Modified: poi/trunk/src/java/org/apache/poi/util/IntMapper.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/IntMapper.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/java/org/apache/poi/util/IntMapper.java (original) +++ poi/trunk/src/java/org/apache/poi/util/IntMapper.java Sun Apr 12 22:03:52 2020 @@ -94,4 +94,8 @@ public class IntMapper<T> implements Dup public IntMapper<T> copy() { return new IntMapper<>(this); } + + public List<T> getElements() { + return elements; + } } \ No newline at end of file Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/chart/AllChartRecordTests.java URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/chart/AllChartRecordTests.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/testcases/org/apache/poi/hssf/record/chart/AllChartRecordTests.java (original) +++ poi/trunk/src/testcases/org/apache/poi/hssf/record/chart/AllChartRecordTests.java Sun Apr 12 22:03:52 2020 @@ -56,7 +56,6 @@ import org.junit.runners.Suite; TestSeriesListRecord.class, TestSeriesRecord.class, TestSeriesTextRecord.class, - TestSeriesToChartGroupRecord.class, TestSheetPropertiesRecord.class, TestTextRecord.class, TestTickRecord.class, Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java (original) +++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFWorkbook.java Sun Apr 12 22:03:52 2020 @@ -36,6 +36,8 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.function.Supplier; import org.apache.poi.POIDataSamples; import org.apache.poi.ddf.EscherBSERecord; @@ -47,6 +49,7 @@ import org.apache.poi.hssf.model.HSSFFor import org.apache.poi.hssf.model.InternalSheet; import org.apache.poi.hssf.model.InternalWorkbook; import org.apache.poi.hssf.record.CFRuleRecord; +import org.apache.poi.hssf.record.HSSFRecordTypes; import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.RecordBase; @@ -507,6 +510,16 @@ public final class TestHSSFWorkbook exte public BadlyBehavedRecord copy() { return null; } + + @Override + public HSSFRecordTypes getGenericRecordType() { + return null; + } + + @Override + public Map<String, Supplier<?>> getGenericProperties() { + return null; + } } /** Modified: poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestArrayPtg.java URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestArrayPtg.java?rev=1876433&r1=1876432&r2=1876433&view=diff ============================================================================== --- poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestArrayPtg.java (original) +++ poi/trunk/src/testcases/org/apache/poi/ss/formula/ptg/TestArrayPtg.java Sun Apr 12 22:03:52 2020 @@ -49,7 +49,7 @@ public final class TestArrayPtg { }; private static ArrayPtg create(byte[] initialData, byte[] constantData) { - ArrayPtg.Initial ptgInit = new ArrayPtg.Initial(TestcaseRecordInputStream.createLittleEndian(initialData)); + ArrayInitialPtg ptgInit = new ArrayInitialPtg(TestcaseRecordInputStream.createLittleEndian(initialData)); return ptgInit.finishReading(TestcaseRecordInputStream.createLittleEndian(constantData)); } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org For additional commands, e-mail: commits-h...@poi.apache.org