You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2021/04/13 21:37:33 UTC

svn commit: r1888746 [1/3] - in /poi/trunk/poi-scratchpad: ./ src/main/java/org/apache/poi/hpbf/dev/ src/main/java/org/apache/poi/hslf/record/ src/main/java/org/apache/poi/hsmf/extractor/ src/main/java/org/apache/poi/hssf/converter/ src/main/java/org/a...

Author: kiwiwings
Date: Tue Apr 13 21:37:33 2021
New Revision: 1888746

URL: http://svn.apache.org/viewvc?rev=1888746&view=rev
Log:
:poi-scratchpad - fix javadocs - link to dependent/external project javadocs

Removed:
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToHtmlUtils.java
Modified:
    poi/trunk/poi-scratchpad/build.gradle
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToHtmlConverter.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwmf/record/HwmfBitmapDib.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/extractor/WordExtractor.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/CharIndexTranslator.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/ListTables.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/PicturesTable.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/FRDAbstractType.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/GrfhicAbstractType.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/PAPAbstractType.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/model/types/TAPAbstractType.java
    poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hwpf/usermodel/Paragraph.java
    poi/trunk/poi-scratchpad/src/test/java/org/apache/poi/hssf/converter/TestExcelConverterSuite.java

Modified: poi/trunk/poi-scratchpad/build.gradle
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/build.gradle?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/build.gradle (original)
+++ poi/trunk/poi-scratchpad/build.gradle Tue Apr 13 21:37:33 2021
@@ -31,6 +31,7 @@ final String VERSIONS9 = 'META-INF/versi
 
 configurations {
     tests
+    javadocs
 }
 
 sourceSets {
@@ -56,6 +57,9 @@ dependencies {
     testImplementation project(path: ':poi', configuration: 'tests')
     testImplementation "org.junit.jupiter:junit-jupiter-api:${junitVersion}"
     testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junitVersion}"
+
+    javadocs project(':poi')
+    javadocs project(':poi-ooxml')
 }
 
 final MODULE_NAME = 'org.apache.poi.scratchpad'
