import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
-import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriInfo;
import org.opendaylight.mdsal.dom.api.DOMSchemaService;
-import org.opendaylight.netconf.sal.rest.doc.openapi.CommonApiObject;
import org.opendaylight.netconf.sal.rest.doc.openapi.Components;
import org.opendaylight.netconf.sal.rest.doc.openapi.Info;
import org.opendaylight.netconf.sal.rest.doc.openapi.OpenApiObject;
-import org.opendaylight.netconf.sal.rest.doc.openapi.SecurityDefinitions;
import org.opendaylight.netconf.sal.rest.doc.openapi.SecuritySchemes;
import org.opendaylight.netconf.sal.rest.doc.openapi.Server;
-import org.opendaylight.netconf.sal.rest.doc.openapi.SwaggerObject;
import org.opendaylight.netconf.sal.rest.doc.util.JsonUtil;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.common.Revision;
private static final Logger LOG = LoggerFactory.getLogger(BaseYangOpenApiGenerator.class);
private static final String API_VERSION = "1.0.0";
- private static final String SWAGGER_VERSION = "2.0";
private static final String OPEN_API_VERSION = "3.0.3";
private static final ObjectMapper MAPPER = new ObjectMapper();
- private static final List<String> PRODUCES = List.of(MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON);
private final DefinitionGenerator jsonConverter = new DefinitionGenerator();
private final DOMSchemaService schemaService;
public static final String BASE_PATH = "/";
public static final String MODULE_NAME_SUFFIX = "_module";
-
- private static final ObjectNode SWAGGER_BASIC_AUTH = JsonNodeFactory.instance.objectNode()
- .put("type", "basic");
private static final ObjectNode OPEN_API_BASIC_AUTH = JsonNodeFactory.instance.objectNode()
.put("type", "http")
.put("scheme", "basic");
this.schemaService = schemaService.orElse(null);
}
- public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final DefinitionNames definitionNames) {
+ public OpenApiObject getAllModulesDoc(final UriInfo uriInfo, final DefinitionNames definitionNames) {
final EffectiveModelContext schemaContext = schemaService.getGlobalContext();
Preconditions.checkState(schemaContext != null);
return getAllModulesDoc(uriInfo, Optional.empty(), schemaContext, Optional.empty(), "", definitionNames);
}
- public SwaggerObject getAllModulesDoc(final UriInfo uriInfo, final Optional<Range<Integer>> range,
+ public OpenApiObject getAllModulesDoc(final UriInfo uriInfo, final Optional<Range<Integer>> range,
final EffectiveModelContext schemaContext, final Optional<String> deviceName, final String context,
final DefinitionNames definitionNames) {
final String schema = createSchemaFromUriInfo(uriInfo);
}
final String title = name + " modules of RESTCONF";
- final SwaggerObject doc = createSwaggerObject(schema, host, BASE_PATH, title);
+ final OpenApiObject doc = createOpenApiObject(schema, host, BASE_PATH, title);
doc.setDefinitions(JsonNodeFactory.instance.objectNode());
doc.setPaths(JsonNodeFactory.instance.objectNode());
return doc;
}
- public void fillDoc(final SwaggerObject doc, final Optional<Range<Integer>> range,
+ public void fillDoc(final OpenApiObject doc, final Optional<Range<Integer>> range,
final EffectiveModelContext schemaContext, final String context, final Optional<String> deviceName,
final DefinitionNames definitionNames) {
final SortedSet<Module> modules = getSortedModules(schemaContext);
LOG.debug("Working on [{},{}]...", module.getName(), revisionString);
- getSwaggerDocSpec(module, context, deviceName, schemaContext, definitionNames, doc, false);
+ getOpenApiDocSpec(module, context, deviceName, schemaContext, definitionNames, doc, false);
}
}
}
}
- public CommonApiObject getApiDeclaration(final String module, final String revision, final UriInfo uriInfo) {
+ public OpenApiObject getApiDeclaration(final String module, final String revision, final UriInfo uriInfo) {
final EffectiveModelContext schemaContext = schemaService.getGlobalContext();
Preconditions.checkState(schemaContext != null);
- final SwaggerObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "");
- return convertToOpenApi(doc);
+ final OpenApiObject doc = getApiDeclaration(module, revision, uriInfo, schemaContext, "");
+ return doc;
}
- public SwaggerObject getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo,
+ public OpenApiObject getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo,
final EffectiveModelContext schemaContext, final String context) {
final Optional<Revision> rev;
return getApiDeclaration(module, uriInfo, context, schemaContext);
}
- public SwaggerObject getApiDeclaration(final Module module, final UriInfo uriInfo, final String context,
+ public OpenApiObject getApiDeclaration(final Module module, final UriInfo uriInfo, final String context,
final EffectiveModelContext schemaContext) {
final String schema = createSchemaFromUriInfo(uriInfo);
final String host = createHostFromUriInfo(uriInfo);
- return getSwaggerDocSpec(module, schema, host, BASE_PATH, context, schemaContext);
+ return getOpenApiDocSpec(module, schema, host, BASE_PATH, context, schemaContext);
}
public String createHostFromUriInfo(final UriInfo uriInfo) {
return uriInfo.getBaseUri().getScheme();
}
- public SwaggerObject getSwaggerDocSpec(final Module module, final String schema, final String host,
+ public OpenApiObject getOpenApiDocSpec(final Module module, final String schema, final String host,
final String basePath, final String context, final EffectiveModelContext schemaContext) {
- final SwaggerObject doc = createSwaggerObject(schema, host, basePath, module.getName());
+ final OpenApiObject doc = createOpenApiObject(schema, host, basePath, module.getName());
final DefinitionNames definitionNames = new DefinitionNames();
- return getSwaggerDocSpec(module, context, Optional.empty(), schemaContext, definitionNames, doc, true);
+ return getOpenApiDocSpec(module, context, Optional.empty(), schemaContext, definitionNames, doc, true);
}
- public SwaggerObject getSwaggerDocSpec(final Module module, final String context, final Optional<String> deviceName,
- final EffectiveModelContext schemaContext, final DefinitionNames definitionNames, final SwaggerObject doc,
+ public OpenApiObject getOpenApiDocSpec(final Module module, final String context, final Optional<String> deviceName,
+ final EffectiveModelContext schemaContext, final DefinitionNames definitionNames, final OpenApiObject doc,
final boolean isForSingleModule) {
final ObjectNode definitions;
}
}
- public SwaggerObject createSwaggerObject(final String schema, final String host, final String basePath,
- final String title) {
- final SwaggerObject doc = new SwaggerObject();
- doc.setSwagger(SWAGGER_VERSION);
+ public OpenApiObject createOpenApiObject(final String schema, final String host, final String basePath,
+ final String title) {
+ final OpenApiObject doc = new OpenApiObject();
+ doc.setOpenapi(OPEN_API_VERSION);
final Info info = new Info();
info.setTitle(title);
info.setVersion(API_VERSION);
doc.setInfo(info);
- doc.setSchemes(ImmutableList.of(schema));
- doc.setHost(host);
- doc.setBasePath(basePath);
- doc.setProduces(PRODUCES);
- doc.setSecurityDefinitions(new SecurityDefinitions(SWAGGER_BASIC_AUTH));
+ doc.setServers(convertToServers(ImmutableList.of(schema), host, basePath));
+ doc.setComponents(new Components(doc.getDefinitions(), new SecuritySchemes(OPEN_API_BASIC_AUTH)));
doc.setSecurity(SECURITY);
return doc;
}
- public static OpenApiObject convertToOpenApi(final SwaggerObject swaggerObject) {
- final OpenApiObject doc = new OpenApiObject();
- doc.setOpenapi(OPEN_API_VERSION);
- doc.setInfo(swaggerObject.getInfo());
- doc.setServers(convertToServers(swaggerObject.getSchemes(), swaggerObject.getHost(),
- swaggerObject.getBasePath()));
- doc.setPaths(swaggerObject.getPaths());
- doc.setComponents(new Components(swaggerObject.getDefinitions(), new SecuritySchemes(OPEN_API_BASIC_AUTH)));
- doc.setSecurity(swaggerObject.getSecurity());
- return doc;
- }
-
private static List<Server> convertToServers(final List<String> schemes, final String host, final String basePath) {
return ImmutableList.of(new Server(schemes.get(0) + "://" + host + basePath));
}