Remove OpenAPI v2
[netconf.git] / restconf / sal-rest-docgen / src / main / java / org / opendaylight / netconf / sal / rest / doc / model / builder / OperationBuilder.java
index 40c4382308cf0902efa3ac80f05feafa7db6e949..b1254ade93bb5f85d6a7d631e4ed0e0d75b356bb 100644 (file)
@@ -22,7 +22,6 @@ import java.util.Optional;
 import javax.ws.rs.HttpMethod;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import org.opendaylight.netconf.sal.rest.doc.impl.ApiDocServiceImpl.OAversion;
 import org.opendaylight.netconf.sal.rest.doc.impl.DefinitionNames;
 import org.opendaylight.netconf.sal.rest.doc.util.JsonUtil;
 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
@@ -31,13 +30,10 @@ import org.opendaylight.yangtools.yang.model.api.OperationDefinition;
 import org.opendaylight.yangtools.yang.model.api.OutputSchemaNode;
 
 public final class OperationBuilder {
-    public static final String BODY = "body";
     public static final String CONFIG = "_config";
     public static final String CONFIG_QUERY_PARAM = "config";
-    public static final String CONSUMES_KEY = "consumes";
     public static final String CONTENT_KEY = "content";
     public static final String COMPONENTS_PREFIX = "#/components/schemas/";
-    public static final String DEFINITIONS_PREFIX = "#/definitions/";
     public static final String DESCRIPTION_KEY = "description";
     public static final String IN_KEY = "in";
     public static final String INPUT_KEY = "input";
@@ -80,7 +76,7 @@ public final class OperationBuilder {
 
     public static ObjectNode buildPost(final String parentName, final String nodeName, final String discriminator,
             final String moduleName, final Optional<String> deviceName, final String description,
-            final ArrayNode pathParams, final OAversion oaversion) {
+            final ArrayNode pathParams) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(DESCRIPTION_KEY, description);
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.POST, moduleName, deviceName, nodeName));
@@ -90,22 +86,21 @@ public final class OperationBuilder {
         final String cleanDefName = parentName + CONFIG + "_" + nodeName + POST_SUFFIX;
         final String defName = cleanDefName + discriminator;
         final String xmlDefName = cleanDefName + XML_SUFFIX + discriminator;
-        ref.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
-        insertRequestBodyParameter(parameters, value, defName, xmlDefName, nodeName + CONFIG, oaversion);
+        ref.put(REF_KEY, COMPONENTS_PREFIX + defName);
+        insertRequestBodyParameter(value, defName, xmlDefName, nodeName + CONFIG);
         value.set(PARAMETERS_KEY, parameters);
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         responses.set(String.valueOf(Response.Status.CREATED.getStatusCode()),
-                buildResponse(Response.Status.CREATED.getReasonPhrase(), Optional.empty(), oaversion));
+                buildResponse(Response.Status.CREATED.getReasonPhrase(), Optional.empty()));
 
         value.set(RESPONSES_KEY, responses);
-        setConsumesIfNeeded(value, oaversion);
         return value;
     }
 
     public static ObjectNode buildGet(final DataSchemaNode node, final String moduleName,
             final Optional<String> deviceName, final ArrayNode pathParams, final String defName,
-            final boolean isConfig, final OAversion oaversion) {
+            final boolean isConfig) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(DESCRIPTION_KEY, node.getDescription().orElse(""));
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.GET, moduleName, deviceName,
@@ -113,22 +108,21 @@ public final class OperationBuilder {
         value.set(TAGS_KEY, buildTagsValue(deviceName, moduleName));
         final ArrayNode parameters = JsonUtil.copy(pathParams);
 
-        addQueryParameters(parameters, isConfig, oaversion);
+        addQueryParameters(parameters, isConfig);
 
         value.set(PARAMETERS_KEY, parameters);
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         final ObjectNode schema = JsonNodeFactory.instance.objectNode();
-        schema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
+        schema.put(REF_KEY, COMPONENTS_PREFIX + defName);
         responses.set(String.valueOf(Response.Status.OK.getStatusCode()),
-                buildResponse(Response.Status.OK.getReasonPhrase(), Optional.of(schema), oaversion));
+                buildResponse(Response.Status.OK.getReasonPhrase(), Optional.of(schema)));
 
         value.set(RESPONSES_KEY, responses);
         return value;
     }
 
