2 * Copyright (c) 2023 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.restconf.openapi.model;
10 import static java.util.Objects.requireNonNull;
11 import static javax.ws.rs.core.Response.Status.OK;
13 import com.fasterxml.jackson.core.JsonGenerator;
14 import java.io.IOException;
15 import java.util.List;
16 import javax.ws.rs.HttpMethod;
17 import javax.ws.rs.core.MediaType;
18 import org.eclipse.jdt.annotation.NonNull;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.opendaylight.yangtools.yang.model.api.ListSchemaNode;
21 import org.opendaylight.yangtools.yang.model.api.SchemaNode;
23 public final class GetEntity extends OperationEntity {
24 private final boolean isConfig;
26 public GetEntity(final @Nullable SchemaNode schema, final @NonNull String deviceName,
27 final @NonNull String moduleName, final @Nullable List<ParameterEntity> parameters,
28 final @Nullable String refPath, final boolean isConfig) {
29 super(schema, deviceName, moduleName, parameters, refPath);
30 this.isConfig = isConfig;
34 protected @NonNull String operation() {
39 @NonNull String summary() {
40 return SUMMARY_TEMPLATE.formatted(HttpMethod.GET, deviceName(), moduleName(), nodeName());
44 void generateRequestBody(@NonNull JsonGenerator generator) throws IOException {
49 void generateResponses(final @NonNull JsonGenerator generator) throws IOException {
50 final var ref = COMPONENTS_PREFIX + moduleName() + "_" + refPath();
51 generator.writeObjectFieldStart(RESPONSES);
52 generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
53 generator.writeStringField(DESCRIPTION, String.valueOf(OK.getStatusCode()));
54 generator.writeObjectFieldStart(CONTENT);
55 generateMediaTypeSchemaRef(generator, MediaType.APPLICATION_XML, ref);
56 generator.writeObjectFieldStart(MediaType.APPLICATION_JSON);
57 generator.writeObjectFieldStart(SCHEMA);
58 generator.writeObjectFieldStart(PROPERTIES);
59 generator.writeObjectFieldStart(nodeName());
60 if (schema() instanceof ListSchemaNode) {
61 generator.writeStringField(TYPE, ARRAY);
62 generator.writeObjectFieldStart(ITEMS);
63 generator.writeStringField(REF, ref);
64 generator.writeStringField(TYPE, OBJECT);
65 generator.writeEndObject(); //end of items
67 generator.writeStringField(REF, ref);
68 generator.writeStringField(TYPE, OBJECT);
70 generator.writeEndObject(); //end of nodeName
71 generator.writeEndObject(); //end of props
72 generator.writeEndObject(); //end of schema
73 generator.writeEndObject(); //end of json
74 generator.writeEndObject(); //end of content
75 generator.writeEndObject(); //end of 200
76 generator.writeEndObject(); //end of responses
80 void generateParams(@NonNull JsonGenerator generator) throws IOException {
81 final var contentParam = new ParameterEntity(CONTENT, "query", !isConfig,
82 new ParameterSchemaEntity("string", List.of("config", "nonconfig", "all")), null);
83 final var parameters = requireNonNull(parameters());
84 parameters.add(contentParam);
85 generator.writeArrayFieldStart(PARAMETERS);
86 for (final var parameter : parameters) {
87 final var parameterSchema = requireNonNull(parameter.schema());
88 generator.writeStartObject();
89 generator.writeStringField(NAME, parameter.name());
90 generator.writeStringField(IN, parameter.in());
91 generator.writeBooleanField(REQUIRED, parameter.required());
92 generator.writeObjectFieldStart(SCHEMA);
93 final var schemaEnum = parameter.schema().schemaEnum();
94 if (schemaEnum != null) {
95 generator.writeArrayFieldStart("enum");
96 for (final var enumCase : schemaEnum) {
97 generator.writeString(enumCase);
99 generator.writeEndArray(); //end of enum
101 generator.writeStringField(TYPE, parameterSchema.type());
102 generator.writeEndObject(); //end of schema
103 if (parameter.description() != null) {
104 generator.writeStringField(DESCRIPTION, parameter.description());
106 generator.writeEndObject(); //end of parameter
108 generator.writeEndArray(); //end of params
109 parameters.remove(contentParam);