Sketch of adding request partition name to swagger paths

This commit is contained in:
Michael Buckley 2021-08-20 17:05:16 -04:00
parent 8061ba339f
commit 7734e8f515
1 changed files with 38 additions and 7 deletions

View File

@ -78,7 +78,6 @@ import org.thymeleaf.IEngineConfiguration;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.cache.AlwaysValidCacheEntryValidity;
import org.thymeleaf.cache.ICacheEntryValidity;
import org.thymeleaf.cache.NonCacheableCacheEntryValidity;
import org.thymeleaf.context.IExpressionContext;
import org.thymeleaf.context.WebContext;
import org.thymeleaf.linkbuilder.AbstractLinkBuilder;
@ -127,11 +126,20 @@ public class OpenApiInterceptor {
private final Map<String, String> myResourcePathToClasspath = new HashMap<>();
private final Map<String, String> myExtensionToContentType = new HashMap<>();
private String myBannerImage;
private final boolean myShowPartitionPrefix;
// FIXME KZ delete this? Or figure out a better way to pass the configuration in.
public OpenApiInterceptor() {
this(false,null);
}
/**
* Constructor
*/
public OpenApiInterceptor() {
public OpenApiInterceptor(boolean theRequestPartitionFlag, String theDefaultPartitionName) {
// FIXME MB how to configure? Do we know the default partition name?
myShowPartitionPrefix = theRequestPartitionFlag;
mySwaggerUiVersion = initSwaggerUiWebJar();
myTemplateEngine = new TemplateEngine();
@ -746,6 +754,17 @@ public class OpenApiInterceptor {
private Operation getPathItem(Paths thePaths, String thePath, PathItem.HttpMethod theMethod) {
PathItem pathItem;
String partitionPrefix;
Operation newOperation = new Operation();
if (myShowPartitionPrefix) {
partitionPrefix = "/{partitionId}";
addPartitionNameParameter(newOperation);
} else {
partitionPrefix = "";
}
thePath = partitionPrefix + thePath;
if (thePaths.containsKey(thePath)) {
pathItem = thePaths.get(thePath);
} else {
@ -756,19 +775,19 @@ public class OpenApiInterceptor {
switch (theMethod) {
case POST:
assert pathItem.getPost() == null : "Have duplicate POST at path: " + thePath;
return pathItem.post(new Operation()).getPost();
return pathItem.post(newOperation).getPost();
case GET:
assert pathItem.getGet() == null : "Have duplicate GET at path: " + thePath;
return pathItem.get(new Operation()).getGet();
return pathItem.get(newOperation).getGet();
case PUT:
assert pathItem.getPut() == null;
return pathItem.put(new Operation()).getPut();
return pathItem.put(newOperation).getPut();
case PATCH:
assert pathItem.getPatch() == null;
return pathItem.patch(new Operation()).getPatch();
return pathItem.patch(newOperation).getPatch();
case DELETE:
assert pathItem.getDelete() == null;
return pathItem.delete(new Operation()).getDelete();
return pathItem.delete(newOperation).getDelete();
case HEAD:
case OPTIONS:
case TRACE:
@ -845,6 +864,18 @@ public class OpenApiInterceptor {
theOperation.addParametersItem(parameter);
}
private void addPartitionNameParameter(Operation theOperation) {
Parameter parameter = new Parameter();
parameter.setName("partition_name");
// FIXME MB only if request mode
parameter.setIn("path");
parameter.setDescription("The name of the partition to target");
parameter.setExample("DEFAULT");
parameter.setSchema(new Schema().type("string").minimum(new BigDecimal(1)));
parameter.setStyle(Parameter.StyleEnum.SIMPLE);
theOperation.addParametersItem(parameter);
}
protected ClassLoaderTemplateResource getIndexTemplate() {
return new ClassLoaderTemplateResource(myResourcePathToClasspath.get("/swagger-ui/index.html"), StandardCharsets.UTF_8.name());
}