[ODTN] Add read/create/delete ConnectivityService RPC

- RPC: get service interface point
- RPC: get connectivity service list
- RPC: get connectivity service detail
- RPC: create connectivity service
- RPC: delete connectivity service

- Filter method of TAPI resolver for both Node / NEP
- Change condition for sip to odtn-port-type
- Use odtn-port-type in path-computation mock
- Create CEP at topology discovery

- Add sample path calculator
- Add connection-id based path selection

Change-Id: I2f08aacb3dd14b6b3c59a64a349e50abb495f70b
diff --git a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
index 2af7fed..200c623 100644
--- a/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
+++ b/apps/odtn/api/src/main/java/org/onosproject/odtn/utils/tapi/TapiGlobalClassUtil.java
@@ -25,35 +25,35 @@
 import java.lang.reflect.Method;
 import java.util.Map;
 import java.util.Map.Entry;
-import java.util.UUID;
 
 import org.slf4j.Logger;
+
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
  * Utility methods dealing with TAPI modelObject which includes global class grouping.
- *
+ * <p>
  * <p> tapi-common@2018-03-07.yang
  * grouping global-class {
- *   leaf uuid {
- *     type uuid;
- *   }
- *   list name {
- *     key 'value-name';
- *     uses name-and-value;
- *   }
+ * leaf uuid {
+ * type uuid;
  * }
- *
+ * list name {
+ * key 'value-name';
+ * uses name-and-value;
+ * }
+ * }
+ * <p>
  * grouping name-and-value {
- *   leaf value-name {
- *     type string;
- *     description "The name of the value. The value need not have a name.";
- *   }
- *   leaf value {
- *     type string;
- *     description "The value";
- *   }
- *   description "A scoped name-value pair";
+ * leaf value-name {
+ * type string;
+ * description "The name of the value. The value need not have a name.";
+ * }
+ * leaf value {
+ * type string;
+ * description "The value";
+ * }
+ * description "A scoped name-value pair";
  * }
  * </p>
  */
@@ -65,14 +65,13 @@
     }
 
     /**
-     * Generate and set Uuid for the ModelObject.
-     * @param obj ModelObject
-     * @param <T> type of ModelObject
-     * @return generated uuid
+     * Set uuid for the ModelObject.
+     *
+     * @param obj  ModelObject
+     * @param uuid Uuid
+     * @param <T>  Type of ModelObject
      */
-    public static <T extends ModelObject> Uuid setUuid(T obj) {
-        Uuid uuid = Uuid.of(UUID.randomUUID().toString());
-
+    public static <T extends ModelObject> void setUuid(T obj, Uuid uuid) {
         @SuppressWarnings("unchecked")
         Class<T> cls = (Class<T>) obj.getClass();
         try {
@@ -81,15 +80,35 @@
         } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
             log.error("Exception thrown", e);
         }
+    }
+
+    /**
+     * Get uuid for the ModelObject.
+     *
+     * @param obj ModelObject
+     * @param <T> Type of ModelObject
+     * @return Uuid
+     */
+    public static <T extends ModelObject> Uuid getUuid(T obj) {
+        Uuid uuid = null;
+        @SuppressWarnings("unchecked")
+        Class<T> cls = (Class<T>) obj.getClass();
+        try {
+            Method method = cls.getMethod("uuid");
+            uuid = (Uuid) method.invoke(obj);
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            log.error("Exception thrown", e);
+        }
 
         return uuid;
     }
 
     /**
      * Add key-value to the ModelObject as "name-and-value" list.
+     *
      * @param obj ModelObject
-     * @param kvs key-value map
-     * @param <T> type of ModelObject
+     * @param kvs Key-value map
+     * @param <T> Type of ModelObject
      */
     public static <T extends ModelObject> void addNameList(T obj, Map<String, String> kvs) {