From 03a598d9effed28705cc0dc4e9448bbb941ea9c4 Mon Sep 17 00:00:00 2001 From: ritchie Date: Sat, 16 Jan 2016 07:03:55 +0100 Subject: [PATCH] hierarch key format now configurable #72 --- src/main/java/nom/tam/fits/FitsFactory.java | 24 +++++++++++ src/main/java/nom/tam/fits/HeaderCard.java | 2 +- .../hierarch/IHierarchKeyFormatter.java | 39 +++++++++++++++++ .../StandardIHierarchKeyFormatter.java | 43 +++++++++++++++++++ .../tam/fits/utilities/FitsLineAppender.java | 6 +-- .../nom/tam/fits/utilities/FitsSubString.java | 2 +- 6 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 src/main/java/nom/tam/fits/header/hierarch/IHierarchKeyFormatter.java create mode 100644 src/main/java/nom/tam/fits/header/hierarch/StandardIHierarchKeyFormatter.java diff --git a/src/main/java/nom/tam/fits/FitsFactory.java b/src/main/java/nom/tam/fits/FitsFactory.java index 14fd8a613d..cfac2c27b3 100644 --- a/src/main/java/nom/tam/fits/FitsFactory.java +++ b/src/main/java/nom/tam/fits/FitsFactory.java @@ -4,6 +4,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; +import nom.tam.fits.header.hierarch.IHierarchKeyFormatter; +import nom.tam.fits.header.hierarch.StandardIHierarchKeyFormatter; import nom.tam.image.comp.hdu.CompressedImageData; import nom.tam.image.comp.hdu.CompressedImageHDU; @@ -60,6 +62,8 @@ private static class FitsSettings { private boolean longStringsEnabled = false; + private IHierarchKeyFormatter hierarchKeyFormatter = new StandardIHierarchKeyFormatter(); + private FitsSettings copy() { FitsSettings settings = new FitsSettings(); settings.useAsciiTables = this.useAsciiTables; @@ -67,6 +71,7 @@ private FitsSettings copy() { settings.checkAsciiStrings = this.checkAsciiStrings; settings.allowTerminalJunk = this.allowTerminalJunk; settings.longStringsEnabled = this.longStringsEnabled; + settings.hierarchKeyFormatter = this.hierarchKeyFormatter; return settings; } @@ -319,6 +324,25 @@ public static void setUseAsciiTables(boolean useAsciiTables) { current().useAsciiTables = useAsciiTables; } + /** + * There is not a real standard how to write hierarch keys, default we use + * the one where every key is separated by a blank. If you want or need + * another format assing the formater here. + * + * @param formatter + * the hierarch key formatter. + */ + public static void setHierarchFormater(IHierarchKeyFormatter formatter) { + current().hierarchKeyFormatter = formatter; + } + + /** + * @return the formatter to use for hierarch keys. + */ + public static IHierarchKeyFormatter getHierarchFormater() { + return current().hierarchKeyFormatter; + } + /** * Enable/Disable hierarchical keyword processing. * diff --git a/src/main/java/nom/tam/fits/HeaderCard.java b/src/main/java/nom/tam/fits/HeaderCard.java index 8ac650e899..54e5f86b0f 100644 --- a/src/main/java/nom/tam/fits/HeaderCard.java +++ b/src/main/java/nom/tam/fits/HeaderCard.java @@ -771,7 +771,7 @@ public String toString() { // start with the keyword, if there is one if (this.key != null) { if (this.key.length() > HIERARCH_WITH_BLANK_LENGTH && this.key.substring(0, HIERARCH_WITH_BLANK_LENGTH).equals(HIERARCH_WITH_DOT)) { - buf.appendRepacing(this.key, '.', ' '); + FitsFactory.getHierarchFormater().append(this.key, buf); alignSmallString = HIERARCH_SMALL_STRING_ALIGN_POSITION; alignPosition = HIERARCH_ALIGN_POSITION; } else { diff --git a/src/main/java/nom/tam/fits/header/hierarch/IHierarchKeyFormatter.java b/src/main/java/nom/tam/fits/header/hierarch/IHierarchKeyFormatter.java new file mode 100644 index 0000000000..9ed4718017 --- /dev/null +++ b/src/main/java/nom/tam/fits/header/hierarch/IHierarchKeyFormatter.java @@ -0,0 +1,39 @@ +package nom.tam.fits.header.hierarch; + +/* + * #%L + * nom.tam FITS library + * %% + * Copyright (C) 1996 - 2016 nom-tam-fits + * %% + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * #L% + */ + +import nom.tam.fits.utilities.FitsLineAppender; + +public interface IHierarchKeyFormatter { + + void append(String key, FitsLineAppender buffer); +} diff --git a/src/main/java/nom/tam/fits/header/hierarch/StandardIHierarchKeyFormatter.java b/src/main/java/nom/tam/fits/header/hierarch/StandardIHierarchKeyFormatter.java new file mode 100644 index 0000000000..a8bbd13554 --- /dev/null +++ b/src/main/java/nom/tam/fits/header/hierarch/StandardIHierarchKeyFormatter.java @@ -0,0 +1,43 @@ +package nom.tam.fits.header.hierarch; + +/* + * #%L + * nom.tam FITS library + * %% + * Copyright (C) 1996 - 2016 nom-tam-fits + * %% + * This is free and unencumbered software released into the public domain. + * + * Anyone is free to copy, modify, publish, use, compile, sell, or + * distribute this software, either in source code form or as a compiled + * binary, for any purpose, commercial or non-commercial, and by any + * means. + * + * In jurisdictions that recognize copyright laws, the author or authors + * of this software dedicate any and all copyright interest in the + * software to the public domain. We make this dedication for the benefit + * of the public at large and to the detriment of our heirs and + * successors. We intend this dedication to be an overt act of + * relinquishment in perpetuity of all present and future rights to this + * software under copyright law. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * #L% + */ + +import nom.tam.fits.utilities.FitsLineAppender; + +public class StandardIHierarchKeyFormatter implements IHierarchKeyFormatter { + + @Override + public void append(String key, FitsLineAppender buffer) { + buffer.appendRepacing(key, '.', ' '); + } + +} diff --git a/src/main/java/nom/tam/fits/utilities/FitsLineAppender.java b/src/main/java/nom/tam/fits/utilities/FitsLineAppender.java index 0e8c9cb9b9..1aeb11d6ff 100644 --- a/src/main/java/nom/tam/fits/utilities/FitsLineAppender.java +++ b/src/main/java/nom/tam/fits/utilities/FitsLineAppender.java @@ -49,9 +49,9 @@ public class FitsLineAppender { private static final String FULL_CARD_AS_SPACES = " "; /** - * the underlying StringBuffer to which the writing of fits lines happens. + * the underlying StringBuilder to which the writing of fits lines happens. */ - private final StringBuffer buffer; + private final StringBuilder buffer; /** * the char current position in the line. @@ -63,7 +63,7 @@ public class FitsLineAppender { * line. */ public FitsLineAppender() { - this.buffer = new StringBuffer(HeaderCard.FITS_HEADER_CARD_SIZE); + this.buffer = new StringBuilder(HeaderCard.FITS_HEADER_CARD_SIZE); } /** diff --git a/src/main/java/nom/tam/fits/utilities/FitsSubString.java b/src/main/java/nom/tam/fits/utilities/FitsSubString.java index 5339b3a601..a5d76e1287 100644 --- a/src/main/java/nom/tam/fits/utilities/FitsSubString.java +++ b/src/main/java/nom/tam/fits/utilities/FitsSubString.java @@ -74,7 +74,7 @@ public FitsSubString(String originalString) { * @param buffer * the buffer to append to. */ - public void appendTo(StringBuffer buffer) { + public void appendTo(StringBuilder buffer) { buffer.append(this.originalString, this.offset, this.offset + this.length); }