From 92fc28bcc8ac2494cbfbb590a096d99041bf52b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20N=C3=B6the?= Date: Tue, 29 Nov 2016 19:20:16 +0100 Subject: [PATCH 1/2] Fix FITSWriter.finish for zero data items written, fix #168 --- src/main/java/fact/io/FITSWriter.java | 21 +++++--- src/test/java/fact/io/FITSWriterTest.java | 61 +++++++++++++++++++++++ 2 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 src/test/java/fact/io/FITSWriterTest.java diff --git a/src/main/java/fact/io/FITSWriter.java b/src/main/java/fact/io/FITSWriter.java index 24801f3006..6da5de13c3 100644 --- a/src/main/java/fact/io/FITSWriter.java +++ b/src/main/java/fact/io/FITSWriter.java @@ -230,13 +230,16 @@ public void resetState() throws Exception { @Override public void finish() throws Exception { - FitsUtil.pad(bf, rowSize * numEventsWritten); - bf.close(); - Fits fits = new Fits(url.getPath()); - BinaryTableHDU bhdu = (BinaryTableHDU) fits.getHDU(1); - bhdu.getHeader().setNaxis(2, (int) numEventsWritten); - bhdu.getHeader().rewrite(); - + if (initialized) { + FitsUtil.pad(bf, rowSize * numEventsWritten); + bf.close(); + Fits fits = new Fits(url.getPath()); + BinaryTableHDU bhdu = (BinaryTableHDU) fits.getHDU(1); + bhdu.getHeader().setNaxis(2, (int) numEventsWritten); + bhdu.getHeader().rewrite(); + } else { + bf.close(); + } } public void setKeys(Keys keys) { @@ -250,4 +253,8 @@ public void setUrl(URL url) { public void setExtname(String extname) { this.extname = extname; } + + public long getNumEventsWritten() { + return numEventsWritten; + } } diff --git a/src/test/java/fact/io/FITSWriterTest.java b/src/test/java/fact/io/FITSWriterTest.java new file mode 100644 index 0000000000..dfa565226d --- /dev/null +++ b/src/test/java/fact/io/FITSWriterTest.java @@ -0,0 +1,61 @@ +/** + * + */ +package fact.io; + +import junit.framework.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import stream.Data; +import stream.Keys; +import stream.data.DataFactory; + +import java.io.File; +import java.net.URL; + + +/** + * @author maxnoe + */ +public class FITSWriterTest { + static Logger log = LoggerFactory.getLogger(FITSWriterTest.class); + + @Test + public void testFitsWriterNoItems() throws Exception { + FITSWriter fitsWriter = new FITSWriter(); + File f = File.createTempFile("test_fits", ".fits"); + log.info(f.getAbsolutePath()); + + URL url = new URL("file:" + f.getAbsolutePath()); + fitsWriter.setUrl(url); + fitsWriter.init(null); + fitsWriter.finish(); + } + + @Test + public void testFitsWriter() throws Exception { + FITSWriter fitsWriter = new FITSWriter(); + File f = File.createTempFile("test_fits", ".fits"); + log.info(f.getAbsolutePath()); + + URL url = new URL("file:" + f.getAbsolutePath()); + fitsWriter.setUrl(url); + fitsWriter.setKeys(new Keys("*")); + + fitsWriter.init(null); + + Data item = DataFactory.create(); + item.put("EventNum", 1); + item.put("TriggerType", 4); + item.put("NROI", 300); + item.put("NPIX", 1440); + item.put("x", 0.0); + item.put("y", 5.0); + item.put("array", new double[]{1.0, 2.0, 3.0}); + + fitsWriter.process(item); + Assert.assertEquals(fitsWriter.getNumEventsWritten(), 1); + fitsWriter.finish(); + } +} From d2df3411c0b87912ce4b00bb98cf1d2187321c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20N=C3=B6the?= Date: Tue, 29 Nov 2016 19:21:41 +0100 Subject: [PATCH 2/2] Bump version, add CHANGELOG --- CHANGELOG.md | 5 +++++ pom.xml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82cbf623dc..0cab50ab83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ #Changelog for the fact-tools +## Version 0.17.1 -- 29.11.2016 + +* Fix a null pointer exception that was thrown in `FITSWriter.finish` in case no +data item was ever written + ## Version 0.17.0 -- 21.11.2016 * Improvements on Single Pulse Extractor diff --git a/pom.xml b/pom.xml index 932e7cf87a..17e6cc1b3d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ de.sfb876 fact-tools fact-tools - 0.17.0 + 0.17.1 http://sfb876.de/fact-tools/