From c2bce0370e6e8df5bd3f6d4433593f5e80192b82 Mon Sep 17 00:00:00 2001 From: Tim Allison Date: Fri, 17 Mar 2017 10:09:59 +0000 Subject: [PATCH] 60826 -- clean up. Many, many thanks to Javen O'Neal's code review! git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1787320 13f79535-47bb-0310-9956-ffa450edef68 --- .../java/org/apache/poi/POIXMLRelation.java | 36 ++++++ .../poi/xssf/XLSBUnsupportedException.java | 2 +- .../poi/xssf/binary/XSSFBCellHeader.java | 7 +- .../poi/xssf/binary/XSSFBCellRange.java | 6 +- .../apache/poi/xssf/binary/XSSFBComment.java | 3 + .../poi/xssf/binary/XSSFBCommentsTable.java | 24 +--- .../poi/xssf/binary/XSSFBHeaderFooter.java | 13 ++- .../poi/xssf/binary/XSSFBHeaderFooters.java | 4 + .../poi/xssf/binary/XSSFBHyperlinksTable.java | 5 +- .../poi/xssf/binary/XSSFBParseException.java | 4 +- .../apache/poi/xssf/binary/XSSFBParser.java | 11 +- .../poi/xssf/binary/XSSFBRecordType.java | 23 +++- .../apache/poi/xssf/binary/XSSFBRelation.java | 28 ----- .../apache/poi/xssf/binary/XSSFBRichStr.java | 3 + .../poi/xssf/binary/XSSFBRichTextString.java | 10 ++ .../xssf/binary/XSSFBSharedStringsTable.java | 13 ++- .../poi/xssf/binary/XSSFBSheetHandler.java | 5 +- .../poi/xssf/binary/XSSFBStylesTable.java | 6 + .../apache/poi/xssf/binary/XSSFBUtils.java | 3 + .../poi/xssf/binary/XSSFHyperlinkRecord.java | 1 + .../org/apache/poi/xssf/binary/package.html | 6 +- .../poi/xssf/eventusermodel/XSSFBReader.java | 2 + .../poi/xssf/eventusermodel/XSSFReader.java | 8 +- .../XSSFBEventBasedExcelExtractor.java | 34 +++--- .../XSSFEventBasedExcelExtractor.java | 85 ++++++++++++-- .../poi/xssf/extractor/XSSFImportFromXML.java | 2 +- .../poi/xssf/model/SharedStringsTable.java | 2 +- .../apache/poi/xssf/streaming/SXSSFCell.java | 4 +- .../xssf/streaming/SXSSFFormulaEvaluator.java | 2 +- .../apache/poi/xssf/usermodel/XSSFName.java | 16 +-- .../poi/xssf/usermodel/XSSFPivotTable.java | 30 ++++- .../poi/xssf/usermodel/XSSFRelation.java | 32 ----- .../poi/extractor/TestExtractorFactory.java | 12 +- .../xssf/eventusermodel/TestXSSFBReader.java | 109 ++++++++---------- .../TestXSSFBEventBasedExcelExtractor.java | 8 +- .../TestXSSFEventBasedExcelExtractor.java | 36 +++--- 36 files changed, 349 insertions(+), 246 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/POIXMLRelation.java b/src/ooxml/java/org/apache/poi/POIXMLRelation.java index 6caa5af928..571ae5ab73 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLRelation.java +++ b/src/ooxml/java/org/apache/poi/POIXMLRelation.java @@ -16,11 +16,26 @@ ==================================================================== */ package org.apache.poi; +import java.io.IOException; +import java.io.InputStream; +import java.util.Iterator; + +import org.apache.poi.openxml4j.exceptions.InvalidFormatException; +import org.apache.poi.openxml4j.opc.PackagePart; +import org.apache.poi.openxml4j.opc.PackagePartName; +import org.apache.poi.openxml4j.opc.PackageRelationship; +import org.apache.poi.openxml4j.opc.PackageRelationshipCollection; +import org.apache.poi.openxml4j.opc.PackagingURIHelper; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; + /** * Represents a descriptor of a OOXML relation. */ public abstract class POIXMLRelation { + private static final POILogger log = POILogFactory.getLogger(POIXMLRelation.class); + /** * Describes the content stored in a part. */ @@ -131,4 +146,25 @@ public abstract class POIXMLRelation { public Class getRelationClass(){ return _cls; } + + /** + * Fetches the InputStream to read the contents, based + * of the specified core part, for which we are defined + * as a suitable relationship + * + * @since 3.16-beta3 + */ + public InputStream getContents(PackagePart corePart) throws IOException, InvalidFormatException { + PackageRelationshipCollection prc = + corePart.getRelationshipsByType(getRelation()); + Iterator it = prc.iterator(); + if(it.hasNext()) { + PackageRelationship rel = it.next(); + PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI()); + PackagePart part = corePart.getPackage().getPart(relName); + return part.getInputStream(); + } + log.log(POILogger.WARN, "No part " + getDefaultFileName() + " found"); + return null; + } } diff --git a/src/ooxml/java/org/apache/poi/xssf/XLSBUnsupportedException.java b/src/ooxml/java/org/apache/poi/xssf/XLSBUnsupportedException.java index c6ebcff542..6834d81001 100644 --- a/src/ooxml/java/org/apache/poi/xssf/XLSBUnsupportedException.java +++ b/src/ooxml/java/org/apache/poi/xssf/XLSBUnsupportedException.java @@ -20,7 +20,7 @@ import org.apache.poi.UnsupportedFileFormatException; /** * We don't support .xlsb for read and write via {@link org.apache.poi.xssf.usermodel.XSSFWorkbook}. - * As of POI 3.15-beta3, we do support streaming reading of xlsb files + * As of POI 3.16-beta3, we do support streaming reading of xlsb files * via {@link org.apache.poi.xssf.eventusermodel.XSSFBReader} */ public class XLSBUnsupportedException extends UnsupportedFileFormatException { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellHeader.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellHeader.java index 5b427ae815..771920975f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellHeader.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellHeader.java @@ -17,7 +17,6 @@ package org.apache.poi.xssf.binary; -import org.apache.poi.ss.util.CellReference; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; @@ -25,6 +24,8 @@ import org.apache.poi.util.LittleEndian; * This class encapsulates what the spec calls a "Cell" object. * I added "Header" to clarify that this does not contain the contents * of the cell, only the column number, the style id and the phonetic boolean + * + * @since 3.16-beta3 */ @Internal class XSSFBCellHeader { @@ -61,10 +62,6 @@ class XSSFBCellHeader { return colNum; } - String formatAddressAsString() { - return CellReference.convertNumToColString(colNum)+(rowNum+1); - } - int getStyleIdx() { return styleIdx; } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellRange.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellRange.java index 3e2e79d8d1..b8d507d275 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellRange.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCellRange.java @@ -21,10 +21,14 @@ package org.apache.poi.xssf.binary; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +/** + * @since 3.16-beta3 + */ @Internal class XSSFBCellRange { + //TODO: Convert this to generate an AreaReference - public final static int length = 4* LittleEndian.INT_SIZE; + public static final int length = 4* LittleEndian.INT_SIZE; /** * Parses an RfX cell range from the data starting at the offset. * This performs no range checking. diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBComment.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBComment.java index ae7c1c56ed..ed3b918f33 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBComment.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBComment.java @@ -24,6 +24,9 @@ import org.apache.poi.ss.util.CellAddress; import org.apache.poi.util.Internal; import org.apache.poi.xssf.usermodel.XSSFComment; +/** + * @since 3.16-beta3 + */ @Internal class XSSFBComment extends XSSFComment { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCommentsTable.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCommentsTable.java index 642eaf99b8..6504a6df16 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCommentsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBCommentsTable.java @@ -20,7 +20,6 @@ package org.apache.poi.xssf.binary; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; -import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -31,10 +30,13 @@ import org.apache.poi.ss.util.CellAddress; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +/** + * @since 3.16-beta3 + */ @Internal public class XSSFBCommentsTable extends XSSFBParser { - private Map comments = new TreeMap(new CellAddressComparator());//String is the cellAddress A1 + private Map comments = new TreeMap(); private Queue commentAddresses = new LinkedList(); private List authors = new ArrayList(); @@ -92,22 +94,4 @@ public class XSSFBCommentsTable extends XSSFBParser { } return comments.get(cellAddress); } - - private final static class CellAddressComparator implements Comparator { - - @Override - public int compare(CellAddress o1, CellAddress o2) { - if (o1.getRow() < o2.getRow()) { - return -1; - } else if (o1.getRow() > o2.getRow()) { - return 1; - } - if (o1.getColumn() < o2.getColumn()) { - return -1; - } else if (o1.getColumn() > o2.getColumn()) { - return 1; - } - return 0; - } - } } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooter.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooter.java index 1f43e35dce..674ed4410b 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooter.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooter.java @@ -20,12 +20,17 @@ package org.apache.poi.xssf.binary; import org.apache.poi.util.Internal; import org.apache.poi.xssf.usermodel.helpers.HeaderFooterHelper; +/** + * @since 3.16-beta3 + */ @Internal class XSSFBHeaderFooter { + + private static final HeaderFooterHelper HEADER_FOOTER_HELPER = new HeaderFooterHelper(); + private final String headerFooterTypeLabel; private final boolean isHeader; private String rawString; - private HeaderFooterHelper headerFooterHelper = new HeaderFooterHelper(); XSSFBHeaderFooter(String headerFooterTypeLabel, boolean isHeader) { @@ -43,9 +48,9 @@ class XSSFBHeaderFooter { String getString() { StringBuilder sb = new StringBuilder(); - String left = headerFooterHelper.getLeftSection(rawString); - String center = headerFooterHelper.getCenterSection(rawString); - String right = headerFooterHelper.getRightSection(rawString); + String left = HEADER_FOOTER_HELPER.getLeftSection(rawString); + String center = HEADER_FOOTER_HELPER.getCenterSection(rawString); + String right = HEADER_FOOTER_HELPER.getRightSection(rawString); if (left != null && left.length() > 0) { sb.append(left); } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooters.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooters.java index c70b7843e3..a0e01832de 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooters.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHeaderFooters.java @@ -18,10 +18,14 @@ package org.apache.poi.xssf.binary; import org.apache.poi.util.Internal; +/** + * @since 3.16-beta3 + */ @Internal class XSSFBHeaderFooters { public static XSSFBHeaderFooters parse(byte[] data) { + //parse these at some point. boolean diffOddEven = false; boolean diffFirst = false; boolean scaleWDoc = false; diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHyperlinksTable.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHyperlinksTable.java index 28c020c57b..049245f393 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHyperlinksTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBHyperlinksTable.java @@ -36,10 +36,13 @@ import org.apache.poi.ss.util.CellRangeUtil; import org.apache.poi.util.Internal; import org.apache.poi.xssf.usermodel.XSSFRelation; +/** + * @since 3.16-beta3 + */ @Internal public class XSSFBHyperlinksTable { - private final static BitSet RECORDS = new BitSet(); + private static final BitSet RECORDS = new BitSet(); static { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParseException.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParseException.java index 69ba7f041c..7098bbe26e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParseException.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParseException.java @@ -18,7 +18,9 @@ package org.apache.poi.xssf.binary; /** - * Parse exception while reading an xssfb + * Parse exception while reading an xssfb. + * + * @since 3.16-beta3 */ public class XSSFBParseException extends RuntimeException { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParser.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParser.java index cace843160..2dd9caed28 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParser.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBParser.java @@ -25,9 +25,11 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndianInputStream; /** - * Experimental parser for Microsoft's ooxml xssfb format. + * Experimental parser for Microsoft's ooxml xlsb format. * Not thread safe, obviously. Need to create a new one * for each thread. + * + * @since 3.16-beta3 */ @Internal public abstract class XSSFBParser { @@ -40,6 +42,11 @@ public abstract class XSSFBParser { records = null; } + /** + * + * @param is inputStream + * @param bitSet call {@link #handleRecord(int, byte[])} only on those records in this bitSet + */ XSSFBParser(InputStream is, BitSet bitSet) { this.is = new LittleEndianInputStream(is); records = bitSet; @@ -98,7 +105,7 @@ public abstract class XSSFBParser { //However, on a large Excel spreadsheet, this parser was 1/3 faster than //the ooxml sax parser (5 seconds for xssfb and 7.5 seconds for xssf. //The code is far cleaner to have the parser read all - //of the data rather than having every component promise that it read + //of the data rather than having every component promise that it will read //the correct amount. abstract public void handleRecord(int recordType, byte[] data) throws XSSFBParseException; diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRecordType.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRecordType.java index 65663f7fd5..436dee986f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRecordType.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRecordType.java @@ -17,8 +17,14 @@ package org.apache.poi.xssf.binary; +import java.util.HashMap; +import java.util.Map; + import org.apache.poi.util.Internal; +/** + * @since 3.16-beta3 + */ @Internal public enum XSSFBRecordType { @@ -69,6 +75,14 @@ public enum XSSFBRecordType { BrtBundleSh(156), //defines worksheet in wb part Unimplemented(-1); + private static final Map TYPE_MAP = + new HashMap(); + + static { + for (XSSFBRecordType type : XSSFBRecordType.values()) { + TYPE_MAP.put(type.getId(), type); + } + } private final int id; @@ -81,12 +95,11 @@ public enum XSSFBRecordType { } public static XSSFBRecordType lookup(int id) { - for (XSSFBRecordType r : XSSFBRecordType.values()) { - if (r.id == id) { - return r; - } + XSSFBRecordType type = TYPE_MAP.get(id); + if (type == null) { + return Unimplemented; } - return Unimplemented; + return type; } } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRelation.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRelation.java index 3f0b0286dc..16cd7a414c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRelation.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRelation.java @@ -17,19 +17,9 @@ package org.apache.poi.xssf.binary; -import java.io.IOException; -import java.io.InputStream; -import java.util.Iterator; - import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.POIXMLRelation; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.openxml4j.opc.PackagePartName; -import org.apache.poi.openxml4j.opc.PackageRelationship; -import org.apache.poi.openxml4j.opc.PackageRelationshipCollection; import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; -import org.apache.poi.openxml4j.opc.PackagingURIHelper; import org.apache.poi.util.Internal; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -64,22 +54,4 @@ public class XSSFBRelation extends POIXMLRelation { super(type, rel, defaultName, cls); } - /** - * Fetches the InputStream to read the contents, based - * of the specified core part, for which we are defined - * as a suitable relationship - */ - public InputStream getContents(PackagePart corePart) throws IOException, InvalidFormatException { - PackageRelationshipCollection prc = - corePart.getRelationshipsByType(getRelation()); - Iterator it = prc.iterator(); - if (it.hasNext()) { - PackageRelationship rel = it.next(); - PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI()); - PackagePart part = corePart.getPackage().getPart(relName); - return part.getInputStream(); - } - log.log(POILogger.WARN, "No part " + getDefaultFileName() + " found"); - return null; - } } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichStr.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichStr.java index e9ba59a4ea..7e18a1a4dc 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichStr.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichStr.java @@ -19,6 +19,9 @@ package org.apache.poi.xssf.binary; import org.apache.poi.util.Internal; +/** + * @since 3.16-beta3 + */ @Internal class XSSFBRichStr { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichTextString.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichTextString.java index 1fb5b54ae8..d9bfc8137c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichTextString.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBRichTextString.java @@ -19,11 +19,14 @@ package org.apache.poi.xssf.binary; import org.apache.poi.ss.usermodel.Font; import org.apache.poi.util.Internal; +import org.apache.poi.util.NotImplemented; import org.apache.poi.xssf.usermodel.XSSFRichTextString; /** * Wrapper class around String so that we can use it in Comment. * Nothing has been implemented yet except for {@link #getString()}. + * + * @since 3.16-beta3 */ @Internal class XSSFBRichTextString extends XSSFRichTextString { @@ -34,21 +37,25 @@ class XSSFBRichTextString extends XSSFRichTextString { } @Override + @NotImplemented public void applyFont(int startIndex, int endIndex, short fontIndex) { } @Override + @NotImplemented public void applyFont(int startIndex, int endIndex, Font font) { } @Override + @NotImplemented public void applyFont(Font font) { } @Override + @NotImplemented public void clearFormatting() { } @@ -64,16 +71,19 @@ class XSSFBRichTextString extends XSSFRichTextString { } @Override + @NotImplemented public int numFormattingRuns() { return 0; } @Override + @NotImplemented public int getIndexOfFormattingRun(int index) { return 0; } @Override + @NotImplemented public void applyFont(short fontIndex) { } diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java index 49d1a46f98..474cc4b15a 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSharedStringsTable.java @@ -28,6 +28,9 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; import org.xml.sax.SAXException; +/** + * @since 3.16-beta3 + */ @Internal public class XSSFBSharedStringsTable { @@ -69,8 +72,6 @@ public class XSSFBSharedStringsTable { /** * Like POIXMLDocumentPart constructor - * - * @since POI 3.14-Beta3 */ XSSFBSharedStringsTable(PackagePart part) throws IOException, SAXException { readFrom(part.getInputStream()); @@ -81,8 +82,14 @@ public class XSSFBSharedStringsTable { reader.parse(); } + /** + * + * @return a defensive copy of strings + */ public List getItems() { - return strings; + List ret = new ArrayList(strings.size()); + ret.addAll(strings); + return ret; } public String getEntryAt(int i) { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSheetHandler.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSheetHandler.java index ca5dab5a38..803306d407 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSheetHandler.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBSheetHandler.java @@ -29,10 +29,13 @@ import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler; import org.apache.poi.xssf.usermodel.XSSFComment; import org.apache.poi.xssf.usermodel.XSSFRichTextString; +/** + * @since 3.16-beta3 + */ @Internal public class XSSFBSheetHandler extends XSSFBParser { - private final static int CHECK_ALL_ROWS = -1; + private static final int CHECK_ALL_ROWS = -1; private final XSSFBSharedStringsTable stringsTable; private final XSSFSheetXMLHandler.SheetContentsHandler handler; diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBStylesTable.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBStylesTable.java index 8584e95330..10f3412a1e 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBStylesTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBStylesTable.java @@ -28,6 +28,12 @@ import org.apache.poi.POIXMLException; import org.apache.poi.ss.usermodel.BuiltinFormats; import org.apache.poi.util.Internal; +/** + * This is a very thin shim to gather number formats from styles.bin + * files. + * + * @since 3.16-beta3 + */ @Internal public class XSSFBStylesTable extends XSSFBParser { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java index e3a46b0f04..448e50c0b7 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFBUtils.java @@ -24,6 +24,9 @@ import org.apache.poi.POIXMLException; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +/** + * @since 3.16-beta3 + */ @Internal public class XSSFBUtils { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFHyperlinkRecord.java b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFHyperlinkRecord.java index a02e8ce922..e2ac4df127 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/XSSFHyperlinkRecord.java +++ b/src/ooxml/java/org/apache/poi/xssf/binary/XSSFHyperlinkRecord.java @@ -29,6 +29,7 @@ import org.apache.poi.util.Internal; * The {@link #display} is often empty and should be filled from * the contents of the anchor cell. * + * @since 3.16-beta3 */ @Internal public class XSSFHyperlinkRecord { diff --git a/src/ooxml/java/org/apache/poi/xssf/binary/package.html b/src/ooxml/java/org/apache/poi/xssf/binary/package.html index c7e4a018bc..21a30e1df9 100644 --- a/src/ooxml/java/org/apache/poi/xssf/binary/package.html +++ b/src/ooxml/java/org/apache/poi/xssf/binary/package.html @@ -27,17 +27,17 @@ for streaming/read-only processing of xlsb files.

POI does not yet support opening .xlsb files with XSSFWorkbook, but you can read files with XSSFBReader - in o.a.p.xssf.eventusermodel. + in org.apache.poi.xssf.eventusermodel.

- This feature was added in poi-3.15-beta3 and should be considered experimental. Most classes + This feature was added in poi-3.16-beta3 and should be considered experimental. Most classes have been marked @Internal and the API is subject to change.

Related Documentation

For overviews, tutorials, examples, guides, and tool documentation, please see: diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java index b8f54cdf53..cd8a208455 100644 --- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java +++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFBReader.java @@ -44,6 +44,8 @@ import org.apache.poi.xssf.usermodel.XSSFRelation; /** * Reader for xlsb files. + * + * @since 3.16-beta3 */ public class XSSFBReader extends XSSFReader { /** diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java index 5b43c20101..08dfaa6ff8 100644 --- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java +++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java @@ -380,7 +380,7 @@ public class XSSFReader { } } - protected final static class XSSFSheetRef { + protected static final class XSSFSheetRef { //do we need to store sheetId, too? private final String id; private final String name; @@ -401,9 +401,9 @@ public class XSSFReader { //scrapes sheet reference info and order from workbook.xml private static class XMLSheetRefReader extends DefaultHandler { - private final static String SHEET = "sheet"; - private final static String ID = "id"; - private final static String NAME = "name"; + private static final String SHEET = "sheet"; + private static final String ID = "id"; + private static final String NAME = "name"; private final List sheetRefs = new LinkedList(); diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFBEventBasedExcelExtractor.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFBEventBasedExcelExtractor.java index b3e667e4a7..4e2a5c27b9 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFBEventBasedExcelExtractor.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFBEventBasedExcelExtractor.java @@ -23,6 +23,8 @@ import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; import org.apache.poi.xssf.binary.XSSFBCommentsTable; import org.apache.poi.xssf.binary.XSSFBHyperlinksTable; import org.apache.poi.xssf.binary.XSSFBSharedStringsTable; @@ -37,11 +39,15 @@ import org.xml.sax.SAXException; /** * Implementation of a text extractor or xlsb Excel * files that uses SAX-like binary parsing. + * + * @since 3.16-beta3 */ public class XSSFBEventBasedExcelExtractor extends XSSFEventBasedExcelExtractor implements org.apache.poi.ss.extractor.ExcelExtractor { - public static final XSSFRelation[] SUPPORTED_TYPES = new XSSFRelation[] { + private static final POILogger LOGGER = POILogFactory.getLogger(XSSFBEventBasedExcelExtractor.class); + + public static final XSSFRelation[] SUPPORTED_TYPES = new XSSFRelation[]{ XSSFRelation.XLSB_BINARY_WORKBOOK }; @@ -93,15 +99,15 @@ public class XSSFBEventBasedExcelExtractor extends XSSFEventBasedExcelExtractor throws IOException, SAXException { DataFormatter formatter; - if (locale == null) { + if (getLocale() == null) { formatter = new DataFormatter(); } else { - formatter = new DataFormatter(locale); + formatter = new DataFormatter(getLocale()); } XSSFBSheetHandler xssfbSheetHandler = new XSSFBSheetHandler( sheetInputStream, - styles, comments, strings, sheetContentsExtractor, formatter, formulasNotResults + styles, comments, strings, sheetContentsExtractor, formatter, getFormulasNotResults() ); xssfbSheetHandler.parse(); } @@ -111,8 +117,8 @@ public class XSSFBEventBasedExcelExtractor extends XSSFEventBasedExcelExtractor */ public String getText() { try { - XSSFBSharedStringsTable strings = new XSSFBSharedStringsTable(container); - XSSFBReader xssfbReader = new XSSFBReader(container); + XSSFBSharedStringsTable strings = new XSSFBSharedStringsTable(getPackage()); + XSSFBReader xssfbReader = new XSSFBReader(getPackage()); XSSFBStylesTable styles = xssfbReader.getXSSFBStylesTable(); XSSFBReader.SheetIterator iter = (XSSFBReader.SheetIterator) xssfbReader.getSheetsData(); @@ -121,23 +127,23 @@ public class XSSFBEventBasedExcelExtractor extends XSSFEventBasedExcelExtractor XSSFBHyperlinksTable hyperlinksTable = null; while (iter.hasNext()) { InputStream stream = iter.next(); - if (includeSheetNames) { + if (getIncludeSheetNames()) { text.append(iter.getSheetName()); text.append('\n'); } if (handleHyperlinksInCells) { hyperlinksTable = new XSSFBHyperlinksTable(iter.getSheetPart()); } - XSSFBCommentsTable comments = includeCellComments ? iter.getXSSFBSheetComments() : null; + XSSFBCommentsTable comments = getIncludeCellComments() ? iter.getXSSFBSheetComments() : null; processSheet(sheetExtractor, styles, comments, strings, stream); - if (includeHeadersFooters) { + if (getIncludeHeadersFooters()) { sheetExtractor.appendHeaderText(text); } sheetExtractor.appendCellText(text); - if (includeTextBoxes) { + if (getIncludeTextBoxes()) { processShapes(iter.getShapes(), text); } - if (includeHeadersFooters) { + if (getIncludeHeadersFooters()) { sheetExtractor.appendFooterText(text); } sheetExtractor.reset(); @@ -146,13 +152,13 @@ public class XSSFBEventBasedExcelExtractor extends XSSFEventBasedExcelExtractor return text.toString(); } catch (IOException e) { - System.err.println(e); + LOGGER.log(POILogger.WARN, e); return null; } catch (SAXException se) { - System.err.println(se); + LOGGER.log(POILogger.WARN, se); return null; } catch (OpenXML4JException o4je) { - System.err.println(o4je); + LOGGER.log(POILogger.WARN, o4je); return null; } } diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java index 2cfa099d9d..dd14c6cd08 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFEventBasedExcelExtractor.java @@ -32,6 +32,8 @@ import org.apache.poi.POIXMLTextExtractor; import org.apache.poi.openxml4j.exceptions.OpenXML4JException; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; import org.apache.poi.util.SAXHelper; import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable; import org.apache.poi.xssf.eventusermodel.XSSFReader; @@ -54,15 +56,18 @@ import org.xml.sax.XMLReader; */ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor implements org.apache.poi.ss.extractor.ExcelExtractor { - OPCPackage container; + + private static final POILogger LOGGER = POILogFactory.getLogger(XSSFEventBasedExcelExtractor.class); + + private OPCPackage container; private POIXMLProperties properties; - Locale locale; - boolean includeTextBoxes = true; - boolean includeSheetNames = true; - boolean includeCellComments = false; - boolean includeHeadersFooters = true; - boolean formulasNotResults = false; + private Locale locale; + private boolean includeTextBoxes = true; + private boolean includeSheetNames = true; + private boolean includeCellComments = false; + private boolean includeHeadersFooters = true; + private boolean formulasNotResults = false; private boolean concatenatePhoneticRuns = true; public XSSFEventBasedExcelExtractor(String path) throws XmlException, OpenXML4JException, IOException { @@ -93,6 +98,18 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor public void setIncludeSheetNames(boolean includeSheetNames) { this.includeSheetNames = includeSheetNames; } + + + /** + * + * @return whether to include sheet names + * + * @since 3.16-beta3 + */ + public boolean getIncludeSheetNames() { + return includeSheetNames; + } + /** * Should we return the formula itself, and not * the result it produces? Default is false @@ -100,12 +117,33 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor public void setFormulasNotResults(boolean formulasNotResults) { this.formulasNotResults = formulasNotResults; } + + /** + * + * @return whether to include formulas but not results + * + * @since 3.16-beta3 + */ + public boolean getFormulasNotResults() { + return formulasNotResults; + } + /** * Should headers and footers be included? Default is true */ public void setIncludeHeadersFooters(boolean includeHeadersFooters) { this.includeHeadersFooters = includeHeadersFooters; } + + /** + * + * @return whether or not to include headers and footers + * + * @since 3.16-beta3 + */ + public boolean getIncludeHeadersFooters() { + return includeHeadersFooters; + } /** * Should text from textboxes be included? Default is true */ @@ -113,6 +151,15 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor this.includeTextBoxes = includeTextBoxes; } + /** + * + * @return whether or not to extract textboxes + * + * @since 3.16-beta3 + */ + public boolean getIncludeTextBoxes() { + return includeTextBoxes; + } /** * Should cell comments be included? Default is false */ @@ -120,6 +167,14 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor this.includeCellComments = includeCellComments; } + /** + * @return whether cell comments should be included + * + * @since 3.16-beta3 + */ + public boolean getIncludeCellComments() { + return includeCellComments; + } /** * Concatenate text from <rPh> text elements in SharedStringsTable * Default is true; @@ -132,6 +187,14 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor this.locale = locale; } + /** + * @return locale + * + * @since 3.16-beta3 + */ + public Locale getLocale() { + return locale; + } /** * Returns the opened OPCPackage container. */ @@ -162,6 +225,8 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor return properties.getCustomProperties(); } + + /** * Processes the given sheet */ @@ -229,13 +294,13 @@ public class XSSFEventBasedExcelExtractor extends POIXMLTextExtractor return text.toString(); } catch(IOException e) { - System.err.println(e); + LOGGER.log(POILogger.WARN, e); return null; } catch(SAXException se) { - System.err.println(se); + LOGGER.log(POILogger.WARN, se); return null; } catch(OpenXML4JException o4je) { - System.err.println(o4je); + LOGGER.log(POILogger.WARN, o4je); return null; } } diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java index 0ddf9fec86..4f09db6354 100644 --- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java +++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFImportFromXML.java @@ -71,7 +71,7 @@ public class XSSFImportFromXML { private final XSSFMap _map; - private final static POILogger logger = POILogFactory.getLogger(XSSFImportFromXML.class); + private static final POILogger logger = POILogFactory.getLogger(XSSFImportFromXML.class); public XSSFImportFromXML(XSSFMap map) { _map = map; diff --git a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java index 490a660595..59526d33e9 100644 --- a/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/model/SharedStringsTable.java @@ -85,7 +85,7 @@ public class SharedStringsTable extends POIXMLDocumentPart { private SstDocument _sstDoc; - private final static XmlOptions options = new XmlOptions(); + private static final XmlOptions options = new XmlOptions(); static { options.put( XmlOptions.SAVE_INNER ); options.put( XmlOptions.SAVE_AGGRESSIVE_NAMESPACES ); diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java index d95dca157a..d0615b30c6 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFCell.java @@ -1069,8 +1069,8 @@ public class SXSSFCell implements Cell { static abstract class Property { - final static int COMMENT=1; - final static int HYPERLINK=2; + static final int COMMENT=1; + static final int HYPERLINK=2; Object _value; Property _next; public Property(Object value) diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java index d6e258e9c6..a995a08b5f 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFFormulaEvaluator.java @@ -34,7 +34,7 @@ import org.apache.poi.xssf.usermodel.BaseXSSFFormulaEvaluator; * lookup cells within the current Window. */ public final class SXSSFFormulaEvaluator extends BaseXSSFFormulaEvaluator { - private final static POILogger logger = POILogFactory.getLogger(SXSSFFormulaEvaluator.class); + private static final POILogger logger = POILogFactory.getLogger(SXSSFFormulaEvaluator.class); private SXSSFWorkbook wb; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java index dd6fbccc7c..1e97f82753 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFName.java @@ -59,19 +59,19 @@ public final class XSSFName implements Name { /** * A built-in defined name that specifies the workbook's print area */ - public final static String BUILTIN_PRINT_AREA = "_xlnm.Print_Area"; + public static final String BUILTIN_PRINT_AREA = "_xlnm.Print_Area"; /** * A built-in defined name that specifies the row(s) or column(s) to repeat * at the top of each printed page. */ - public final static String BUILTIN_PRINT_TITLE = "_xlnm.Print_Titles"; + public static final String BUILTIN_PRINT_TITLE = "_xlnm.Print_Titles"; /** * A built-in defined name that refers to a range containing the criteria values * to be used in applying an advanced filter to a range of data */ - public final static String BUILTIN_CRITERIA = "_xlnm.Criteria:"; + public static final String BUILTIN_CRITERIA = "_xlnm.Criteria:"; /** @@ -79,7 +79,7 @@ public final class XSSFName implements Name { * output values resulting from applying an advanced filter criteria to a source * range */ - public final static String BUILTIN_EXTRACT = "_xlnm.Extract:"; + public static final String BUILTIN_EXTRACT = "_xlnm.Extract:"; /** * ?an be one of the following @@ -88,22 +88,22 @@ public final class XSSFName implements Name { *
  • This defined name refers to a range to which an AutoFilter has been * applied */ - public final static String BUILTIN_FILTER_DB = "_xlnm._FilterDatabase"; + public static final String BUILTIN_FILTER_DB = "_xlnm._FilterDatabase"; /** * A built-in defined name that refers to a consolidation area */ - public final static String BUILTIN_CONSOLIDATE_AREA = "_xlnm.Consolidate_Area"; + public static final String BUILTIN_CONSOLIDATE_AREA = "_xlnm.Consolidate_Area"; /** * A built-in defined name that specified that the range specified is from a database data source */ - public final static String BUILTIN_DATABASE = "_xlnm.Database"; + public static final String BUILTIN_DATABASE = "_xlnm.Database"; /** * A built-in defined name that refers to a sheet title. */ - public final static String BUILTIN_SHEET_TITLE = "_xlnm.Sheet_Title"; + public static final String BUILTIN_SHEET_TITLE = "_xlnm.Sheet_Title"; private XSSFWorkbook _workbook; private CTDefinedName _ctName; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java index f727583884..6f9009de28 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFPivotTable.java @@ -18,6 +18,7 @@ package org.apache.poi.xssf.usermodel; import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS; +import javax.xml.namespace.QName; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -25,8 +26,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import javax.xml.namespace.QName; - import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.openxml4j.opc.PackagePart; import org.apache.poi.ss.usermodel.Cell; @@ -40,13 +39,32 @@ import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlOptions; -import org.openxmlformats.schemas.spreadsheetml.x2006.main.*; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCacheSource; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColFields; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataField; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataFields; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTField; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTItems; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTLocation; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageField; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageFields; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotCacheDefinition; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotField; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFields; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotTableDefinition; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotTableStyle; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRowFields; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheetSource; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.STAxis; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataConsolidateFunction; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.STItemType; +import org.openxmlformats.schemas.spreadsheetml.x2006.main.STSourceType; public class XSSFPivotTable extends POIXMLDocumentPart { - protected final static short CREATED_VERSION = 3; - protected final static short MIN_REFRESHABLE_VERSION = 3; - protected final static short UPDATED_VERSION = 3; + protected static final short CREATED_VERSION = 3; + protected static final short MIN_REFRESHABLE_VERSION = 3; + protected static final short UPDATED_VERSION = 3; private CTPivotTableDefinition pivotTableDefinition; private XSSFPivotCacheDefinition pivotCacheDefinition; diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java index 204f1cd4b0..019d552a28 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFRelation.java @@ -16,24 +16,13 @@ ==================================================================== */ package org.apache.poi.xssf.usermodel; -import java.io.IOException; -import java.io.InputStream; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; import org.apache.poi.POIXMLDocument; import org.apache.poi.POIXMLDocumentPart; import org.apache.poi.POIXMLRelation; -import org.apache.poi.openxml4j.exceptions.InvalidFormatException; -import org.apache.poi.openxml4j.opc.PackagePart; -import org.apache.poi.openxml4j.opc.PackagePartName; -import org.apache.poi.openxml4j.opc.PackageRelationship; -import org.apache.poi.openxml4j.opc.PackageRelationshipCollection; import org.apache.poi.openxml4j.opc.PackageRelationshipTypes; -import org.apache.poi.openxml4j.opc.PackagingURIHelper; -import org.apache.poi.util.POILogFactory; -import org.apache.poi.util.POILogger; import org.apache.poi.xssf.model.CalculationChain; import org.apache.poi.xssf.model.CommentsTable; import org.apache.poi.xssf.model.ExternalLinksTable; @@ -49,8 +38,6 @@ import org.apache.poi.xssf.model.ThemesTable; */ public final class XSSFRelation extends POIXMLRelation { - private static final POILogger log = POILogFactory.getLogger(XSSFRelation.class); - /** * A map to lookup POIXMLRelation by its relation type */ @@ -368,25 +355,6 @@ public final class XSSFRelation extends POIXMLRelation { _table.put(rel, this); } - /** - * Fetches the InputStream to read the contents, based - * of the specified core part, for which we are defined - * as a suitable relationship - */ - public InputStream getContents(PackagePart corePart) throws IOException, InvalidFormatException { - PackageRelationshipCollection prc = - corePart.getRelationshipsByType(getRelation()); - Iterator it = prc.iterator(); - if(it.hasNext()) { - PackageRelationship rel = it.next(); - PackagePartName relName = PackagingURIHelper.createPartName(rel.getTargetURI()); - PackagePart part = corePart.getPackage().getPart(relName); - return part.getInputStream(); - } - log.log(POILogger.WARN, "No part " + getDefaultFileName() + " found"); - return null; - } - /** * Get POIXMLRelation by relation type * diff --git a/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java b/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java index 8405447c00..6e4eb8d4ab 100644 --- a/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java +++ b/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java @@ -175,16 +175,12 @@ public class TestExtractorFactory { extractor.close(); extractor = ExtractorFactory.createExtractor(xlsb); - assertTrue( - extractor.getText().contains("test") - ); + assertContains(extractor.getText(), "test"); extractor.close(); extractor = ExtractorFactory.createExtractor(xltx); - assertTrue( - extractor.getText().contains("test") - ); + assertContains(extractor.getText(), "test"); extractor.close(); // TODO Support OOXML-Strict, see bug #57699 @@ -258,9 +254,7 @@ public class TestExtractorFactory { extractor.close(); extractor = ExtractorFactory.createExtractor(dotx); - assertTrue( - extractor.getText().contains("Test") - ); + assertContains(extractor.getText(), "Test"); extractor.close(); // PowerPoint (PPT) diff --git a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFBReader.java b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFBReader.java index 57e1e836c7..6ea5332760 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFBReader.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFBReader.java @@ -17,9 +17,9 @@ package org.apache.poi.xssf.eventusermodel; +import static org.apache.poi.POITestCase.assertContains; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import java.io.InputStream; import java.util.ArrayList; @@ -44,54 +44,52 @@ public class TestXSSFBReader { assertEquals(1, sheetTexts.size()); String xsxml = sheetTexts.get(0); - assertContains("This is a string", xsxml); - assertContains("13", xsxml); - assertContains("13.12112313", xsxml); - assertContains("$ 3.03", xsxml); - assertContains("20%", xsxml); - assertContains("13.12", xsxml); - assertContains("1.23457E+14", xsxml); - assertContains("1.23457E+15", xsxml); - - assertContains("46/1963", xsxml);//custom format 1 - assertContains("3/128", xsxml);//custom format 2 - - assertContains("\n" + + assertContains(xsxml, "This is a string"); + assertContains(xsxml, "13"); + assertContains(xsxml, "13.12112313"); + assertContains(xsxml, "$ 3.03"); + assertContains(xsxml, "20%"); + assertContains(xsxml, "13.12"); + assertContains(xsxml, "1.23457E+14"); + assertContains(xsxml, "1.23457E+15"); + + assertContains(xsxml, "46/1963");//custom format 1 + assertContains(xsxml, "3/128");//custom format 2 + + assertContains(xsxml, "\n" + "\tlonger int\n" + "\t1.23457E+15\n" + "\tAllison, Timothy B.:\n" + "test comment2\n" + - "", xsxml); + ""); - assertContains("\n" + + assertContains(xsxml, "\n" + "\tcomment6Allison, Timothy B.:\n" + "comment6 actually in cell\n" + - "", xsxml); + ""); - assertContains("\n" + + assertContains(xsxml, "\n" + "\tAllison, Timothy B.:\n" + "comment7 end of file\n" + - "", xsxml); + ""); - assertContains("\n" + + assertContains(xsxml, "\n" + "\tAllison, Timothy B.:\n" + "comment8 end of file\n" + - "", xsxml); - - assertContains("
    OddLeftHeader OddCenterHeader OddRightHeader
    ", xsxml); - assertContains("
    OddLeftFooter OddCenterFooter OddRightFooter
    ", xsxml); - assertContains( - "
    EvenLeftHeader EvenCenterHeader EvenRightHeader\n
    ", - xsxml); - assertContains( - "
    EvenLeftFooter EvenCenterFooter EvenRightFooter
    ", - xsxml); - assertContains( - "
    FirstPageLeftHeader FirstPageCenterHeader FirstPageRightHeader
    ", - xsxml); - assertContains( - "
    FirstPageLeftFooter FirstPageCenterFooter FirstPageRightFooter
    ", - xsxml); + ""); + + assertContains(xsxml, + "
    OddLeftHeader OddCenterHeader OddRightHeader
    "); + assertContains(xsxml, + "
    OddLeftFooter OddCenterFooter OddRightFooter
    "); + assertContains(xsxml, + "
    EvenLeftHeader EvenCenterHeader EvenRightHeader\n
    "); + assertContains(xsxml, + "
    EvenLeftFooter EvenCenterFooter EvenRightFooter
    "); + assertContains(xsxml, + "
    FirstPageLeftHeader FirstPageCenterHeader FirstPageRightHeader
    "); + assertContains(xsxml, + "
    FirstPageLeftFooter FirstPageCenterFooter FirstPageRightFooter
    "); } @@ -99,25 +97,24 @@ public class TestXSSFBReader { public void testComments() throws Exception { List sheetTexts = getSheets("comments.xlsb"); String xsxml = sheetTexts.get(0); - assertContains( + assertContains(xsxml, "\n" + "\tcomment top row1 (index0)\n" + "\trow1\n" + - "", xsxml); - assertContains( + ""); + assertContains(xsxml, "\n" + "\tAllison, Timothy B.:\n" + "comment row2 (index1)\n" + - "", - xsxml); - assertContains("\n" + + ""); + assertContains(xsxml, "\n" + "\trow3comment top row3 (index2)\n" + - "\trow3\n", xsxml); + "\trow3\n"); - assertContains("\n" + + assertContains(xsxml, "\n" + "\tcomment top row4 (index3)\n" + "\trow4\n" + - "", xsxml); + ""); } @@ -131,7 +128,7 @@ public class TestXSSFBReader { assertNotNull(r.getXSSFBStylesTable()); XSSFBSharedStringsTable sst = new XSSFBSharedStringsTable(pkg); XSSFBStylesTable xssfbStylesTable = r.getXSSFBStylesTable(); - XSSFBReader.SheetIterator it = (XSSFBReader.SheetIterator)r.getSheetsData(); + XSSFBReader.SheetIterator it = (XSSFBReader.SheetIterator) r.getSheetsData(); while (it.hasNext()) { InputStream is = it.next(); @@ -152,22 +149,11 @@ public class TestXSSFBReader { } - //This converts all [\r\n\t]+ to " " - private void assertContains(String needle, String haystack) { - needle = needle.replaceAll("[\r\n\t]+", " "); - haystack = haystack.replaceAll("[\r\n\t]+", " "); - if (haystack.indexOf(needle) < 0) { - fail("couldn't find >"+needle+"< in: "+haystack ); - } - } - - @Test public void testDate() throws Exception { List sheets = getSheets("date.xlsb"); assertEquals(1, sheets.size()); - assertContains("1/12/13", sheets.get(0)); - + assertContains(sheets.get(0), "1/12/13"); } @@ -178,9 +164,10 @@ public class TestXSSFBReader { sb.append(""); } - public void endSheet(){ + public void endSheet() { sb.append(""); } + @Override public void startRow(int rowNum) { sb.append("\n"); @@ -209,9 +196,9 @@ public class TestXSSFBReader { @Override public void headerFooter(String text, boolean isHeader, String tagName) { if (isHeader) { - sb.append("
    "+text+"
    "); + sb.append("
    " + text + "
    "); } else { - sb.append("
    "+text+"
    "); + sb.append(""); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFBEventBasedExcelExtractor.java b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFBEventBasedExcelExtractor.java index da38882abb..a49a108217 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFBEventBasedExcelExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFBEventBasedExcelExtractor.java @@ -17,6 +17,7 @@ package org.apache.poi.xssf.extractor; +import static org.apache.poi.POITestCase.assertContains; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -90,10 +91,9 @@ public class TestXSSFBEventBasedExcelExtractor { try { String text = ooxmlExtractor.getText(); - - assertTrue(text.indexOf("Line 1") > -1); - assertTrue(text.indexOf("Line 2") > -1); - assertTrue(text.indexOf("Line 3") > -1); + assertContains(text, "Line 1"); + assertContains(text, "Line 2"); + assertContains(text, "Line 3"); } finally { ooxmlExtractor.close(); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFEventBasedExcelExtractor.java b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFEventBasedExcelExtractor.java index b6d411d508..55a1702872 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFEventBasedExcelExtractor.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFEventBasedExcelExtractor.java @@ -17,6 +17,7 @@ package org.apache.poi.xssf.extractor; +import static org.apache.poi.POITestCase.assertContains; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -130,21 +131,21 @@ public class TestXSSFEventBasedExcelExtractor { String text = extractor.getText(); // Numbers - assertTrue("Unable to find expected word in text\n" + text, text.contains("43")); - assertTrue("Unable to find expected word in text\n" + text, text.contains("22")); + assertContains(text, "43"); + assertContains(text, "22"); // Strings - assertTrue("Unable to find expected word in text\n" + text, text.contains("ABCDE")); - assertTrue("Unable to find expected word in text\n" + text, text.contains("Long Text")); - + assertContains(text, "ABCDE"); + assertContains(text, "Long Text"); + // Inline Strings - assertTrue("Unable to find expected word in text\n" + text, text.contains("1st Inline String")); - assertTrue("Unable to find expected word in text\n" + text, text.contains("And More")); - + assertContains(text, "1st Inline String"); + assertContains(text, "And More"); + // Formulas - assertTrue("Unable to find expected word in text\n" + text, text.contains("A2")); - assertTrue("Unable to find expected word in text\n" + text, text.contains("A5-A$2")); - + assertContains(text, "A2"); + assertContains(text, "A5-A$2"); + extractor.close(); } @@ -185,10 +186,9 @@ public class TestXSSFEventBasedExcelExtractor { try { String text = ooxmlExtractor.getText(); - - assertTrue(text.indexOf("Line 1") > -1); - assertTrue(text.indexOf("Line 2") > -1); - assertTrue(text.indexOf("Line 3") > -1); + assertContains(text, "Line 1"); + assertContains(text, "Line 2"); + assertContains(text, "Line 3"); } finally { ooxmlExtractor.close(); } @@ -356,8 +356,8 @@ public class TestXSSFEventBasedExcelExtractor { new XSSFEventBasedExcelExtractor( XSSFTestDataSamples.openSamplePackage("59021.xlsx")); String text = ex.getText(); - assertTrue("can't find Abhkazia", text.contains("Abkhazia - Fixed")); - assertTrue("can't find 10/02/2016", text.contains("10/02/2016")); + assertContains(text, "Abkhazia - Fixed"); + assertContains(text, "10/02/2016"); ex.close(); } @@ -368,7 +368,7 @@ public class TestXSSFEventBasedExcelExtractor { new XSSFEventBasedExcelExtractor( XSSFTestDataSamples.openSamplePackage("51519.xlsx")); String text = ex.getText(); - assertTrue("can't find appended phonetic run", text.contains("\u65E5\u672C\u30AA\u30E9\u30AF\u30EB \u30CB\u30DB\u30F3")); + assertContains(text, "\u65E5\u672C\u30AA\u30E9\u30AF\u30EB \u30CB\u30DB\u30F3"); ex.close(); //now try turning them off -- 2.39.5