diff --git a/app/save-and-restore/logging/src/main/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactory.java b/app/save-and-restore/logging/src/main/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactory.java index ea8ce19750..e1839b969c 100644 --- a/app/save-and-restore/logging/src/main/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactory.java +++ b/app/save-and-restore/logging/src/main/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactory.java @@ -77,7 +77,17 @@ protected void getCommonSnapshotInfo(SaveSnapshotActionInfo saveSnapshotActionIn // This is needed! stringBuilder.append("|-|-|\n"); stringBuilder.append("| Snapshot name | ").append(saveSnapshotActionInfo.getSnapshotName()).append(" |\n"); - stringBuilder.append("| Comment | ").append(saveSnapshotActionInfo.getComment()).append(" |\n"); + stringBuilder.append("| Comment | ").append(replaceNewLineChars(saveSnapshotActionInfo.getComment())).append(" |\n"); stringBuilder.append("| Created | ").append(saveSnapshotActionInfo.getSnapshotCreatedDate()).append(" |\n"); } + + /** + * Replace line feed or carriage return + line feed with space char. Used for instance to correctly create a markdown table + * for a snapshot where the comment field contains line feed or carriage return + line feed. + * @param input Input string + * @return The mangled string. + */ + protected String replaceNewLineChars(String input) { + return input.replace("\n", " ").replace("\r", ""); + } } diff --git a/app/save-and-restore/logging/src/test/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactoryTestData.java b/app/save-and-restore/logging/src/test/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactoryTestData.java index 82e98dea00..6c4f74f46e 100644 --- a/app/save-and-restore/logging/src/test/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactoryTestData.java +++ b/app/save-and-restore/logging/src/test/java/org/phoebus/applications/saveandrestore/logging/SaveSnapshotActionAdapterFactoryTestData.java @@ -24,6 +24,7 @@ import java.util.List; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; public class SaveSnapshotActionAdapterFactoryTestData { @@ -51,4 +52,22 @@ public void testAdaptSaveAction(){ assertTrue(logEntry.getTitle().contains("snapshot name")); assertTrue(logEntry.getDescription().contains("snapshot name")); } + + @Test + public void testReplaceNewLineChars(){ + String someString = "Foo Bar"; + assertEquals("Foo Bar", saveSnapshotActionAdapterFactory.replaceNewLineChars(someString)); + + someString = "Foo\nBar"; + assertEquals("Foo Bar", saveSnapshotActionAdapterFactory.replaceNewLineChars(someString)); + + someString = "Foo\r\nBar"; + assertEquals("Foo Bar", saveSnapshotActionAdapterFactory.replaceNewLineChars(someString)); + + someString = "Foo\r\nBar\nBaz"; + assertEquals("Foo Bar Baz", saveSnapshotActionAdapterFactory.replaceNewLineChars(someString)); + + someString = "Foo" + System.lineSeparator() + "Bar"; + assertEquals("Foo Bar", saveSnapshotActionAdapterFactory.replaceNewLineChars(someString)); + } }