From 200ae763f25dd474d804254b1bb0002e510f8da9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Mino?= Date: Sat, 24 Feb 2024 10:50:56 +0100 Subject: [PATCH 1/2] (fix) Element was inserted at the wrong location --- .../io/fabric8/maven/MavenJDOMWriter.java | 2 +- src/test/java/io/fabric8/maven/MavenTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/fabric8/maven/MavenJDOMWriter.java b/src/main/java/io/fabric8/maven/MavenJDOMWriter.java index 6a50924..843089e 100644 --- a/src/main/java/io/fabric8/maven/MavenJDOMWriter.java +++ b/src/main/java/io/fabric8/maven/MavenJDOMWriter.java @@ -262,7 +262,7 @@ protected void insertAtPreferredLocation(Element parent, Element child, Counter Iterator it = parent.getContent().iterator(); Text lastText = null; int offset = 0; - while (it.hasNext() && (elementCounter <= counter.getCurrentIndex())) { + while (it.hasNext() && (elementCounter < counter.getCurrentIndex())) { Object next = it.next(); offset = offset + 1; if (next instanceof Element) { diff --git a/src/test/java/io/fabric8/maven/MavenTest.java b/src/test/java/io/fabric8/maven/MavenTest.java index ad13146..eae885c 100644 --- a/src/test/java/io/fabric8/maven/MavenTest.java +++ b/src/test/java/io/fabric8/maven/MavenTest.java @@ -13,6 +13,7 @@ import java.util.Collections; import java.util.Properties; +import org.apache.maven.model.Dependency; import org.apache.maven.model.Model; import org.apache.maven.model.Scm; import org.assertj.core.api.Assertions; @@ -147,4 +148,26 @@ void should_write_scm_tag(@TempDir Path tempDir) throws Exception { } + @Test + void should_respect_insertion_order(@TempDir Path tempDir) throws Exception { + URL resource = getClass().getResource("parent/parent-pom.xml"); + Path basePom = Paths.get(resource.toURI()); + Model model = Maven.readModel(new FileReader(basePom.toFile())); + + Path updatedPom = tempDir.resolve("updated-pom.xml"); + Files.copy(basePom, updatedPom); + + Dependency dependency = model.getDependencies().stream().filter(d -> d.getArtifactId().equals("quarkus-junit5-internal")).findFirst().orElseThrow(); + dependency.setVersion("1.0.0"); + + Maven.writeModel(model, updatedPom); + + assertThat(Files.readString(updatedPom)) + .contains("\n" + + " io.quarkus\n" + + " quarkus-junit5-internal\n" + + " 1.0.0\n" + + " test\n" + + " "); + } } From b69a27f996dceed51dfd4b4ae44db81ef3bce4cc Mon Sep 17 00:00:00 2001 From: George Gastaldi Date: Mon, 26 Feb 2024 11:03:42 -0300 Subject: [PATCH 2/2] Add minor enhancements --- .../java/io/fabric8/maven/MavenJDOMWriter.java | 18 +++++++----------- src/test/java/io/fabric8/maven/MavenTest.java | 5 +++-- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/fabric8/maven/MavenJDOMWriter.java b/src/main/java/io/fabric8/maven/MavenJDOMWriter.java index 843089e..5447335 100644 --- a/src/main/java/io/fabric8/maven/MavenJDOMWriter.java +++ b/src/main/java/io/fabric8/maven/MavenJDOMWriter.java @@ -80,12 +80,12 @@ class MavenJDOMWriter { /** * Field factory. */ - private DefaultJDOMFactory factory; + private final DefaultJDOMFactory factory; /** * Field lineSeparator. */ - private String lineSeparator; + private final String lineSeparator; // ----------------/ // - Constructors -/ @@ -175,7 +175,7 @@ protected Element findAndReplaceSimpleElement(Counter counter, Element parent, S } } - boolean shouldExist = (text != null) && (text.trim().length() > 0); + boolean shouldExist = (text != null) && (!text.trim().isEmpty()); Element element = updateElement(counter, parent, name, shouldExist); if (shouldExist) { element.setText(text); @@ -274,17 +274,13 @@ protected void insertAtPreferredLocation(Element parent, Element child, Counter lastText = (Text) next; } } - if ((lastText != null) && (lastText.getTextTrim().length() == 0)) { - lastText = (Text) lastText.clone(); + if ((lastText != null) && (lastText.getTextTrim().isEmpty())) { + lastText = lastText.clone(); } else { - StringBuilder starter = new StringBuilder(lineSeparator); - for (int i = 0; i < counter.getDepth(); i++) { - starter.append(" "); - } - lastText = factory.text(starter.toString()); + lastText = factory.text(lineSeparator + " ".repeat(Math.max(0, counter.getDepth()))); } if (parent.getContentSize() == 0) { - Text finalText = (Text) lastText.clone(); + Text finalText = lastText.clone(); finalText.setText(finalText.getText().substring(0, finalText.getText().length() - " ".length())); parent.addContent(contentIndex, finalText); } diff --git a/src/test/java/io/fabric8/maven/MavenTest.java b/src/test/java/io/fabric8/maven/MavenTest.java index eae885c..fa9c9a0 100644 --- a/src/test/java/io/fabric8/maven/MavenTest.java +++ b/src/test/java/io/fabric8/maven/MavenTest.java @@ -152,14 +152,14 @@ void should_write_scm_tag(@TempDir Path tempDir) throws Exception { void should_respect_insertion_order(@TempDir Path tempDir) throws Exception { URL resource = getClass().getResource("parent/parent-pom.xml"); Path basePom = Paths.get(resource.toURI()); - Model model = Maven.readModel(new FileReader(basePom.toFile())); + Model model = Maven.readModel(basePom); Path updatedPom = tempDir.resolve("updated-pom.xml"); Files.copy(basePom, updatedPom); Dependency dependency = model.getDependencies().stream().filter(d -> d.getArtifactId().equals("quarkus-junit5-internal")).findFirst().orElseThrow(); dependency.setVersion("1.0.0"); - + dependency.setOptional("true"); Maven.writeModel(model, updatedPom); assertThat(Files.readString(updatedPom)) @@ -168,6 +168,7 @@ void should_respect_insertion_order(@TempDir Path tempDir) throws Exception { " quarkus-junit5-internal\n" + " 1.0.0\n" + " test\n" + + " true\n" + " "); } }