-    private static void addQueryParameters(final ArrayNode parameters, final boolean isConfig,
-            final OAversion oaversion) {
+    private static void addQueryParameters(final ArrayNode parameters, final boolean isConfig) {
         final ObjectNode contentParam = JsonNodeFactory.instance.objectNode();
         final ArrayNode cases = JsonNodeFactory.instance.arrayNode();
         cases.add(NONCONFIG_QUERY_PARAM);
@@ -140,7 +134,7 @@ public final class OperationBuilder {
         contentParam.put(IN_KEY, QUERY);
         contentParam.put(NAME_KEY, CONTENT);
 
-        final ObjectNode typeParent = getTypeParentNode(contentParam, oaversion);
+        final ObjectNode typeParent = getTypeParentNode(contentParam);
         typeParent.put(TYPE_KEY, STRING);
         typeParent.set(ENUM_KEY, cases);
 
@@ -149,7 +143,7 @@ public final class OperationBuilder {
 
     public static ObjectNode buildPut(final String parentName, final String nodeName, final String discriminator,
             final String moduleName, final Optional<String> deviceName, final String description,
-            final ArrayNode pathParams, final OAversion oaversion) {
+            final ArrayNode pathParams) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(DESCRIPTION_KEY, description);
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.PUT, moduleName, deviceName, nodeName));
@@ -157,23 +151,21 @@ public final class OperationBuilder {
         final ArrayNode parameters = JsonUtil.copy(pathParams);
         final String defName = parentName + CONFIG + "_" + nodeName + TOP;
         final String xmlDefName = parentName + CONFIG + "_" + nodeName;
-        insertRequestBodyParameter(parameters, value, defName, xmlDefName, nodeName + CONFIG, oaversion);
+        insertRequestBodyParameter(value, defName, xmlDefName, nodeName + CONFIG);
         value.set(PARAMETERS_KEY, parameters);
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         responses.set(String.valueOf(Response.Status.CREATED.getStatusCode()),
-                buildResponse(Response.Status.CREATED.getReasonPhrase(), Optional.empty(), oaversion));
+                buildResponse(Response.Status.CREATED.getReasonPhrase(), Optional.empty()));
         responses.set(String.valueOf(Response.Status.NO_CONTENT.getStatusCode()),
-                buildResponse("Updated", Optional.empty(), oaversion));
+                buildResponse("Updated", Optional.empty()));
 
         value.set(RESPONSES_KEY, responses);
-        setConsumesIfNeeded(value, oaversion);
         return value;
     }
 
     public static ObjectNode buildPatch(final String parentName, final String nodeName, final String moduleName,
-            final Optional<String> deviceName, final String description, final ArrayNode pathParams,
-            final OAversion oaversion) {
+            final Optional<String> deviceName, final String description, final ArrayNode pathParams) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(DESCRIPTION_KEY, description);
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.PATCH, moduleName, deviceName, nodeName));
@@ -181,22 +173,21 @@ public final class OperationBuilder {
         final ArrayNode parameters = JsonUtil.copy(pathParams);
         final String defName = parentName + CONFIG + "_" + nodeName + TOP;
         final String xmlDefName = parentName + CONFIG + "_" + nodeName;
-        insertRequestBodyParameter(parameters, value, defName, xmlDefName, nodeName + CONFIG, oaversion);
+        insertRequestBodyParameter(value, defName, xmlDefName, nodeName + CONFIG);
         value.set(PARAMETERS_KEY, parameters);
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         responses.set(String.valueOf(Response.Status.OK.getStatusCode()),
-                buildResponse(Response.Status.OK.getReasonPhrase(), Optional.empty(), oaversion));
+                buildResponse(Response.Status.OK.getReasonPhrase(), Optional.empty()));
         responses.set(String.valueOf(Response.Status.NO_CONTENT.getStatusCode()),
-                buildResponse("Updated", Optional.empty(), oaversion));
+                buildResponse("Updated", Optional.empty()));
 
         value.set(RESPONSES_KEY, responses);
