Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[API] Expose InputLocation formatter in the XmlFactory #1616

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Use a Function instead of a specific interface to expose it in the API
  • Loading branch information
gnodet committed Jul 13, 2024
commit 047c9a970f62ed4b0aaa8635b2f703d451e8c9b5
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 21,7 @@
import java.io.OutputStream;
import java.io.Writer;
import java.nio.file.Path;
import java.util.function.Function;

import org.apache.maven.api.annotations.Experimental;
import org.apache.maven.api.annotations.Nonnull;
Expand All @@ -47,6 48,9 @@ public interface XmlWriterRequest<T> {
@Nonnull
T getContent();

@Nullable
Function<Object, String> getInputLocationFormatter();

static <T> XmlWriterRequestBuilder<T> builder() {
return new XmlWriterRequestBuilder<>();
}
Expand All @@ -56,6 60,7 @@ class XmlWriterRequestBuilder<T> {
OutputStream outputStream;
Writer writer;
T content;
Function<Object, String> inputLocationFormatter;

public XmlWriterRequestBuilder<T> path(Path path) {
this.path = path;
Expand All @@ -77,21 82,33 @@ public XmlWriterRequestBuilder<T> content(T content) {
return this;
}

public XmlWriterRequestBuilder<T> inputLocationFormatter(Function<Object, String> inputLocationFormatter) {
this.inputLocationFormatter = inputLocationFormatter;
return this;
}

public XmlWriterRequest<T> build() {
return new DefaultXmlWriterRequest<>(path, outputStream, writer, content);
return new DefaultXmlWriterRequest<>(path, outputStream, writer, content, inputLocationFormatter);
}

private static class DefaultXmlWriterRequest<T> implements XmlWriterRequest<T> {
final Path path;
final OutputStream outputStream;
final Writer writer;
final T content;

DefaultXmlWriterRequest(Path path, OutputStream outputStream, Writer writer, T content) {
final Function<Object, String> inputLocationFormatter;

DefaultXmlWriterRequest(
Path path,
OutputStream outputStream,
Writer writer,
T content,
Function<Object, String> inputLocationFormatter) {
this.path = path;
this.outputStream = outputStream;
this.writer = writer;
this.content = content;
this.inputLocationFormatter = inputLocationFormatter;
}

@Override
Expand All @@ -113,6 130,11 @@ public Writer getWriter() {
public T getContent() {
return content;
}

@Override
public Function<Object, String> getInputLocationFormatter() {
return inputLocationFormatter;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 152,4 @@ public static InputLocation merge(InputLocation target, InputLocation source, Co

return new InputLocation(-1, -1, InputSource.merge(source.getSource(), target.getSource()), locations);
} // -- InputLocation merge( InputLocation, InputLocation, java.util.Collection )

/**
* Class StringFormatter.
*
* @version $Revision$ $Date$
*/
public interface StringFormatter {

// -----------/
// - Methods -/
// -----------/

/**
* Method toString.
*/
String toString(InputLocation location);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 25,7 @@
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.function.Function;

import org.apache.maven.api.annotations.Nonnull;
import org.apache.maven.api.di.Named;
Expand Down Expand Up @@ -89,17 90,22 @@ public void write(XmlWriterRequest<Model> request) throws XmlWriterException {
Path path = request.getPath();
OutputStream outputStream = request.getOutputStream();
Writer writer = request.getWriter();
Function<Object, String> inputLocationFormatter = request.getInputLocationFormatter();
if (writer == null && outputStream == null && path == null) {
throw new IllegalArgumentException("writer, outputStream or path must be non null");
}
try {
MavenStaxWriter w = new MavenStaxWriter();
if (inputLocationFormatter != null) {
w.setStringFormatter((Function) inputLocationFormatter);
}
if (writer != null) {
new MavenStaxWriter().write(writer, content);
w.write(writer, content);
} else if (outputStream != null) {
new MavenStaxWriter().write(outputStream, content);
w.write(outputStream, content);
} else {
try (OutputStream os = Files.newOutputStream(path)) {
new MavenStaxWriter().write(outputStream, content);
w.write(outputStream, content);
}
}
} catch (Exception e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,14 67,7 @@ public void setFileComment(String fileComment) {
*/
public void setStringFormatter(InputLocation.StringFormatter stringFormatter) {
delegate.setStringFormatter(
stringFormatter != null
? new org.apache.maven.api.model.InputLocation.StringFormatter() {
@Override
public String toString(org.apache.maven.api.model.InputLocation location) {
return stringFormatter.toString(new InputLocation(location));
}
}
: null);
stringFormatter != null ? location -> stringFormatter.toString(new InputLocation(location)) : null);
} // -- void setStringFormatter( InputLocation.StringFormatter )

/**
Expand Down
9 changes: 5 additions & 4 deletions src/mdo/writer-stax.vm
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 57,7 @@ import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.Set;
import java.util.function.Function;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
Expand Down Expand Up @@ -114,7 115,7 @@ public class ${className} {
/**
* Field stringFormatter.
*/
protected InputLocation.StringFormatter stringFormatter;
protected Function<InputLocation, String> stringFormatter;

#end
//-----------/
Expand Down Expand Up @@ -161,9 162,9 @@ public class ${className} {
*
* @param stringFormatter
*/
public void setStringFormatter(InputLocation.StringFormatter stringFormatter) {
public void setStringFormatter(Function<InputLocation, String> stringFormatter) {
this.stringFormatter = stringFormatter;
} //-- void setStringFormatter(InputLocation.StringFormatter)
} //-- void setStringFormatter(Function<InputLocation, String>)

#end
/**
Expand Down Expand Up @@ -432,7 433,7 @@ public class ${className} {
*/
protected String toString(InputLocation location) {
if (stringFormatter != null) {
return stringFormatter.toString(location);
return stringFormatter.apply(location);
}
if (location.getSource() != null) {
return ' ' location.getSource().toString() ':' location.getLineNumber() ' ';
Expand Down