Adding experimental tunnel primitive and small API tweaks

Change-Id: Id7a950ab7b2e001d0527e935c077c538dfede7fd
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
index bfea73d..51265f7 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentDomainProvider.java
@@ -32,11 +32,12 @@
      * can be used. Request contexts can be explictly cancelled, or they will
      * eventually time out so that resources can be reused.
      *
+     * @param domain intent domain for the request
      * @param primitive intent primitive
      * @return request contexts that contain resources to satisfy the intent
      */
     //TODO Consider an iterable and/or holds (only hold one or two reservation(s) at a time)
-    List<RequestContext> request(IntentPrimitive primitive);
+    List<RequestContext> request(IntentDomain domain, IntentPrimitive primitive);
 
     /**
      * Request that the provider attempt to modify an existing resource to satisfy
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
index a49bf95..6902483 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/IntentResource.java
@@ -21,21 +21,27 @@
  * The abstract base class for the resource that satisfies an intent primitive.
  */
 @Beta
-public abstract class IntentResource {
+public class IntentResource {
 
     private final IntentPrimitive primitive;
+    private final long tunnelId;
 
     // TODO add other common fields
     //String ingressTag;
     //String egressTag;
     //etc.
 
-    IntentResource(IntentPrimitive primitive) {
+    public IntentResource(IntentPrimitive primitive, long tunnelId) {
         this.primitive = primitive;
+        this.tunnelId = tunnelId;
     }
 
     public IntentPrimitive primitive() {
         return primitive;
     }
 
+    public long tunnelId() {
+        return tunnelId;
+    }
+
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
index 81f452e..90593dd 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/RequestContext.java
@@ -27,10 +27,21 @@
  */
 @Beta
 public class RequestContext {
-    IntentDomain domain;
-    IntentResource resource;
+    private final IntentDomain domain;
+    private final IntentResource resource;
     //TODO other common parameters:
     //String cost;
 
-    //TODO getters/setters
+    public RequestContext(IntentDomain domain, IntentResource resource) {
+        this.domain = domain;
+        this.resource = resource;
+    }
+
+    public IntentDomain domain() {
+        return domain;
+    }
+
+    public IntentResource resource() {
+        return resource;
+    }
 }
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
new file mode 100644
index 0000000..c624e92
--- /dev/null
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/domain/TunnelPrimitive.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.incubator.net.domain;
+
+import org.onosproject.core.ApplicationId;
+import org.onosproject.net.ConnectPoint;
+
+/**
+ * Provides connectivity through a domain.
+ */
+public class TunnelPrimitive extends IntentPrimitive {
+
+    private final ConnectPoint one;
+    private final ConnectPoint two;
+
+    public TunnelPrimitive(ApplicationId appId, ConnectPoint one, ConnectPoint two) {
+        super(appId);
+        this.one = one;
+        this.two = two;
+    }
+}