-        setConsumesIfNeeded(value, oaversion);
         return value;
     }
 
     public static ObjectNode buildDelete(final DataSchemaNode node, final String moduleName,
-            final Optional<String> deviceName, final ArrayNode pathParams, final OAversion oaversion) {
+            final Optional<String> deviceName, final ArrayNode pathParams) {
         final ObjectNode value = JsonNodeFactory.instance.objectNode();
         value.put(SUMMARY_KEY, buildSummaryValue(HttpMethod.DELETE, moduleName, deviceName,
                 node.getQName().getLocalName()));
@@ -207,15 +198,14 @@ public final class OperationBuilder {
 
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         responses.set(String.valueOf(Response.Status.NO_CONTENT.getStatusCode()),
-                buildResponse("Deleted", Optional.empty(), oaversion));
+                buildResponse("Deleted", Optional.empty()));
 
         value.set(RESPONSES_KEY, responses);
         return value;
     }
 
     public static ObjectNode buildPostOperation(final OperationDefinition operDef, final String moduleName,
-            final Optional<String> deviceName, final String parentName, final DefinitionNames definitionNames,
-            final OAversion oaversion) {
+            final Optional<String> deviceName, final String parentName, final DefinitionNames definitionNames) {
         final ObjectNode postOperation = JsonNodeFactory.instance.objectNode();
         final ArrayNode parameters = JsonNodeFactory.instance.arrayNode();
         final String operName = operDef.getQName().getLocalName();
@@ -228,7 +218,7 @@ public final class OperationBuilder {
             final String clearDefName = parentName + "_" + operName + INPUT_SUFFIX;
             final String defName = clearDefName + discriminator;
             final String defTopName = clearDefName + TOP + discriminator;
-            insertRequestBodyParameter(parameters, postOperation, defTopName, defName, inputName, oaversion);
+            insertRequestBodyParameter(postOperation, defTopName, defName, inputName);
         } else {
             final ObjectNode payload = JsonNodeFactory.instance.objectNode();
             final ObjectNode jsonSchema = JsonNodeFactory.instance.objectNode();
@@ -238,33 +228,24 @@ public final class OperationBuilder {
             properties.set(INPUT_KEY, inputSchema);
             jsonSchema.put(TYPE_KEY, OBJECT);
             jsonSchema.set(PROPERTIES_KEY, properties);
-            if (oaversion.equals(OAversion.V3_0)) {
-                final ObjectNode content = JsonNodeFactory.instance.objectNode();
-                final ObjectNode jsonTypeValue = JsonNodeFactory.instance.objectNode();
-                jsonTypeValue.set(SCHEMA_KEY, jsonSchema);
-                content.set(MediaType.APPLICATION_JSON, jsonTypeValue);
-
-                final ObjectNode xmlSchema = JsonNodeFactory.instance.objectNode();
-                xmlSchema.put(TYPE_KEY, OBJECT);
-                final ObjectNode xml = JsonNodeFactory.instance.objectNode();
-                xml.put(NAME_KEY, INPUT);
-                xmlSchema.set(XML_KEY, xml);
-                final ObjectNode xmlTypeValue = JsonNodeFactory.instance.objectNode();
-                xmlTypeValue.set(SCHEMA_KEY, xmlSchema);
-                content.set(MediaType.APPLICATION_XML, xmlTypeValue);
-
-                payload.set(CONTENT_KEY, content);
-                payload.put(DESCRIPTION_KEY, inputName);
-                postOperation.set(REQUEST_BODY_KEY, payload);
-            } else {
-                payload.put(IN_KEY, BODY);
-                payload.put(NAME_KEY, inputName);
-                payload.set(SCHEMA_KEY, jsonSchema);
-                parameters.add(payload);
-            }
+            final ObjectNode content = JsonNodeFactory.instance.objectNode();
+            final ObjectNode jsonTypeValue = JsonNodeFactory.instance.objectNode();
+            jsonTypeValue.set(SCHEMA_KEY, jsonSchema);
+            content.set(MediaType.APPLICATION_JSON, jsonTypeValue);
+
+            final ObjectNode xmlSchema = JsonNodeFactory.instance.objectNode();
+            xmlSchema.put(TYPE_KEY, OBJECT);
+            final ObjectNode xml = JsonNodeFactory.instance.objectNode();
+            xml.put(NAME_KEY, INPUT);
+            xmlSchema.set(XML_KEY, xml);
+            final ObjectNode xmlTypeValue = JsonNodeFactory.instance.objectNode();
+            xmlTypeValue.set(SCHEMA_KEY, xmlSchema);
+            content.set(MediaType.APPLICATION_XML, xmlTypeValue);
 
+            payload.set(CONTENT_KEY, content);
+            payload.put(DESCRIPTION_KEY, inputName);
+            postOperation.set(REQUEST_BODY_KEY, payload);
         }
-        setConsumesIfNeeded(postOperation, oaversion);
         postOperation.set(PARAMETERS_KEY, parameters);
         final ObjectNode responses = JsonNodeFactory.instance.objectNode();
         final String description = String.format("RPC %s success", operName);
@@ -273,12 +254,12 @@ public final class OperationBuilder {
             final ObjectNode schema = JsonNodeFactory.instance.objectNode();
             final String defName = parentName + "_" + operName + OUTPUT_SUFFIX + TOP
                     + definitionNames.getDiscriminator(output);
-            schema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
+            schema.put(REF_KEY, COMPONENTS_PREFIX + defName);
             responses.set(String.valueOf(Response.Status.OK.getStatusCode()), buildResponse(description,
-                    Optional.of(schema), oaversion));
+                    Optional.of(schema)));
         } else {
             responses.set(String.valueOf(Response.Status.NO_CONTENT.getStatusCode()), buildResponse(description,
-                    Optional.empty(), oaversion));
+                    Optional.empty()));
         }
         postOperation.set(RESPONSES_KEY, responses);
         postOperation.put(DESCRIPTION_KEY, operDef.getDescription().orElse(""));
