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 generateResponses(final @NonNull JsonGenerator generator) throws IOException {
45 final var ref = COMPONENTS_PREFIX + moduleName() + "_" + refPath();
46 generator.writeObjectFieldStart(RESPONSES);
47 generator.writeObjectFieldStart(String.valueOf(OK.getStatusCode()));
48 generator.writeStringField(DESCRIPTION, String.valueOf(OK.getStatusCode()));
49 generator.writeObjectFieldStart(CONTENT);
50 generateMediaTypeSchemaRef(generator, MediaType.APPLICATION_XML, ref);
51 generator.writeObjectFieldStart(MediaType.APPLICATION_JSON);
52 generator.writeObjectFieldStart(SCHEMA);
53 generator.writeObjectFieldStart(PROPERTIES);
54 generator.writeObjectFieldStart(nodeName());
55 if (schema() instanceof ListSchemaNode) {
56 generator.writeStringField(TYPE, ARRAY);
57 generator.writeObjectFieldStart(ITEMS);
58 generator.writeStringField(REF, ref);
59 generator.writeStringField(TYPE, OBJECT);
60 generator.writeEndObject(); //end of items
62 generator.writeStringField(REF, ref);
63 generator.writeStringField(TYPE, OBJECT);
65 generator.writeEndObject(); //end of nodeName
66 generator.writeEndObject(); //end of props
67 generator.writeEndObject(); //end of schema
68 generator.writeEndObject(); //end of json
69 generator.writeEndObject(); //end of content
70 generator.writeEndObject(); //end of 200
71 generator.writeEndObject(); //end of responses
75 void generateParams(@NonNull JsonGenerator generator) throws IOException {
76 final var contentParam = new ParameterEntity(CONTENT, "query", !isConfig,
77 new ParameterSchemaEntity("string", List.of("config", "nonconfig", "all")), null);
78 final var parameters = requireNonNull(parameters());
79 parameters.add(contentParam);
80 generator.writeArrayFieldStart(PARAMETERS);
81 for (final var parameter : parameters) {
82 final var parameterSchema = requireNonNull(parameter.schema());
83 generator.writeStartObject();
84 generator.writeStringField(NAME, parameter.name());
85 generator.writeStringField(IN, parameter.in());
86 generator.writeBooleanField(REQUIRED, parameter.required());
87 generator.writeObjectFieldStart(SCHEMA);
88 final var schemaEnum = parameter.schema().schemaEnum();
89 if (schemaEnum != null) {
90 generator.writeArrayFieldStart("enum");
91 for (final var enumCase : schemaEnum) {
92 generator.writeString(enumCase);
94 generator.writeEndArray(); //end of enum
96 generator.writeStringField(TYPE, parameterSchema.type());
97 generator.writeEndObject(); //end of schema
98 if (parameter.description() != null) {
99 generator.writeStringField(DESCRIPTION, parameter.description());
101 generator.writeEndObject(); //end of parameter
103 generator.writeEndArray(); //end of params
104 parameters.remove(contentParam);