Fix: check the remote server connectivity before adding to map

1. replace boolean typed enable flag into enumeration status type
2. put the service in pending state, if the activation was failed

Change-Id: I15110f3d837d9a3ecf048c2777ec6fae9bf264ff
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
index 02c1e84..cbad8a0 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/DefaultTelemetryConfig.java
@@ -41,7 +41,7 @@
 
     private final String manufacturer;
     private final String swVersion;
-    private final boolean enabled;
+    private final Status status;
 
     private final Map<String, String> properties;
 
@@ -53,20 +53,20 @@
      * @param parents       optional parent configurations
      * @param manufacturer  off-platform application manufacturer
      * @param swVersion     off-platform application software version
-     * @param enabled       service enable flag
+     * @param status        service status
      * @param properties    properties for telemetry configuration
      */
     public DefaultTelemetryConfig(String name, ConfigType type,
                                   List<TelemetryConfig> parents,
                                   String manufacturer, String swVersion,
-                                  boolean enabled, Map<String, String> properties) {
+                                  Status status, Map<String, String> properties) {
         this.name = checkNotNull(name, "Name cannot be null");
         this.type = checkNotNull(type, "type cannot be null");
         this.parents = parents == null ? ImmutableList.of() : ImmutableList.copyOf(parents);
         this.manufacturer = checkNotNull(manufacturer, "Manufacturer cannot be null");
         this.swVersion = checkNotNull(swVersion, "SW version cannot be null");
         this.properties = copyOf(checkNotNull(properties, "Properties cannot be null"));
-        this.enabled = enabled;
+        this.status = checkNotNull(status, "status cannot be null");
     }
 
     @Override
@@ -99,8 +99,8 @@
     }
 
     @Override
-    public boolean enabled() {
-        return enabled;
+    public Status status() {
+        return status;
     }
 
     @Override
@@ -155,20 +155,20 @@
 
         return new DefaultTelemetryConfig(name, type,
                 !completeParents.isEmpty() ? completeParents : other.parents(),
-                manufacturer, swVersion, enabled, properties.build());
+                manufacturer, swVersion, status, properties.build());
     }
 
     @Override
     public TelemetryConfig updateProperties(Map<String, String> properties) {
 
         return new DefaultTelemetryConfig(name, type, parents, manufacturer,
-                swVersion, enabled, properties);
+                swVersion, status, properties);
     }
 
     @Override
-    public TelemetryConfig updateEnabled(boolean enabled) {
+    public TelemetryConfig updateStatus(Status status) {
         return new DefaultTelemetryConfig(name, type, parents, manufacturer,
-                swVersion, enabled, properties);
+                swVersion, status, properties);
     }
 
     @Override
@@ -189,7 +189,7 @@
                 .add("parents", parents)
                 .add("manufacturer", manufacturer)
                 .add("swVersion", swVersion)
-                .add("enabled", enabled)
+                .add("status", status)
                 .add("properties", properties)
                 .toString();
     }
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
index 63e0c3f..98b580d 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryAdminService.java
@@ -24,8 +24,9 @@
      * Prepares and launches the telemetry producer.
      *
      * @param name telemetry service name
+     * @return true if the service is successfully started, false otherwise
      */
-    void start(String name);
+    boolean start(String name);
 
     /**
      * Terminates the telemetry producer.
@@ -38,8 +39,9 @@
      * Restarts the telemetry producer.
      *
      * @param name telemetry service name
+     * @return true if the service is successfully restarted, false otherwise
      */
-    void restart(String name);
+    boolean restart(String name);
 
     /**
      * Launches all telemetry services.
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java
index 3f22437..f482026 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/TelemetryConfigEvent.java
@@ -47,7 +47,11 @@
         /**
          * Signifies that a telemetry service is disabled.
          */
-        SERVICE_DISABLED
+        SERVICE_DISABLED,
+        /**
+         * Signifies that a telemetry service in a pending status due to previous error.
+         */
+        SERVICE_PENDING
     }
 
     /**
diff --git a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
index 0e0b4b4..b760820 100644
--- a/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
+++ b/apps/openstacktelemetry/api/src/main/java/org/onosproject/openstacktelemetry/api/config/TelemetryConfig.java
@@ -61,6 +61,28 @@
         UNKNOWN
     }
 
+    enum Status {
+        /**
+         * Signifies that the service is in enable status.
+         */
+        ENABLED,
+
+        /**
+         * Signifies that the service is in disable status.
+         */
+        DISABLED,
+
+        /**
+         * Signifies that the service is in pending status.
+         */
+        PENDING,
+
+        /**
+         * Signifies that the service is in unknown status.
+         */
+        UNKNOWN,
+    }
+
     /**
      * Returns the telemetry configuration name.
      *
@@ -98,11 +120,11 @@
     String swVersion();
 
     /**
-     * Returns the service enable flag.
+     * Returns the service status.
      *
-     * @return enable flag
+     * @return service status
      */
-    boolean enabled();
+    Status status();
 
     /**
      * Returns the set of annotations as map of key/value properties.
@@ -153,10 +175,10 @@
     TelemetryConfig updateProperties(Map<String, String> properties);
 
     /**
-     * Obtains the cloned instance with updated enabled value.
+     * Obtains the cloned instance with updated status.
      *
-     * @param enabled service flag
+     * @param status service status
      * @return a cloned instance
      */
-    TelemetryConfig updateEnabled(boolean enabled);
+    TelemetryConfig updateStatus(Status status);
 }