From c079b25b67212fda1222b7f23099a8db7fcd17e8 Mon Sep 17 00:00:00 2001 From: lubos-cicut Date: Thu, 8 Feb 2024 10:34:15 +0100 Subject: [PATCH] Separate logic of get root path Repaired creating of get root path to simplify logic of OperationEntity#generate method. Change-Id: Ice9857b673e8db88f7edcb46cbf92a9851d033ba Signed-off-by: lubos-cicut --- .../restconf/openapi/impl/PathsStream.java | 7 ++- .../restconf/openapi/model/GetEntity.java | 2 +- .../restconf/openapi/model/GetRootEntity.java | 44 +++++++++++++++++++ .../openapi/model/OperationEntity.java | 42 +++--------------- 4 files changed, 55 insertions(+), 40 deletions(-) create mode 100644 restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java diff --git a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/PathsStream.java b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/PathsStream.java index a8f8911934..8382614ad5 100644 --- a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/PathsStream.java +++ b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/impl/PathsStream.java @@ -31,6 +31,7 @@ import java.util.stream.Collectors; import org.opendaylight.restconf.openapi.jaxrs.OpenApiBodyWriter; import org.opendaylight.restconf.openapi.model.DeleteEntity; import org.opendaylight.restconf.openapi.model.GetEntity; +import org.opendaylight.restconf.openapi.model.GetRootEntity; import org.opendaylight.restconf.openapi.model.ParameterEntity; import org.opendaylight.restconf.openapi.model.ParameterSchemaEntity; import org.opendaylight.restconf.openapi.model.PatchEntity; @@ -160,11 +161,9 @@ public final class PathsStream extends InputStream { final var result = new ArrayDeque(); if (includeDataStore && !hasAddedDataStore) { final var dataPath = basePath + DATA + urlPrefix; - result.add(new PathEntity(dataPath, - new GetEntity(null, deviceName, "data", null, null, false))); + result.add(new PathEntity(dataPath, new GetRootEntity(deviceName, "data"))); final var operationsPath = basePath + OPERATIONS + urlPrefix; - result.add(new PathEntity(operationsPath, - new GetEntity(null, deviceName, "operations", null, null, false))); + result.add(new PathEntity(operationsPath, new GetRootEntity(deviceName, "operations"))); hasAddedDataStore = true; } // RPC operations (via post) - RPCs have their own path diff --git a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetEntity.java b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetEntity.java index 23baaba8f2..6a0f60f632 100644 --- a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetEntity.java +++ b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetEntity.java @@ -20,7 +20,7 @@ import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.ListSchemaNode; import org.opendaylight.yangtools.yang.model.api.SchemaNode; -public final class GetEntity extends OperationEntity { +public sealed class GetEntity extends OperationEntity permits GetRootEntity { private final boolean isConfig; public GetEntity(final @Nullable SchemaNode schema, final @NonNull String deviceName, diff --git a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java new file mode 100644 index 0000000000..bafbb5dff1 --- /dev/null +++ b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/GetRootEntity.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2024 PANTHEON.tech, s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.restconf.openapi.model; + +import static java.util.Objects.requireNonNull; +import static javax.ws.rs.core.Response.Status.OK; + +import com.fasterxml.jackson.core.JsonGenerator; +import java.io.IOException; +import javax.ws.rs.HttpMethod; +import org.eclipse.jdt.annotation.NonNull; + +public final class GetRootEntity extends GetEntity { + private final String type; + + public GetRootEntity(final @NonNull String deviceName, final @NonNull String type) { + super(null, deviceName, "", null, null, false); + this.type = requireNonNull(type); + } + + @Override + public void generate(final @NonNull JsonGenerator generator) throws IOException { + generator.writeObjectFieldStart("get"); + generator.writeStringField(DESCRIPTION, type.equals("data") + ? "Queries the config (startup) datastore on the mounted hosted." + : "Queries the available operations (RPC calls) on the mounted hosted."); + generator.writeObjectFieldStart(RESPONSES); + generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode())); + generator.writeStringField(DESCRIPTION, "OK"); + generator.writeEndObject(); //end of 200 + generator.writeEndObject(); // end of responses + final var summary = HttpMethod.GET + " - " + deviceName() + " - datastore - " + type; + generator.writeStringField(SUMMARY, summary); + generator.writeArrayFieldStart("tags"); + generator.writeString(deviceName() + " GET root"); + generator.writeEndArray(); //end of tags + generator.writeEndObject(); //end of get + } +} diff --git a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OperationEntity.java b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OperationEntity.java index 442958f789..412b7e582e 100644 --- a/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OperationEntity.java +++ b/restconf/restconf-openapi/src/main/java/org/opendaylight/restconf/openapi/model/OperationEntity.java @@ -8,12 +8,10 @@ package org.opendaylight.restconf.openapi.model; import static java.util.Objects.requireNonNull; -import static javax.ws.rs.core.Response.Status.OK; import com.fasterxml.jackson.core.JsonGenerator; import java.io.IOException; import java.util.List; -import javax.ws.rs.HttpMethod; import org.eclipse.jdt.annotation.NonNull; import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.yangtools.yang.model.api.SchemaNode; @@ -80,17 +78,13 @@ public abstract sealed class OperationEntity extends OpenApiEntity permits Delet @Override public void generate(@NonNull JsonGenerator generator) throws IOException { - if (schema() == null) { - generateGetRoot(generator, moduleName()); - } else { - generator.writeObjectFieldStart(operation()); - generateBasics(generator); - generateRequestBody(generator); - generateResponses(generator); - generateTags(generator); - generateParams(generator); - generator.writeEndObject(); - } + generator.writeObjectFieldStart(operation()); + generateBasics(generator); + generateRequestBody(generator); + generateResponses(generator); + generateTags(generator); + generateParams(generator); + generator.writeEndObject(); } public void generateBasics(@NonNull JsonGenerator generator) throws IOException { @@ -151,26 +145,4 @@ public abstract sealed class OperationEntity extends OpenApiEntity permits Delet generator.writeEndObject(); generator.writeEndObject(); } - - void generateGetRoot(final @NonNull JsonGenerator generator, final @NonNull String resourceType) - throws IOException { - generator.writeObjectFieldStart("get"); - if (resourceType.equals("data")) { - generator.writeStringField(DESCRIPTION, "Queries the config (startup) datastore on the mounted hosted."); - } else if (resourceType.equals("operations")) { - generator.writeStringField(DESCRIPTION, - "Queries the available operations (RPC calls) on the mounted hosted."); - } - generator.writeObjectFieldStart(RESPONSES); - generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode())); - generator.writeStringField(DESCRIPTION, "OK"); - generator.writeEndObject(); //end of 200 - generator.writeEndObject(); // end of responses - final var summary = HttpMethod.GET + " - " + deviceName() + " - datastore - " + resourceType; - generator.writeStringField(SUMMARY, summary); - generator.writeArrayFieldStart("tags"); - generator.writeString(deviceName + " GET root"); - generator.writeEndArray(); //end of tags - generator.writeEndObject(); //end of get - } } -- 2.36.6