@@ -202,11 +206,20 @@ test {
 }
 
 javadoc {
-//    fails currently, need to fix the sources
-    failOnError = false
-//    if(JavaVersion.current().isJava9Compatible()) {
-//        options.addBooleanOption('html5', true)
-//    }
+    failOnError = true
+    doFirst {
+        options {
+            if (JavaVersion.current().isJava9Compatible()) {
+                addBooleanOption('html5', true)
+            }
+            links 'https://poi.apache.org/apidocs/dev/'
+            links 'https://docs.oracle.com/javase/8/docs/api/'
+            use = true
+            splitIndex = true
+            source = "1.8"
+            classpath += configurations.javadocs.files
+        }
+    }
 }
 
 publishing {

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hpbf/dev/HPBFDumper.java Tue Apr 13 21:37:33 2021
@@ -99,7 +99,7 @@ public final class HPBFDumper {
 
     /**
      * Dump out the escher parts of the file.
-     * Escher -> EscherStm and EscherDelayStm
+     * Escher -> EscherStm and EscherDelayStm
      */
     public void dumpEscher() throws IOException {
         DirectoryNode escherDir = (DirectoryNode)

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/AnimationInfoAtom.java Tue Apr 13 21:37:33 2021
@@ -97,7 +97,7 @@ public final class AnimationInfoAtom ext
     /**
      * Record header.
      */
-    private byte[] _header;
+    private final byte[] _header;
 
     /**
      * record data
@@ -246,7 +246,7 @@ public final class AnimationInfoAtom ext
      * A signed integer that specifies the order of the animation in the slide.
      * It MUST be greater than or equal to -2. The value -2 specifies that this animation follows the order of
      * the corresponding placeholder shape on the main master slide or title master slide.
-     * The value -1 SHOULD NOT <105> be used.
+     * The value -1 SHOULD NOT be used.
      */
     public int getOrderID(){
         return LittleEndian.getInt(_recdata, 16);
@@ -256,7 +256,7 @@ public final class AnimationInfoAtom ext
      * A signed integer that specifies the order of the animation in the slide.
      * It MUST be greater than or equal to -2. The value -2 specifies that this animation follows the order of
      * the corresponding placeholder shape on the main master slide or title master slide.
-     * The value -1 SHOULD NOT <105> be used.
+     * The value -1 SHOULD NOT be used.
      */
     public void setOrderID(int id){
          LittleEndian.putInt(_recdata, 16, id);

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hslf/record/RecordTypes.java Tue Apr 13 21:37:33 2021
@@ -24,8 +24,10 @@ import java.util.Map;
  * List of all known record types in a PowerPoint document, and the
  *  classes that handle them.
  * There are two categories of records:
- * <li> PowerPoint records: 0 <= info <= 10002 (will carry class info)
- * <li> Escher records: info >= 0xF000 (handled by DDF, so no class info)
+ * <ul>
+ * <li> PowerPoint records: {@code 0 <= info <= 10002} (will carry class info)
+ * <li> Escher records: {@code info >= 0xF000} (handled by DDF, so no class info)
+ * </ul>
  */
 public enum RecordTypes {
     Unknown(0,null),
@@ -183,12 +185,12 @@ public enum RecordTypes {
         for(RecordTypes s : values()) {
             LOOKUP.put(s.typeID, s);
         }
-    }    
-    
+    }
+
     public final short typeID;
-    public final RecordConstructor recordConstructor;
+    public final RecordConstructor<?> recordConstructor;
 
-    RecordTypes(int typeID, RecordConstructor recordConstructor) {
+    RecordTypes(int typeID, RecordConstructor<?> recordConstructor) {
         this.typeID = (short)typeID;
         this.recordConstructor = recordConstructor;
     }

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hsmf/extractor/OutlookTextExtractor.java Tue Apr 13 21:37:33 2021
@@ -101,8 +101,8 @@ public class OutlookTextExtractor implem
         }
 
         try {
-            s.append("From: " + msg.getDisplayFrom() + "\n");
-        } catch (ChunkNotFoundException e) {
+            s.append("From: ").append(msg.getDisplayFrom()).append("\n");
+        } catch (ChunkNotFoundException ignored) {
         }
 
         // For To, CC and BCC, try to match the names
@@ -111,15 +111,15 @@ public class OutlookTextExtractor implem
         //  people in To + CC + BCC.
         try {
             handleEmails(s, "To", msg.getDisplayTo(), emails);
-        } catch (ChunkNotFoundException e) {
+        } catch (ChunkNotFoundException ignored) {
         }
         try {
             handleEmails(s, "CC", msg.getDisplayCC(), emails);
-        } catch (ChunkNotFoundException e) {
+        } catch (ChunkNotFoundException ignored) {
         }
         try {
             handleEmails(s, "BCC", msg.getDisplayBCC(), emails);
-        } catch (ChunkNotFoundException e) {
+        } catch (ChunkNotFoundException ignored) {
         }
 
         // Date - try two ways to find it
@@ -145,7 +145,7 @@ public class OutlookTextExtractor implem
 
         try {
             s.append("Subject: ").append(msg.getSubject()).append("\n");
-        } catch (ChunkNotFoundException e) {
+        } catch (ChunkNotFoundException ignored) {
         }
 
         // Display attachment names
@@ -164,7 +164,7 @@ public class OutlookTextExtractor implem
 
         try {
             s.append("\n").append(msg.getTextBody()).append("\n");
-        } catch (ChunkNotFoundException e) {
+        } catch (ChunkNotFoundException ignored) {
         }
 
         return s.toString();
@@ -173,7 +173,7 @@ public class OutlookTextExtractor implem
     /**
      * Takes a Display focused string, eg "Nick; Jim" and an iterator
      * of emails, and does its best to return something like
-     * "Nick <ni...@example.com>; Jim <ji...@example.com>"
+     * {@code "Nick <ni...@example.com>; Jim <ji...@example.com>"}
      */
     protected void handleEmails(StringBuilder s, String type, String displayText, Iterator<String> emails) {
         if (displayText == null || displayText.length() == 0) {

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/AbstractExcelUtils.java Tue Apr 13 21:37:33 2021
@@ -19,6 +19,7 @@ package org.apache.poi.hssf.converter;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.util.Arrays;
 
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.hssf.util.HSSFColor;
@@ -27,112 +28,114 @@ import org.apache.poi.ss.usermodel.Borde
 import org.apache.poi.ss.usermodel.HorizontalAlignment;
 import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.util.Beta;
+import org.apache.poi.util.Internal;
 
 /**
- * Common class for {@link ExcelToFoUtils} and {@link ExcelToHtmlUtils}
- * 
- * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
+ * Common class for {@link ExcelToFoConverter} and {@link ExcelToHtmlConverter}
+ *
  * @see AbstractWordUtils
  * @since POI 3.8 beta 5
  */
-@Beta
-public class AbstractExcelUtils {
+@Internal
+class AbstractExcelUtils {
     /*package*/ static final String EMPTY = "";
     private static final short EXCEL_COLUMN_WIDTH_FACTOR = 256;
     private static final int UNIT_OFFSET_LENGTH = 7;
 
-    public static String getAlign( HorizontalAlignment alignment ) {
-        switch ( alignment ) {
-        case CENTER:
-            return "center";
-        case CENTER_SELECTION:
-            return "center";
-        case FILL:
-            // XXX: shall we support fill?
-            return "";
-        case GENERAL:
-            return "";
-        case JUSTIFY:
-            return "justify";
-        case LEFT:
-            return "left";
-        case RIGHT:
-            return "right";
-        default:
-            return "";
+    public static String getAlign(HorizontalAlignment alignment) {
+        switch (alignment) {
+            case CENTER:
+            case CENTER_SELECTION:
+                return "center";
+            case FILL:
+                // XXX: shall we support fill?
+                return "";
+            case JUSTIFY:
+                return "justify";
+            case LEFT:
+                return "left";
+            case RIGHT:
+                return "right";
+            default:
+            case GENERAL:
+                return "";
         }
     }
 
-    public static String getBorderStyle( BorderStyle xlsBorder ) {
+    public static String getBorderStyle(BorderStyle xlsBorder) {
         final String borderStyle;
-        switch ( xlsBorder ) {
-        case NONE:
-            borderStyle = "none";
-            break;
-        case DASH_DOT:
-        case DASH_DOT_DOT:
-        case DOTTED:
-        case HAIR:
-        case MEDIUM_DASH_DOT:
-        case MEDIUM_DASH_DOT_DOT:
-        case SLANTED_DASH_DOT:
-            borderStyle = "dotted";
-            break;
-        case DASHED:
-        case MEDIUM_DASHED:
-            borderStyle = "dashed";
-            break;
-        case DOUBLE:
-            borderStyle = "double";
-            break;
-        default:
-            borderStyle = "solid";
-            break;
+        switch (xlsBorder) {
+            case NONE:
+                borderStyle = "none";
+                break;
+            case DASH_DOT:
+            case DASH_DOT_DOT:
+            case DOTTED:
+            case HAIR:
+            case MEDIUM_DASH_DOT:
+            case MEDIUM_DASH_DOT_DOT:
+            case SLANTED_DASH_DOT:
+                borderStyle = "dotted";
+                break;
+            case DASHED:
+            case MEDIUM_DASHED:
+                borderStyle = "dashed";
+                break;
+            case DOUBLE:
+                borderStyle = "double";
+                break;
+            default:
+                borderStyle = "solid";
+                break;
         }
         return borderStyle;
     }
 
-    public static String getBorderWidth( BorderStyle xlsBorder ) {
+    public static String getBorderWidth(BorderStyle xlsBorder) {
         final String borderWidth;
-        switch ( xlsBorder ) {
-        case MEDIUM_DASH_DOT:
-        case MEDIUM_DASH_DOT_DOT:
-        case MEDIUM_DASHED:
-            borderWidth = "2pt";
-            break;
-        case THICK:
-            borderWidth = "thick";
-            break;
-        default:
-            borderWidth = "thin";
-            break;
+        switch (xlsBorder) {
+            case MEDIUM_DASH_DOT:
+            case MEDIUM_DASH_DOT_DOT:
+            case MEDIUM_DASHED:
+                borderWidth = "2pt";
+                break;
+            case THICK:
+                borderWidth = "thick";
+                break;
+            default:
+                borderWidth = "thin";
+                break;
         }
         return borderWidth;
     }
 
-    public static String getColor( HSSFColor color ) {
-        StringBuilder stringBuilder = new StringBuilder( 7 );
-        stringBuilder.append( '#' );
-        for ( short s : color.getTriplet() ) {
-            if ( s < 10 )
-                stringBuilder.append( '0' );
+    public static String getColor(HSSFColor color) {
+        StringBuilder stringBuilder = new StringBuilder(7);
+        stringBuilder.append('#');
+        for (short s : color.getTriplet()) {
+            if (s < 10) {
+                stringBuilder.append('0');
+            }
 
-            stringBuilder.append( Integer.toHexString( s ) );
+            stringBuilder.append(Integer.toHexString(s));
         }
         String result = stringBuilder.toString();
 
-        if ( result.equals( "#ffffff" ) )
+        if (result.equals("#ffffff")) {
             return "white";
+        }
 
-        if ( result.equals( "#c0c0c0" ) )
+        if (result.equals("#c0c0c0")) {
             return "silver";
+        }
 
-        if ( result.equals( "#808080" ) )
+        if (result.equals("#808080")) {
             return "gray";
+        }
 
-        if ( result.equals( "#000000" ) )
+        if (result.equals("#000000")) {
             return "black";
+        }
 
         return result;
     }
@@ -142,47 +145,93 @@ public class AbstractExcelUtils {
      * "http://apache-poi.1045710.n5.nabble.com/Excel-Column-Width-Unit-Converter-pixels-excel-column-width-units-td2301481.html"
      * >here</a> for Xio explanation and details
      */
-    public static int getColumnWidthInPx( int widthUnits ) {
-        int pixels = ( widthUnits / EXCEL_COLUMN_WIDTH_FACTOR )
-                * UNIT_OFFSET_LENGTH;
+    public static int getColumnWidthInPx(int widthUnits) {
+        int pixels = (widthUnits / EXCEL_COLUMN_WIDTH_FACTOR)
+            * UNIT_OFFSET_LENGTH;
 
         int offsetWidthUnits = widthUnits % EXCEL_COLUMN_WIDTH_FACTOR;
-        pixels += Math.round( offsetWidthUnits
-                / ( (float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH ) );
+        pixels += Math.round(offsetWidthUnits
+            / ((float) EXCEL_COLUMN_WIDTH_FACTOR / UNIT_OFFSET_LENGTH));
 
         return pixels;
     }
 
     /**
-     * @param mergedRanges
-     *            map of sheet merged ranges built with
-     *            {@link ExcelToHtmlUtils#buildMergedRangesMap(Sheet)}
+     * @param mergedRanges map of sheet merged ranges built with
+     *                     {@link #buildMergedRangesMap(Sheet)}
      * @return {@link CellRangeAddress} from map if cell with specified row and
-     *         column numbers contained in found range, <tt>null</tt> otherwise
+     * column numbers contained in found range, <tt>null</tt> otherwise
      */
     public static CellRangeAddress getMergedRange(
-            CellRangeAddress[][] mergedRanges, int rowNumber, int columnNumber ) {
+        CellRangeAddress[][] mergedRanges, int rowNumber, int columnNumber) {
         CellRangeAddress[] mergedRangeRowInfo = rowNumber < mergedRanges.length ? mergedRanges[rowNumber]
-                : null;
+            : null;
 
         return mergedRangeRowInfo != null
-                && columnNumber < mergedRangeRowInfo.length ? mergedRangeRowInfo[columnNumber]
-                : null;
+            && columnNumber < mergedRangeRowInfo.length ? mergedRangeRowInfo[columnNumber]
+            : null;
     }
 
-    static boolean isEmpty( String str )
-    {
+    static boolean isEmpty(String str) {
         return str == null || str.length() == 0;
     }
 
-    static boolean isNotEmpty( String str )
-    {
-        return !isEmpty( str );
+    static boolean isNotEmpty(String str) {
+        return !isEmpty(str);
+    }
+
+    public static HSSFWorkbook loadXls(File xlsFile) throws IOException {
+        try (final FileInputStream inputStream = new FileInputStream(xlsFile)) {
+            return new HSSFWorkbook(inputStream);
+        }
     }
 
-    public static HSSFWorkbook loadXls(File xlsFile ) throws IOException {
-        try (final FileInputStream inputStream = new FileInputStream( xlsFile )) {
-            return new HSSFWorkbook( inputStream );
+    public static void appendAlign(StringBuilder style, HorizontalAlignment alignment) {
+        String cssAlign = getAlign(alignment);
+        if (isEmpty(cssAlign)) {
+            return;
+        }
+
+        style.append("text-align:");
+        style.append(cssAlign);
+        style.append(";");
+    }
+
+    /**
+     * Creates a map (i.e. two-dimensional array) filled with ranges. Allow fast
+     * retrieving {@link CellRangeAddress} of any cell, if cell is contained in
+     * range.
+     *
+     * @see #getMergedRange(CellRangeAddress[][], int, int)
+     */
+    public static CellRangeAddress[][] buildMergedRangesMap(Sheet sheet) {
+        CellRangeAddress[][] mergedRanges = new CellRangeAddress[1][];
+        for (final CellRangeAddress cellRangeAddress : sheet.getMergedRegions()) {
+            final int requiredHeight = cellRangeAddress.getLastRow() + 1;
+            if (mergedRanges.length < requiredHeight) {
+                mergedRanges = Arrays.copyOf(mergedRanges, requiredHeight, CellRangeAddress[][].class);
+            }
+
+            for (int r = cellRangeAddress.getFirstRow(); r <= cellRangeAddress
+                .getLastRow(); r++) {
+                final int requiredWidth = cellRangeAddress.getLastColumn() + 1;
+
+                CellRangeAddress[] rowMerged = mergedRanges[r];
+                if (rowMerged == null) {
+                    rowMerged = new CellRangeAddress[requiredWidth];
+                    mergedRanges[r] = rowMerged;
+                } else {
+                    final int rowMergedLength = rowMerged.length;
+                    if (rowMergedLength < requiredWidth) {
+                        rowMerged = mergedRanges[r] =
+                            Arrays.copyOf(rowMerged, requiredWidth, CellRangeAddress[].class);
+                    }
+                }
+
+                Arrays.fill(rowMerged, cellRangeAddress.getFirstColumn(),
+                    cellRangeAddress.getLastColumn() + 1, cellRangeAddress);
+            }
         }
+        return mergedRanges;
     }
 }

Modified: poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java?rev=1888746&r1=1888745&r2=1888746&view=diff
==============================================================================
--- poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java (original)
+++ poi/trunk/poi-scratchpad/src/main/java/org/apache/poi/hssf/converter/ExcelToFoConverter.java Tue Apr 13 21:37:33 2021
@@ -16,6 +16,16 @@
 ==================================================================== */
 package org.apache.poi.hssf.converter;
 
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.buildMergedRangesMap;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getAlign;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getBorderStyle;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getBorderWidth;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getColor;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.getMergedRange;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.isEmpty;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.isNotEmpty;
+import static org.apache.poi.hssf.converter.AbstractExcelUtils.loadXls;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
@@ -50,12 +60,9 @@ import org.w3c.dom.Text;
 
 /**
  * Converts xls files (97-2007) to XSL FO.
- *
- * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
  */
 @Beta
-public class ExcelToFoConverter extends AbstractExcelConverter
-{
+public class ExcelToFoConverter extends AbstractExcelConverter {
     private static final float CM_PER_INCH = 2.54f;
 
     private static final float DPI = 72;
@@ -67,45 +74,40 @@ public class ExcelToFoConverter extends
     private static final float PAPER_A4_WIDTH_INCHES = 21.0f / CM_PER_INCH;
 
     /**
-     * Java main() interface to interact with {@link ExcelToFoConverter}
-     *
-     * <p>
      * Usage: ExcelToHtmlConverter infile outfile
-     * </p>
+     * <p>
      * Where infile is an input .xls file ( Word 97-2007) which will be rendered
      * as XSL FO into outfile
      */
-    public static void main( String[] args ) throws Exception {
-        if ( args.length < 2 ) {
-            System.err.println( "Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>" );
+    public static void main(String[] args) throws Exception {
+        if (args.length < 2) {
+            System.err.println("Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>");
             return;
         }
 
-        System.out.println( "Converting " + args[0] );
-        System.out.println( "Saving output to " + args[1] );
+        System.out.println("Converting " + args[0]);
+        System.out.println("Saving output to " + args[1]);
 
-        Document doc = ExcelToHtmlConverter.process( new File( args[0] ) );
+        Document doc = ExcelToHtmlConverter.process(new File(args[0]));
 
-        DOMSource domSource = new DOMSource( doc );
-        StreamResult streamResult = new StreamResult( new File(args[1]) );
+        DOMSource domSource = new DOMSource(doc);
+        StreamResult streamResult = new StreamResult(new File(args[1]));
 
         // TODO set encoding from a command argument
         Transformer serializer = XMLHelper.newTransformer();
-        serializer.transform( domSource, streamResult );
+        serializer.transform(domSource, streamResult);
     }
 
     /**
      * Converts Excel file (97-2007) into XSL FO file.
      *
-     * @param xlsFile
-     *            file to process
+     * @param xlsFile file to process
      * @return DOM representation of result XSL FO
      */
-    public static Document process( File xlsFile ) throws Exception
-    {
-        try (HSSFWorkbook workbook = AbstractExcelUtils.loadXls(xlsFile)) {
+    public static Document process(File xlsFile) throws Exception {
+        try (HSSFWorkbook workbook = loadXls(xlsFile)) {
             ExcelToFoConverter excelToHtmlConverter = new ExcelToFoConverter(
-                    XMLHelper.newDocumentBuilder().newDocument() );
+                XMLHelper.newDocumentBuilder().newDocument());
             excelToHtmlConverter.processWorkbook(workbook);
             return excelToHtmlConverter.getDocument();
         }
@@ -115,35 +117,29 @@ public class ExcelToFoConverter extends
 
     private float pageMarginInches = 0.4f;
 
-    public ExcelToFoConverter( Document document )
-    {
-        this.foDocumentFacade = new FoDocumentFacade( document );
+    public ExcelToFoConverter(Document document) {
+        this.foDocumentFacade = new FoDocumentFacade(document);
     }
 
-    public ExcelToFoConverter( FoDocumentFacade foDocumentFacade )
-    {
+    public ExcelToFoConverter(FoDocumentFacade foDocumentFacade) {
         this.foDocumentFacade = foDocumentFacade;
     }
 
-    protected String createPageMaster( float tableWidthIn, String pageMasterName )
-    {
+    protected String createPageMaster(float tableWidthIn, String pageMasterName) {
         final float paperHeightIn;
         final float paperWidthIn;
         {
             float requiredWidthIn = tableWidthIn + 2 * getPageMarginInches();
 
-            if ( requiredWidthIn < PAPER_A4_WIDTH_INCHES )
-            {
+            if (requiredWidthIn < PAPER_A4_WIDTH_INCHES) {
                 // portrait orientation
                 paperWidthIn = PAPER_A4_WIDTH_INCHES;
                 paperHeightIn = PAPER_A4_HEIGHT_INCHES;
-            }
-            else
-            {
+            } else {
                 // landscape orientation
                 paperWidthIn = requiredWidthIn;
                 paperHeightIn = paperWidthIn
-                        * ( PAPER_A4_WIDTH_INCHES / PAPER_A4_HEIGHT_INCHES );
+                    * (PAPER_A4_WIDTH_INCHES / PAPER_A4_HEIGHT_INCHES);
             }
         }
 
@@ -153,25 +149,23 @@ public class ExcelToFoConverter extends
         final float bottomMargin = getPageMarginInches();
 
         Element pageMaster = foDocumentFacade
-                .addSimplePageMaster( pageMasterName );
-        pageMaster.setAttribute( "page-height", paperHeightIn + "in" );
-        pageMaster.setAttribute( "page-width", paperWidthIn + "in" );
-
-        Element regionBody = foDocumentFacade.addRegionBody( pageMaster );
-        regionBody.setAttribute( "margin", topMargin + "in " + rightMargin
-                + "in " + bottomMargin + "in " + leftMargin + "in" );
+            .addSimplePageMaster(pageMasterName);
+        pageMaster.setAttribute("page-height", paperHeightIn + "in");
+        pageMaster.setAttribute("page-width", paperWidthIn + "in");
+
+        Element regionBody = foDocumentFacade.addRegionBody(pageMaster);
+        regionBody.setAttribute("margin", topMargin + "in " + rightMargin
+            + "in " + bottomMargin + "in " + leftMargin + "in");
 
         return pageMasterName;
     }
 
     @Override
-    protected Document getDocument()
-    {
+    protected Document getDocument() {
         return foDocumentFacade.getDocument();
     }
 
-    public float getPageMarginInches()
-    {
+    public float getPageMarginInches() {
         return pageMarginInches;
     }
 
@@ -180,85 +174,79 @@ public class ExcelToFoConverter extends
      * borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
      *
      * @return <tt>false</tt> if cell style by itself (without text, i.e.
-     *         borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
+     * borders, fill, etc.) worth a mention, <tt>true</tt> otherwise
      */
-    protected boolean isEmptyStyle( CellStyle cellStyle ) {
+    protected boolean isEmptyStyle(CellStyle cellStyle) {
         return cellStyle == null || (
-               cellStyle.getFillPattern() == FillPatternType.NO_FILL
-            && cellStyle.getBorderTop() == BorderStyle.NONE
-            && cellStyle.getBorderRight() == BorderStyle.NONE
-            && cellStyle.getBorderBottom() == BorderStyle.NONE
-            && cellStyle.getBorderLeft() == BorderStyle.NONE
+            cellStyle.getFillPattern() == FillPatternType.NO_FILL
+                && cellStyle.getBorderTop() == BorderStyle.NONE
+                && cellStyle.getBorderRight() == BorderStyle.NONE
+                && cellStyle.getBorderBottom() == BorderStyle.NONE
+                && cellStyle.getBorderLeft() == BorderStyle.NONE
         );
     }
 
-    protected boolean processCell( HSSFWorkbook workbook, HSSFCell cell,
-            Element tableCellElement, int normalWidthPx, int maxSpannedWidthPx,
-            float normalHeightPt )
-    {
+    protected boolean processCell(HSSFWorkbook workbook, HSSFCell cell,
+        Element tableCellElement, int normalWidthPx, int maxSpannedWidthPx,
+        float normalHeightPt) {
         final HSSFCellStyle cellStyle = cell.getCellStyle();
 
         String value;
-        switch ( cell.getCellType() )
-        {
-        case STRING:
-            // XXX: enrich
-            value = cell.getRichStringCellValue().getString();
-            break;
-        case FORMULA:
-            switch ( cell.getCachedFormulaResultType() )
-            {
+        switch (cell.getCellType()) {
             case STRING:
-                HSSFRichTextString str = cell.getRichStringCellValue();
-                if ( str != null && str.length() > 0 )
-                {
-                    value = ( str.toString() );
-                }
-                else
-                {
-                    value = AbstractExcelUtils.EMPTY;
+                // XXX: enrich
+                value = cell.getRichStringCellValue().getString();
+                break;
+            case FORMULA:
+                switch (cell.getCachedFormulaResultType()) {
+                    case STRING:
+                        HSSFRichTextString str = cell.getRichStringCellValue();
+                        if (str != null && str.length() > 0) {
+                            value = (str.toString());
+                        } else {
+                            value = AbstractExcelUtils.EMPTY;
+                        }
+                        break;
+                    case NUMERIC:
+                        double nValue = cell.getNumericCellValue();
+                        short df = cellStyle.getDataFormat();
+                        String dfs = cellStyle.getDataFormatString();
+                        value = _formatter.formatRawCellContents(nValue, df, dfs);
+                        break;
+                    case BOOLEAN:
+                        value = Boolean.toString(cell.getBooleanCellValue());
+                        break;
+                    case ERROR:
+                        value = ErrorEval.getText(cell.getErrorCellValue());
+                        break;
+                    default:
+                        LOG.atWarn().log("Unexpected cell cachedFormulaResultType ({})", cell.getCachedFormulaResultType());
+                        value = AbstractExcelUtils.EMPTY;
+                        break;
                 }
                 break;
+            case BLANK:
+                value = AbstractExcelUtils.EMPTY;
+                break;
             case NUMERIC:
-                double nValue = cell.getNumericCellValue();
-                short df = cellStyle.getDataFormat();
-                String dfs = cellStyle.getDataFormatString();
-                value = _formatter.formatRawCellContents(nValue, df, dfs );
+                value = _formatter.formatCellValue(cell);
                 break;
             case BOOLEAN:
-                value = Boolean.toString( cell.getBooleanCellValue() );
+                value = Boolean.toString(cell.getBooleanCellValue());
                 break;
             case ERROR:
-                value = ErrorEval.getText( cell.getErrorCellValue() );
+                value = ErrorEval.getText(cell.getErrorCellValue());
                 break;
             default:
-                LOG.atWarn().log("Unexpected cell cachedFormulaResultType ({})", cell.getCachedFormulaResultType());
-                value = AbstractExcelUtils.EMPTY;
-                break;
-            }
-            break;
-        case BLANK:
-            value = AbstractExcelUtils.EMPTY;
-            break;
-        case NUMERIC:
-            value = _formatter.formatCellValue( cell );
-            break;
-        case BOOLEAN:
-            value = Boolean.toString( cell.getBooleanCellValue() );
-            break;
-        case ERROR:
-            value = ErrorEval.getText( cell.getErrorCellValue() );
-            break;
-        default:
-            LOG.atWarn().log("Unexpected cell type ({})", cell.getCellType());
-            return true;
+                LOG.atWarn().log("Unexpected cell type ({})", cell.getCellType());
+                return true;
         }
 
-        final boolean noText = AbstractExcelUtils.isEmpty( value );
+        final boolean noText = isEmpty(value);
         final boolean wrapInDivs = !noText && !cellStyle.getWrapText();
 
-        final boolean emptyStyle = isEmptyStyle( cellStyle );
-        if ( !emptyStyle && noText ) {
+        final boolean emptyStyle = isEmptyStyle(cellStyle);
+        if (!emptyStyle && noText) {
             /*
              * if cell style is defined (like borders, etc.) but cell text
              * is empty, add "&nbsp;" to output, so browser won't collapse
@@ -267,179 +255,170 @@ public class ExcelToFoConverter extends
             value = "\u00A0";
         }
 
-        if ( isOutputLeadingSpacesAsNonBreaking() && value.startsWith( " " ) )
-        {
+        if (isOutputLeadingSpacesAsNonBreaking() && value.startsWith(" ")) {
             StringBuilder builder = new StringBuilder();
-            for ( int c = 0; c < value.length(); c++ )
-            {
-                if ( value.charAt( c ) != ' ' ) {
+            for (int c = 0; c < value.length(); c++) {
+                if (value.charAt(c) != ' ') {
                     break;
                 }
-                builder.append( '\u00a0' );
+                builder.append('\u00a0');
             }
 
-            if ( value.length() != builder.length() ) {
-                builder.append( value.substring( builder.length() ) );
+            if (value.length() != builder.length()) {
+                builder.append(value.substring(builder.length()));
             }
 
             value = builder.toString();
         }
 
-        Text text = foDocumentFacade.createText( value );
+        Text text = foDocumentFacade.createText(value);
         Element block = foDocumentFacade.createBlock();
 
-        if ( wrapInDivs )
-        {
-            block.setAttribute( "absolute-position", "fixed" );
-            block.setAttribute( "left", "0px" );
-            block.setAttribute( "top", "0px" );
-            block.setAttribute( "bottom", "0px" );
-            block.setAttribute( "min-width", normalWidthPx + "px" );
+        if (wrapInDivs) {
+            block.setAttribute("absolute-position", "fixed");
+            block.setAttribute("left", "0px");
+            block.setAttribute("top", "0px");
+            block.setAttribute("bottom", "0px");
+            block.setAttribute("min-width", normalWidthPx + "px");
 
-            if ( maxSpannedWidthPx != Integer.MAX_VALUE )
-            {
-                block.setAttribute( "max-width", maxSpannedWidthPx + "px" );
+            if (maxSpannedWidthPx != Integer.MAX_VALUE) {
+                block.setAttribute("max-width", maxSpannedWidthPx + "px");
             }
 
-            block.setAttribute( "overflow", "hidden" );
-            block.setAttribute( "height", normalHeightPt + "pt" );
-            block.setAttribute( "keep-together.within-line", "always" );
-            block.setAttribute( "wrap-option", "no-wrap" );
+            block.setAttribute("overflow", "hidden");
+            block.setAttribute("height", normalHeightPt + "pt");
+            block.setAttribute("keep-together.within-line", "always");
+            block.setAttribute("wrap-option", "no-wrap");
         }
 
-        processCellStyle( workbook, cell.getCellStyle(), tableCellElement,
-                block );
+        processCellStyle(workbook, cell.getCellStyle(), tableCellElement,
+            block);
 
-        block.appendChild( text );
-        tableCellElement.appendChild( block );
+        block.appendChild(text);
+        tableCellElement.appendChild(block);
 
-        return AbstractExcelUtils.isEmpty( value ) && emptyStyle;
+        return isEmpty(value) && emptyStyle;
     }
 
-    protected void processCellStyle( HSSFWorkbook workbook,
-            HSSFCellStyle cellStyle, Element cellTarget, Element blockTarget )
-    {
-        blockTarget.setAttribute( "white-space-collapse", "false" );
+    protected void processCellStyle(HSSFWorkbook workbook,
+        HSSFCellStyle cellStyle, Element cellTarget, Element blockTarget) {
+        blockTarget.setAttribute("white-space-collapse", "false");
         {
-            String textAlign = AbstractExcelUtils.getAlign( cellStyle.getAlignment() );
-            if ( AbstractExcelUtils.isNotEmpty( textAlign ) )
-                blockTarget.setAttribute( "text-align", textAlign );
+            String textAlign = getAlign(cellStyle.getAlignment());
+            if (isNotEmpty(textAlign)) {
+                blockTarget.setAttribute("text-align", textAlign);
+            }
         }
 
-        if ( cellStyle.getFillPattern() == FillPatternType.NO_FILL )
-        {
+        if (cellStyle.getFillPattern() == FillPatternType.NO_FILL) {
             // no fill
-        }
-        else if ( cellStyle.getFillPattern() == FillPatternType.SOLID_FOREGROUND )
-        {
+        } else if (cellStyle.getFillPattern() == FillPatternType.SOLID_FOREGROUND) {
             final HSSFColor foregroundColor = cellStyle
-                    .getFillForegroundColorColor();
-            if ( foregroundColor != null )
-                cellTarget.setAttribute( "background-color",
-                        AbstractExcelUtils.getColor( foregroundColor ) );
-        }
-        else
-        {
+                .getFillForegroundColorColor();
+            if (foregroundColor != null) {
+                cellTarget.setAttribute("background-color",
+                    getColor(foregroundColor));
+            }
+        } else {
             final HSSFColor backgroundColor = cellStyle
-                    .getFillBackgroundColorColor();
-            if ( backgroundColor != null )
-                cellTarget.setAttribute( "background-color",
-                         AbstractExcelUtils.getColor( backgroundColor ) );
-        }
-
-        processCellStyleBorder( workbook, cellTarget, "top",
-                cellStyle.getBorderTop(), cellStyle.getTopBorderColor() );
-        processCellStyleBorder( workbook, cellTarget, "right",
-                cellStyle.getBorderRight(), cellStyle.getRightBorderColor() );
-        processCellStyleBorder( workbook, cellTarget, "bottom",
-                cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor() );
-        processCellStyleBorder( workbook, cellTarget, "left",
-                cellStyle.getBorderLeft(), cellStyle.getLeftBorderColor() );
-
-        HSSFFont font = cellStyle.getFont( workbook );
-        processCellStyleFont( workbook, blockTarget, font );
+                .getFillBackgroundColorColor();
+            if (backgroundColor != null) {
+                cellTarget.setAttribute("background-color",
+                    getColor(backgroundColor));
+            }
+        }
+
+        processCellStyleBorder(workbook, cellTarget, "top",
+            cellStyle.getBorderTop(), cellStyle.getTopBorderColor());
+        processCellStyleBorder(workbook, cellTarget, "right",
+            cellStyle.getBorderRight(), cellStyle.getRightBorderColor());
+        processCellStyleBorder(workbook, cellTarget, "bottom",
+            cellStyle.getBorderBottom(), cellStyle.getBottomBorderColor());
+        processCellStyleBorder(workbook, cellTarget, "left",
+            cellStyle.getBorderLeft(), cellStyle.getLeftBorderColor());
+
+        HSSFFont font = cellStyle.getFont(workbook);
+        processCellStyleFont(workbook, blockTarget, font);
 
     }
 
-    protected void processCellStyleBorder( HSSFWorkbook workbook,
-            Element cellTarget, String type, BorderStyle xlsBorder, short borderColor )
-    {
-        if ( xlsBorder == BorderStyle.NONE )
+    protected void processCellStyleBorder(HSSFWorkbook workbook,
+        Element cellTarget, String type, BorderStyle xlsBorder, short borderColor) {
+        if (xlsBorder == BorderStyle.NONE) {
             return;
+        }
 
         StringBuilder borderStyle = new StringBuilder();
-        borderStyle.append( AbstractExcelUtils.getBorderWidth( xlsBorder ) );
+        borderStyle.append(getBorderWidth(xlsBorder));
 
         final HSSFColor color = workbook.getCustomPalette().getColor(
-                borderColor );
-        if ( color != null )
-        {
-            borderStyle.append( ' ' );
-            borderStyle.append( AbstractExcelUtils.getColor( color ) );
+            borderColor);
+        if (color != null) {
+            borderStyle.append(' ');
+            borderStyle.append(getColor(color));
 
-            borderStyle.append( ' ' );
-            borderStyle.append( AbstractExcelUtils.getBorderStyle( xlsBorder ) );
+            borderStyle.append(' ');
+            borderStyle.append(getBorderStyle(xlsBorder));
         }
 
-        cellTarget.setAttribute( "border-" + type, borderStyle.toString() );
+        cellTarget.setAttribute("border-" + type, borderStyle.toString());
     }
 
-    protected void processCellStyleFont( HSSFWorkbook workbook,
-            Element blockTarget, HSSFFont font )
-    {
+    protected void processCellStyleFont(HSSFWorkbook workbook,
+        Element blockTarget, HSSFFont font) {
         Triplet triplet = new Triplet();
         triplet.fontName = font.getFontName();
         triplet.bold = font.getBold();
         triplet.italic = font.getItalic();
 
-        getFontReplacer().update( triplet );
-        setBlockProperties( blockTarget, triplet );
+        getFontReplacer().update(triplet);
+        setBlockProperties(blockTarget, triplet);
 
         final HSSFColor fontColor = workbook.getCustomPalette().getColor(
-                font.getColor() );
-        if ( fontColor != null )
-            blockTarget.setAttribute( "color",
-                  AbstractExcelUtils.getColor( fontColor ) );
+            font.getColor());
+        if (fontColor != null) {
+            blockTarget.setAttribute("color",
+                getColor(fontColor));
+        }
 
-        if ( font.getFontHeightInPoints() != 0 )
-            blockTarget.setAttribute( "font-size", font.getFontHeightInPoints()
-                    + "pt" );
+        if (font.getFontHeightInPoints() != 0) {
+            blockTarget.setAttribute("font-size", font.getFontHeightInPoints()
+                + "pt");
+        }
 
     }
 
-    protected void processColumnHeaders( HSSFSheet sheet, int maxSheetColumns,
-            Element table )
-    {
+    protected void processColumnHeaders(HSSFSheet sheet, int maxSheetColumns,
+        Element table) {
         Element tableHeader = foDocumentFacade.createTableHeader();
         Element row = foDocumentFacade.createTableRow();
 
-        if ( isOutputRowNumbers() )
-        {
+        if (isOutputRowNumbers()) {
             // empty cell at left-top corner
             final Element tableCellElement = foDocumentFacade.createTableCell();
-            tableCellElement.appendChild( foDocumentFacade.createBlock() );
-            row.appendChild( tableCellElement );
+            tableCellElement.appendChild(foDocumentFacade.createBlock());
+            row.appendChild(tableCellElement);
         }
 
-        for ( int c = 0; c < maxSheetColumns; c++ )
-        {
-            if ( !isOutputHiddenColumns() && sheet.isColumnHidden( c ) )
+        for (int c = 0; c < maxSheetColumns; c++) {
+            if (!isOutputHiddenColumns() && sheet.isColumnHidden(c)) {
                 continue;
+            }
 
             Element cell = foDocumentFacade.createTableCell();
             Element block = foDocumentFacade.createBlock();
-            block.setAttribute( "text-align", "center" );
-            block.setAttribute( "font-weight", "bold" );
+            block.setAttribute("text-align", "center");
+            block.setAttribute("font-weight", "bold");
 
-            String text = getColumnName( c );
-            block.appendChild( foDocumentFacade.createText( text ) );
+            String text = getColumnName(c);
+            block.appendChild(foDocumentFacade.createText(text));
 
-            cell.appendChild( block );
-            row.appendChild( cell );
+            cell.appendChild(block);
+            row.appendChild(cell);
         }
 
-        tableHeader.appendChild( row );
-        table.appendChild( tableHeader );
+        tableHeader.appendChild(row);
+        table.appendChild(tableHeader);
     }
 
     /**
@@ -448,163 +427,155 @@ public class ExcelToFoConverter extends
      *
      * @return table width in inches
      */
-    protected float processColumnWidths( HSSFSheet sheet, int maxSheetColumns,
-            Element table )
-    {
+    protected float processColumnWidths(HSSFSheet sheet, int maxSheetColumns,
+        Element table) {
         float tableWidth = 0;
 
-        if ( isOutputRowNumbers() )
-        {
-            final float columnWidthIn = getDefaultColumnWidth( sheet ) / DPI;
+        if (isOutputRowNumbers()) {
+            final float columnWidthIn = getDefaultColumnWidth(sheet) / DPI;
 
             final Element rowNumberColumn = foDocumentFacade
-                    .createTableColumn();
-            rowNumberColumn.setAttribute( "column-width", columnWidthIn + "in" );
-            table.appendChild( rowNumberColumn );
+                .createTableColumn();
+            rowNumberColumn.setAttribute("column-width", columnWidthIn + "in");
+            table.appendChild(rowNumberColumn);
 
             tableWidth += columnWidthIn;
         }
 
-        for ( int c = 0; c < maxSheetColumns; c++ )
-        {
-            if ( !isOutputHiddenColumns() && sheet.isColumnHidden( c ) )
+        for (int c = 0; c < maxSheetColumns; c++) {
+            if (!isOutputHiddenColumns() && sheet.isColumnHidden(c)) {
                 continue;
+            }
 
-            final float columnWidthIn = getColumnWidth( sheet, c ) / DPI;
+            final float columnWidthIn = getColumnWidth(sheet, c) / DPI;
 
             Element col = foDocumentFacade.createTableColumn();
-            col.setAttribute( "column-width", columnWidthIn + "in" );
-            table.appendChild( col );
+            col.setAttribute("column-width", columnWidthIn + "in");
+            table.appendChild(col);
 
             tableWidth += columnWidthIn;
         }
 
-        table.setAttribute( "width", tableWidth + "in" );
+        table.setAttribute("width", tableWidth + "in");
         return tableWidth;
     }
 
     protected void processDocumentInformation(
-            SummaryInformation summaryInformation )
-    {
-        if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getTitle() ) )
-            foDocumentFacade.setTitle( summaryInformation.getTitle() );
+        SummaryInformation summaryInformation) {
+        if (isNotEmpty(summaryInformation.getTitle())) {
+            foDocumentFacade.setTitle(summaryInformation.getTitle());
+        }
 
-        if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getAuthor() ) )
-            foDocumentFacade.setCreator( summaryInformation.getAuthor() );
+        if (isNotEmpty(summaryInformation.getAuthor())) {
+            foDocumentFacade.setCreator(summaryInformation.getAuthor());
+        }
 
-        if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getKeywords() ) )
-            foDocumentFacade.setKeywords( summaryInformation.getKeywords() );
+        if (isNotEmpty(summaryInformation.getKeywords())) {
+            foDocumentFacade.setKeywords(summaryInformation.getKeywords());
+        }
 
-        if ( AbstractExcelUtils.isNotEmpty( summaryInformation.getComments() ) )
-            foDocumentFacade.setDescription( summaryInformation.getComments() );
+        if (isNotEmpty(summaryInformation.getComments())) {
+            foDocumentFacade.setDescription(summaryInformation.getComments());
+        }
     }
 
     /**
      * @return maximum 1-base index of column that were rendered, zero if none
      */
-    protected int processRow( HSSFWorkbook workbook,
-            CellRangeAddress[][] mergedRanges, HSSFRow row,
-            Element tableRowElement )
-    {
+    protected int processRow(HSSFWorkbook workbook,
+        CellRangeAddress[][] mergedRanges, HSSFRow row,
+        Element tableRowElement) {
         final HSSFSheet sheet = row.getSheet();
         final short maxColIx = row.getLastCellNum();
-        if ( maxColIx <= 0 )
-        {
+        if (maxColIx <= 0) {
             return 0;
         }
 
         final List<Element> emptyCells = new ArrayList<>(maxColIx);
 
-        if ( isOutputRowNumbers() )
-        {
-            Element tableRowNumberCellElement = processRowNumber( row );
-            emptyCells.add( tableRowNumberCellElement );
+        if (isOutputRowNumbers()) {
+            Element tableRowNumberCellElement = processRowNumber(row);
+            emptyCells.add(tableRowNumberCellElement);
         }
 
         int maxRenderedColumn = 0;
-        for ( int colIx = 0; colIx < maxColIx; colIx++ )
-        {
-            if ( !isOutputHiddenColumns() && sheet.isColumnHidden( colIx ) )
+        for (int colIx = 0; colIx < maxColIx; colIx++) {
+            if (!isOutputHiddenColumns() && sheet.isColumnHidden(colIx)) {
                 continue;
+            }
 
-            CellRangeAddress range = AbstractExcelUtils.getMergedRange(
-                    mergedRanges, row.getRowNum(), colIx );
+            CellRangeAddress range = getMergedRange(mergedRanges, row.getRowNum(), colIx);
 
-            if ( range != null
-                    && ( range.getFirstColumn() != colIx || range.getFirstRow() != row
-                            .getRowNum() ) )
+            if (range != null
+                && (range.getFirstColumn() != colIx || range.getFirstRow() != row
+                .getRowNum())) {
                 continue;
+            }
 
-            HSSFCell cell = row.getCell( colIx );
+            HSSFCell cell = row.getCell(colIx);
 
             // spanning using overlapping blocks
             int divWidthPx = 0;
             {
-                divWidthPx = getColumnWidth( sheet, colIx );
+                divWidthPx = getColumnWidth(sheet, colIx);
 
                 boolean hasBreaks = false;
-                for ( int nextColumnIndex = colIx + 1; nextColumnIndex < maxColIx; nextColumnIndex++ )
-                {
-                    if ( !isOutputHiddenColumns()
-                            && sheet.isColumnHidden( nextColumnIndex ) )
+                for (int nextColumnIndex = colIx + 1; nextColumnIndex < maxColIx; nextColumnIndex++) {
+                    if (!isOutputHiddenColumns()
+                        && sheet.isColumnHidden(nextColumnIndex)) {
                         continue;
+                    }
 
-                    if ( row.getCell( nextColumnIndex ) != null
-                            && !isTextEmpty( row.getCell( nextColumnIndex ) ) )
-                    {
+                    if (row.getCell(nextColumnIndex) != null
+                        && !isTextEmpty(row.getCell(nextColumnIndex))) {
                         hasBreaks = true;
                         break;
                     }
 
-                    divWidthPx += getColumnWidth( sheet, nextColumnIndex );
+                    divWidthPx += getColumnWidth(sheet, nextColumnIndex);
                 }
 
-                if ( !hasBreaks )
+                if (!hasBreaks) {
                     divWidthPx = Integer.MAX_VALUE;
+                }
             }
 
             Element tableCellElement = foDocumentFacade.createTableCell();
 
-            if ( range != null )
-            {
-                if ( range.getFirstColumn() != range.getLastColumn() )
+            if (range != null) {
+                if (range.getFirstColumn() != range.getLastColumn()) {
                     tableCellElement.setAttribute(
-                            "number-columns-spanned",
-                            String.valueOf( range.getLastColumn()
-                                    - range.getFirstColumn() + 1 ) );
-                if ( range.getFirstRow() != range.getLastRow() )
+                        "number-columns-spanned",
+                        String.valueOf(range.getLastColumn()
+                            - range.getFirstColumn() + 1));
+                }
+                if (range.getFirstRow() != range.getLastRow()) {
                     tableCellElement.setAttribute(
-                            "number-rows-spanned",
-                            String.valueOf( range.getLastRow()
-                                    - range.getFirstRow() + 1 ) );
+                        "number-rows-spanned",
+                        String.valueOf(range.getLastRow()
+                            - range.getFirstRow() + 1));
+                }
             }
 
             boolean emptyCell;
-            if ( cell != null )
-            {
-                emptyCell = processCell( workbook, cell, tableCellElement,
-                        getColumnWidth( sheet, colIx ), divWidthPx,
-                        row.getHeight() / 20f );
-            }
-            else
-            {
-                tableCellElement.appendChild( foDocumentFacade.createBlock() );
+            if (cell != null) {
+                emptyCell = processCell(workbook, cell, tableCellElement,
+                    getColumnWidth(sheet, colIx), divWidthPx,
+                    row.getHeight() / 20f);
+            } else {
+                tableCellElement.appendChild(foDocumentFacade.createBlock());
                 emptyCell = true;
             }
 
-            if ( emptyCell )
-            {
-                emptyCells.add( tableCellElement );
-            }
-            else
-            {
-                for ( Element emptyCellElement : emptyCells )
-                {
-                    tableRowElement.appendChild( emptyCellElement );
+            if (emptyCell) {
+                emptyCells.add(tableCellElement);
+            } else {
+                for (Element emptyCellElement : emptyCells) {
+                    tableRowElement.appendChild(emptyCellElement);
                 }
                 emptyCells.clear();
 
-                tableRowElement.appendChild( tableCellElement );
+                tableRowElement.appendChild(tableCellElement);
                 maxRenderedColumn = colIx;
             }
         }
@@ -612,94 +583,86 @@ public class ExcelToFoConverter extends
         return maxRenderedColumn + 1;
     }
 
-    protected Element processRowNumber( HSSFRow row )
-    {
+    protected Element processRowNumber(HSSFRow row) {
         Element tableRowNumberCellElement = foDocumentFacade.createTableCell();
 
         Element block = foDocumentFacade.createBlock();
-        block.setAttribute( "text-align", "right" );
-        block.setAttribute( "font-weight", "bold" );
+        block.setAttribute("text-align", "right");
+        block.setAttribute("font-weight", "bold");
 
-        Text text = foDocumentFacade.createText( getRowName( row ) );
-        block.appendChild( text );
+        Text text = foDocumentFacade.createText(getRowName(row));
+        block.appendChild(text);
 
-        tableRowNumberCellElement.appendChild( block );
+        tableRowNumberCellElement.appendChild(block);
         return tableRowNumberCellElement;
     }
 
-    protected float processSheet( HSSFWorkbook workbook, HSSFSheet sheet,
-            Element flow )
-    {
+    protected float processSheet(HSSFWorkbook workbook, HSSFSheet sheet,
+        Element flow) {
         final int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
-        if ( physicalNumberOfRows <= 0 )
+        if (physicalNumberOfRows <= 0) {
             return 0;
+        }
 
-        processSheetName( sheet, flow );
+        processSheetName(sheet, flow);
 
         Element table = foDocumentFacade.createTable();
-        table.setAttribute( "table-layout", "fixed" );
+        table.setAttribute("table-layout", "fixed");
 
         Element tableBody = foDocumentFacade.createTableBody();
 
-        final CellRangeAddress[][] mergedRanges = ExcelToHtmlUtils
-                .buildMergedRangesMap( sheet );
+        final CellRangeAddress[][] mergedRanges = buildMergedRangesMap(sheet);
 
         final List<Element> emptyRowElements = new ArrayList<>(
-                physicalNumberOfRows);
+            physicalNumberOfRows);
         int maxSheetColumns = 1;
-        for ( int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++ )
-        {
-            HSSFRow row = sheet.getRow( r );
+        for (int r = sheet.getFirstRowNum(); r <= sheet.getLastRowNum(); r++) {
+            HSSFRow row = sheet.getRow(r);
 
-            if ( row == null )
+            if (row == null) {
                 continue;
+            }
 
-            if ( !isOutputHiddenRows() && row.getZeroHeight() )
+            if (!isOutputHiddenRows() && row.getZeroHeight()) {
                 continue;
+            }
 
             Element tableRowElement = foDocumentFacade.createTableRow();
-            tableRowElement.setAttribute( "height", row.getHeight() / 20f
-                    + "pt" );
+            tableRowElement.setAttribute("height", row.getHeight() / 20f
+                + "pt");
 
-            int maxRowColumnNumber = processRow( workbook, mergedRanges, row,
-                    tableRowElement );
+            int maxRowColumnNumber = processRow(workbook, mergedRanges, row,
+                tableRowElement);
 
-            if ( tableRowElement.getChildNodes().getLength() == 0 )
-            {
+            if (tableRowElement.getChildNodes().getLength() == 0) {
                 Element emptyCellElement = foDocumentFacade.createTableCell();
-                emptyCellElement.appendChild( foDocumentFacade.createBlock() );
-                tableRowElement.appendChild( emptyCellElement );
+                emptyCellElement.appendChild(foDocumentFacade.createBlock());
+                tableRowElement.appendChild(emptyCellElement);
             }
 
-            if ( maxRowColumnNumber == 0 )
-            {
-                emptyRowElements.add( tableRowElement );
-            }
-            else
-            {
-                if ( !emptyRowElements.isEmpty() )
-                {
-                    for ( Element emptyRowElement : emptyRowElements )
-                    {
-                        tableBody.appendChild( emptyRowElement );
+            if (maxRowColumnNumber == 0) {
+                emptyRowElements.add(tableRowElement);
+            } else {
+                if (!emptyRowElements.isEmpty()) {
+                    for (Element emptyRowElement : emptyRowElements) {
+                        tableBody.appendChild(emptyRowElement);
                     }
                     emptyRowElements.clear();
                 }
 
-                tableBody.appendChild( tableRowElement );
+                tableBody.appendChild(tableRowElement);
             }
-            maxSheetColumns = Math.max( maxSheetColumns, maxRowColumnNumber );
+            maxSheetColumns = Math.max(maxSheetColumns, maxRowColumnNumber);
         }
 
-        float tableWidthIn = processColumnWidths( sheet, maxSheetColumns, table );
+        float tableWidthIn = processColumnWidths(sheet, maxSheetColumns, table);
 
-        if ( isOutputColumnHeaders() )
-        {
-            processColumnHeaders( sheet, maxSheetColumns, table );
+        if (isOutputColumnHeaders()) {
+            processColumnHeaders(sheet, maxSheetColumns, table);
         }
 
-        table.appendChild( tableBody );
-        flow.appendChild( table );
+        table.appendChild(tableBody);
+        flow.appendChild(table);
 
         return tableWidthIn;
     }
@@ -708,82 +671,79 @@ public class ExcelToFoConverter extends
      * Process single sheet (as specified by 0-based sheet index)
      *
      * @return <tt>true</tt> if result were added to FO document, <tt>false</tt>
-     *         otherwise
+     * otherwise
      */
-    protected boolean processSheet( HSSFWorkbook workbook, int sheetIndex )
-    {
+    protected boolean processSheet(HSSFWorkbook workbook, int sheetIndex) {
         String pageMasterName = "sheet-" + sheetIndex;
 
         Element pageSequence = foDocumentFacade
-                .createPageSequence( pageMasterName );
-        Element flow = foDocumentFacade.addFlowToPageSequence( pageSequence,
-                "xsl-region-body" );
+            .createPageSequence(pageMasterName);
+        Element flow = foDocumentFacade.addFlowToPageSequence(pageSequence,
+            "xsl-region-body");
 
-        HSSFSheet sheet = workbook.getSheetAt( sheetIndex );
-        float tableWidthIn = processSheet( workbook, sheet, flow );
+        HSSFSheet sheet = workbook.getSheetAt(sheetIndex);
+        float tableWidthIn = processSheet(workbook, sheet, flow);
 
-        if ( tableWidthIn == 0 )
+        if (tableWidthIn == 0) {
             return false;
+        }
 
-        createPageMaster( tableWidthIn, pageMasterName );
-        foDocumentFacade.addPageSequence( pageSequence );
+        createPageMaster(tableWidthIn, pageMasterName);
+        foDocumentFacade.addPageSequence(pageSequence);
         return true;
     }
 
-    protected void processSheetName( HSSFSheet sheet, Element flow )
-    {
+    protected void processSheetName(HSSFSheet sheet, Element flow) {
         Element titleBlock = foDocumentFacade.createBlock();
 
         Triplet triplet = new Triplet();
         triplet.bold = true;
         triplet.italic = false;
         triplet.fontName = "Arial";
-        getFontReplacer().update( triplet );
+        getFontReplacer().update(triplet);
 
-        setBlockProperties( titleBlock, triplet );
-        titleBlock.setAttribute( "font-size", "200%" );
+        setBlockProperties(titleBlock, triplet);
+        titleBlock.setAttribute("font-size", "200%");
 
         Element titleInline = foDocumentFacade.createInline();
-        titleInline.appendChild( foDocumentFacade.createText( sheet
-                .getSheetName() ) );
-        titleBlock.appendChild( titleInline );
-        flow.appendChild( titleBlock );
+        titleInline.appendChild(foDocumentFacade.createText(sheet
+            .getSheetName()));
+        titleBlock.appendChild(titleInline);
+        flow.appendChild(titleBlock);
 
         Element titleBlock2 = foDocumentFacade.createBlock();
         Element titleInline2 = foDocumentFacade.createInline();
-        titleBlock2.appendChild( titleInline2 );
-        flow.appendChild( titleBlock2 );
+        titleBlock2.appendChild(titleInline2);
+        flow.appendChild(titleBlock2);
     }
 
-    public void processWorkbook( HSSFWorkbook workbook )
-    {
+    public void processWorkbook(HSSFWorkbook workbook) {
         final SummaryInformation summaryInformation = workbook
-                .getSummaryInformation();
-        if ( summaryInformation != null )
-        {
-            processDocumentInformation( summaryInformation );
+            .getSummaryInformation();
+        if (summaryInformation != null) {
+            processDocumentInformation(summaryInformation);
         }
 
-        for ( int s = 0; s < workbook.getNumberOfSheets(); s++ )
-        {
-            processSheet( workbook, s );
+        for (int s = 0; s < workbook.getNumberOfSheets(); s++) {
+            processSheet(workbook, s);
         }
     }
 
-    private void setBlockProperties( Element textBlock, Triplet triplet )
-    {
-        if ( triplet.bold )
-            textBlock.setAttribute( "font-weight", "bold" );
+    private void setBlockProperties(Element textBlock, Triplet triplet) {
+        if (triplet.bold) {
+            textBlock.setAttribute("font-weight", "bold");
+        }
 
-        if ( triplet.italic )
-            textBlock.setAttribute( "font-style", "italic" );
+        if (triplet.italic) {
+            textBlock.setAttribute("font-style", "italic");
+        }
 
-        if ( AbstractExcelUtils.isNotEmpty( triplet.fontName ) )
-            textBlock.setAttribute( "font-family", triplet.fontName );
+        if (isNotEmpty(triplet.fontName)) {
+            textBlock.setAttribute("font-family", triplet.fontName);
+        }
     }
 
-    public void setPageMarginInches( float pageMarginInches )
-    {
+    public void setPageMarginInches(float pageMarginInches) {
         this.pageMarginInches = pageMarginInches;
     }
 



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