CORD-131 Added XOS vtn service and port APIs

Change-Id: Ide34212eeb593af5af8db218c6dd2af7d5ab4eaa
diff --git a/apps/xosclient/src/main/java/org/onosproject/xosclient/impl/DefaultVtnServiceApi.java b/apps/xosclient/src/main/java/org/onosproject/xosclient/impl/DefaultVtnServiceApi.java
index d327dae..94d8bbc 100644
--- a/apps/xosclient/src/main/java/org/onosproject/xosclient/impl/DefaultVtnServiceApi.java
+++ b/apps/xosclient/src/main/java/org/onosproject/xosclient/impl/DefaultVtnServiceApi.java
@@ -17,19 +17,18 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Strings;
 import com.google.common.collect.Sets;
 import org.onosproject.xosclient.api.VtnServiceApi;
 import org.onosproject.xosclient.api.XosAccess;
+import org.onosproject.xosclient.api.VtnService;
+import org.onosproject.xosclient.api.VtnServiceId;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.util.Iterator;
-import java.util.Map;
 import java.util.Set;
 
-import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
@@ -39,63 +38,52 @@
 
     private final Logger log = LoggerFactory.getLogger(getClass());
 
-    private static DefaultVtnServiceApi instance = null;
-
     /**
      * Default constructor.
+     *
+     * @param baseUrl base url
+     * @param access xos access
      */
-    private DefaultVtnServiceApi(String baseUrl, XosAccess access) {
+    public DefaultVtnServiceApi(String baseUrl, XosAccess access) {
         super(baseUrl, access);
     }
 
-    /**
-     * Returns VTN service API instance. Creates a new instance only if base url or
-     * access has been changed.
-     *
-     * @param baseUrl base url
-     * @param access access
-     * @return vtn service api
-     */
-    public static synchronized DefaultVtnServiceApi getInstance(String baseUrl, XosAccess access) {
-        checkNotNull(access, "XOS access information is null");
-        checkArgument(!Strings.isNullOrEmpty(baseUrl), "VTN service API base url is null or empty");
-
-        if (instance == null ||
-                !instance.baseUrl.equals(baseUrl) ||
-                !instance.access.equals(access)) {
-            instance = new DefaultVtnServiceApi(baseUrl, access);
-        }
-        return instance;
-    }
-
     @Override
-    public Set<String> services() {
+    public Set<VtnServiceId> services() {
         String response = restGet(EMPTY_STRING);
         log.trace("Get services {}", response);
 
         ObjectMapper mapper = new ObjectMapper();
+        Set<VtnServiceId> services = Sets.newHashSet();
+
         try {
             JsonNode nodes = mapper.readTree(response);
-            return Sets.newHashSet(nodes.fieldNames());
+            nodes.fieldNames().forEachRemaining(id -> services.add(VtnServiceId.of(id)));
         } catch (IOException e) {
             log.warn("Failed to get service list");
-            return Sets.newHashSet();
         }
+        return services;
     }
 
     @Override
-    public Set<String> getProviderServices(String tServiceId) {
+    public VtnService service(VtnServiceId serviceId) {
+        // TODO implement this when XOS provides this API
+        return null;
+    }
+
+    @Override
+    public Set<VtnServiceId> providerServices(VtnServiceId tServiceId) {
         checkNotNull(tServiceId);
 
-        String response = restGet(tServiceId);
+        String response = restGet(tServiceId.id());
         log.trace("Get provider services {}", response);
 
         ObjectMapper mapper = new ObjectMapper();
-        Set<String> pServices = Sets.newHashSet();
+        Set<VtnServiceId> pServices = Sets.newHashSet();
 
         try {
             JsonNode nodes = mapper.readTree(response);
-            nodes.forEach(node -> pServices.add(node.asText()));
+            nodes.forEach(node -> pServices.add(VtnServiceId.of(node.asText())));
         } catch (IOException e) {
             log.warn("Failed to get service dependency");
         }
@@ -103,26 +91,23 @@
     }
 
     @Override
-    public Set<String> getTenantServices(String tServiceId) {
+    public Set<VtnServiceId> tenantServices(VtnServiceId tServiceId) {
         checkNotNull(tServiceId);
 
         String response = restGet(EMPTY_STRING);
         log.trace("Get tenant services {}", response);
 
         ObjectMapper mapper = new ObjectMapper();
-        Set<String> tServices = Sets.newHashSet();
+        Set<VtnServiceId> tServices = Sets.newHashSet();
+
         try {
             JsonNode nodes = mapper.readTree(response);
-            Iterator<Map.Entry<String, JsonNode>> iterator = nodes.fields();
-
-            while (iterator.hasNext()) {
-                Map.Entry<String, JsonNode> entry = iterator.next();
-                entry.getValue().forEach(pService -> {
-                    if (pService.asText().equals(tServiceId)) {
-                        tServices.add(entry.getKey());
-                    }
-                });
-            }
+            nodes.fields().forEachRemaining(entry -> entry.getValue().forEach(
+                    pService -> {
+                        if (pService.asText().equals(tServiceId.id())) {
+                            tServices.add(VtnServiceId.of(entry.getKey()));
+                        }
+                    }));
         } catch (IOException e) {
             log.warn("Failed to get service list");
         }