mirror of
https://github.com/zaaarf/route-cartographer.git
synced 2024-11-14 16:49:19 +01:00
fix: assorted fixes
This commit is contained in:
parent
145040c2c6
commit
ff54940b4a
2 changed files with 30 additions and 32 deletions
|
@ -2,19 +2,21 @@ package foo.zaaarf.routecompass;
|
||||||
|
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import org.springframework.web.bind.annotation.RequestMethod;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Representation of a REST route.
|
* Representation of a REST route.
|
||||||
*/
|
*/
|
||||||
public class Route {
|
public class Route {
|
||||||
/**
|
/**
|
||||||
* The path of the endpoint.
|
* The paths of the endpoint.
|
||||||
*/
|
*/
|
||||||
public final String path;
|
public final String[] paths;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The supported {@link RequestMethod}s, flattened to a string.
|
* The supported {@link RequestMethod}s, as strings.
|
||||||
*/
|
*/
|
||||||
public final String method;
|
public final String[] methods;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The media types produced by the endpoint.
|
* The media types produced by the endpoint.
|
||||||
|
@ -50,7 +52,7 @@ public class Route {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The one and only constructor.
|
* The one and only constructor.
|
||||||
* @param path the path of the endpoint
|
* @param paths the paths of the endpoint
|
||||||
* @param methods the {@link RequestMethod}s accepted by the endpoint
|
* @param methods the {@link RequestMethod}s accepted by the endpoint
|
||||||
* @param consumes the media types consumed by the endpoint, may be null
|
* @param consumes the media types consumed by the endpoint, may be null
|
||||||
* @param produces the media types produced by the endpoint, may be null
|
* @param produces the media types produced by the endpoint, may be null
|
||||||
|
@ -59,19 +61,10 @@ public class Route {
|
||||||
* @param inputType the DTO for the request type, may be null
|
* @param inputType the DTO for the request type, may be null
|
||||||
* @param params {@link Param}s of the endpoint, may be null
|
* @param params {@link Param}s of the endpoint, may be null
|
||||||
*/
|
*/
|
||||||
public Route(String path, RequestMethod[] methods, String[] consumes, String[] produces,
|
public Route(String[] paths, RequestMethod[] methods, String[] consumes, String[] produces,
|
||||||
boolean deprecated, DTO returnType, DTO inputType, Param... params) {
|
boolean deprecated, DTO returnType, DTO inputType, Param... params) {
|
||||||
this.path = path;
|
this.paths = paths;
|
||||||
|
this.methods = Arrays.stream(methods).map(Enum::name).toArray(String[]::new);
|
||||||
StringBuilder methodStringBuilder = new StringBuilder("[");
|
|
||||||
for(RequestMethod m : methods)
|
|
||||||
methodStringBuilder
|
|
||||||
.append(m.name())
|
|
||||||
.append("|");
|
|
||||||
methodStringBuilder
|
|
||||||
.deleteCharAt(methodStringBuilder.length() - 1)
|
|
||||||
.append("]");
|
|
||||||
this.method = methodStringBuilder.toString();
|
|
||||||
|
|
||||||
if(produces != null) this.produces = produces;
|
if(produces != null) this.produces = produces;
|
||||||
else this.produces = new String[0];
|
else this.produces = new String[0];
|
||||||
|
|
|
@ -87,7 +87,7 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
FileObject serviceProvider = this.processingEnv.getFiler().createResource(
|
FileObject serviceProvider = this.processingEnv.getFiler().createResource(
|
||||||
StandardLocation.SOURCE_OUTPUT, "", "routes"
|
StandardLocation.SOURCE_OUTPUT, "", "route_map"
|
||||||
);
|
);
|
||||||
|
|
||||||
PrintWriter out = new PrintWriter(serviceProvider.openWriter());
|
PrintWriter out = new PrintWriter(serviceProvider.openWriter());
|
||||||
|
@ -98,11 +98,12 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
for(Route r : routesInClass) {
|
for(Route r : routesInClass) {
|
||||||
out.print("\t- ");
|
out.print("\t- ");
|
||||||
if(r.deprecated) out.print("[DEPRECATED] ");
|
if(r.deprecated) out.print("[DEPRECATED] ");
|
||||||
out.print(r.method + " " + r.path);
|
out.print("[" + String.join("|", r.methods) + "] ["
|
||||||
|
+ String.join("|", r.paths) + "]");
|
||||||
if(r.consumes != null && r.consumes.length > 0)
|
if(r.consumes != null && r.consumes.length > 0)
|
||||||
out.print("(expects: " + Arrays.toString(r.consumes) + ")");
|
out.print(" (expects: " + String.join("|", r.consumes) + ")");
|
||||||
if(r.produces != null && r.produces.length > 0)
|
if(r.produces != null && r.produces.length > 0)
|
||||||
out.print("(returns: " + Arrays.toString(r.produces) + ")");
|
out.print(" (returns: " + String.join("|", r.produces) + ")");
|
||||||
out.println();
|
out.println();
|
||||||
|
|
||||||
BiConsumer<String, Route.Param[]> printParam = (name, params) -> {
|
BiConsumer<String, Route.Param[]> printParam = (name, params) -> {
|
||||||
|
@ -111,7 +112,7 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
out.print(name != null ? "\t\t\t" : "\t\t");
|
out.print(name != null ? "\t\t\t" : "\t\t");
|
||||||
out.print("- " + p.typeFQN + " " + p.name);
|
out.print("- " + p.typeFQN + " " + p.name);
|
||||||
if(p.defaultValue != null)
|
if(p.defaultValue != null)
|
||||||
out.print(" " + "(default: " + p.defaultValue + ")");
|
out.print(" (default: " + p.defaultValue + ")");
|
||||||
out.println();
|
out.println();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -140,19 +141,23 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
* @param element the {@link Element} currently being examined
|
* @param element the {@link Element} currently being examined
|
||||||
* @return the full route of the endpoint
|
* @return the full route of the endpoint
|
||||||
*/
|
*/
|
||||||
private String getFullRoute(TypeElement annotationType, Element element) {
|
private String[] getFullRoute(TypeElement annotationType, Element element) {
|
||||||
try { //TODO support multiple routes
|
try {
|
||||||
String[] routes = this.getAnnotationFieldsValue(
|
String[] routes = this.getAnnotationFieldsValue(
|
||||||
annotationType,
|
annotationType,
|
||||||
element,
|
element,
|
||||||
(arr) -> Arrays.deepEquals(arr, new String[] {}),
|
(arr) -> Arrays.deepEquals(arr, new String[] {}),
|
||||||
"path", "value");
|
"path", "value");
|
||||||
return this.getParentOrFallback(element, routes[0], (a, e) -> {
|
return this.getParentOrFallback(element, routes, (a, e) -> {
|
||||||
String parent = this.getFullRoute(a, e);
|
//assume parent doesn't have multiple routes
|
||||||
|
String parent = this.getFullRoute(a, e)[0];
|
||||||
|
for(int i = 0; i < routes.length; i++) {
|
||||||
StringBuilder sb = new StringBuilder(parent);
|
StringBuilder sb = new StringBuilder(parent);
|
||||||
if(!parent.endsWith("/")) sb.append("/");
|
if(!parent.endsWith("/")) sb.append("/");
|
||||||
sb.append(routes[0]);
|
sb.append(routes[i]);
|
||||||
return sb.toString();
|
routes[i] = sb.toString();
|
||||||
|
}
|
||||||
|
return routes;
|
||||||
});
|
});
|
||||||
} catch (ReflectiveOperationException ex) {
|
} catch (ReflectiveOperationException ex) {
|
||||||
throw new RuntimeException(ex); //if it fails something went very wrong
|
throw new RuntimeException(ex); //if it fails something went very wrong
|
||||||
|
@ -249,7 +254,7 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
if(defaultValue.equals(ValueConstants.DEFAULT_NONE))
|
if(defaultValue.equals(ValueConstants.DEFAULT_NONE))
|
||||||
defaultValue = null;
|
defaultValue = null;
|
||||||
|
|
||||||
return new Route.Param(name, defaultValue, p.asType().toString());
|
return new Route.Param(name, p.asType().toString(), defaultValue);
|
||||||
}).filter(Objects::nonNull).toArray(Route.Param[]::new);
|
}).filter(Objects::nonNull).toArray(Route.Param[]::new);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +281,7 @@ public class RouteCompass extends AbstractProcessor {
|
||||||
else typeElement = null;
|
else typeElement = null;
|
||||||
} while(typeElement != null);
|
} while(typeElement != null);
|
||||||
|
|
||||||
return new Route.DTO(type.asType().toString(), fieldElements.stream() //TODO @JsonIgnore
|
return new Route.DTO(type.asType().toString(), fieldElements.stream()
|
||||||
.map(e -> new Route.Param(e.asType().toString(), e.getSimpleName().toString(), null))
|
.map(e -> new Route.Param(e.asType().toString(), e.getSimpleName().toString(), null))
|
||||||
.toArray(Route.Param[]::new));
|
.toArray(Route.Param[]::new));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue