}
public OpenApiInputStream getControllerModulesDoc(final UriInfo uriInfo) throws IOException {
- final var context = requireNonNull(schemaService.getGlobalContext());
+ final var modelContext = requireNonNull(schemaService.getGlobalContext());
final var schema = createSchemaFromUriInfo(uriInfo);
final var host = createHostFromUriInfo(uriInfo);
final var title = "Controller modules of RESTCONF";
final var url = schema + "://" + host + "/";
final var basePath = getBasePath();
- final var modules = getModulesWithoutDuplications(context);
- return new OpenApiInputStream(context, title, url, SECURITY, CONTROLLER_RESOURCE_NAME, "",false, false,
+ final var modules = getModulesWithoutDuplications(modelContext);
+ return new OpenApiInputStream(modelContext, title, url, SECURITY, CONTROLLER_RESOURCE_NAME, "",false, false,
modules, basePath);
}
public OpenApiInputStream getApiDeclaration(final String module, final String revision, final UriInfo uriInfo)
throws IOException {
- final EffectiveModelContext schemaContext = schemaService.getGlobalContext();
- Preconditions.checkState(schemaContext != null);
- return getApiDeclaration(module, revision, uriInfo, schemaContext, "", CONTROLLER_RESOURCE_NAME);
+ final var modelContext = schemaService.getGlobalContext();
+ Preconditions.checkState(modelContext != null);
+ return getApiDeclaration(module, revision, uriInfo, modelContext, "", CONTROLLER_RESOURCE_NAME);
}
public OpenApiInputStream getApiDeclaration(final String moduleName, final String revision, final UriInfo uriInfo,
- final EffectiveModelContext schemaContext, final String urlPrefix, final @NonNull String deviceName)
+ final EffectiveModelContext modelContext, final String urlPrefix, final @NonNull String deviceName)
throws IOException {
final Optional<Revision> rev;
throw new IllegalArgumentException(e);
}
- final var module = schemaContext.findModule(moduleName, rev).orElse(null);
+ final var module = modelContext.findModule(moduleName, rev).orElse(null);
Preconditions.checkArgument(module != null,
"Could not find module by name,revision: " + moduleName + "," + revision);
final var url = schema + "://" + host + "/";
final var basePath = getBasePath();
final var modules = List.of(module);
- return new OpenApiInputStream(schemaContext, title, url, SECURITY, deviceName, urlPrefix, true, false,
+ return new OpenApiInputStream(modelContext, title, url, SECURITY, deviceName, urlPrefix, true, false,
modules, basePath);
}
public abstract String getBasePath();
- public static Set<Module> getModulesWithoutDuplications(final @NonNull EffectiveModelContext schemaContext) {
- return new LinkedHashSet<>(schemaContext.getModules()
+ public static Set<Module> getModulesWithoutDuplications(final @NonNull EffectiveModelContext modelContext) {
+ return new LinkedHashSet<>(modelContext.getModules()
.stream()
.collect(Collectors.toMap(
Module::getName,
private final Iterator<? extends Module> iterator;
private final OpenApiBodyWriter writer;
- private final EffectiveModelContext context;
+ private final EffectiveModelContext modelContext;
private final JsonGenerator generator;
private final ByteArrayOutputStream stream;
private final boolean isForSingleModule;
private Reader reader;
private ReadableByteChannel channel;
- public ComponentsStream(final EffectiveModelContext context, final OpenApiBodyWriter writer,
+ public ComponentsStream(final EffectiveModelContext modelContext, final OpenApiBodyWriter writer,
final JsonGenerator generator, final ByteArrayOutputStream stream,
final Iterator<? extends Module> iterator, final boolean isForSingleModule) {
this.iterator = iterator;
- this.context = context;
+ this.modelContext = modelContext;
this.writer = writer;
this.generator = generator;
this.stream = stream;
var read = reader.read();
while (read == -1) {
if (!schemasWritten) {
- reader = new InputStreamReader(new SchemasStream(context, writer, iterator, isForSingleModule, stream,
- generator), StandardCharsets.UTF_8);
+ reader = new InputStreamReader(new SchemasStream(modelContext, writer, iterator, isForSingleModule,
+ stream, generator), StandardCharsets.UTF_8);
read = reader.read();
schemasWritten = true;
continue;
var read = channel.read(ByteBuffer.wrap(array, off, len));
while (read == -1) {
if (!schemasWritten) {
- channel = Channels.newChannel(new SchemasStream(context, writer, iterator, isForSingleModule, stream,
- generator));
+ channel = Channels.newChannel(new SchemasStream(modelContext, writer, iterator, isForSingleModule,
+ stream, generator));
read = channel.read(ByteBuffer.wrap(array, off, len));
schemasWritten = true;
continue;
private boolean eof;
- public OpenApiInputStream(final EffectiveModelContext context, final String title, final String url,
+ public OpenApiInputStream(final EffectiveModelContext modelContext, final String title, final String url,
final List<Map<String, List<String>>> security, final String deviceName, final String urlPrefix,
final boolean isForSingleModule, final boolean includeDataStore, final Collection<? extends Module> modules,
final String basePath) throws IOException {
stack.add(new OpenApiVersionStream(new OpenApiVersionEntity(), writer));
stack.add(new InfoStream(new InfoEntity(title), writer));
stack.add(new ServersStream(new ServersEntity(List.of(new ServerEntity(url))), writer));
- stack.add(new PathsStream(context, writer, deviceName, urlPrefix, isForSingleModule, includeDataStore,
+ stack.add(new PathsStream(modelContext, writer, deviceName, urlPrefix, isForSingleModule, includeDataStore,
modules.iterator(), basePath, stream, generator));
- stack.add(new ComponentsStream(context, writer, generator, stream, modules.iterator(), isForSingleModule));
+ stack.add(new ComponentsStream(modelContext, writer, generator, stream, modules.iterator(), isForSingleModule));
stack.add(new SecurityStream(writer, new SecurityEntity(security)));
}
private final Iterator<? extends Module> iterator;
private final OpenApiBodyWriter writer;
- private final EffectiveModelContext schemaContext;
+ private final EffectiveModelContext modelContext;
private final String deviceName;
private final String urlPrefix;
private final String basePath;
private ReadableByteChannel channel;
private boolean eof;
- public PathsStream(final EffectiveModelContext schemaContext, final OpenApiBodyWriter writer,
+ public PathsStream(final EffectiveModelContext modelContext, final OpenApiBodyWriter writer,
final String deviceName, final String urlPrefix, final boolean isForSingleModule,
final boolean includeDataStore, final Iterator<? extends Module> iterator, final String basePath,
final ByteArrayOutputStream stream, final JsonGenerator generator) {
this.iterator = iterator;
this.writer = writer;
- this.schemaContext = schemaContext;
+ this.modelContext = modelContext;
this.isForSingleModule = isForSingleModule;
this.deviceName = deviceName;
this.urlPrefix = urlPrefix;
final var pathParams = new ArrayList<ParameterEntity>();
final var localName = moduleName + ":" + nodeLocalName;
final var path = urlPrefix + "/" + processPath(node, pathParams, localName);
- processChildNode(node, pathParams, moduleName, result, path, nodeLocalName, isConfig, schemaContext,
+ processChildNode(node, pathParams, moduleName, result, path, nodeLocalName, isConfig, modelContext,
deviceName, basePath, null, List.of());
}
}
private static void processChildNode(final DataSchemaNode node, final List<ParameterEntity> pathParams,
final String moduleName, final Deque<PathEntity> result, final String path, final String refPath,
- final boolean isConfig, final EffectiveModelContext schemaContext, final String deviceName,
+ final boolean isConfig, final EffectiveModelContext modelContext, final String deviceName,
final String basePath, final SchemaNode parentNode, final List<SchemaNode> parentNodes) {
final var resourcePath = basePath + DATA + path;
- final var fullName = resolveFullNameFromNode(node.getQName(), schemaContext);
+ final var fullName = resolveFullNameFromNode(node.getQName(), modelContext);
final var firstChild = getListOrContainerChildNode((DataNodeContainer) node);
if (firstChild != null && node instanceof ContainerSchemaNode) {
result.add(processTopPathEntity(node, resourcePath, pathParams, moduleName, refPath, isConfig,
final var actionParams = new ArrayList<>(pathParams);
actionContainer.getActions().forEach(actionDef -> {
final var resourceActionPath = path + "/" + resolvePathArgumentsName(actionDef.getQName(),
- node.getQName(), schemaContext);
+ node.getQName(), modelContext);
final var childPath = basePath + OPERATIONS + resourceActionPath;
result.add(processActionPathEntity(actionDef, childPath, actionParams, moduleName,
refPath, deviceName, parentNode, listOfParentsForActions));
if (childNode instanceof ListSchemaNode || childNode instanceof ContainerSchemaNode) {
final var childParams = new ArrayList<>(pathParams);
final var newRefPath = refPath + "_" + childNode.getQName().getLocalName();
- final var localName = resolvePathArgumentsName(childNode.getQName(), node.getQName(), schemaContext);
+ final var localName = resolvePathArgumentsName(childNode.getQName(), node.getQName(), modelContext);
final var resourceDataPath = path + "/" + processPath(childNode, childParams, localName);
final var newConfig = isConfig && childNode.isConfiguration();
processChildNode(childNode, childParams, moduleName, result, resourceDataPath, newRefPath, newConfig,
- schemaContext, deviceName, basePath, node, listOfParents);
+ modelContext, deviceName, basePath, node, listOfParents);
}
}
}
private final Iterator<? extends Module> iterator;
private final OpenApiBodyWriter writer;
- private final EffectiveModelContext context;
+ private final EffectiveModelContext modelContext;
private final boolean isForSingleModule;
private final ByteArrayOutputStream stream;
private final JsonGenerator generator;
private ReadableByteChannel channel;
private boolean eof;
- public SchemasStream(final EffectiveModelContext context, final OpenApiBodyWriter writer,
+ public SchemasStream(final EffectiveModelContext modelContext, final OpenApiBodyWriter writer,
final Iterator<? extends Module> iterator, final boolean isForSingleModule,
final ByteArrayOutputStream stream, final JsonGenerator generator) {
this.iterator = iterator;
- this.context = context;
+ this.modelContext = modelContext;
this.writer = writer;
this.isForSingleModule = isForSingleModule;
this.stream = stream;
while (read == -1) {
if (iterator.hasNext()) {
reader = new BufferedReader(new InputStreamReader(
- new SchemaStream(toComponents(iterator.next(), context, isForSingleModule), writer),
+ new SchemaStream(toComponents(iterator.next(), modelContext, isForSingleModule), writer),
StandardCharsets.UTF_8));
read = reader.read();
continue;
while (read == -1) {
if (iterator.hasNext()) {
channel = Channels.newChannel(
- new SchemaStream(toComponents(iterator.next(), context, isForSingleModule), writer));
+ new SchemaStream(toComponents(iterator.next(), modelContext, isForSingleModule), writer));
read = channel.read(ByteBuffer.wrap(array, off, len));
continue;
}
return read;
}
- private static Deque<SchemaEntity> toComponents(final Module module, final EffectiveModelContext context,
+ private static Deque<SchemaEntity> toComponents(final Module module, final EffectiveModelContext modelContext,
final boolean isForSingleModule) {
final var result = new ArrayDeque<SchemaEntity>();
final var definitionNames = new DefinitionNames();
- final var stack = SchemaInferenceStack.of(context);
+ final var stack = SchemaInferenceStack.of(modelContext);
final var moduleName = module.getName();
if (isForSingleModule) {
definitionNames.addUnlinkedName(moduleName + "_module");
}
private String processIdentityRefType(final IdentityrefTypeDefinition leafTypeDef,
- final EffectiveModelContext schemaContext, final TypeDef def) {
+ final EffectiveModelContext modelContext, final TypeDef def) {
final var schemaNode = leafTypeDef.getIdentities().iterator().next();
def.setExample(schemaNode.getQName().getLocalName());
- final var derivedIds = schemaContext.getDerivedIdentities(schemaNode);
+ final var derivedIds = modelContext.getDerivedIdentities(schemaNode);
final var enumPayload = new ArrayList<String>();
enumPayload.add(schemaNode.getQName().getLocalName());
- populateEnumWithDerived(derivedIds, enumPayload, schemaContext);
+ populateEnumWithDerived(derivedIds, enumPayload, modelContext);
final var schemaEnum = new ArrayList<>(enumPayload);
def.setEnums(schemaEnum);
}
private void populateEnumWithDerived(final Collection<? extends IdentitySchemaNode> derivedIds,
- final List<String> enumPayload, final EffectiveModelContext context) {
+ final List<String> enumPayload, final EffectiveModelContext modelContext) {
for (final var derivedId : derivedIds) {
enumPayload.add(derivedId.getQName().getLocalName());
- populateEnumWithDerived(context.getDerivedIdentities(derivedId), enumPayload, context);
+ populateEnumWithDerived(modelContext.getDerivedIdentities(derivedId), enumPayload, modelContext);
}
}
}
private String processInstanceIdentifierType(final InstanceIdentifierTypeDefinition iidType,
- final DataSchemaNode schemaNode, final EffectiveModelContext schemaContext,final TypeDef def) {
+ final DataSchemaNode schemaNode, final EffectiveModelContext modelContext,final TypeDef def) {
// create example instance-identifier to the first container of node's module if exists or leave it empty
- final var module = schemaContext.findModule(schemaNode.getQName().getModule());
+ final var module = modelContext.findModule(schemaNode.getQName().getModule());
if (module.isPresent()) {
final var container = module.orElseThrow().getChildNodes().stream()
.filter(n -> n instanceof ContainerSchemaNode)
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public Map<String, Long> getInstanceIdentifiers() {
final Map<String, Long> urlToId = new HashMap<>();
- final SchemaContext context = globalSchema.getGlobalContext();
+ final EffectiveModelContext modelContext = globalSchema.getGlobalContext();
for (final Entry<YangInstanceIdentifier, Long> entry : instanceIdToLongId.entrySet()) {
- final String modName = findModuleName(entry.getKey(), context);
+ final String modName = findModuleName(entry.getKey(), modelContext);
urlToId.put(generateUrlPrefixFromInstanceID(entry.getKey(), modName), entry.getValue());
}
return urlToId;
}
- private static String findModuleName(final YangInstanceIdentifier id, final SchemaContext context) {
+ private static String findModuleName(final YangInstanceIdentifier id, final EffectiveModelContext modelContext) {
final PathArgument rootQName = id.getPathArguments().iterator().next();
- for (final Module mod : context.getModules()) {
+ for (final Module mod : modelContext.getModules()) {
if (mod.findDataChildByName(rootQName.getNodeType()).isPresent()) {
return mod.getName();
}
return builder.toString();
}
- private EffectiveModelContext getSchemaContext(final YangInstanceIdentifier id) {
+ private EffectiveModelContext getModelContext(final YangInstanceIdentifier id) {
if (id == null) {
return null;
}
public OpenApiInputStream getMountPointApi(final UriInfo uriInfo, final Long id, final String module,
final String revision) throws IOException {
final YangInstanceIdentifier iid = longIdToInstanceId.get(id);
- final EffectiveModelContext context = getSchemaContext(iid);
+ final EffectiveModelContext modelContext = getModelContext(iid);
final String urlPrefix = getYangMountUrl(iid);
final String deviceName = extractDeviceName(iid);
- if (context == null) {
+ if (modelContext == null) {
return null;
}
if (DATASTORES_LABEL.equals(module) && DATASTORES_REVISION.equals(revision)) {
- return generateDataStoreOpenApi(context, uriInfo, urlPrefix, deviceName);
+ return generateDataStoreOpenApi(modelContext, uriInfo, urlPrefix, deviceName);
}
- return openApiGenerator.getApiDeclaration(module, revision, uriInfo, context, urlPrefix, deviceName);
+ return openApiGenerator.getApiDeclaration(module, revision, uriInfo, modelContext, urlPrefix, deviceName);
}
public OpenApiInputStream getMountPointApi(final UriInfo uriInfo, final Long id, final @Nullable String strPageNum)
throws IOException {
final var iid = longIdToInstanceId.get(id);
- final var context = getSchemaContext(iid);
+ final var context = getModelContext(iid);
final var urlPrefix = getYangMountUrl(iid);
final var deviceName = extractDeviceName(iid);
import org.opendaylight.yangtools.yang.common.XMLNamespace;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
public final class RestDocgenUtil {
private static final Map<XMLNamespace, Map<Optional<Revision>, Module>> NAMESPACE_AND_REVISION_TO_MODULE =
* @return name of {@code node}
*/
public static String resolvePathArgumentsName(@NonNull final QName node, @NonNull final QName parent,
- @NonNull final EffectiveModelContext schemaContext) {
+ @NonNull final EffectiveModelContext modelContext) {
if (isEqualNamespaceAndRevision(node, parent)) {
return node.getLocalName();
} else {
- return resolveFullNameFromNode(node, schemaContext);
+ return resolveFullNameFromNode(node, modelContext);
}
}
&& parent.getRevision().equals(node.getRevision());
}
- public static String resolveFullNameFromNode(final QName node, final SchemaContext schemaContext) {
+ public static String resolveFullNameFromNode(final QName node, final EffectiveModelContext modelContext) {
final XMLNamespace namespace = node.getNamespace();
final Optional<Revision> revision = node.getRevision();
final Map<Optional<Revision>, Module> revisionToModule =
NAMESPACE_AND_REVISION_TO_MODULE.computeIfAbsent(namespace, k -> new HashMap<>());
final Module module = revisionToModule.computeIfAbsent(revision,
- k -> schemaContext.findModule(namespace, k).orElse(null));
+ k -> modelContext.findModule(namespace, k).orElse(null));
if (module != null) {
return module.getName() + ":" + node.getLocalName();
}