Resource group to share resources between intents

Change-Id: I5bf7d4261197449924d07dabac841cf8ccbe9389
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
index 9b131ae..a3af158 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalCircuitIntentCompiler.java
@@ -57,6 +57,7 @@
 import org.onosproject.net.intent.IntentService;
 import org.onosproject.net.intent.OpticalCircuitIntent;
 import org.onosproject.net.intent.OpticalConnectivityIntent;
+import org.onosproject.net.intent.PathIntent;
 import org.onosproject.net.optical.OchPort;
 import org.onosproject.net.optical.OduCltPort;
 import org.onosproject.net.intent.IntentSetMultimap;
@@ -252,6 +253,7 @@
                     .dst(dstCP)
                     .signalType(ochPorts.getLeft().signalType())
                     .bidirectional(intent.isBidirectional())
+                    .resourceGroup(intent.resourceGroup())
                     .build();
 
             if (!supportsMultiplexing) {
@@ -328,7 +330,10 @@
             rules.add(connectPorts(higherIntent.getDst(), lowerIntent.getDst(), higherIntent.priority(), slots));
         }
 
-        return new FlowRuleIntent(appId, higherIntent.key(), rules, higherIntent.resources());
+        return new FlowRuleIntent(appId, higherIntent.key(), rules,
+                                  higherIntent.resources(),
+                                  PathIntent.ProtectionType.PRIMARY,
+                                  higherIntent.resourceGroup());
     }
 
     /**
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalConnectivityIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
index de25fda..f361e99 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalConnectivityIntentCompiler.java
@@ -197,6 +197,7 @@
                 .lambda(lambda)
                 .signalType(signalType)
                 .bidirectional(parentIntent.isBidirectional())
+                .resourceGroup(parentIntent.resourceGroup())
                 .build();
     }
 
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
index 1d60875..b01603f 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalOduIntentCompiler.java
@@ -47,6 +47,7 @@
 import org.onosproject.net.intent.IntentCompiler;
 import org.onosproject.net.intent.IntentExtensionService;
 import org.onosproject.net.intent.OpticalOduIntent;
+import org.onosproject.net.intent.PathIntent;
 import org.onosproject.net.optical.OduCltPort;
 import org.onosproject.net.optical.OtuPort;
 import org.onosproject.net.resource.Resource;
@@ -175,8 +176,13 @@
                 rules.addAll(createRules(intent, intent.getDst(), intent.getSrc(), path, slotsMap, true));
             }
 
-            return Collections.singletonList(new FlowRuleIntent(appId, intent.key(),
-                    rules, ImmutableSet.copyOf(path.links())));
+            return Collections.singletonList(
+                    new FlowRuleIntent(appId,
+                                       intent.key(),
+                                       rules,
+                                       ImmutableSet.copyOf(path.links()),
+                                       PathIntent.ProtectionType.PRIMARY,
+                                       intent.resourceGroup()));
         }
 
         throw new OpticalIntentCompilationException("Unable to find suitable lightpath for intent " + intent);
diff --git a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
index 26196b7..9066032 100644
--- a/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
+++ b/apps/optical-model/src/main/java/org/onosproject/net/optical/intent/impl/compiler/OpticalPathIntentCompiler.java
@@ -38,6 +38,7 @@
 import org.onosproject.net.intent.IntentCompiler;
 import org.onosproject.net.intent.IntentExtensionService;
 import org.onosproject.net.intent.OpticalPathIntent;
+import org.onosproject.net.intent.PathIntent;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -79,10 +80,15 @@
             rules.addAll(createReverseRules(intent));
         }
 
-        return Collections.singletonList(new FlowRuleIntent(appId,
-                                                            intent.key(),
-                                                            rules,
-                                                            intent.resources()));
+        return Collections.singletonList(
+                new FlowRuleIntent(appId,
+                                   intent.key(),
+                                   rules,
+                                   intent.resources(),
+                                   PathIntent.ProtectionType.PRIMARY,
+                                   intent.resourceGroup()
+                )
+        );
     }
 
     /**