Skip to content

Commit a1d7bb0

Browse files
author
Vincent Potucek
committed
extract common functionality of DefaultPluginXmlFactory
1 parent 3e9c164 commit a1d7bb0

File tree

5 files changed

+57
-52
lines changed

5 files changed

+57
-52
lines changed

api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlReaderRequest.java

+6
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ interface Transformer {
7878
String transform(String source, String fieldName);
7979
}
8080

81+
default void throwIfIncomplete() {
82+
if (getInputStream() == null && getReader() == null && getPath() == null && getURL() == null) {
83+
throw new IllegalArgumentException("writer, outputStream, or path must be non null");
84+
}
85+
}
86+
8187
@Nonnull
8288
static XmlReaderRequestBuilder builder() {
8389
return new XmlReaderRequestBuilder();

api/maven-api-core/src/main/java/org/apache/maven/api/services/xml/XmlWriterRequest.java

+6
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,12 @@ static <T> XmlWriterRequestBuilder<T> builder() {
5555
return new XmlWriterRequestBuilder<>();
5656
}
5757

58+
default void throwIfIncomplete() {
59+
if (getWriter() == null && getOutputStream() == null && getPath() == null) {
60+
throw new IllegalArgumentException("writer, outputStream, or path must be non null");
61+
}
62+
}
63+
5864
class XmlWriterRequestBuilder<T> {
5965
Path path;
6066
OutputStream outputStream;

impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultModelXmlFactory.java

+2-6
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,7 @@ private Model doRead(XmlReaderRequest request) throws XmlReaderException {
8383
URL url = request.getURL();
8484
Reader reader = request.getReader();
8585
InputStream inputStream = request.getInputStream();
86-
if (path == null && url == null && reader == null && inputStream == null) {
87-
throw new IllegalArgumentException("path, url, reader or inputStream must be non null");
88-
}
86+
request.throwIfIncomplete();
8987
try {
9088
InputSource source = null;
9189
if (request.getModelId() != null || request.getLocation() != null) {
@@ -120,9 +118,7 @@ public void write(XmlWriterRequest<Model> request) throws XmlWriterException {
120118
OutputStream outputStream = request.getOutputStream();
121119
Writer writer = request.getWriter();
122120
Function<Object, String> inputLocationFormatter = request.getInputLocationFormatter();
123-
if (writer == null && outputStream == null && path == null) {
124-
throw new IllegalArgumentException("writer, outputStream or path must be non null");
125-
}
121+
request.throwIfIncomplete();
126122
try {
127123
MavenStaxWriter w = new MavenStaxWriter();
128124
if (inputLocationFormatter != null) {

impl/maven-impl/src/main/java/org/apache/maven/impl/DefaultPluginXmlFactory.java

+39-42
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,12 @@
1818
*/
1919
package org.apache.maven.impl;
2020

21+
import javax.xml.stream.XMLStreamException;
22+
23+
import java.io.IOException;
2124
import java.io.InputStream;
2225
import java.io.OutputStream;
23-
import java.io.Reader;
24-
import java.io.Writer;
25-
import java.net.URL;
2626
import java.nio.file.Files;
27-
import java.nio.file.Path;
2827

2928
import org.apache.maven.api.annotations.Nonnull;
3029
import org.apache.maven.api.di.Named;
@@ -38,65 +37,63 @@
3837
import org.apache.maven.plugin.descriptor.io.PluginDescriptorStaxReader;
3938
import org.apache.maven.plugin.descriptor.io.PluginDescriptorStaxWriter;
4039

41-
import static org.apache.maven.impl.ImplUtils.nonNull;
4240
import static org.apache.maven.impl.StaxLocation.getLocation;
4341
import static org.apache.maven.impl.StaxLocation.getMessage;
4442

4543
@Named
4644
@Singleton
4745
public class DefaultPluginXmlFactory implements PluginXmlFactory {
46+
4847
@Override
4948
public PluginDescriptor read(@Nonnull XmlReaderRequest request) throws XmlReaderException {
50-
nonNull(request, "request");
51-
Path path = request.getPath();
52-
URL url = request.getURL();
53-
Reader reader = request.getReader();
54-
InputStream inputStream = request.getInputStream();
55-
if (path == null && url == null && reader == null && inputStream == null) {
56-
throw new IllegalArgumentException("path, url, reader or inputStream must be non null");
57-
}
49+
return read(request, setAddDefaultEntities(request, new PluginDescriptorStaxReader()));
50+
}
51+
52+
@Override
53+
public void write(XmlWriterRequest<PluginDescriptor> request) throws XmlWriterException {
54+
write(request, new PluginDescriptorStaxWriter());
55+
}
56+
57+
private static PluginDescriptor read(XmlReaderRequest request, PluginDescriptorStaxReader reader) {
58+
request.throwIfIncomplete();
5859
try {
59-
PluginDescriptorStaxReader xml = new PluginDescriptorStaxReader();
60-
xml.setAddDefaultEntities(request.isAddDefaultEntities());
61-
if (inputStream != null) {
62-
return xml.read(inputStream, request.isStrict());
63-
} else if (reader != null) {
64-
return xml.read(reader, request.isStrict());
65-
} else if (path != null) {
66-
try (InputStream is = Files.newInputStream(path)) {
67-
return xml.read(is, request.isStrict());
60+
if (request.getInputStream() != null) {
61+
return reader.read(request.getInputStream(), request.isStrict());
62+
} else if (request.getReader() != null) {
63+
return reader.read(request.getReader(), request.isStrict());
64+
} else if (request.getPath() != null) {
65+
try (InputStream is = Files.newInputStream(request.getPath())) {
66+
return reader.read(is, request.isStrict());
6867
}
6968
} else {
70-
try (InputStream is = url.openStream()) {
71-
return xml.read(is, request.isStrict());
69+
try (InputStream is = request.getURL().openStream()) {
70+
return reader.read(is, request.isStrict());
7271
}
7372
}
74-
} catch (Exception e) {
73+
} catch (IOException | XMLStreamException e) {
7574
throw new XmlReaderException("Unable to read plugin: " + getMessage(e), getLocation(e), e);
7675
}
7776
}
7877

79-
@Override
80-
public void write(XmlWriterRequest<PluginDescriptor> request) throws XmlWriterException {
81-
nonNull(request, "request");
82-
PluginDescriptor content = nonNull(request.getContent(), "content");
83-
Path path = request.getPath();
84-
OutputStream outputStream = request.getOutputStream();
85-
Writer writer = request.getWriter();
86-
if (writer == null && outputStream == null && path == null) {
87-
throw new IllegalArgumentException("writer, outputStream or path must be non null");
88-
}
78+
private static PluginDescriptorStaxReader setAddDefaultEntities(
79+
XmlReaderRequest request, PluginDescriptorStaxReader reader) {
80+
reader.setAddDefaultEntities(request.isAddDefaultEntities());
81+
return reader;
82+
}
83+
84+
private static void write(XmlWriterRequest<PluginDescriptor> request, PluginDescriptorStaxWriter writer) {
85+
request.throwIfIncomplete();
8986
try {
90-
if (writer != null) {
91-
new PluginDescriptorStaxWriter().write(writer, content);
92-
} else if (outputStream != null) {
93-
new PluginDescriptorStaxWriter().write(outputStream, content);
87+
if (request.getWriter() != null) {
88+
writer.write(request.getWriter(), request.getContent());
89+
} else if (request.getOutputStream() != null) {
90+
writer.write(request.getOutputStream(), request.getContent());
9491
} else {
95-
try (OutputStream os = Files.newOutputStream(path)) {
96-
new PluginDescriptorStaxWriter().write(os, content);
92+
try (OutputStream os = Files.newOutputStream(request.getPath())) {
93+
writer.write(os, request.getContent());
9794
}
9895
}
99-
} catch (Exception e) {
96+
} catch (XmlWriterException | XMLStreamException | IOException e) {
10097
throw new XmlWriterException("Unable to write plugin: " + getMessage(e), getLocation(e), e);
10198
}
10299
}

impl/maven-impl/src/test/java/org/apache/maven/impl/DefaultPluginXmlFactoryTest.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import static org.junit.jupiter.api.Assertions.assertNotNull;
4747
import static org.junit.jupiter.api.Assertions.assertThrows;
4848
import static org.mockito.Mockito.mock;
49+
import static org.mockito.Mockito.spy;
4950
import static org.mockito.Mockito.when;
5051

5152
class DefaultPluginXmlFactoryReadWriteTest {
@@ -184,7 +185,6 @@ void staticToXmlGeneratesValidXml() {
184185
.version("1.0.0")
185186
.build());
186187
assertThat(xml).contains("<name>" + NAME + "</name>");
187-
assertThat(xml).contains("<name>" + NAME + "</name>");
188188
assertThat(xml).contains("<groupId>org.example</groupId>");
189189
assertThat(xml).contains("<artifactId>sample-plugin</artifactId>");
190190
assertThat(xml).contains("<version>1.0.0</version>");
@@ -229,7 +229,7 @@ void writeWithNoTargetThrowsIllegalArgumentException() {
229229
.build())
230230
.build()))
231231
.getMessage())
232-
.isEqualTo("writer, outputStream or path must be non null");
232+
.isEqualTo("writer, outputStream, or path must be non null");
233233
}
234234

235235
@Test
@@ -268,7 +268,7 @@ void readFromUrlParsesPluginDescriptorCorrectly() throws Exception {
268268
void testReadWithPath() throws Exception {
269269
Path tempPath = Files.createTempFile("plugin", ".xml");
270270
Files.writeString(tempPath, "<plugin/>");
271-
XmlReaderRequest request = mock(XmlReaderRequest.class);
271+
XmlReaderRequest request = spy(XmlReaderRequest.class);
272272
when(request.getPath()).thenReturn(tempPath);
273273
when(request.getInputStream()).thenReturn(null);
274274
when(request.getReader()).thenReturn(null);
@@ -283,7 +283,7 @@ void testReadWithPath() throws Exception {
283283
void testReadWithPathUrlDefault() throws Exception {
284284
Path tempPath = Files.createTempFile("plugin", ".xml");
285285
Files.writeString(tempPath, "<plugin/>");
286-
XmlReaderRequest request = mock(XmlReaderRequest.class);
286+
XmlReaderRequest request = spy(XmlReaderRequest.class);
287287
when(request.getPath()).thenReturn(null);
288288
when(request.getInputStream()).thenReturn(null);
289289
when(request.getReader()).thenReturn(null);

0 commit comments

Comments
 (0)