diff --git a/src/java/org/apache/poi/poifs/filesystem/EntryUtils.java b/src/java/org/apache/poi/poifs/filesystem/EntryUtils.java index 0cc52e4d2..68bd85bae 100644 --- a/src/java/org/apache/poi/poifs/filesystem/EntryUtils.java +++ b/src/java/org/apache/poi/poifs/filesystem/EntryUtils.java @@ -158,6 +158,11 @@ public final class EntryUtils { : new DocumentDelegate((DocumentEntry)entry); } + @Override + public int hashCode() { + return dir.getName().hashCode(); + } + @Override public boolean equals(Object other) { if (!(other instanceof DirectoryDelegate)) { @@ -191,6 +196,11 @@ public final class EntryUtils { this.doc = doc; } + @Override + public int hashCode() { + return doc.getName().hashCode(); + } + @Override public boolean equals(Object other) { if (!(other instanceof DocumentDelegate)) { diff --git a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java index 88094f2e6..f9549cf54 100644 --- a/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java +++ b/src/java/org/apache/poi/poifs/nio/FileBackedDataSource.java @@ -127,9 +127,10 @@ public class FileBackedDataSource extends DataSource { @Override public void copyTo(OutputStream stream) throws IOException { // Wrap the OutputSteam as a channel - WritableByteChannel out = Channels.newChannel(stream); - // Now do the transfer - channel.transferTo(0, channel.size(), out); + try (WritableByteChannel out = Channels.newChannel(stream)) { + // Now do the transfer + channel.transferTo(0, channel.size(), out); + } } @Override diff --git a/src/java/org/apache/poi/ss/usermodel/TableStyleType.java b/src/java/org/apache/poi/ss/usermodel/TableStyleType.java index be7c84c69..870436a3b 100644 --- a/src/java/org/apache/poi/ss/usermodel/TableStyleType.java +++ b/src/java/org/apache/poi/ss/usermodel/TableStyleType.java @@ -65,7 +65,7 @@ public enum TableStyleType { // could do fancy math, but tables can't be that wide, a simple loop is fine // if not in this type of stripe, return null while (firstStart <= c) { - if (c >= firstStart && c <= secondStart -1) { + if (c <= secondStart -1) { return new CellRangeAddress(table.getStartRowIndex(), table.getEndRowIndex(), firstStart, secondStart - 1); } firstStart = secondStart + c2Stripe; @@ -121,7 +121,7 @@ public enum TableStyleType { // could do fancy math, but tables can't be that wide, a simple loop is fine // if not in this type of stripe, return null while (firstStart <= c) { - if (c >= firstStart && c <= secondStart -1) { + if (c <= secondStart -1) { return new CellRangeAddress(firstStart, secondStart - 1, table.getStartColIndex(), table.getEndColIndex()); } firstStart = secondStart + c2Stripe; diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java index 975e21d98..ecec63ce9 100644 --- a/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java +++ b/src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java @@ -101,7 +101,7 @@ public final class ZipPackage extends OPCPackage { */ ZipPackage(InputStream in, PackageAccess access) throws IOException { super(access); - ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in); + ZipArchiveThresholdInputStream zis = ZipHelper.openZipStream(in); // NOSONAR try { this.zipArchive = new ZipInputStreamZipEntrySource(zis); } catch (final IOException e) { diff --git a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java index 7ba6f8e2b..46815ea3a 100644 --- a/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xddf/usermodel/text/XDDFTextParagraph.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.Optional; import java.util.function.Function; +import org.apache.commons.collections4.iterators.IteratorIterable; +import org.apache.commons.collections4.iterators.ReverseListIterator; import org.apache.poi.util.Beta; import org.apache.poi.util.Internal; import org.apache.poi.util.LocaleUtil; @@ -97,8 +99,8 @@ public class XDDFTextParagraph { public XDDFTextRun appendLineBreak() { CTTextLineBreak br = _p.addNewBr(); // by default, line break has the font properties of the last text run - for (int i = _runs.size() - 1; i <= 0; i--) { - CTTextCharacterProperties prevProps = _runs.get(i).getProperties(); + for (XDDFTextRun tr : new IteratorIterable<>(new ReverseListIterator<>(_runs))) { + CTTextCharacterProperties prevProps = tr.getProperties(); // let's find one that is not undefined if (prevProps != null) { br.setRPr((CTTextCharacterProperties) prevProps.copy()); diff --git a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java index c066fcd2b..6fbcb1403 100644 --- a/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java +++ b/src/ooxml/java/org/apache/poi/xssf/streaming/SXSSFWorkbook.java @@ -931,8 +931,10 @@ public class SXSSFWorkbook implements Workbook { } //Substitute the template entries with the generated sheet data files - final ZipEntrySource source = new ZipFileZipEntrySource(new ZipSecureFile(tmplFile)); - injectData(source, stream); + try (ZipSecureFile zf = new ZipSecureFile(tmplFile); + ZipFileZipEntrySource source = new ZipFileZipEntrySource(zf)) { + injectData(source, stream); + } } finally { deleted = tmplFile.delete(); } diff --git a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java index 840e533ed..c971b3a92 100644 --- a/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java +++ b/src/ooxml/java/org/apache/poi/xwpf/usermodel/XWPFRun.java @@ -292,7 +292,7 @@ public class XWPFRun implements ISDTContents, IRunElement, CharacterRun { String color = null; if (run.isSetRPr()) { CTRPr pr = getRunProperties(false); - if (pr.isSetColor()) { + if (pr != null && pr.isSetColor()) { CTColor clr = pr.getColor(); color = clr.xgetVal().getStringValue(); } diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java index 0e6e76727..ecc360e13 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java @@ -46,8 +46,8 @@ import org.apache.poi.hslf.model.MovieShape; import org.apache.poi.hslf.record.*; import org.apache.poi.hslf.record.SlideListWithText.SlideAtomsSet; import org.apache.poi.poifs.filesystem.DirectoryNode; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.Ole10Native; +import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.sl.usermodel.MasterSheet; import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.sl.usermodel.Resources; @@ -595,6 +595,9 @@ public final class HSLFSlideShow implements SlideShow records = new ArrayList<>(); @@ -678,12 +684,14 @@ public final class HSLFSlideShow implements SlideShow createMasterSheet() throws IOException { + public MasterSheet createMasterSheet() { // TODO implement or throw exception if not supported return null; } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToTextConverter.java b/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToTextConverter.java index 0cdc68d63..b469df303 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToTextConverter.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/converter/WordToTextConverter.java @@ -17,6 +17,7 @@ package org.apache.poi.hwpf.converter; import java.io.File; +import java.io.IOException; import java.io.StringWriter; import java.lang.reflect.Method; import java.util.List; @@ -114,14 +115,13 @@ public class WordToTextConverter extends AbstractWordConverter serializer.transform( domSource, streamResult ); } - static Document process( File docFile ) throws Exception - { - final HWPFDocumentCore wordDocument = AbstractWordUtils - .loadDoc( docFile ); - WordToTextConverter wordToTextConverter = new WordToTextConverter( - XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument() ); - wordToTextConverter.processDocument( wordDocument ); - return wordToTextConverter.getDocument(); + private static Document process( File docFile ) throws IOException, ParserConfigurationException { + try (final HWPFDocumentCore wordDocument = AbstractWordUtils.loadDoc( docFile )) { + WordToTextConverter wordToTextConverter = new WordToTextConverter( + XMLHelper.getDocumentBuilderFactory().newDocumentBuilder().newDocument()); + wordToTextConverter.processDocument(wordDocument); + return wordToTextConverter.getDocument(); + } } private AtomicInteger noteCounters = new AtomicInteger( 1 ); @@ -153,12 +153,14 @@ public class WordToTextConverter extends AbstractWordConverter * @param document * XML DOM Document used as storage for text pieces */ - public WordToTextConverter( Document document ) + @SuppressWarnings("WeakerAccess") + public WordToTextConverter(Document document ) { this.textDocumentFacade = new TextDocumentFacade( document ); } - public WordToTextConverter( TextDocumentFacade textDocumentFacade ) + @SuppressWarnings("unused") + public WordToTextConverter(TextDocumentFacade textDocumentFacade ) { this.textDocumentFacade = textDocumentFacade; } @@ -192,6 +194,7 @@ public class WordToTextConverter extends AbstractWordConverter return stringWriter.toString(); } + @SuppressWarnings("WeakerAccess") public boolean isOutputSummaryInformation() { return outputSummaryInformation; @@ -275,7 +278,7 @@ public class WordToTextConverter extends AbstractWordConverter currentBlock.appendChild( textDocumentFacade.createText( " (" + UNICODECHAR_ZERO_WIDTH_SPACE - + hyperlink.replaceAll( "\\/", UNICODECHAR_ZERO_WIDTH_SPACE + + hyperlink.replaceAll( "/", UNICODECHAR_ZERO_WIDTH_SPACE + "\\/" + UNICODECHAR_ZERO_WIDTH_SPACE ) + UNICODECHAR_ZERO_WIDTH_SPACE + ")" ) ); } @@ -307,9 +310,7 @@ public class WordToTextConverter extends AbstractWordConverter block.appendChild( textDocumentFacade.createText( "\n" ) ); } - protected void processNote( HWPFDocument wordDocument, Element block, - Range noteTextRange ) - { + private void processNote( HWPFDocument wordDocument, Element block, Range noteTextRange ) { final int noteIndex = noteCounters.getAndIncrement(); block.appendChild( textDocumentFacade .createText( UNICODECHAR_ZERO_WIDTH_SPACE + "[" + noteIndex @@ -457,7 +458,8 @@ public class WordToTextConverter extends AbstractWordConverter } } - public void setOutputSummaryInformation( boolean outputDocumentInformation ) + @SuppressWarnings("unused") + public void setOutputSummaryInformation(boolean outputDocumentInformation ) { this.outputSummaryInformation = outputDocumentInformation; } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java b/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java index 6fc78dfd0..df0104fe8 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java @@ -18,6 +18,8 @@ package org.apache.poi.hwpf.model; +import java.util.Arrays; + import org.apache.poi.util.Internal; import org.apache.poi.util.NotImplemented; @@ -102,6 +104,12 @@ public class OldTextPiece extends TextPiece { return 42; // any arbitrary constant will do } + @Override + public boolean equals(Object other) { + return other instanceof OldTextPiece && + Arrays.equals(rawBytes, ((OldTextPiece)other).rawBytes); + } + public String toString() { return "OldTextPiece from " + getStart() + " to " + getEnd() + " (" + getPieceDescriptor() + ")";