From 62561d5f53efd706b32480cd114b0fd107e3c03e Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Tue, 6 Oct 2015 00:04:12 +0000 Subject: [PATCH] sonar fixes and closing resources after use git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1706937 13f79535-47bb-0310-9956-ffa450edef68 --- .../hssf/usermodel/examples/InCellLists.java | 19 +- .../poi/hssf/usermodel/examples/Outlines.java | 203 ++++++------------ .../src/org/apache/poi/hwpf/Word2Forrest.java | 24 +-- .../xssf/streaming/examples/Outlining.java | 17 +- .../apache/poi/hssf/record/TabIdRecord.java | 2 +- .../poi/poifs/crypt/CipherAlgorithm.java | 2 +- .../poi/poifs/storage/BlockListImpl.java | 2 +- .../apache/poi/sl/draw/DrawTextParagraph.java | 4 +- .../apache/poi/ss/formula/ptg/ArrayPtg.java | 2 +- .../org/apache/poi/ss/util/SSCellRange.java | 2 +- .../TestXSSFSheetUpdateArrayFormulas.java | 23 +- .../poi/hslf/record/CurrentUserAtom.java | 17 +- .../apache/poi/hslf/record/TextBytesAtom.java | 2 +- .../poi/hslf/record/TestCurrentUserAtom.java | 37 ++-- .../TestHSSFSheetUpdateArrayFormulas.java | 28 ++- .../BaseTestSheetUpdateArrayFormulas.java | 115 +++++++--- 16 files changed, 239 insertions(+), 260 deletions(-) diff --git a/src/examples/src/org/apache/poi/hssf/usermodel/examples/InCellLists.java b/src/examples/src/org/apache/poi/hssf/usermodel/examples/InCellLists.java index 3ecd30e45..1230449d7 100644 --- a/src/examples/src/org/apache/poi/hssf/usermodel/examples/InCellLists.java +++ b/src/examples/src/org/apache/poi/hssf/usermodel/examples/InCellLists.java @@ -66,7 +66,7 @@ public class InCellLists { * @param outputFilename A String that encapsulates the name of and path to * the Excel spreadsheet file this code will create. */ - public void demonstrateMethodCalls(String outputFilename) { + public void demonstrateMethodCalls(String outputFilename) throws IOException { HSSFWorkbook workbook = null; HSSFSheet sheet = null; HSSFRow row = null; @@ -75,7 +75,6 @@ public class InCellLists { FileOutputStream fos = null; ArrayList multiLevelListItems = null; ArrayList listItems = null; - String listItem = null; try { workbook = new HSSFWorkbook(); sheet = workbook.createSheet("In Cell Lists"); @@ -188,13 +187,11 @@ public class InCellLists { ioEx.printStackTrace(System.out); } finally { - if(fos != null) { - try { - fos.close(); - } - catch(IOException ioEx) { - - } + if (workbook != null) { + workbook.close(); + } + if (fos != null) { + fos.close(); } } } @@ -503,8 +500,8 @@ public class InCellLists { * * @param args the command line arguments. */ - public static void main(String[] args) { - new InCellLists().demonstrateMethodCalls("C:/temp/Latest In Cell List.xls"); + public static void main(String[] args) throws IOException { + new InCellLists().demonstrateMethodCalls("Latest In Cell List.xls"); } /** diff --git a/src/examples/src/org/apache/poi/hssf/usermodel/examples/Outlines.java b/src/examples/src/org/apache/poi/hssf/usermodel/examples/Outlines.java index c04d608ed..125d60d77 100644 --- a/src/examples/src/org/apache/poi/hssf/usermodel/examples/Outlines.java +++ b/src/examples/src/org/apache/poi/hssf/usermodel/examples/Outlines.java @@ -17,53 +17,55 @@ package org.apache.poi.hssf.usermodel.examples; -import org.apache.poi.hssf.usermodel.HSSFSheet; -import org.apache.poi.hssf.usermodel.HSSFWorkbook; -import org.apache.poi.hssf.usermodel.HSSFRow; -import org.apache.poi.hssf.usermodel.HSSFCell; - +import java.io.Closeable; import java.io.FileOutputStream; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; + +import org.apache.poi.hssf.usermodel.HSSFCell; +import org.apache.poi.hssf.usermodel.HSSFRow; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; /** * Creates outlines. - * - * @author Glen Stampoultzis (glens at apache.org) */ -public class Outlines { - public static void main(String[] args) throws IOException { - createCase1( "outline1.xls" ); - System.out.println( "outline1.xls written. Two expanded groups." ); - createCase2( "outline2.xls" ); - System.out.println( "outline2.xls written. Two groups. Inner group collapsed." ); - createCase3( "outline3.xls" ); - System.out.println( "outline3.xls written. Two groups. Both collapsed." ); - createCase4( "outline4.xls" ); - System.out.println( "outline4.xls written. Two groups. Collapsed then inner group expanded." ); - createCase5( "outline5.xls" ); - System.out.println( "outline5.xls written. Two groups. Collapsed then reexpanded." ); - createCase6( "outline6.xls" ); - System.out.println( "outline6.xls written. Two groups with matching end points. Second group collapsed." ); - createCase7( "outline7.xls" ); - System.out.println( "outline7.xls written. Row outlines." ); - createCase8( "outline8.xls" ); - System.out.println( "outline8.xls written. Row outlines. Inner group collapsed." ); - createCase9( "outline9.xls" ); - System.out.println( "outline9.xls written. Row outlines. Both collapsed." ); - createCase10( "outline10.xls" ); - System.out.println( "outline10.xls written. Row outlines. Collapsed then inner group expanded." ); - createCase11( "outline11.xls" ); - System.out.println( "outline11.xls written. Row outlines. Collapsed then expanded." ); - createCase12( "outline12.xls" ); - System.out.println( "outline12.xls written. Row outlines. Two row groups with matching end points. Second group collapsed." ); - createCase13( "outline13.xls" ); - System.out.println( "outline13.xls written. Mixed bag." ); +public class Outlines implements Closeable { + public static void main(String[] args) + throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { + POILogger LOGGER = POILogFactory.getLogger(Outlines.class); + for (int i=1; i<=13; i++) { + Outlines o = new Outlines(); + try { + String log = (String)Outlines.class.getDeclaredMethod("test"+i).invoke(o); + String filename = "outline"+i+".xls"; + o.writeOut(filename); + LOGGER.log(POILogger.INFO, filename+" written. "+log); + } finally { + o.close(); + } + } } - private static void createCase1(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); + private final HSSFWorkbook wb = new HSSFWorkbook(); + private final HSSFSheet sheet1 = wb.createSheet("new sheet"); + public void writeOut(String filename) throws IOException { + FileOutputStream fileOut = new FileOutputStream(filename); + try { + wb.write(fileOut); + } finally { + fileOut.close(); + } + } + + public void close() throws IOException { + wb.close(); + } + + public String test1() { sheet1.groupColumn(4, 7); for (int row = 0; row < 200; row++) { @@ -73,59 +75,35 @@ public class Outlines { c.setCellValue(column); } } - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two expanded groups."; } - private static void createCase2(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test2() { sheet1.groupColumn(2, 10); sheet1.groupColumn(4, 7); sheet1.setColumnGroupCollapsed(4, true); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two groups. Inner group collapsed."; } - private static void createCase3(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test3() { sheet1.groupColumn(2, 10); sheet1.groupColumn(4, 7); sheet1.setColumnGroupCollapsed(4, true); sheet1.setColumnGroupCollapsed(2, true); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two groups. Both collapsed."; } - private static void createCase4(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test4() { sheet1.groupColumn(2, 10); sheet1.groupColumn(4, 7); sheet1.setColumnGroupCollapsed(4, true); sheet1.setColumnGroupCollapsed(2, true); sheet1.setColumnGroupCollapsed(4, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two groups. Collapsed then inner group expanded."; } - private static void createCase5(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test5() { sheet1.groupColumn(2, 10); sheet1.groupColumn(4, 7); sheet1.setColumnGroupCollapsed(4, true); @@ -133,117 +111,69 @@ public class Outlines { sheet1.setColumnGroupCollapsed(4, false); sheet1.setColumnGroupCollapsed(3, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two groups. Collapsed then reexpanded."; } - private static void createCase6(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test6() { sheet1.groupColumn(2, 10); sheet1.groupColumn(4, 10); sheet1.setColumnGroupCollapsed(4, true); sheet1.setColumnGroupCollapsed(2, true); sheet1.setColumnGroupCollapsed(3, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Two groups with matching end points. Second group collapsed."; } - private static void createCase7(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test7() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 10); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines."; } - private static void createCase8(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test8() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 10); sheet1.setRowGroupCollapsed(7, true); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines. Inner group collapsed."; } - private static void createCase9(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test9() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 10); sheet1.setRowGroupCollapsed(7, true); sheet1.setRowGroupCollapsed(5, true); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines. Both collapsed."; } - private static void createCase10(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test10() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 10); sheet1.setRowGroupCollapsed(7, true); sheet1.setRowGroupCollapsed(5, true); sheet1.setRowGroupCollapsed(8, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines. Collapsed then inner group expanded."; } - private static void createCase11(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test11() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 10); sheet1.setRowGroupCollapsed(7, true); sheet1.setRowGroupCollapsed(5, true); sheet1.setRowGroupCollapsed(8, false); sheet1.setRowGroupCollapsed(14, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines. Collapsed then expanded."; } - private static void createCase12(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test12() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 14); sheet1.setRowGroupCollapsed(7, true); sheet1.setRowGroupCollapsed(5, true); sheet1.setRowGroupCollapsed(6, false); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Row outlines. Two row groups with matching end points. Second group collapsed."; } - private static void createCase13(String filename) throws IOException { - HSSFWorkbook wb = new HSSFWorkbook(); - HSSFSheet sheet1 = wb.createSheet("new sheet"); - + public String test13() { sheet1.groupRow(5, 14); sheet1.groupRow(7, 14); sheet1.groupRow(16, 19); @@ -251,9 +181,6 @@ public class Outlines { sheet1.groupColumn(4, 7); sheet1.groupColumn(9, 12); sheet1.groupColumn(10, 11); - - FileOutputStream fileOut = new FileOutputStream(filename); - wb.write(fileOut); - fileOut.close(); + return "Mixed bag."; } } diff --git a/src/examples/src/org/apache/poi/hwpf/Word2Forrest.java b/src/examples/src/org/apache/poi/hwpf/Word2Forrest.java index 4561851ca..3516b88e8 100644 --- a/src/examples/src/org/apache/poi/hwpf/Word2Forrest.java +++ b/src/examples/src/org/apache/poi/hwpf/Word2Forrest.java @@ -20,6 +20,7 @@ package org.apache.poi.hwpf; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; @@ -215,19 +216,14 @@ public final class Word2Forrest } - public static void main(String[] args) - { - try - { - OutputStream out = new FileOutputStream("c:\\test.xml"); - - new Word2Forrest(new HWPFDocument(new FileInputStream(args[0])), out); - out.close(); + public static void main(String[] args) throws IOException { + InputStream is = new FileInputStream(args[0]); + OutputStream out = new FileOutputStream("test.xml"); + try { + new Word2Forrest(new HWPFDocument(is), out); + } finally { + out.close(); + is.close(); + } } - catch (Exception t) - { - t.printStackTrace(); - } - - } } diff --git a/src/examples/src/org/apache/poi/xssf/streaming/examples/Outlining.java b/src/examples/src/org/apache/poi/xssf/streaming/examples/Outlining.java index 03af09ddd..4c0b35c85 100644 --- a/src/examples/src/org/apache/poi/xssf/streaming/examples/Outlining.java +++ b/src/examples/src/org/apache/poi/xssf/streaming/examples/Outlining.java @@ -18,20 +18,21 @@ package org.apache.poi.xssf.streaming.examples; import java.io.FileOutputStream; +import java.io.IOException; import org.apache.poi.xssf.streaming.SXSSFSheet; import org.apache.poi.xssf.streaming.SXSSFWorkbook; public class Outlining { - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws IOException { Outlining o = new Outlining(); o.collapseRow(); } - private void collapseRow() throws Exception { + private void collapseRow() throws IOException { SXSSFWorkbook wb2 = new SXSSFWorkbook(100); - SXSSFSheet sheet2 = (SXSSFSheet) wb2.createSheet("new sheet"); + SXSSFSheet sheet2 = wb2.createSheet("new sheet"); int rowCount = 20; for (int i = 0; i < rowCount; i++) { @@ -44,8 +45,12 @@ public class Outlining { sheet2.setRowGroupCollapsed(4, true); FileOutputStream fileOut = new FileOutputStream("outlining_collapsed.xlsx"); - wb2.write(fileOut); - fileOut.close(); - wb2.dispose(); + try { + wb2.write(fileOut); + } finally { + fileOut.close(); + wb2.dispose(); + wb2.close(); + } } } diff --git a/src/java/org/apache/poi/hssf/record/TabIdRecord.java b/src/java/org/apache/poi/hssf/record/TabIdRecord.java index 843d2aa77..e1e9052b0 100644 --- a/src/java/org/apache/poi/hssf/record/TabIdRecord.java +++ b/src/java/org/apache/poi/hssf/record/TabIdRecord.java @@ -50,7 +50,7 @@ public final class TabIdRecord extends StandardRecord { * @param array of tab id's {0,1,2} */ public void setTabIdArray(short[] array) { - _tabids = array; + _tabids = array.clone(); } public String toString() { diff --git a/src/java/org/apache/poi/poifs/crypt/CipherAlgorithm.java b/src/java/org/apache/poi/poifs/crypt/CipherAlgorithm.java index cee49d2be..5b5b1e186 100644 --- a/src/java/org/apache/poi/poifs/crypt/CipherAlgorithm.java +++ b/src/java/org/apache/poi/poifs/crypt/CipherAlgorithm.java @@ -53,7 +53,7 @@ public enum CipherAlgorithm { this.jceId = jceId; this.ecmaId = ecmaId; this.defaultKeySize = defaultKeySize; - this.allowedKeySize = allowedKeySize; + this.allowedKeySize = allowedKeySize.clone(); this.blockSize = blockSize; this.encryptedVerifierHashLength = encryptedVerifierHashLength; this.xmlId = xmlId; diff --git a/src/java/org/apache/poi/poifs/storage/BlockListImpl.java b/src/java/org/apache/poi/poifs/storage/BlockListImpl.java index b7c6a0ccf..7a05aae22 100644 --- a/src/java/org/apache/poi/poifs/storage/BlockListImpl.java +++ b/src/java/org/apache/poi/poifs/storage/BlockListImpl.java @@ -41,7 +41,7 @@ abstract class BlockListImpl implements BlockList { */ protected void setBlocks(final ListManagedBlock [] blocks) { - _blocks = blocks; + _blocks = blocks.clone(); } /** diff --git a/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java b/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java index 735205ec4..fbb40bb23 100644 --- a/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java +++ b/src/java/org/apache/poi/sl/draw/DrawTextParagraph.java @@ -365,11 +365,11 @@ public class DrawTextParagraph implements Drawable { Double leftMargin = paragraph.getLeftMargin(); if (leftMargin == null) { // if the marL attribute is omitted, then a value of 347663 is implied - leftMargin = Units.toPoints(347663*(indentLevel+1)); + leftMargin = Units.toPoints(347663L*(indentLevel+1)); } Double indent = paragraph.getIndent(); if (indent == null) { - indent = Units.toPoints(347663*indentLevel); + indent = Units.toPoints(347663L*indentLevel); } Double rightMargin = paragraph.getRightMargin(); if (rightMargin == null) { diff --git a/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java b/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java index b21936bec..de107a2cb 100644 --- a/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java +++ b/src/java/org/apache/poi/ss/formula/ptg/ArrayPtg.java @@ -60,7 +60,7 @@ public final class ArrayPtg extends Ptg { _reserved2Byte = reserved2; _nColumns = nColumns; _nRows = nRows; - _arrayValues = arrayValues; + _arrayValues = arrayValues.clone(); } /** * @param values2d array values arranged in rows diff --git a/src/java/org/apache/poi/ss/util/SSCellRange.java b/src/java/org/apache/poi/ss/util/SSCellRange.java index c1973b443..6a44a81f6 100644 --- a/src/java/org/apache/poi/ss/util/SSCellRange.java +++ b/src/java/org/apache/poi/ss/util/SSCellRange.java @@ -117,7 +117,7 @@ public final class SSCellRange implements CellRange { private int _index; public ArrayIterator(D[] array) { - _array = array; + _array = array.clone(); _index = 0; } public boolean hasNext() { diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetUpdateArrayFormulas.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetUpdateArrayFormulas.java index fc55ffdeb..85378ec2b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetUpdateArrayFormulas.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheetUpdateArrayFormulas.java @@ -17,14 +17,23 @@ package org.apache.poi.xssf.usermodel; -import junit.framework.AssertionFailedError; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; -import org.apache.poi.ss.usermodel.*; +import java.io.IOException; + +import org.apache.poi.ss.usermodel.BaseTestSheetUpdateArrayFormulas; +import org.apache.poi.ss.usermodel.CellRange; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.XSSFITestDataProvider; +import org.junit.Test; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell; import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellFormula; import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellFormulaType; + +import junit.framework.AssertionFailedError; /** * Test array formulas in XSSF * @@ -39,8 +48,8 @@ public final class TestXSSFSheetUpdateArrayFormulas extends BaseTestSheetUpdateA // Test methods common with HSSF are in superclass // Local methods here test XSSF-specific details of updating array formulas - - public void testXSSFSetArrayFormula_singleCell() { + @Test + public void testXSSFSetArrayFormula_singleCell() throws IOException { CellRange cells; XSSFWorkbook workbook = new XSSFWorkbook(); @@ -58,9 +67,12 @@ public final class TestXSSFSheetUpdateArrayFormulas extends BaseTestSheetUpdateA //retrieve the range and check it is the same assertEquals(range.formatAsString(), firstCell.getArrayFormulaRange().formatAsString()); confirmArrayFormulaCell(firstCell, "C3", formula1, "C3"); + + workbook.close(); } - public void testXSSFSetArrayFormula_multiCell() { + @Test + public void testXSSFSetArrayFormula_multiCell() throws IOException { CellRange cells; String formula2 = "456"; @@ -84,6 +96,7 @@ public final class TestXSSFSheetUpdateArrayFormulas extends BaseTestSheetUpdateA confirmArrayFormulaCell(cells.getCell(2, 0), "C6"); assertSame(firstCell, sheet.getFirstCellInArrayFormula(firstCell)); + workbook.close(); } private static void confirmArrayFormulaCell(XSSFCell c, String cellRef) { diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java index 71820076e..852865d03 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java @@ -31,7 +31,6 @@ import org.apache.poi.hslf.exceptions.OldPowerPointFormatException; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; -import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; @@ -112,13 +111,7 @@ public class CurrentUserAtom isEncrypted = false; } - /** - * Find the Current User in the filesystem, and create from that - * @deprecated Use {@link #CurrentUserAtom(DirectoryNode)} instead - */ - public CurrentUserAtom(POIFSFileSystem fs) throws IOException { - this(fs.getRoot()); - } + /** * Find the Current User in the filesystem, and create from that */ @@ -162,14 +155,6 @@ public class CurrentUserAtom init(); } - /** - * Create things from the bytes - */ - public CurrentUserAtom(byte[] b) { - _contents = b; - init(); - } - /** * Actually do the creation from a block of bytes */ diff --git a/src/scratchpad/src/org/apache/poi/hslf/record/TextBytesAtom.java b/src/scratchpad/src/org/apache/poi/hslf/record/TextBytesAtom.java index a576146d0..43a5abf8a 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/record/TextBytesAtom.java +++ b/src/scratchpad/src/org/apache/poi/hslf/record/TextBytesAtom.java @@ -48,7 +48,7 @@ public final class TextBytesAtom extends RecordAtom /** Updates the text in the Atom. Must be 8 bit ascii */ public void setText(byte[] b) { // Set the text - _text = b; + _text = b.clone(); // Update the size (header bytes 5-8) LittleEndian.putInt(_header,4,_text.length); diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestCurrentUserAtom.java b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestCurrentUserAtom.java index f7ee1f926..b406d6eed 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestCurrentUserAtom.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestCurrentUserAtom.java @@ -17,6 +17,7 @@ package org.apache.poi.hslf.record; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -44,47 +45,48 @@ public final class TestCurrentUserAtom { @Test public void readNormal() throws Exception { - POIFSFileSystem fs = new POIFSFileSystem( - _slTests.openResourceAsStream(normalFile) - ); + POIFSFileSystem fs = new POIFSFileSystem(_slTests.getFile(normalFile)); - CurrentUserAtom cu = new CurrentUserAtom(fs); + CurrentUserAtom cu = new CurrentUserAtom(fs.getRoot()); + fs.close(); // Check the contents assertEquals("Hogwarts", cu.getLastEditUsername()); assertEquals(0x2942, cu.getCurrentEditOffset()); // Round trip - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - cu.writeOut(baos); - - CurrentUserAtom cu2 = new CurrentUserAtom(baos.toByteArray()); + POIFSFileSystem poifs = new POIFSFileSystem(); + cu.writeToFS(poifs); + + CurrentUserAtom cu2 = new CurrentUserAtom(poifs.getRoot()); assertEquals("Hogwarts", cu2.getLastEditUsername()); assertEquals(0x2942, cu2.getCurrentEditOffset()); + + poifs.close(); } @Test(expected = EncryptedPowerPointFileException.class) public void readEnc() throws Exception { - POIFSFileSystem fs = new POIFSFileSystem( - _slTests.openResourceAsStream(encFile) - ); + POIFSFileSystem fs = new POIFSFileSystem(_slTests.getFile(encFile)); - new CurrentUserAtom(fs); + new CurrentUserAtom(fs.getRoot()); assertTrue(true); // not yet failed new HSLFSlideShowImpl(fs); + + fs.close(); } @Test public void writeNormal() throws Exception { // Get raw contents from a known file - POIFSFileSystem fs = new POIFSFileSystem( - _slTests.openResourceAsStream(normalFile) - ); + POIFSFileSystem fs = new POIFSFileSystem(_slTests.getFile(normalFile)); DocumentEntry docProps = (DocumentEntry)fs.getRoot().getEntry("Current User"); byte[] contents = new byte[docProps.getSize()]; InputStream in = fs.getRoot().createDocumentInputStream("Current User"); in.read(contents); + in.close(); + fs.close(); // Now build up a new one CurrentUserAtom cu = new CurrentUserAtom(); @@ -96,9 +98,6 @@ public final class TestCurrentUserAtom { cu.writeOut(baos); byte[] out = baos.toByteArray(); - assertEquals(contents.length, out.length); - for(int i=0; i cls) { if (recs.length <= index) { - throw new AssertionFailedError("Expected (" + cls.getName() + ") at index " - + index + " but array length is " + recs.length + "."); + fail("Expected (" + cls.getName() + ") at index " + + index + " but array length is " + recs.length + "."); } assertEquals(cls, recs[index].getClass()); } diff --git a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetUpdateArrayFormulas.java b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetUpdateArrayFormulas.java index 4bea4a8c7..85f493f84 100644 --- a/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetUpdateArrayFormulas.java +++ b/src/testcases/org/apache/poi/ss/usermodel/BaseTestSheetUpdateArrayFormulas.java @@ -18,12 +18,21 @@ package org.apache.poi.ss.usermodel; import static org.junit.Assert.assertArrayEquals; -import junit.framework.TestCase; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; import org.apache.poi.ss.ITestDataProvider; import org.apache.poi.ss.formula.FormulaParseException; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellReference; +import org.junit.Test; /** * Common superclass for testing usermodel API for array formulas.
@@ -32,14 +41,15 @@ import org.apache.poi.ss.util.CellReference; * @author Yegor Kozlov * @author Josh Micich */ -public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { +public abstract class BaseTestSheetUpdateArrayFormulas { protected final ITestDataProvider _testDataProvider; protected BaseTestSheetUpdateArrayFormulas(ITestDataProvider testDataProvider) { _testDataProvider = testDataProvider; } - public final void testAutoCreateOtherCells() { + @Test + public final void testAutoCreateOtherCells() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet("Sheet1"); @@ -55,11 +65,14 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertNotNull(row2); assertEquals(formula, row2.getCell(0).getCellFormula()); assertEquals(formula, row2.getCell(1).getCellFormula()); + + workbook.close(); } /** * Set single-cell array formula */ - public final void testSetArrayFormula_singleCell() { + @Test + public final void testSetArrayFormula_singleCell() throws IOException { Cell[] cells; Workbook workbook = _testDataProvider.createWorkbook(); @@ -88,12 +101,15 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertEquals(range.formatAsString(), cell.getArrayFormulaRange().formatAsString()); //check the formula assertEquals("SUM(C11:C12*D11:D12)", cell.getCellFormula()); + + workbook.close(); } /** * Set multi-cell array formula */ - public final void testSetArrayFormula_multiCell() { + @Test + public final void testSetArrayFormula_multiCell() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -119,13 +135,16 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { //retrieve the range and check it is the same assertEquals(range.formatAsString(), acell.getArrayFormulaRange().formatAsString()); } + + workbook.close(); } /** * Passing an incorrect formula to sheet.setArrayFormula * should throw FormulaParseException */ - public final void testSetArrayFormula_incorrectFormula() { + @Test + public final void testSetArrayFormula_incorrectFormula() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -136,13 +155,16 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { } catch (FormulaParseException e){ //expected exception } + + workbook.close(); } /** * Calls of cell.getArrayFormulaRange and sheet.removeArrayFormula * on a not-array-formula cell throw IllegalStateException */ - public final void testArrayFormulas_illegalCalls() { + @Test + public final void testArrayFormulas_illegalCalls() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -161,12 +183,15 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { } catch (IllegalArgumentException e){ assertEquals("Cell A1 is not part of an array formula.", e.getMessage()); } + + workbook.close(); } /** * create and remove array formulas */ - public final void testRemoveArrayFormula() { + @Test + public final void testRemoveArrayFormula() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -196,28 +221,32 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertEquals("Cell "+ref+" is not part of an array formula.", e.getMessage()); } } + + workbook.close(); } /** * Test that when reading a workbook from input stream, array formulas are recognized */ - public final void testReadArrayFormula() { + @Test + public final void testReadArrayFormula() throws IOException { Cell[] cells; - Workbook workbook = _testDataProvider.createWorkbook(); - Sheet sheet1 = workbook.createSheet(); + Workbook workbook1 = _testDataProvider.createWorkbook(); + Sheet sheet1 = workbook1.createSheet(); cells = sheet1.setArrayFormula("SUM(A1:A3*B1:B3)", CellRangeAddress.valueOf("C4:C6")).getFlattenedCells(); assertEquals(3, cells.length); cells = sheet1.setArrayFormula("MAX(A1:A3*B1:B3)", CellRangeAddress.valueOf("A4:A6")).getFlattenedCells(); assertEquals(3, cells.length); - Sheet sheet2 = workbook.createSheet(); + Sheet sheet2 = workbook1.createSheet(); cells = sheet2.setArrayFormula("MIN(A1:A3*B1:B3)", CellRangeAddress.valueOf("D2:D4")).getFlattenedCells(); assertEquals(3, cells.length); - workbook = _testDataProvider.writeOutAndReadBack(workbook); - sheet1 = workbook.getSheetAt(0); + Workbook workbook2 = _testDataProvider.writeOutAndReadBack(workbook1); + workbook1.close(); + sheet1 = workbook2.getSheetAt(0); for(int rownum=3; rownum <= 5; rownum++) { Cell cell1 = sheet1.getRow(rownum).getCell(2); assertTrue( cell1.isPartOfArrayFormulaGroup()); @@ -226,17 +255,20 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertTrue( cell2.isPartOfArrayFormulaGroup()); } - sheet2 = workbook.getSheetAt(1); + sheet2 = workbook2.getSheetAt(1); for(int rownum=1; rownum <= 3; rownum++) { Cell cell1 = sheet2.getRow(rownum).getCell(3); assertTrue( cell1.isPartOfArrayFormulaGroup()); } + + workbook2.close(); } /** * Test that we can set pre-calculated formula result for array formulas */ - public void testModifyArrayCells_setFormulaResult(){ + @Test + public void testModifyArrayCells_setFormulaResult() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -245,23 +277,25 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { sheet.setArrayFormula("SUM(A4:A6,B4:B6)", CellRangeAddress.valueOf("B5")); Cell scell = srange.getTopLeftCell(); assertEquals(Cell.CELL_TYPE_FORMULA, scell.getCellType()); - assertEquals(0.0, scell.getNumericCellValue()); + assertEquals(0.0, scell.getNumericCellValue(), 0); scell.setCellValue(1.1); - assertEquals(1.1, scell.getNumericCellValue()); + assertEquals(1.1, scell.getNumericCellValue(), 0); //multi-cell array formula CellRange mrange = sheet.setArrayFormula("A1:A3*B1:B3", CellRangeAddress.valueOf("C1:C3")); for(Cell mcell : mrange){ assertEquals(Cell.CELL_TYPE_FORMULA, mcell.getCellType()); - assertEquals(0.0, mcell.getNumericCellValue()); + assertEquals(0.0, mcell.getNumericCellValue(), 0); double fmlaResult = 1.2; mcell.setCellValue(fmlaResult); - assertEquals(fmlaResult, mcell.getNumericCellValue()); + assertEquals(fmlaResult, mcell.getNumericCellValue(), 0); } + workbook.close(); } - public void testModifyArrayCells_setCellType(){ + @Test + public void testModifyArrayCells_setCellType() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -271,7 +305,7 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { sheet.setArrayFormula("SUM(A4:A6,B4:B6)", CellRangeAddress.valueOf("B5")); Cell scell = srange.getTopLeftCell(); assertEquals(Cell.CELL_TYPE_FORMULA, scell.getCellType()); - assertEquals(0.0, scell.getNumericCellValue()); + assertEquals(0.0, scell.getNumericCellValue(), 0); scell.setCellType(Cell.CELL_TYPE_STRING); assertEquals(Cell.CELL_TYPE_STRING, scell.getCellType()); scell.setCellValue("string cell"); @@ -295,9 +329,11 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertEquals(Cell.CELL_TYPE_FORMULA, mcell.getCellType()); assertTrue(mcell.isPartOfArrayFormulaGroup()); } + workbook.close(); } - public void testModifyArrayCells_setCellFormula(){ + @Test + public void testModifyArrayCells_setCellFormula() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -313,9 +349,9 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertFalse(scell.isPartOfArrayFormulaGroup()); assertEquals(Cell.CELL_TYPE_FORMULA, scell.getCellType()); //check that setting formula result works - assertEquals(0.0, scell.getNumericCellValue()); + assertEquals(0.0, scell.getNumericCellValue(), 0); scell.setCellValue(33.0); - assertEquals(33.0, scell.getNumericCellValue()); + assertEquals(33.0, scell.getNumericCellValue(), 0); //multi-cell array formula CellRange mrange = @@ -336,9 +372,11 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertEquals("A1:A3*B1:B3", mcell.getCellFormula()); assertTrue(mcell.isPartOfArrayFormulaGroup()); } + workbook.close(); } - public void testModifyArrayCells_removeCell(){ + @Test + public void testModifyArrayCells_removeCell() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -378,9 +416,12 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertTrue(mcell.isPartOfArrayFormulaGroup()); assertEquals(Cell.CELL_TYPE_FORMULA, mcell.getCellType()); } + + workbook.close(); } - public void testModifyArrayCells_removeRow(){ + @Test + public void testModifyArrayCells_removeRow() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -411,8 +452,8 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { sheet.removeRow(mrow); fail("expected exception"); } catch (IllegalStateException e){ - String msg = "Row[rownum="+mrow.getRowNum()+"] contains cell(s) included in a multi-cell array formula. You cannot change part of an array."; - //assertEquals(msg, e.getMessage()); + // String msg = "Row[rownum="+mrow.getRowNum()+"] contains cell(s) included in a multi-cell array formula. You cannot change part of an array."; + // assertEquals(msg, e.getMessage()); } // a failed invocation of Row.removeCell leaves the row // in the state that it was in prior to the invocation @@ -421,9 +462,12 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertTrue(mcell.isPartOfArrayFormulaGroup()); assertEquals(Cell.CELL_TYPE_FORMULA, mcell.getCellType()); } + + workbook.close(); } - public void testModifyArrayCells_mergeCells(){ + @Test + public void testModifyArrayCells_mergeCells() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); assertEquals(0, sheet.getNumMergedRegions()); @@ -439,8 +483,7 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { assertEquals(1, sheet.getNumMergedRegions()); //we cannot merge cells included in an array formula - CellRange mrange = - sheet.setArrayFormula("A1:A3*B1:B3", CellRangeAddress.valueOf("C1:C3")); + sheet.setArrayFormula("A1:A3*B1:B3", CellRangeAddress.valueOf("C1:C3")); CellRangeAddress cra = CellRangeAddress.valueOf("C1:C3"); try { sheet.addMergedRegion(cra); @@ -451,9 +494,11 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { } //the number of merged regions remains the same assertEquals(1, sheet.getNumMergedRegions()); + workbook.close(); } - public void testModifyArrayCells_shiftRows(){ + @Test + public void testModifyArrayCells_shiftRows() throws IOException { Workbook workbook = _testDataProvider.createWorkbook(); Sheet sheet = workbook.createSheet(); @@ -466,8 +511,7 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { sheet.shiftRows(0, 1, 1); //we cannot set individual formulas for cells included in an array formula - CellRange mrange = - sheet.setArrayFormula("A1:A3*B1:B3", CellRangeAddress.valueOf("C1:C3")); + sheet.setArrayFormula("A1:A3*B1:B3", CellRangeAddress.valueOf("C1:C3")); try { sheet.shiftRows(0, 0, 1); @@ -491,5 +535,6 @@ public abstract class BaseTestSheetUpdateArrayFormulas extends TestCase { } */ + workbook.close(); } }