ONOS-2486 Adding swagger-based REST API documentation.

Change-Id: I237d973d73549ad30ddc638c1c201f024d344c70
diff --git a/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java b/core/api/src/main/java/org/onosproject/rest/ApiDocProvider.java
new file mode 100644
index 0000000..50cac4c
--- /dev/null
+++ b/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;
+    }
+
+}