From 7da9b2cd670d93daf81697b322109fdc0e4ca05a Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sun, 19 Jun 2016 22:13:41 +0000 Subject: [PATCH] #59724 Take advantage of all POIDocument classes being Closeable to tidy the OLE2 text extractor closing git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1749214 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/POIOLE2TextExtractor.java | 4 ++++ .../hpsf/extractor/HPSFPropertiesExtractor.java | 17 ----------------- .../extractor/EventBasedExcelExtractor.java | 1 + .../poi/hsmf/TestFixedSizedProperties.java | 4 ++++ .../org/apache/poi/hwpf/usermodel/TestBugs.java | 12 ++++++++---- .../extractor/TestHPSFPropertiesExtractor.java | 6 ++++++ 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/java/org/apache/poi/POIOLE2TextExtractor.java b/src/java/org/apache/poi/POIOLE2TextExtractor.java index 33c7712cb..24bbb9a65 100644 --- a/src/java/org/apache/poi/POIOLE2TextExtractor.java +++ b/src/java/org/apache/poi/POIOLE2TextExtractor.java @@ -44,6 +44,10 @@ public abstract class POIOLE2TextExtractor extends POITextExtractor { */ public POIOLE2TextExtractor(POIDocument document) { this.document = document; + + // Ensure any underlying resources, such as open files, + // will get cleaned up if the user calls #close() + setFilesystem(document); } /** diff --git a/src/java/org/apache/poi/hpsf/extractor/HPSFPropertiesExtractor.java b/src/java/org/apache/poi/hpsf/extractor/HPSFPropertiesExtractor.java index b7967f333..0933ac25c 100644 --- a/src/java/org/apache/poi/hpsf/extractor/HPSFPropertiesExtractor.java +++ b/src/java/org/apache/poi/hpsf/extractor/HPSFPropertiesExtractor.java @@ -17,7 +17,6 @@ package org.apache.poi.hpsf.extractor; -import java.io.Closeable; import java.io.File; import java.io.IOException; import java.util.Iterator; @@ -41,8 +40,6 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem; * textual form. */ public class HPSFPropertiesExtractor extends POIOLE2TextExtractor { - private Closeable toClose; - public HPSFPropertiesExtractor(POIOLE2TextExtractor mainExtractor) { super(mainExtractor); } @@ -54,7 +51,6 @@ public class HPSFPropertiesExtractor extends POIOLE2TextExtractor { } public HPSFPropertiesExtractor(NPOIFSFileSystem fs) { super(new HPSFPropertiesOnlyDocument(fs)); - this.toClose = fs; } public String getDocumentSummaryInformationText() { @@ -132,19 +128,6 @@ public class HPSFPropertiesExtractor extends POIOLE2TextExtractor { throw new IllegalStateException("You already have the Metadata Text Extractor, not recursing!"); } - - - public void close() throws IOException { - super.close(); - - if(toClose != null) { - toClose.close(); - toClose = null; - } - } - - - private static abstract class HelperPropertySet extends SpecialPropertySet { public HelperPropertySet() { super(null); diff --git a/src/java/org/apache/poi/hssf/extractor/EventBasedExcelExtractor.java b/src/java/org/apache/poi/hssf/extractor/EventBasedExcelExtractor.java index 115d9b1d8..107602d1c 100644 --- a/src/java/org/apache/poi/hssf/extractor/EventBasedExcelExtractor.java +++ b/src/java/org/apache/poi/hssf/extractor/EventBasedExcelExtractor.java @@ -73,6 +73,7 @@ public class EventBasedExcelExtractor extends POIOLE2TextExtractor implements or public EventBasedExcelExtractor(POIFSFileSystem fs) { this(fs.getRoot()); + super.setFilesystem(fs); } /** diff --git a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFixedSizedProperties.java b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFixedSizedProperties.java index 21bf3132f..ecedca384 100644 --- a/src/scratchpad/testcases/org/apache/poi/hsmf/TestFixedSizedProperties.java +++ b/src/scratchpad/testcases/org/apache/poi/hsmf/TestFixedSizedProperties.java @@ -144,6 +144,8 @@ public final class TestFixedSizedProperties { // @Ignore("TODO Work out why the Fri 22nd vs Monday 25th problem is occurring and fix") public void testReadMessageDateSucceedsWithOutlookTextExtractor() throws Exception { OutlookTextExtactor ext = new OutlookTextExtactor(mapiMessageSucceeds); + ext.setFilesystem(null); // Don't close re-used test resources here + String text = ext.getText(); assertContains(text, "Date: Fri, 22 Jun 2012 18:32:54 +0000\n"); ext.close(); @@ -156,6 +158,8 @@ public final class TestFixedSizedProperties { // @Ignore("TODO Work out why the Thu 21st vs Monday 25th problem is occurring and fix") public void testReadMessageDateFailsWithOutlookTextExtractor() throws Exception { OutlookTextExtactor ext = new OutlookTextExtactor(mapiMessageFails); + ext.setFilesystem(null); // Don't close re-used test resources here + String text = ext.getText(); assertContains(text, "Date: Thu, 21 Jun 2012 14:14:04 +0000\n"); ext.close(); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java index fbd466e98..25c21cd6e 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java @@ -49,10 +49,8 @@ import org.apache.poi.util.POILogger; import junit.framework.TestCase; /** - * Test different problems reported in Apache Bugzilla - * - * @author Nick Burch (nick at torchbox dot com) - * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com) + * Test different problems reported in the Apache Bugzilla + * against HWPF */ public class TestBugs extends TestCase { @@ -245,6 +243,7 @@ public class TestBugs extends TestCase */ public void test45473() throws IOException { + // Fetch the current text HWPFDocument doc1 = HWPFTestDataSamples.openSampleFile("Bug45473.doc"); WordExtractor wordExtractor = new WordExtractor(doc1); final String text1; @@ -254,6 +253,8 @@ public class TestBugs extends TestCase wordExtractor.close(); } + // Re-load, then re-save and re-check + doc1 = HWPFTestDataSamples.openSampleFile("Bug45473.doc"); HWPFDocument doc2 = HWPFTestDataSamples.writeOutAndReadBack(doc1); WordExtractor wordExtractor2 = new WordExtractor(doc2); final String text2; @@ -313,6 +314,7 @@ public class TestBugs extends TestCase @SuppressWarnings("deprecation") public void test47286() throws IOException { + // Fetch the current text HWPFDocument doc1 = HWPFTestDataSamples.openSampleFile("Bug47286.doc"); WordExtractor wordExtractor = new WordExtractor(doc1); final String text1; @@ -322,6 +324,8 @@ public class TestBugs extends TestCase wordExtractor.close(); } + // Re-load, then re-save and re-check + doc1 = HWPFTestDataSamples.openSampleFile("Bug47286.doc"); HWPFDocument doc2 = HWPFTestDataSamples.writeOutAndReadBack(doc1); WordExtractor wordExtractor2 = new WordExtractor(doc2); final String text2; diff --git a/src/testcases/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java b/src/testcases/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java index 475741f88..0d7ce885c 100644 --- a/src/testcases/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java +++ b/src/testcases/org/apache/poi/hpsf/extractor/TestHPSFPropertiesExtractor.java @@ -115,6 +115,7 @@ public final class TestHPSFPropertiesExtractor extends TestCase { final String fsText; HPSFPropertiesExtractor fsExt = new HPSFPropertiesExtractor(fs); + fsExt.setFilesystem(null); // Don't close re-used test resources! try { fsText = fsExt.getText(); } finally { @@ -123,6 +124,7 @@ public final class TestHPSFPropertiesExtractor extends TestCase { final String hwText; HPSFPropertiesExtractor hwExt = new HPSFPropertiesExtractor(wb); + hwExt.setFilesystem(null); // Don't close re-used test resources! try { hwText = hwExt.getText(); } finally { @@ -131,6 +133,7 @@ public final class TestHPSFPropertiesExtractor extends TestCase { final String eeText; HPSFPropertiesExtractor eeExt = new HPSFPropertiesExtractor(excelExt); + eeExt.setFilesystem(null); // Don't close re-used test resources! try { eeText = eeExt.getText(); } finally { @@ -142,6 +145,9 @@ public final class TestHPSFPropertiesExtractor extends TestCase { assertTrue(fsText.indexOf("AUTHOR = marshall") > -1); assertTrue(fsText.indexOf("TITLE = Titel: \u00c4h") > -1); + + // Finally tidy + wb.close(); } public void test42726() throws IOException {