@@ -287,70 +268,52 @@ public final class OperationBuilder {
         return postOperation;
     }
 
-    private static void insertRequestBodyParameter(final ArrayNode parameters, final ObjectNode operation,
-            final String defName, final String xmlDefName, final String name, final OAversion oaversion) {
+    private static void insertRequestBodyParameter(final ObjectNode operation, final String defName,
+            final String xmlDefName, final String name) {
         final ObjectNode payload = JsonNodeFactory.instance.objectNode();
-        if (oaversion.equals(OAversion.V3_0)) {
-            final ObjectNode content = JsonNodeFactory.instance.objectNode();
-            final JsonNode node = operation.get(SUMMARY_KEY);
-            if (node != null && node.asText().contains(HttpMethod.PATCH)) {
-                content.set("application/yang-data+json", buildMimeTypeValue(defName));
-                content.set("application/yang-data+xml", buildMimeTypeValue(xmlDefName));
-            } else {
-                content.set(MediaType.APPLICATION_JSON, buildMimeTypeValue(defName));
-                content.set(MediaType.APPLICATION_XML, buildMimeTypeValue(xmlDefName));
-            }
-            payload.set(CONTENT_KEY, content);
-            payload.put(DESCRIPTION_KEY, name);
-            operation.set(REQUEST_BODY_KEY, payload);
+        final ObjectNode content = JsonNodeFactory.instance.objectNode();
+        final JsonNode node = operation.get(SUMMARY_KEY);
+        if (node != null && node.asText().contains(HttpMethod.PATCH)) {
+            content.set("application/yang-data+json", buildMimeTypeValue(defName));
+            content.set("application/yang-data+xml", buildMimeTypeValue(xmlDefName));
         } else {
-            payload.put(IN_KEY, BODY);
-            payload.put(NAME_KEY, name);
-            payload.set(SCHEMA_KEY, buildRefSchema(defName, OAversion.V2_0));
-            parameters.add(payload);
+            content.set(MediaType.APPLICATION_JSON, buildMimeTypeValue(defName));
+            content.set(MediaType.APPLICATION_XML, buildMimeTypeValue(xmlDefName));
         }
+        payload.set(CONTENT_KEY, content);
+        payload.put(DESCRIPTION_KEY, name);
+        operation.set(REQUEST_BODY_KEY, payload);
     }
 
-    private static ObjectNode buildRefSchema(final String defName, final OAversion oaversion) {
+    private static ObjectNode buildRefSchema(final String defName) {
         final ObjectNode schema = JsonNodeFactory.instance.objectNode();
-        schema.put(REF_KEY, getAppropriateModelPrefix(oaversion) + defName);
+        schema.put(REF_KEY, COMPONENTS_PREFIX + defName);
         return schema;
     }
 
     private static ObjectNode buildMimeTypeValue(final String defName) {
         final ObjectNode mimeTypeValue = JsonNodeFactory.instance.objectNode();
-        mimeTypeValue.set(SCHEMA_KEY, buildRefSchema(defName, OAversion.V3_0));
+        mimeTypeValue.set(SCHEMA_KEY, buildRefSchema(defName));
         return mimeTypeValue;
     }
 
-    public static ObjectNode buildResponse(final String description, final Optional<ObjectNode> schema,
-            final OAversion oaversion) {
+    public static ObjectNode buildResponse(final String description, final Optional<ObjectNode> schema) {
         final ObjectNode response = JsonNodeFactory.instance.objectNode();
 
         if (schema.isPresent()) {
             final ObjectNode schemaValue = schema.get();
-            if (oaversion.equals(OAversion.V3_0)) {
-                final ObjectNode content = JsonNodeFactory.instance.objectNode();
-                final ObjectNode body = JsonNodeFactory.instance.objectNode();
-                for (final String mimeType : MIME_TYPES) {
-                    content.set(mimeType, body);
-                }
-                body.set(SCHEMA_KEY, schemaValue);
-                response.set(CONTENT_KEY, content);
-            } else {
-                response.set(SCHEMA_KEY, schemaValue);
+            final ObjectNode content = JsonNodeFactory.instance.objectNode();
+            final ObjectNode body = JsonNodeFactory.instance.objectNode();
+            for (final String mimeType : MIME_TYPES) {
+                content.set(mimeType, body);
             }
+            body.set(SCHEMA_KEY, schemaValue);
+            response.set(CONTENT_KEY, content);
         }
         response.put(DESCRIPTION_KEY, description);
         return response;
     }
 
-    private static void setConsumesIfNeeded(final ObjectNode operation, final OAversion oaversion) {
-        if (oaversion.equals(OAversion.V2_0)) {
-            operation.set(CONSUMES_KEY, CONSUMES_PUT_POST);
-        }
-    }
-
     private static String buildSummaryValue(final String httpMethod, final String moduleName,
             final Optional<String> deviceName, final String nodeName) {
         return httpMethod + SUMMARY_SEPARATOR + deviceName.map(s -> s + SUMMARY_SEPARATOR).orElse("")
@@ -363,19 +326,9 @@ public final class OperationBuilder {
         return tagsValue;
     }
 
-    public static String getAppropriateModelPrefix(final OAversion oaversion) {
-        if (oaversion.equals(OAversion.V3_0)) {
-            return COMPONENTS_PREFIX;
-        }
-        return DEFINITIONS_PREFIX;
-    }
-
-    public static ObjectNode getTypeParentNode(final ObjectNode parameter, final OAversion oaversion) {
-        if (oaversion.equals(OAversion.V3_0)) {
-            final ObjectNode schema = JsonNodeFactory.instance.objectNode();
-            parameter.set(SCHEMA_KEY, schema);
-            return schema;
-        }
-        return parameter;
+    public static ObjectNode getTypeParentNode(final ObjectNode parameter) {
+        final ObjectNode schema = JsonNodeFactory.instance.objectNode();
+        parameter.set(SCHEMA_KEY, schema);
+        return schema;
     }
 }