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/
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();
+ }
+}