This is an automated email from the ASF dual-hosted git repository. desruisseaux pushed a commit to branch geoapi-4.0 in repository https://gitbox.apache.org/repos/asf/sis.git
commit 02e2210684c3b41ea2b5da7730bc88929e21de84 Author: Martin Desruisseaux <martin.desruisse...@geomatys.com> AuthorDate: Wed Dec 29 18:01:47 2021 +0100 Layout TIFF "image description" on a single line. --- .../java/org/apache/sis/internal/util/Strings.java | 28 +++++++++++++++++++++- .../org/apache/sis/internal/util/package-info.java | 2 +- .../sis/storage/geotiff/ImageFileDirectory.java | 3 ++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Strings.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Strings.java index 925a528..a07b148 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/Strings.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/Strings.java @@ -21,6 +21,7 @@ import java.util.Formatter; import java.util.FormattableFlags; import org.apache.sis.util.Static; import org.apache.sis.util.Classes; +import org.apache.sis.util.ArraysExt; import org.apache.sis.util.Characters; import org.apache.sis.util.CharSequences; @@ -30,7 +31,7 @@ import org.apache.sis.util.CharSequences; * Most of those methods are for {@link Object#toString()} implementations. * * @author Martin Desruisseaux (Geomatys) - * @version 1.1 + * @version 1.2 * @since 0.3 * @module */ @@ -272,6 +273,31 @@ public final class Strings extends Static { } /** + * Concatenates a potentially multi-lines text to a single line. + * White spaces at the beginning and end of each line are removed. + * + * @param delimiter the separator to insert between lines. + * @param text the multi-lines text to convert to single line, or {@code null}. + * @return the the text on a single line text, or {@code null} if none. + */ + public static String singleLine(final String delimiter, final CharSequence text) { + if (text != null) { + final CharSequence[] lines = CharSequences.splitOnEOL(text); + int count = 0; + for (int i=0; i<lines.length; i++) { + CharSequence line = CharSequences.trimWhitespaces(lines[i]); + if (line.length() != 0) lines[count++] = line; // TODO: use !line.isEmpty() with JDK15. + } + switch (count) { + case 0: break; + case 1: return lines[0].toString(); + default: return String.join(delimiter, ArraysExt.resize(lines, count)); + } + } + return null; + } + + /** * Returns a string representation of an instance of the given class having the given properties. * This is a convenience method for implementation of {@link Object#toString()} methods that are * used mostly for debugging purpose. diff --git a/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java b/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java index 54cd1b9..8d4ec29 100644 --- a/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java +++ b/core/sis-utility/src/main/java/org/apache/sis/internal/util/package-info.java @@ -30,7 +30,7 @@ * so some serialized classes still exist in this package. * * @author Martin Desruisseaux (Geomatys) - * @version 1.1 + * @version 1.2 * @since 0.3 * @module */ diff --git a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java index d4330d9..c7484ad 100644 --- a/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java +++ b/storage/sis-geotiff/src/main/java/org/apache/sis/storage/geotiff/ImageFileDirectory.java @@ -46,6 +46,7 @@ import org.apache.sis.internal.coverage.j2d.ColorModelFactory; import org.apache.sis.internal.coverage.j2d.SampleModelFactory; import org.apache.sis.internal.util.UnmodifiableArrayList; import org.apache.sis.internal.util.Numerics; +import org.apache.sis.internal.util.Strings; import org.apache.sis.metadata.iso.DefaultMetadata; import org.apache.sis.storage.DataStoreException; import org.apache.sis.storage.DataStoreContentException; @@ -948,7 +949,7 @@ final class ImageFileDirectory extends DataCube { */ case Tags.ImageDescription: { for (final String value : type.readString(input(), count, encoding())) { - metadata.addTitle(value); + metadata.addTitle(Strings.singleLine(" ", value)); } break; }