Refactor: move telemetry config from componentCfg to configs.xml

1. Support to export the metrics to multiple targets
2. Add a set of properties to kafka config (key, topic, etc.)
3. Add distributedStore to manage telemetry configs
4. Add CLI to query stored telemetry configs
5. Add a set of telemetry loaders to import xml definitions
6. Add unit tests for telemetry cfg, xml cfg loader and dist store
7. Add missing javadoc for a set of implementation classes

Change-Id: I39480c9a6ac07357184d2e1094b9c9f4d36fd8b1
diff --git a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
index df9d6ce..a5977a5 100644
--- a/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
+++ b/apps/openstacktelemetry/app/src/main/java/org/onosproject/openstacktelemetry/config/DefaultRestTelemetryConfig.java
@@ -19,18 +19,28 @@
 import com.google.common.collect.Maps;
 import org.onosproject.openstacktelemetry.api.config.RestTelemetryConfig;
 import org.onosproject.openstacktelemetry.api.config.TelemetryConfig;
+import org.onosproject.openstacktelemetry.api.config.TelemetryConfigProperties;
 
 import java.util.Map;
 import java.util.Objects;
 
 import static com.google.common.base.MoreObjects.toStringHelper;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static org.onosproject.openstacktelemetry.api.config.TelemetryConfig.ConfigType.REST;
 
 /**
  * A configuration file contains REST telemetry parameters.
  */
 public final class DefaultRestTelemetryConfig implements RestTelemetryConfig {
 
+    protected static final String ADDRESS = "address";
+    protected static final String PORT = "port";
+    protected static final String ENDPOINT = "endpoint";
+    protected static final String METHOD = "method";
+    protected static final String REQUEST_MEDIA_TYPE = "requestMediaType";
+    protected static final String RESPONSE_MEDIA_TYPE = "responseMediaType";
+    protected static final String CONFIG_MAP = "configMap";
+
     private final String address;
     private final int port;
     private final String endpoint;
@@ -119,22 +129,43 @@
     @Override
     public String toString() {
         return toStringHelper(this)
-                .add("address", address)
-                .add("port", port)
-                .add("endpoint", endpoint)
-                .add("method", method)
-                .add("requestMediaType", requestMediaType)
-                .add("responseMediaType", responseMediaType)
-                .add("configMap", configMap)
+                .add(ADDRESS, address)
+                .add(PORT, port)
+                .add(ENDPOINT, endpoint)
+                .add(METHOD, method)
+                .add(REQUEST_MEDIA_TYPE, requestMediaType)
+                .add(RESPONSE_MEDIA_TYPE, responseMediaType)
+                .add(CONFIG_MAP, configMap)
                 .toString();
     }
 
     @Override
-    public TelemetryConfig.Builder createBuilder() {
+    public TelemetryConfigProperties.Builder createBuilder() {
         return new DefaultBuilder();
     }
 
     /**
+     * Builds a REST telemetry config from telemetry config instance.
+     *
+     * @param config telemetry config
+     * @return REST telemetry config
+     */
+    public static RestTelemetryConfig fromTelemetryConfig(TelemetryConfig config) {
+        if (config.type() != REST) {
+            return null;
+        }
+
+        return new DefaultBuilder()
+                .withAddress(config.getProperty(ADDRESS))
+                .withPort(Integer.valueOf(config.getProperty(PORT)))
+                .withEndpoint(config.getProperty(ENDPOINT))
+                .withMethod(config.getProperty(METHOD))
+                .withRequestMediaType(config.getProperty(REQUEST_MEDIA_TYPE))
+                .withResponseMediaType(config.getProperty(RESPONSE_MEDIA_TYPE))
+                .build();
+    }
+
+    /**
      * Builder class of DefaultRestTelemetryConfig.
      */
     public static final class DefaultBuilder implements Builder {
@@ -198,4 +229,4 @@
                     method, requestMediaType, responseMediaType, configMap);
         }
     }
-}
+}
\ No newline at end of file