Skip to content
Snippets Groups Projects
Commit cebdd933 authored by OZGCloud's avatar OZGCloud
Browse files

Merge pull request 'OZG-4367 Umlaute-in-Feldnamen-aus-FC-uebertragen' (#22)...

Merge pull request 'OZG-4367 Umlaute-in-Feldnamen-aus-FC-uebertragen' (#22) from OZG-4367-Umlaute-in-Feldnamen-aus-FC-uebertragen into master

Reviewed-on: https://git.ozg-sh.de/ozgcloud-app/formcycle-plugin/pulls/22
parents 69185987 fe693744
Branches
Tags
No related merge requests found
package de.ozgcloud.formcycle;
import static lombok.AccessLevel.*;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import org.htmlcleaner.CleanerProperties;
import org.htmlcleaner.HtmlCleaner;
import lombok.NoArgsConstructor;
@NoArgsConstructor(access = PRIVATE)
public class HtmlUtils {
private static final Pattern EMPTY_LINE_REGEX = Pattern.compile("(?m)^\\s*$(\\n|\\r\\n|\\r)");
private static final HtmlCleaner htmlCleaner;
static {
var props = new CleanerProperties();
props.setOmitComments(true);
props.setOmitDoctypeDeclaration(true);
props.setOmitXmlDeclaration(true);
props.setOmitHtmlEnvelope(true);
props.setOmitUnknownTags(true);
props.setOmitDeprecatedTags(true);
props.setPruneTags("script");
htmlCleaner = new HtmlCleaner(props);
}
public static String removeHtmlTags(String withHtml) {
if (StringUtils.isBlank(withHtml)) {
return StringUtils.EMPTY;
}
var cleanedText = htmlCleaner.clean(withHtml).getText();
cleanedText = removeEmptyLines(cleanedText);
return isEndsWithNewLine(cleanedText)
? cleanedText.subSequence(0, cleanedText.length() - 1).toString()
: cleanedText.toString();
}
private static boolean isEndsWithNewLine(CharSequence text) {
return text.length() > 0 && text.charAt(text.length() - 1) == '\n';
}
static CharSequence removeEmptyLines(CharSequence withEmptyLines) {
if (StringUtils.isBlank(withEmptyLines)) {
return StringUtils.EMPTY;
}
return EMPTY_LINE_REGEX.matcher(withEmptyLines).replaceAll(StringUtils.EMPTY);
}
}
...@@ -37,7 +37,6 @@ import de.ozgcloud.eingang.formcycle.FormCycleFormData; ...@@ -37,7 +37,6 @@ import de.ozgcloud.eingang.formcycle.FormCycleFormData;
import de.ozgcloud.eingang.formcycle.FormCycleFormHeader; import de.ozgcloud.eingang.formcycle.FormCycleFormHeader;
import de.ozgcloud.eingang.formcycle.FormCyclePostfachAddress; import de.ozgcloud.eingang.formcycle.FormCyclePostfachAddress;
import de.ozgcloud.eingang.formcycle.FormCycleServiceKonto; import de.ozgcloud.eingang.formcycle.FormCycleServiceKonto;
import de.ozgcloud.formcycle.HtmlUtils;
import de.ozgcloud.vorgang.vorgang.GrpcFormData; import de.ozgcloud.vorgang.vorgang.GrpcFormData;
import de.ozgcloud.vorgang.vorgang.GrpcFormField; import de.ozgcloud.vorgang.vorgang.GrpcFormField;
import de.ozgcloud.vorgang.vorgang.GrpcSubForm; import de.ozgcloud.vorgang.vorgang.GrpcSubForm;
...@@ -88,8 +87,7 @@ public class OzgCloudFormDataMapper { ...@@ -88,8 +87,7 @@ public class OzgCloudFormDataMapper {
} }
Optional<GrpcSubForm> mapSubForm(FormNode formNode) { Optional<GrpcSubForm> mapSubForm(FormNode formNode) {
var title = HtmlUtils.removeHtmlTags(formNode.getTitle()); var grpcSubFormDataBuilder = GrpcSubForm.newBuilder().setTitle(formNode.getName()).setLabel(formNode.getTitle());
var grpcSubFormDataBuilder = GrpcSubForm.newBuilder().setTitle(formNode.getName()).setLabel(title);
for (FormNode nestedNode : formNode.getNestedElements()) { for (FormNode nestedNode : formNode.getNestedElements()) {
if (nestedNode.isContainer()) { if (nestedNode.isContainer()) {
mapSubForm(nestedNode).ifPresent(grpcSubFormDataBuilder::addSubForm); mapSubForm(nestedNode).ifPresent(grpcSubFormDataBuilder::addSubForm);
...@@ -114,8 +112,7 @@ public class OzgCloudFormDataMapper { ...@@ -114,8 +112,7 @@ public class OzgCloudFormDataMapper {
} }
GrpcFormField.Builder createGrpcFormFieldBuilder(FormNode formNode) { GrpcFormField.Builder createGrpcFormFieldBuilder(FormNode formNode) {
var title = HtmlUtils.removeHtmlTags(formNode.getTitle()); return GrpcFormField.newBuilder().setName(formNode.getName()).setLabel(formNode.getTitle());
return GrpcFormField.newBuilder().setName(formNode.getName()).setLabel(title);
} }
FormCycleFormHeader buildHeader(FormData formData) { FormCycleFormHeader buildHeader(FormData formData) {
......
package de.ozgcloud.formcycle;
import static org.assertj.core.api.Assertions.*;
import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.ValueSource;
class HtmlUtilsTest {
@Nested
@DisplayName("Remove HTML tags")
class TestRemoveHtml {
@DisplayName("should return")
@ParameterizedTest(name = "empty string for \"{0}\"")
@NullSource
@ValueSource(strings = { " ", "" })
void shouldReturnEmpty(String input) {
var actual = HtmlUtils.removeHtmlTags(input);
assertThat(actual).isEmpty();
}
@Test
@DisplayName("should remove html tags from text")
void shouldRemoveHtml() {
var withHtml = "This is a <b>test</b> with <i>html</i>.";
var expected = "This is a test with html.";
var actual = HtmlUtils.removeHtmlTags(withHtml);
assertThat(actual).isEqualTo(expected);
}
@Test
void shouldHandleEmptyAfterCleanup() {
var cleanedText = HtmlUtils.removeHtmlTags("<b></b>");
assertThat(cleanedText).isEqualTo(StringUtils.EMPTY);
}
}
@Nested
class TestRemoveEmptyLines {
@DisplayName("should return")
@ParameterizedTest(name = "empty string for \"{0}\"")
@NullSource
@ValueSource(strings = { " ", "", "\n", "\r", "\r\n" })
void shouldReturnEmpty(String input) {
var actual = HtmlUtils.removeEmptyLines(input);
assertThat(actual).isEmpty();
}
@Test
@DisplayName("should remove empty lines")
void testRemoveEmptyLines() {
var expectedText = "text";
var withEmptyLines = "\n" + "\r" + "\r\n" + expectedText;
var resultText = HtmlUtils.removeEmptyLines(withEmptyLines);
assertThat(resultText).isEqualTo(expectedText);
}
}
}
\ No newline at end of file
...@@ -162,16 +162,6 @@ class OzgCloudFormDataMapperTest { ...@@ -162,16 +162,6 @@ class OzgCloudFormDataMapperTest {
assertThat(formFields).first().extracting(GrpcFormField::getLabel).isEqualTo(StructureMockFactory.ITEM_TITLE); assertThat(formFields).first().extracting(GrpcFormField::getLabel).isEqualTo(StructureMockFactory.ITEM_TITLE);
} }
@Test
void shouldCleanHtmlInTitle() {
var titleWithHtml = "<p>title</p>";
var expectedTitle = "title";
var formNode = FormNodeTestFactory.createBuilder().title(titleWithHtml).build();
var formField = mapper.createGrpcFormFieldBuilder(formNode);
assertThat(formField).extracting(GrpcFormFieldOrBuilder::getLabel).isEqualTo(expectedTitle);
}
} }
@Nested @Nested
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment