Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartObjectRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartObjectRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartObjectRecord.java 
(original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartStartObjectRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 
 /**
@@ -74,23 +78,25 @@ public final class ChartStartObjectRecor
                out.writeShort(iObjectInstance2);
        }
 
-       public String toString() {
-
-               StringBuilder buffer = new StringBuilder();
+       @Override
+       public ChartStartObjectRecord copy() {
+               return new ChartStartObjectRecord(this);
+       }
 
-               buffer.append("[STARTOBJECT]\n");
-               buffer.append("    .rt              
=").append(HexDump.shortToHex(rt)).append('\n');
-               buffer.append("    .grbitFrt        
=").append(HexDump.shortToHex(grbitFrt)).append('\n');
-               buffer.append("    .iObjectKind     
=").append(HexDump.shortToHex(iObjectKind)).append('\n');
-               buffer.append("    .iObjectContext  
=").append(HexDump.shortToHex(iObjectContext)).append('\n');
-               buffer.append("    
.iObjectInstance1=").append(HexDump.shortToHex(iObjectInstance1)).append('\n');
-               buffer.append("    
.iObjectInstance2=").append(HexDump.shortToHex(iObjectInstance2)).append('\n');
-               buffer.append("[/STARTOBJECT]\n");
-               return buffer.toString();
+       @Override
+       public HSSFRecordTypes getGenericRecordType() {
+               return HSSFRecordTypes.CHART_START_OBJECT;
        }
 
        @Override
-       public ChartStartObjectRecord copy() {
-               return new ChartStartObjectRecord(this);
+       public Map<String, Supplier<?>> getGenericProperties() {
+               return GenericRecordUtil.getGenericProperties(
+                       "rt", () -> rt,
+                       "grbitFrt", () -> grbitFrt,
+                       "iObjectKind", () -> iObjectKind,
+                       "iObjectContext", () -> iObjectContext,
+                       "iObjectInstance1", () -> iObjectInstance1,
+                       "iObjectInstance2", () -> iObjectInstance2
+               );
        }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartTitleFormatRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartTitleFormatRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartTitleFormatRecord.java 
(original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartTitleFormatRecord.java 
Sun Apr 12 22:03:52 2020
@@ -20,10 +20,15 @@
  */
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
 import java.util.stream.Stream;
 
+import org.apache.poi.common.usermodel.GenericRecord;
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 
 /**
@@ -35,7 +40,7 @@ public class ChartTitleFormatRecord exte
 
        private final CTFormat[] _formats;
 
-       private static final class CTFormat {
+       private static final class CTFormat implements GenericRecord {
                public static final int ENCODED_SIZE=4;
                private int _offset;
                private int _fontIndex;
@@ -64,6 +69,14 @@ public class ChartTitleFormatRecord exte
                        out.writeShort(_offset);
                        out.writeShort(_fontIndex);
                }
+
+               @Override
+               public Map<String, Supplier<?>> getGenericProperties() {
+                       return GenericRecordUtil.getGenericProperties(
+                               "offset", this::getOffset,
+                               "fontIndex", this::getFontIndex
+                       );
+               }
        }
 
        public ChartTitleFormatRecord(ChartTitleFormatRecord other) {
@@ -82,9 +95,9 @@ public class ChartTitleFormatRecord exte
 
        public void serialize(LittleEndianOutput out) {
         out.writeShort(_formats.length);
-        for(int i=0; i<_formats.length; i++){
-            _formats[i].serialize(out);
-        }
+               for (CTFormat format : _formats) {
+                       format.serialize(out);
+               }
     }
 
     protected int getDataSize() {
@@ -112,23 +125,18 @@ public class ChartTitleFormatRecord exte
                }
        }
 
-       public String toString() {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[CHARTTITLEFORMAT]\n");
-        buffer.append("    .format_runs       = 
").append(_formats.length).append("\n");
-        for(int i=0; i<_formats.length; i++) {
-            CTFormat ctf = _formats[i];
-               buffer.append("       .char_offset= ").append(ctf.getOffset());
-               buffer.append(",.fontidx= ").append(ctf.getFontIndex());
-            buffer.append("\n");
-        }
-        buffer.append("[/CHARTTITLEFORMAT]\n");
-        return buffer.toString();
-    }
-
        @Override
        public ChartTitleFormatRecord copy() {
                return new ChartTitleFormatRecord(this);
        }
+
+       @Override
+       public HSSFRecordTypes getGenericRecordType() {
+               return HSSFRecordTypes.CHART_TITLE_FORMAT;
+       }
+
+       @Override
+       public Map<String, Supplier<?>> getGenericProperties() {
+               return GenericRecordUtil.getGenericProperties("formats", () -> 
_formats);
+       }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/DatRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/DatRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/DatRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/DatRecord.java Sun Apr 
12 22:03:52 2020
@@ -17,11 +17,15 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -49,24 +53,6 @@ public final class DatRecord extends Sta
         field_1_options = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[DAT]\n");
-        buffer.append("    .options              = ")
-            .append("0x").append(HexDump.toHex(  getOptions ()))
-            .append(" (").append( getOptions() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .horizontalBorder         = 
").append(isHorizontalBorder()).append('\n');
-        buffer.append("         .verticalBorder           = 
").append(isVerticalBorder()).append('\n');
-        buffer.append("         .border                   = 
").append(isBorder()).append('\n');
-        buffer.append("         .showSeriesKey            = 
").append(isShowSeriesKey()).append('\n');
-
-        buffer.append("[/DAT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_options);
     }
@@ -81,7 +67,7 @@ public final class DatRecord extends Sta
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public DatRecord clone() {
@@ -180,4 +166,20 @@ public final class DatRecord extends Sta
     {
         return showSeriesKey.isSet(field_1_options);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.DAT;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "options", this::getOptions,
+            "horizontalBorder", this::isHorizontalBorder,
+            "verticalBorder", this::isVerticalBorder,
+            "border", this::isBorder,
+            "showSeriesKey", this::isShowSeriesKey
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataFormatRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataFormatRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataFormatRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataFormatRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,11 +17,15 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -55,33 +59,6 @@ public final class DataFormatRecord exte
         field_4_formatFlags = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[DATAFORMAT]\n");
-        buffer.append("    .pointNumber          = ")
-            .append("0x").append(HexDump.toHex(  getPointNumber ()))
-            .append(" (").append( getPointNumber() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .seriesIndex          = ")
-            .append("0x").append(HexDump.toHex(  getSeriesIndex ()))
-            .append(" (").append( getSeriesIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .seriesNumber         = ")
-            .append("0x").append(HexDump.toHex(  getSeriesNumber ()))
-            .append(" (").append( getSeriesNumber() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .formatFlags          = ")
-            .append("0x").append(HexDump.toHex(  getFormatFlags ()))
-            .append(" (").append( getFormatFlags() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .useExcel4Colors          = 
").append(isUseExcel4Colors()).append('\n');
-
-        buffer.append("[/DATAFORMAT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_pointNumber);
         out.writeShort(field_2_seriesIndex);
@@ -99,7 +76,7 @@ public final class DataFormatRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public DataFormatRecord clone() {
@@ -192,4 +169,21 @@ public final class DataFormatRecord exte
     {
         return useExcel4Colors.isSet(field_4_formatFlags);
     }
+
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.DATA_FORMAT;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "pointNumber", this::getPointNumber,
+            "seriesIndex", this::getSeriesIndex,
+            "seriesNumber", this::getSeriesNumber,
+            "formatFlags", this::getFormatFlags,
+            "useExcel4Colors", this::isUseExcel4Colors
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataLabelExtensionRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataLabelExtensionRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataLabelExtensionRecord.java
 (original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DataLabelExtensionRecord.java
 Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 
 /**
@@ -63,20 +67,21 @@ public final class DataLabelExtensionRec
        }
 
        @Override
-       public String toString() {
-               StringBuilder buffer = new StringBuilder();
-
-               buffer.append("[DATALABEXT]\n");
-               buffer.append("    .rt      
=").append(HexDump.shortToHex(rt)).append('\n');
-               buffer.append("    
.grbitFrt=").append(HexDump.shortToHex(grbitFrt)).append('\n');
-               buffer.append("    .unused  
=").append(HexDump.toHex(unused)).append('\n');
+       public DataLabelExtensionRecord copy() {
+               return new DataLabelExtensionRecord(this);
+       }
 
-               buffer.append("[/DATALABEXT]\n");
-               return buffer.toString();
+       @Override
+       public HSSFRecordTypes getGenericRecordType() {
+               return HSSFRecordTypes.DATA_LABEL_EXTENSION;
        }
 
        @Override
-       public DataLabelExtensionRecord copy() {
-               return new DataLabelExtensionRecord(this);
+       public Map<String, Supplier<?>> getGenericProperties() {
+               return GenericRecordUtil.getGenericProperties(
+                       "rt", () -> rt,
+                       "grbitFrt", () -> grbitFrt,
+                       "unused", () -> unused
+               );
        }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DefaultDataLabelTextPropertiesRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/DefaultDataLabelTextPropertiesRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DefaultDataLabelTextPropertiesRecord.java
 (original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/DefaultDataLabelTextPropertiesRecord.java
 Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -45,20 +49,6 @@ public final class DefaultDataLabelTextP
         field_1_categoryDataType = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[DEFAULTTEXT]\n");
-        buffer.append("    .categoryDataType     = ")
-            .append("0x").append(HexDump.toHex(  getCategoryDataType ()))
-            .append(" (").append( getCategoryDataType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/DEFAULTTEXT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_categoryDataType);
     }
@@ -73,7 +63,7 @@ public final class DefaultDataLabelTextP
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public DefaultDataLabelTextPropertiesRecord clone() {
@@ -111,4 +101,16 @@ public final class DefaultDataLabelTextP
     {
         this.field_1_categoryDataType = field_1_categoryDataType;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.DEFAULT_DATA_LABEL_TEXT_PROPERTIES;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "categoryDataType", this::getCategoryDataType
+        );
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/EndRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/EndRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/EndRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/EndRecord.java Sun Apr 
12 22:03:52 2020
@@ -17,6 +17,10 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.LittleEndianOutput;
@@ -40,15 +44,6 @@ public final class EndRecord extends Sta
     public EndRecord(RecordInputStream in) {
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[END]\n");
-        buffer.append("[/END]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
     }
 
@@ -62,7 +57,7 @@ public final class EndRecord extends Sta
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public EndRecord clone() {
@@ -74,4 +69,14 @@ public final class EndRecord extends Sta
         // No data so nothing to copy
        return new EndRecord();
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.END;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return null;
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontBasisRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontBasisRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontBasisRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontBasisRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -53,36 +57,6 @@ public final class FontBasisRecord exten
         field_5_indexToFontTable       = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[FBI]\n");
-        buffer.append("    .xBasis               = ")
-            .append("0x").append(HexDump.toHex(  getXBasis ()))
-            .append(" (").append( getXBasis() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .yBasis               = ")
-            .append("0x").append(HexDump.toHex(  getYBasis ()))
-            .append(" (").append( getYBasis() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .heightBasis          = ")
-            .append("0x").append(HexDump.toHex(  getHeightBasis ()))
-            .append(" (").append( getHeightBasis() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .scale                = ")
-            .append("0x").append(HexDump.toHex(  getScale ()))
-            .append(" (").append( getScale() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .indexToFontTable     = ")
-            .append("0x").append(HexDump.toHex(  getIndexToFontTable ()))
-            .append(" (").append( getIndexToFontTable() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/FBI]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_xBasis);
         out.writeShort(field_2_yBasis);
@@ -101,7 +75,7 @@ public final class FontBasisRecord exten
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public FontBasisRecord clone() {
@@ -192,4 +166,20 @@ public final class FontBasisRecord exten
     {
         this.field_5_indexToFontTable = field_5_indexToFontTable;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.FONT_BASIS;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "xBasis", this::getXBasis,
+            "yBasis", this::getYBasis,
+            "heightBasis", this::getHeightBasis,
+            "scale", this::getScale,
+            "indexToFontTable", this::getIndexToFontTable
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontIndexRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontIndexRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontIndexRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/FontIndexRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -39,20 +43,6 @@ public final class FontIndexRecord exten
         field_1_fontIndex = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[FONTX]\n");
-        buffer.append("    .fontIndex            = ")
-            .append("0x").append(HexDump.toHex(  getFontIndex ()))
-            .append(" (").append( getFontIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/FONTX]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_fontIndex);
     }
@@ -67,7 +57,7 @@ public final class FontIndexRecord exten
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public FontIndexRecord clone() {
@@ -97,4 +87,14 @@ public final class FontIndexRecord exten
     {
         this.field_1_fontIndex = field_1_fontIndex;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.FONT_INDEX;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties("fontIdex", 
this::getFontIndex);
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/FrameRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/FrameRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/FrameRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/FrameRecord.java Sun 
Apr 12 22:03:52 2020
@@ -17,11 +17,15 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -53,26 +57,6 @@ public final class FrameRecord extends S
         field_2_options = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[FRAME]\n");
-        buffer.append("    .borderType           = ")
-            .append("0x").append(HexDump.toHex(  getBorderType ()))
-            .append(" (").append( getBorderType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .options              = ")
-            .append("0x").append(HexDump.toHex(  getOptions ()))
-            .append(" (").append( getOptions() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .autoSize                 = 
").append(isAutoSize()).append('\n');
-        buffer.append("         .autoPosition             = 
").append(isAutoPosition()).append('\n');
-
-        buffer.append("[/FRAME]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_borderType);
         out.writeShort(field_2_options);
@@ -88,7 +72,7 @@ public final class FrameRecord extends S
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public FrameRecord clone() {
@@ -176,4 +160,19 @@ public final class FrameRecord extends S
     {
         return autoPosition.isSet(field_2_options);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.FRAME;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "borderType", this::getBorderType,
+            "options", this::getOptions,
+            "autoSize", this::isAutoSize,
+            "autoPosition", this::isAutoPosition
+        );
+    }
 }
\ No newline at end of file

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/LegendRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/LegendRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/LegendRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/LegendRecord.java Sun 
Apr 12 22:03:52 2020
@@ -17,11 +17,18 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -80,50 +87,6 @@ public final class LegendRecord extends
         field_7_options        = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[LEGEND]\n");
-        buffer.append("    .xAxisUpperLeft       = ")
-            .append("0x").append(HexDump.toHex(  getXAxisUpperLeft ()))
-            .append(" (").append( getXAxisUpperLeft() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .yAxisUpperLeft       = ")
-            .append("0x").append(HexDump.toHex(  getYAxisUpperLeft ()))
-            .append(" (").append( getYAxisUpperLeft() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .xSize                = ")
-            .append("0x").append(HexDump.toHex(  getXSize ()))
-            .append(" (").append( getXSize() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .ySize                = ")
-            .append("0x").append(HexDump.toHex(  getYSize ()))
-            .append(" (").append( getYSize() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .type                 = ")
-            .append("0x").append(HexDump.toHex(  getType ()))
-            .append(" (").append( getType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .spacing              = ")
-            .append("0x").append(HexDump.toHex(  getSpacing ()))
-            .append(" (").append( getSpacing() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .options              = ")
-            .append("0x").append(HexDump.toHex(  getOptions ()))
-            .append(" (").append( getOptions() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .autoPosition             = 
").append(isAutoPosition()).append('\n');
-        buffer.append("         .autoSeries               = 
").append(isAutoSeries()).append('\n');
-        buffer.append("         .autoXPositioning         = 
").append(isAutoXPositioning()).append('\n');
-        buffer.append("         .autoYPositioning         = 
").append(isAutoYPositioning()).append('\n');
-        buffer.append("         .vertical                 = 
").append(isVertical()).append('\n');
-        buffer.append("         .dataTable                = 
").append(isDataTable()).append('\n');
-
-        buffer.append("[/LEGEND]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeInt(field_1_xAxisUpperLeft);
         out.writeInt(field_2_yAxisUpperLeft);
@@ -144,7 +107,7 @@ public final class LegendRecord extends
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public LegendRecord clone() {
@@ -406,4 +369,29 @@ public final class LegendRecord extends
     {
         return dataTable.isSet(field_7_options);
     }
+
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.LEGEND;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "xAxisUpperLeft", this::getXAxisUpperLeft,
+            "yAxisUpperLeft", this::getYAxisUpperLeft,
+            "xSize", this::getXSize,
+            "ySize", this::getYSize,
+            "type", getEnumBitsAsString(this::getType,
+                new int[]{TYPE_BOTTOM, TYPE_CORNER, TYPE_TOP, TYPE_RIGHT, 
TYPE_LEFT, TYPE_UNDOCKED},
+                new 
String[]{"BOTTOM","CORNER","TOP","RIGHT","LEFT","UNDOCKED"}),
+            "spacing", getEnumBitsAsString(this::getSpacing,
+                new int[]{SPACING_CLOSE, SPACING_MEDIUM, SPACING_OPEN},
+                new String[]{"CLOSE","MEDIUM","OPEN"}),
+            "options", getBitsAsString(this::getOptions,
+                new BitField[]{autoPosition, autoSeries, autoXPositioning, 
autoYPositioning, vertical, dataTable},
+                new 
String[]{"AUTO_POSITION","AUTO_SERIES","AUTO_X_POSITIONING","AUTO_Y_POSITIONING","VERTICAL","DATA_TABLE"})
+        );
+     }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/LineFormatRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/LineFormatRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/LineFormatRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/LineFormatRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,11 +17,18 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -77,39 +84,6 @@ public final class LineFormatRecord exte
         field_5_colourPaletteIndex = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[LINEFORMAT]\n");
-        buffer.append("    .lineColor            = ")
-            .append("0x").append(HexDump.toHex(  getLineColor ()))
-            .append(" (").append( getLineColor() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .linePattern          = ")
-            .append("0x").append(HexDump.toHex(  getLinePattern ()))
-            .append(" (").append( getLinePattern() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .weight               = ")
-            .append("0x").append(HexDump.toHex(  getWeight ()))
-            .append(" (").append( getWeight() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .format               = ")
-            .append("0x").append(HexDump.toHex(  getFormat ()))
-            .append(" (").append( getFormat() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .auto                     = 
").append(isAuto()).append('\n');
-        buffer.append("         .drawTicks                = 
").append(isDrawTicks()).append('\n');
-        buffer.append("         .unknown                  = 
").append(isUnknown()).append('\n');
-        buffer.append("    .colourPaletteIndex   = ")
-            .append("0x").append(HexDump.toHex(  getColourPaletteIndex ()))
-            .append(" (").append( getColourPaletteIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/LINEFORMAT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeInt(field_1_lineColor);
         out.writeShort(field_2_linePattern);
@@ -128,7 +102,7 @@ public final class LineFormatRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public LineFormatRecord clone() {
@@ -309,4 +283,27 @@ public final class LineFormatRecord exte
     {
         return unknown.isSet(field_4_format);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.LINE_FORMAT;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "lineColor", this::getLineColor,
+            "linePattern", getEnumBitsAsString(this::getLinePattern,
+                new int[]{LINE_PATTERN_SOLID, LINE_PATTERN_DASH, 
LINE_PATTERN_DOT, LINE_PATTERN_DASH_DOT,
+                        LINE_PATTERN_DASH_DOT_DOT, LINE_PATTERN_NONE, 
LINE_PATTERN_DARK_GRAY_PATTERN,
+                        LINE_PATTERN_MEDIUM_GRAY_PATTERN, 
LINE_PATTERN_LIGHT_GRAY_PATTERN},
+                new 
String[]{"SOLID","DASH","DOT","DASH_DOT","DASH_DOT_DOT","NONE","DARK_GRAY_PATTERN","MEDIUM_GRAY_PATTERN","LIGHT_GRAY_PATTERN"}),
+            "weight", getEnumBitsAsString(this::getWeight,
+                new int[]{WEIGHT_HAIRLINE, WEIGHT_NARROW, WEIGHT_MEDIUM, 
WEIGHT_WIDE},
+                new String[]{"HAIRLINE","NARROW","MEDIUM","WIDE"}),
+            "format", getBitsAsString(this::getFormat,
+                new BitField[]{auto,drawTicks,unknown},new 
String[]{"AUTO","DRAWTICKS","UNKNOWN"}),
+            "colourPaletteIndex", this::getColourPaletteIndex
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,13 +17,19 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.ss.formula.Formula;
 import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -73,26 +79,6 @@ public final class LinkedDataRecord exte
         field_5_formulaOfLink = Formula.read(encodedTokenLen, in);
     }
 
-    public String toString() {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[AI]\n");
-        buffer.append("    .linkType             = 
").append(HexDump.byteToHex(getLinkType())).append('\n');
-        buffer.append("    .referenceType        = 
").append(HexDump.byteToHex(getReferenceType())).append('\n');
-        buffer.append("    .options              = 
").append(HexDump.shortToHex(getOptions())).append('\n');
-        buffer.append("    .customNumberFormat   = 
").append(isCustomNumberFormat()).append('\n');
-        buffer.append("    .indexNumberFmtRecord = 
").append(HexDump.shortToHex(getIndexNumberFmtRecord())).append('\n');
-        buffer.append("    .formulaOfLink        = ").append('\n');
-        Ptg[] ptgs = field_5_formulaOfLink.getTokens();
-        for (int i = 0; i < ptgs.length; i++) {
-            Ptg ptg = ptgs[i];
-            buffer.append(ptg).append(ptg.getRVAType()).append('\n');
-        }
-
-        buffer.append("[/AI]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeByte(field_1_linkType);
         out.writeByte(field_2_referenceType);
@@ -110,7 +96,7 @@ public final class LinkedDataRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public LinkedDataRecord clone() {
@@ -246,4 +232,25 @@ public final class LinkedDataRecord exte
     {
         return customNumberFormat.isSet(field_3_options);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.LINKED_DATA;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "linkType", getEnumBitsAsString(this::getLinkType,
+                new 
int[]{LINK_TYPE_TITLE_OR_TEXT,LINK_TYPE_VALUES,LINK_TYPE_CATEGORIES,LINK_TYPE_SECONDARY_CATEGORIES},
+                new 
String[]{"TITLE_OR_TEXT","VALUES","CATEGORIES","SECONDARY_CATEGORIES"}),
+            "referenceType", getEnumBitsAsString(this::getReferenceType,
+                new int[]{REFERENCE_TYPE_DEFAULT_CATEGORIES, 
REFERENCE_TYPE_DIRECT, REFERENCE_TYPE_WORKSHEET, REFERENCE_TYPE_NOT_USED, 
REFERENCE_TYPE_ERROR_REPORTED},
+                new 
String[]{"DEFAULT_CATEGORIES","DIRECT","WORKSHEET","NOT_USED","ERROR_REPORTED"}),
+            "options", this::getOptions,
+            "customNumberFormat", this::isCustomNumberFormat,
+            "indexNumberFmtRecord", this::getIndexNumberFmtRecord,
+            "formulaOfLink", () -> field_5_formulaOfLink
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/NumberFormatIndexRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/NumberFormatIndexRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/NumberFormatIndexRecord.java
 (original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/NumberFormatIndexRecord.java
 Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -42,20 +46,6 @@ public final class NumberFormatIndexReco
         field_1_formatIndex = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[IFMT]\n");
-        buffer.append("    .formatIndex          = ")
-            .append("0x").append(HexDump.toHex(  getFormatIndex ()))
-            .append(" (").append( getFormatIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/IFMT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_formatIndex);
     }
@@ -70,7 +60,7 @@ public final class NumberFormatIndexReco
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public NumberFormatIndexRecord clone() {
@@ -97,4 +87,14 @@ public final class NumberFormatIndexReco
     {
         this.field_1_formatIndex = field_1_formatIndex;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.NUMBER_FORMAT_INDEX;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties("formatIndex", 
this::getFormatIndex);
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/ObjectLinkRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/ObjectLinkRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/ObjectLinkRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/ObjectLinkRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,15 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -54,28 +60,6 @@ public final class ObjectLinkRecord exte
         field_3_link2 = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[OBJECTLINK]\n");
-        buffer.append("    .anchorId             = ")
-            .append("0x").append(HexDump.toHex(  getAnchorId ()))
-            .append(" (").append( getAnchorId() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .link1                = ")
-            .append("0x").append(HexDump.toHex(  getLink1 ()))
-            .append(" (").append( getLink1() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .link2                = ")
-            .append("0x").append(HexDump.toHex(  getLink2 ()))
-            .append(" (").append( getLink2() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/OBJECTLINK]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_anchorId);
         out.writeShort(field_2_link1);
@@ -92,7 +76,7 @@ public final class ObjectLinkRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public ObjectLinkRecord clone() {
@@ -166,4 +150,20 @@ public final class ObjectLinkRecord exte
     {
         this.field_3_link2 = field_3_link2;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.OBJECT_LINK;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "anchorId", getEnumBitsAsString(this::getAnchorId,
+                new int[]{ANCHOR_ID_CHART_TITLE, ANCHOR_ID_Y_AXIS, 
ANCHOR_ID_X_AXIS, ANCHOR_ID_SERIES_OR_POINT, ANCHOR_ID_Z_AXIS},
+                new 
String[]{"CHART_TITLE","Y_AXIS","X_AXIS","SERIES_OR_POINT","Z_AXIS"}),
+            "link1", this::getLink1,
+            "link2", this::getLink2
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotAreaRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotAreaRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotAreaRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotAreaRecord.java Sun 
Apr 12 22:03:52 2020
@@ -17,6 +17,10 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.LittleEndianOutput;
@@ -35,16 +39,6 @@ public final class PlotAreaRecord extend
      */
     public PlotAreaRecord(RecordInputStream in) {}
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[PLOTAREA]\n");
-
-        buffer.append("[/PLOTAREA]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
     }
 
@@ -58,7 +52,7 @@ public final class PlotAreaRecord extend
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public PlotAreaRecord clone() {
@@ -69,4 +63,14 @@ public final class PlotAreaRecord extend
     public PlotAreaRecord copy() {
         return new PlotAreaRecord();
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.PLOT_AREA;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return null;
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotGrowthRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotGrowthRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotGrowthRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/PlotGrowthRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -44,24 +48,6 @@ public final class PlotGrowthRecord exte
         field_2_verticalScale = in.readInt();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[PLOTGROWTH]\n");
-        buffer.append("    .horizontalScale      = ")
-            .append("0x").append(HexDump.toHex(  getHorizontalScale ()))
-            .append(" (").append( getHorizontalScale() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .verticalScale        = ")
-            .append("0x").append(HexDump.toHex(  getVerticalScale ()))
-            .append(" (").append( getVerticalScale() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/PLOTGROWTH]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeInt(field_1_horizontalScale);
         out.writeInt(field_2_verticalScale);
@@ -77,7 +63,7 @@ public final class PlotGrowthRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public PlotGrowthRecord clone() {
@@ -119,4 +105,18 @@ public final class PlotGrowthRecord exte
     {
         this.field_2_verticalScale = field_2_verticalScale;
     }
+
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.PLOT_GROWTH;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "horizontalScale", this::getHorizontalScale,
+            "verticalScale", this::getVerticalScale
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesChartGroupIndexRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesChartGroupIndexRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesChartGroupIndexRecord.java
 (original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesChartGroupIndexRecord.java
 Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -42,20 +46,6 @@ public final class SeriesChartGroupIndex
         field_1_chartGroupIndex = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[SERTOCRT]\n");
-        buffer.append("    .chartGroupIndex      = ")
-            .append("0x").append(HexDump.toHex(  getChartGroupIndex ()))
-            .append(" (").append( getChartGroupIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/SERTOCRT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_chartGroupIndex);
     }
@@ -70,7 +60,7 @@ public final class SeriesChartGroupIndex
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public SeriesChartGroupIndexRecord clone() {
@@ -97,4 +87,14 @@ public final class SeriesChartGroupIndex
     {
         this.field_1_chartGroupIndex = field_1_chartGroupIndex;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SERIES_CHART_GROUP_INDEX;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties("chartGroupIndex", 
this::getChartGroupIndex);
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesIndexRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesIndexRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesIndexRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesIndexRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -41,20 +45,6 @@ public final class SeriesIndexRecord ext
         field_1_index = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[SINDEX]\n");
-        buffer.append("    .index                = ")
-            .append("0x").append(HexDump.toHex(  getIndex ()))
-            .append(" (").append( getIndex() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/SINDEX]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_index);
     }
@@ -96,4 +86,14 @@ public final class SeriesIndexRecord ext
     {
         this.field_1_index = field_1_index;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SERIES_INDEX;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties("index", this::getIndex);
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesLabelsRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesLabelsRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesLabelsRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesLabelsRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,11 +17,17 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -51,26 +57,6 @@ public final class SeriesLabelsRecord ex
         field_1_formatFlags = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[ATTACHEDLABEL]\n");
-        buffer.append("    .formatFlags          = ")
-            .append("0x").append(HexDump.toHex(  getFormatFlags ()))
-            .append(" (").append( getFormatFlags() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .showActual               = 
").append(isShowActual()).append('\n');
-        buffer.append("         .showPercent              = 
").append(isShowPercent()).append('\n');
-        buffer.append("         .labelAsPercentage        = 
").append(isLabelAsPercentage()).append('\n');
-        buffer.append("         .smoothedLine             = 
").append(isSmoothedLine()).append('\n');
-        buffer.append("         .showLabel                = 
").append(isShowLabel()).append('\n');
-        buffer.append("         .showBubbleSizes          = 
").append(isShowBubbleSizes()).append('\n');
-
-        buffer.append("[/ATTACHEDLABEL]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_formatFlags);
     }
@@ -85,7 +71,7 @@ public final class SeriesLabelsRecord ex
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public SeriesLabelsRecord clone() {
@@ -220,4 +206,17 @@ public final class SeriesLabelsRecord ex
     {
         return showBubbleSizes.isSet(field_1_formatFlags);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SERIES_LABELS;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "formatFlags", getBitsAsString(this::getFormatFlags,
+                new 
BitField[]{showActual,showPercent,labelAsPercentage,smoothedLine,showLabel,showBubbleSizes},
+                new 
String[]{"SHOW_ACTUAL","SHOW_PERCENT","LABEL_AS_PERCENTAGE","SMOOTHED_LINE","SHOW_LABEL","SHOW_BUBBLE_SIZES"}));
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesListRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesListRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesListRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesListRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,10 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
-import java.util.Arrays;
+import java.util.Map;
+import java.util.function.Supplier;
 
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -55,24 +58,13 @@ public final class SeriesListRecord exte
         field_1_seriesNumbers = ss;
     }
 
-    public String toString() {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[SERIESLIST]\n");
-        buffer.append("    .seriesNumbers= ").append(" (").append( 
Arrays.toString(getSeriesNumbers()) ).append(" )");
-        buffer.append("\n");
-
-        buffer.append("[/SERIESLIST]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
 
         int nItems = field_1_seriesNumbers.length;
         out.writeShort(nItems);
-       for (int i = 0; i < nItems; i++) {
-               out.writeShort(field_1_seriesNumbers[i]);
-       }
+        for (short field_1_seriesNumber : field_1_seriesNumbers) {
+            out.writeShort(field_1_seriesNumber);
+        }
     }
 
     protected int getDataSize() {
@@ -84,7 +76,7 @@ public final class SeriesListRecord exte
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public SeriesListRecord clone() {
@@ -102,4 +94,14 @@ public final class SeriesListRecord exte
     public short[] getSeriesNumbers() {
         return field_1_seriesNumbers;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SERIES_LIST;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties("seriesNumbers", 
this::getSeriesNumbers);
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesRecord.java Sun 
Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -73,40 +77,6 @@ public final class SeriesRecord extends
         field_6_numBubbleValues  = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[SERIES]\n");
-        buffer.append("    .categoryDataType     = ")
-            .append("0x").append(HexDump.toHex(  getCategoryDataType ()))
-            .append(" (").append( getCategoryDataType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .valuesDataType       = ")
-            .append("0x").append(HexDump.toHex(  getValuesDataType ()))
-            .append(" (").append( getValuesDataType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .numCategories        = ")
-            .append("0x").append(HexDump.toHex(  getNumCategories ()))
-            .append(" (").append( getNumCategories() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .numValues            = ")
-            .append("0x").append(HexDump.toHex(  getNumValues ()))
-            .append(" (").append( getNumValues() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .bubbleSeriesType     = ")
-            .append("0x").append(HexDump.toHex(  getBubbleSeriesType ()))
-            .append(" (").append( getBubbleSeriesType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .numBubbleValues      = ")
-            .append("0x").append(HexDump.toHex(  getNumBubbleValues ()))
-            .append(" (").append( getNumBubbleValues() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/SERIES]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_categoryDataType);
         out.writeShort(field_2_valuesDataType);
@@ -126,7 +96,7 @@ public final class SeriesRecord extends
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public SeriesRecord clone() {
@@ -272,4 +242,21 @@ public final class SeriesRecord extends
     {
         this.field_6_numBubbleValues = field_6_numBubbleValues;
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SERIES;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "categoryDataType", this::getCategoryDataType,
+            "valuesDataType", this::getValuesDataType,
+            "numCategories", this::getNumCategories,
+            "numValues", this::getNumValues,
+            "bubbleSeriesType", this::getBubbleSeriesType,
+            "numBubbleValues", this::getNumBubbleValues
+        );
+    }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesTextRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesTextRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesTextRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/SeriesTextRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,9 +17,13 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 import org.apache.poi.util.StringUtil;
@@ -63,18 +67,6 @@ public final class SeriesTextRecord exte
                }
        }
 
-       public String toString() {
-               StringBuilder sb = new StringBuilder();
-
-               sb.append("[SERIESTEXT]\n");
-               sb.append("  .id     
=").append(HexDump.shortToHex(getId())).append('\n');
-               sb.append("  
.textLen=").append(field_4_text.length()).append('\n');
-               sb.append("  .is16bit=").append(is16bit).append('\n');
-               sb.append("  .text   =").append(" 
(").append(getText()).append(" )").append('\n');
-               sb.append("[/SERIESTEXT]\n");
-               return sb.toString();
-       }
-
        public void serialize(LittleEndianOutput out) {
 
                out.writeShort(field_1_id);
@@ -99,7 +91,7 @@ public final class SeriesTextRecord exte
        }
 
        @Override
-       @SuppressWarnings("squid:S2975")
+       @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
        @Deprecated
        @Removal(version = "5.0.0")
        public SeriesTextRecord clone() {
@@ -143,4 +135,18 @@ public final class SeriesTextRecord exte
                field_4_text = text;
                is16bit = StringUtil.hasMultibyte(text);
        }
+
+       @Override
+       public HSSFRecordTypes getGenericRecordType() {
+               return HSSFRecordTypes.SERIES_TEXT;
+       }
+
+       @Override
+       public Map<String, Supplier<?>> getGenericProperties() {
+               return GenericRecordUtil.getGenericProperties(
+                       "id", this::getId,
+                       "bit16", () -> is16bit,
+                       "text", this::getText
+               );
+       }
 }

Modified: 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SheetPropertiesRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/SheetPropertiesRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SheetPropertiesRecord.java 
(original)
+++ 
poi/trunk/src/java/org/apache/poi/hssf/record/chart/SheetPropertiesRecord.java 
Sun Apr 12 22:03:52 2020
@@ -17,11 +17,18 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
+import org.apache.poi.util.GenericRecordUtil;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -60,22 +67,6 @@ public final class SheetPropertiesRecord
         field_2_empty = in.readUShort();
     }
 
-    public String toString() {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[SHTPROPS]\n");
-        buffer.append("    .flags                = 
").append(HexDump.shortToHex(field_1_flags)).append('\n');
-        buffer.append("         .chartTypeManuallyFormatted= 
").append(isChartTypeManuallyFormatted()).append('\n');
-        buffer.append("         .plotVisibleOnly           = 
").append(isPlotVisibleOnly()).append('\n');
-        buffer.append("         .doNotSizeWithWindow       = 
").append(isDoNotSizeWithWindow()).append('\n');
-        buffer.append("         .defaultPlotDimensions     = 
").append(isDefaultPlotDimensions()).append('\n');
-        buffer.append("         .autoPlotArea              = 
").append(isAutoPlotArea()).append('\n');
-        buffer.append("    .empty                = 
").append(HexDump.shortToHex(field_2_empty)).append('\n');
-
-        buffer.append("[/SHTPROPS]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeShort(field_1_flags);
         out.writeShort(field_2_empty);
@@ -213,4 +204,21 @@ public final class SheetPropertiesRecord
     public boolean isAutoPlotArea() {
         return autoPlotArea.isSet(field_1_flags);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.SHEET_PROPERTIES;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        return GenericRecordUtil.getGenericProperties(
+            "flags", getBitsAsString(this::getFlags,
+                 new BitField[]{chartTypeManuallyFormatted, plotVisibleOnly, 
doNotSizeWithWindow, defaultPlotDimensions, autoPlotArea},
+                 new 
String[]{"CHART_TYPE_MANUALLY_FORMATTED","PLOT_VISIBLE_ONLY","DO_NOT_SIZE_WITH_WINDOW","DEFAULT_PLOT_DIMENSIONS","AUTO_PLOT_AREA"}),
+            "empty", getEnumBitsAsString(this::getEmpty,
+                 new int[]{EMPTY_NOT_PLOTTED, EMPTY_ZERO, EMPTY_INTERPOLATED},
+                 new 
String[]{"EMPTY_NOT_PLOTTED","EMPTY_ZERO","EMPTY_INTERPOLATED"})
+        );
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/TextRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/TextRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/TextRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/TextRecord.java Sun Apr 
12 22:03:52 2020
@@ -17,11 +17,19 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+import static org.apache.poi.util.GenericRecordUtil.getEnumBitsAsString;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -124,78 +132,6 @@ public final class TextRecord extends St
         field_12_textRotation       = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[TEXT]\n");
-        buffer.append("    .horizontalAlignment  = ")
-            .append("0x").append(HexDump.toHex(  getHorizontalAlignment ()))
-            .append(" (").append( getHorizontalAlignment() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .verticalAlignment    = ")
-            .append("0x").append(HexDump.toHex(  getVerticalAlignment ()))
-            .append(" (").append( getVerticalAlignment() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .displayMode          = ")
-            .append("0x").append(HexDump.toHex(  getDisplayMode ()))
-            .append(" (").append( getDisplayMode() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .rgbColor             = ")
-            .append("0x").append(HexDump.toHex(  getRgbColor ()))
-            .append(" (").append( getRgbColor() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .x                    = ")
-            .append("0x").append(HexDump.toHex(  getX ()))
-            .append(" (").append( getX() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .y                    = ")
-            .append("0x").append(HexDump.toHex(  getY ()))
-            .append(" (").append( getY() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .width                = ")
-            .append("0x").append(HexDump.toHex(  getWidth ()))
-            .append(" (").append( getWidth() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .height               = ")
-            .append("0x").append(HexDump.toHex(  getHeight ()))
-            .append(" (").append( getHeight() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .options1             = ")
-            .append("0x").append(HexDump.toHex(  getOptions1 ()))
-            .append(" (").append( getOptions1() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .autoColor                = 
").append(isAutoColor()).append('\n');
-        buffer.append("         .showKey                  = 
").append(isShowKey()).append('\n');
-        buffer.append("         .showValue                = 
").append(isShowValue()).append('\n');
-        buffer.append("         .vertical                 = 
").append(isVertical()).append('\n');
-        buffer.append("         .autoGeneratedText        = 
").append(isAutoGeneratedText()).append('\n');
-        buffer.append("         .generated                = 
").append(isGenerated()).append('\n');
-        buffer.append("         .autoLabelDeleted         = 
").append(isAutoLabelDeleted()).append('\n');
-        buffer.append("         .autoBackground           = 
").append(isAutoBackground()).append('\n');
-            buffer.append("         .rotation                 = 
").append(getRotation()).append('\n');
-        buffer.append("         .showCategoryLabelAsPercentage     = 
").append(isShowCategoryLabelAsPercentage()).append('\n');
-        buffer.append("         .showValueAsPercentage     = 
").append(isShowValueAsPercentage()).append('\n');
-        buffer.append("         .showBubbleSizes          = 
").append(isShowBubbleSizes()).append('\n');
-        buffer.append("         .showLabel                = 
").append(isShowLabel()).append('\n');
-        buffer.append("    .indexOfColorValue    = ")
-            .append("0x").append(HexDump.toHex(  getIndexOfColorValue ()))
-            .append(" (").append( getIndexOfColorValue() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .options2             = ")
-            .append("0x").append(HexDump.toHex(  getOptions2 ()))
-            .append(" (").append( getOptions2() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-            buffer.append("         .dataLabelPlacement       = 
").append(getDataLabelPlacement()).append('\n');
-        buffer.append("    .textRotation         = ")
-            .append("0x").append(HexDump.toHex(  getTextRotation ()))
-            .append(" (").append( getTextRotation() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/TEXT]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeByte(field_1_horizontalAlignment);
         out.writeByte(field_2_verticalAlignment);
@@ -711,4 +647,42 @@ public final class TextRecord extends St
     {
         return dataLabelPlacement.getShortValue(field_11_options2);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.TEXT;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        final Map<String,Supplier<?>> m = new LinkedHashMap<>();
+        m.put("horizontalAlignment", 
getEnumBitsAsString(this::getHorizontalAlignment,
+            new int[]{HORIZONTAL_ALIGNMENT_LEFT, HORIZONTAL_ALIGNMENT_CENTER, 
HORIZONTAL_ALIGNMENT_BOTTOM, HORIZONTAL_ALIGNMENT_JUSTIFY},
+            new String[]{"LEFT","CENTER","BOTTOM","JUSTIFY"}));
+        m.put("verticalAlignment", 
getEnumBitsAsString(this::getVerticalAlignment,
+            new int[]{VERTICAL_ALIGNMENT_TOP, VERTICAL_ALIGNMENT_CENTER, 
VERTICAL_ALIGNMENT_BOTTOM, VERTICAL_ALIGNMENT_JUSTIFY},
+            new String[]{"TOP", "CENTER", "BOTTOM", "JUSTIFY"}));
+        m.put("displayMode", getEnumBitsAsString(this::getDisplayMode,
+            new int[]{DISPLAY_MODE_TRANSPARENT,DISPLAY_MODE_OPAQUE},
+            new String[]{"TRANSPARENT","OPAQUE"}));
+        m.put("rgbColor", this::getRgbColor);
+        m.put("x", this::getX);
+        m.put("y", this::getY);
+        m.put("width", this::getWidth);
+        m.put("height", this::getHeight);
+        m.put("options1", getBitsAsString(this::getOptions1,
+            new BitField[]{autoColor, showKey, showValue, vertical, 
autoGeneratedText, generated, autoLabelDeleted, autoBackground, 
showCategoryLabelAsPercentage, showValueAsPercentage, showBubbleSizes, 
showLabel},
+            new String[]{"AUTO_COLOR", "SHOW_KEY", "SHOW_VALUE", "VERTICAL", 
"AUTO_GENERATED_TEXT", "GENERATED", "AUTO_LABEL_DELETED", "AUTO_BACKGROUND", 
"SHOW_CATEGORY_LABEL_AS_PERCENTAGE", "SHOW_VALUE_AS_PERCENTAGE", 
"SHOW_BUBBLE_SIZES", "SHOW_LABEL"}));
+        m.put("rotation", getEnumBitsAsString(this::getRotation,
+            new int[]{ROTATION_NONE, ROTATION_TOP_TO_BOTTOM, 
ROTATION_ROTATED_90_DEGREES, ROTATION_ROTATED_90_DEGREES_CLOCKWISE},
+            new String[]{"NONE", "TOP_TO_BOTTOM", "ROTATED_90_DEGREES", 
"ROTATED_90_DEGREES_CLOCKWISE"}));
+        m.put("options2", this::getOptions2);
+        m.put("dataLabelPlacement", 
getEnumBitsAsString(this::getDataLabelPlacement,
+            new int[]{DATA_LABEL_PLACEMENT_CHART_DEPENDENT, 
DATA_LABEL_PLACEMENT_OUTSIDE, DATA_LABEL_PLACEMENT_INSIDE, 
DATA_LABEL_PLACEMENT_CENTER, DATA_LABEL_PLACEMENT_AXIS, 
DATA_LABEL_PLACEMENT_ABOVE, DATA_LABEL_PLACEMENT_BELOW, 
DATA_LABEL_PLACEMENT_LEFT, DATA_LABEL_PLACEMENT_RIGHT, 
DATA_LABEL_PLACEMENT_AUTO, DATA_LABEL_PLACEMENT_USER_MOVED},
+            new String[]{"CHART_DEPENDENT", "OUTSIDE", "INSIDE", "CENTER", 
"AXIS", "ABOVE", "BELOW", "LEFT", "RIGHT", "AUTO", "USER_MOVED"}));
+        m.put("indexOfColorValue", this::getIndexOfColorValue);
+        m.put("textRotation", this::getTextRotation);
+
+        return Collections.unmodifiableMap(m);
+    }
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/TickRecord.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/TickRecord.java?rev=1876433&r1=1876432&r2=1876433&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/TickRecord.java 
(original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/TickRecord.java Sun Apr 
12 22:03:52 2020
@@ -17,11 +17,18 @@
 
 package org.apache.poi.hssf.record.chart;
 
+import static org.apache.poi.util.GenericRecordUtil.getBitsAsString;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.function.Supplier;
+
+import org.apache.poi.hssf.record.HSSFRecordTypes;
 import org.apache.poi.hssf.record.RecordInputStream;
 import org.apache.poi.hssf.record.StandardRecord;
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.BitFieldFactory;
-import org.apache.poi.util.HexDump;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.Removal;
 
@@ -84,60 +91,6 @@ public final class TickRecord extends St
         field_12_zero5        = in.readShort();
     }
 
-    public String toString()
-    {
-        StringBuilder buffer = new StringBuilder();
-
-        buffer.append("[TICK]\n");
-        buffer.append("    .majorTickType        = ")
-            .append("0x").append(HexDump.toHex(  getMajorTickType ()))
-            .append(" (").append( getMajorTickType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .minorTickType        = ")
-            .append("0x").append(HexDump.toHex(  getMinorTickType ()))
-            .append(" (").append( getMinorTickType() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .labelPosition        = ")
-            .append("0x").append(HexDump.toHex(  getLabelPosition ()))
-            .append(" (").append( getLabelPosition() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .background           = ")
-            .append("0x").append(HexDump.toHex(  getBackground ()))
-            .append(" (").append( getBackground() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .labelColorRgb        = ")
-            .append("0x").append(HexDump.toHex(  getLabelColorRgb ()))
-            .append(" (").append( getLabelColorRgb() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .zero1                = ")
-            .append("0x").append(HexDump.toHex(  getZero1 ()))
-            .append(" (").append( getZero1() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .zero2                = ")
-            .append("0x").append(HexDump.toHex(  getZero2 ()))
-            .append(" (").append( getZero2() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .options              = ")
-            .append("0x").append(HexDump.toHex(  getOptions ()))
-            .append(" (").append( getOptions() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("         .autoTextColor            = 
").append(isAutoTextColor()).append('\n');
-        buffer.append("         .autoTextBackground       = 
").append(isAutoTextBackground()).append('\n');
-            buffer.append("         .rotation                 = 
").append(getRotation()).append('\n');
-        buffer.append("         .autorotate               = 
").append(isAutorotate()).append('\n');
-        buffer.append("    .tickColor            = ")
-            .append("0x").append(HexDump.toHex(  getTickColor ()))
-            .append(" (").append( getTickColor() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-        buffer.append("    .zero3                = ")
-            .append("0x").append(HexDump.toHex(  getZero3 ()))
-            .append(" (").append( getZero3() ).append(" )");
-        buffer.append(System.getProperty("line.separator"));
-
-        buffer.append("[/TICK]\n");
-        return buffer.toString();
-    }
-
     public void serialize(LittleEndianOutput out) {
         out.writeByte(field_1_majorTickType);
         out.writeByte(field_2_minorTickType);
@@ -163,7 +116,7 @@ public final class TickRecord extends St
     }
 
     @Override
-    @SuppressWarnings("squid:S2975")
+    @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"})
     @Deprecated
     @Removal(version = "5.0.0")
     public TickRecord clone() {
@@ -406,4 +359,28 @@ public final class TickRecord extends St
     {
         return autorotate.isSet(field_10_options);
     }
+
+    @Override
+    public HSSFRecordTypes getGenericRecordType() {
+        return HSSFRecordTypes.TICK;
+    }
+
+    @Override
+    public Map<String, Supplier<?>> getGenericProperties() {
+        final Map<String,Supplier<?>> m = new LinkedHashMap<>();
+        m.put("majorTickType", this::getMajorTickType);
+        m.put("minorTickType", this::getMinorTickType);
+        m.put("labelPosition", this::getLabelPosition);
+        m.put("background", this::getBackground);
+        m.put("labelColorRgb", this::getLabelColorRgb);
+        m.put("zero1", this::getZero1);
+        m.put("zero2", this::getZero2);
+        m.put("options", getBitsAsString(this::getOptions,
+            new BitField[]{autoTextColor,autoTextBackground,autorotate},
+            new 
String[]{"AUTO_TEXT_COLOR","AUTO_TEXT_BACKGROUND","AUTO_ROTATE"}) );
+        m.put("rotation", this::getRotation);
+        m.put("tickColor", this::getTickColor);
+        m.put("zero3", this::getZero3);
+        return Collections.unmodifiableMap(m);
+    }
 }



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

Reply via email to