diff options
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java')
-rw-r--r-- | framework/src/onos/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java b/framework/src/onos/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java new file mode 100644 index 00000000..50cac4cd --- /dev/null +++ b/framework/src/onos/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java @@ -0,0 +1,98 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onosproject.rest; + +import com.google.common.annotations.Beta; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.InputStream; + +import static com.google.common.base.Preconditions.checkNotNull; + +/** + * Entity capable of providing REST API documentation resources. + */ +@Beta +public class ApiDocProvider { + + private final Logger log = LoggerFactory.getLogger(getClass()); + + private static final String DOCS = "/apidoc/swagger.json"; + private static final String MODEL = "/apidoc/model.json"; + + private final String key; + private final String name; + private final ClassLoader classLoader; + + /** + * Creates a new REST API documentation provider. + * + * @param key REST API key + * @param name REST API name + * @param classLoader class loader + */ + public ApiDocProvider(String key, String name, ClassLoader classLoader) { + this.key = checkNotNull(key, "Key cannot be null"); + this.name = checkNotNull(name, "Name cannot be null"); + this.classLoader = checkNotNull(classLoader, "Class loader cannot be null"); + } + + /** + * Returns the REST API key. + * + * @return REST API key + */ + public String key() { + return key; + } + + /** + * Returns the REST API name. + * + * @return REST API name + */ + public String name() { + return name; + } + + /** + * Returns input stream containing Swagger UI compatible JSON. + * + * @return input stream with Swagger JSON data + */ + public InputStream docs() { + return get(DOCS); + } + + /** + * Returns input stream containing JSON model schema. + * + * @return input stream with JSON model schema + */ + public InputStream model() { + return get(MODEL); + } + + private InputStream get(String resource) { + InputStream stream = classLoader.getResourceAsStream(resource); + if (stream == null) { + log.warn("Unable to find JSON resource {}", resource); + } + return stream; + } + +} |