Resource group to share resources between intents

Change-Id: I5bf7d4261197449924d07dabac841cf8ccbe9389
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
index 67dbd76..1f33c46 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddHostToHostIntentCommand.java
@@ -61,6 +61,7 @@
                 .treatment(treatment)
                 .constraints(constraints)
                 .priority(priority())
+                .resourceGroup(resourceGroup())
                 .build();
         service.submit(intent);
         print("Host to Host intent submitted:\n%s", intent.toString());
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
index 6c1a0e9..bf9558c 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddMultiPointToSinglePointIntentCommand.java
@@ -72,6 +72,7 @@
                 .egressPoint(egress)
                 .constraints(constraints)
                 .priority(priority())
+                .resourceGroup(resourceGroup())
                 .build();
         service.submit(intent);
         print("Multipoint to single point intent submitted:\n%s", intent.toString());
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
index f1944ce..3b48374 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddPointToPointIntentCommand.java
@@ -96,6 +96,7 @@
                 .egressPoint(egress)
                 .constraints(constraints)
                 .priority(priority())
+                .resourceGroup(resourceGroup())
                 .build();
         service.submit(intent);
         print("Point to point intent submitted:\n%s", intent.toString());
diff --git a/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
index 87ede2b..52c8dfc 100644
--- a/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/AddSinglePointToMultiPointIntentCommand.java
@@ -71,6 +71,7 @@
                         .egressPoints(egressPoints)
                         .constraints(constraints)
                         .priority(priority())
+                        .resourceGroup(resourceGroup())
                         .build();
         service.submit(intent);
         print("Single point to multipoint intent submitted:\n%s", intent.toString());
diff --git a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
index 5d5d18b..7ebc3be 100644
--- a/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
+++ b/cli/src/main/java/org/onosproject/cli/net/ConnectivityIntentCommand.java
@@ -28,6 +28,7 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.net.EncapsulationType;
 import org.onosproject.net.PortNumber;
+import org.onosproject.net.ResourceGroup;
 import org.onosproject.net.flow.DefaultTrafficSelector;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficSelector;
@@ -181,6 +182,11 @@
             required = false, multiValued = false)
     private boolean hashedPathSelection = false;
 
+    // Resource Group
+    @Option(name = "-r", aliases = "--resourceGroup", description = "Resource Group Id",
+            required = false, multiValued = false)
+    private String resourceGroupId = null;
+
 
     /**
      * Constructs a traffic selector based on the command line arguments
@@ -409,6 +415,18 @@
         return appIdForIntent;
     }
 
+    protected ResourceGroup resourceGroup() {
+        if (resourceGroupId != null) {
+            if (resourceGroupId.toLowerCase().startsWith("0x")) {
+                return ResourceGroup.of(Long.parseUnsignedLong(resourceGroupId.substring(2), 16));
+            } else {
+                return ResourceGroup.of(Long.parseUnsignedLong(resourceGroupId));
+            }
+        } else {
+            return null;
+        }
+    }
+
     /**
      * Creates a key for an intent based on command line arguments.  If a key
      * has been specified, it is returned.  If no key is specified, null