adding iptv provisioning

Change-Id: I11fcc788402793d0bf3ac9d9f03ed77e093d98ad
diff --git a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java
index f3bd96c..ab31aee 100644
--- a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java
+++ b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/CordFabricManager.java
@@ -168,6 +168,8 @@
                 .withTreatment(down)
                 .add();
 
+
+
         flowObjectiveService.forward(fabricDeviceId, upCtrl);
         flowObjectiveService.forward(fabricDeviceId, downCtrl);
         flowObjectiveService.forward(fabricDeviceId, radiusToController);
@@ -181,6 +183,10 @@
 
         removeVlan(vlan.vlan());
 
+        if (vlan.iptv()) {
+            provisionIPTV();
+        }
+
         vlan.ports().forEach(cp -> {
             if (vlans.put(vlan.vlan(), cp)) {
                 addForwarding(vlan.vlan(), cp.deviceId(), cp.port(),
@@ -192,6 +198,46 @@
         });
     }
 
+    //FIXME: pass iptv vlan in here.
+    private void provisionIPTV() {
+        TrafficSelector ipTvUp = DefaultTrafficSelector.builder()
+                .matchVlanId(VlanId.vlanId((short) 7))
+                .matchInPort(PortNumber.portNumber(2))
+                .build();
+
+        TrafficTreatment ipTvActUp = DefaultTrafficTreatment.builder()
+                .setOutput(PortNumber.portNumber(7)).build();
+
+        TrafficSelector ipTvDown = DefaultTrafficSelector.builder()
+                .matchVlanId(VlanId.vlanId((short) 7))
+                .matchInPort(PortNumber.portNumber(7))
+                .build();
+
+        TrafficTreatment ipTvActDown = DefaultTrafficTreatment.builder()
+                .setOutput(PortNumber.portNumber(2)).build();
+
+        ForwardingObjective ipTvUpstream = DefaultForwardingObjective.builder()
+                .fromApp(appId)
+                .makePermanent()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .withPriority(PRIORITY)
+                .withSelector(ipTvUp)
+                .withTreatment(ipTvActUp)
+                .add();
+
+        ForwardingObjective ipTvDownstream = DefaultForwardingObjective.builder()
+                .fromApp(appId)
+                .makePermanent()
+                .withFlag(ForwardingObjective.Flag.VERSATILE)
+                .withPriority(PRIORITY)
+                .withSelector(ipTvDown)
+                .withTreatment(ipTvActDown)
+                .add();
+
+        flowObjectiveService.forward(fabricDeviceId, ipTvUpstream);
+        flowObjectiveService.forward(fabricDeviceId, ipTvDownstream);
+    }
+
     @Override
     public void removeVlan(VlanId vlanId) {
         vlans.removeAll(vlanId)
@@ -202,7 +248,9 @@
     public List<FabricVlan> getVlans() {
         List<FabricVlan> fVlans = new ArrayList<>();
         vlans.keySet().forEach(vlan -> fVlans.add(
-                new FabricVlan(vlan, vlans.get(vlan))));
+                //FIXME: Very aweful but will fo for now
+                new FabricVlan(vlan, vlans.get(vlan),
+                               vlan.toShort() == 201 ? true : false)));
         return fVlans;
     }
 
@@ -217,6 +265,7 @@
 
     private void addForwarding(VlanId vlanId, DeviceId deviceId, PortNumber inPort,
                                List<PortNumber> outPorts) {
+
         TrafficSelector selector = DefaultTrafficSelector.builder()
                 .matchVlanId(vlanId)
                 .matchInPort(inPort)
diff --git a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlan.java b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlan.java
index d145928..a5cfc07 100644
--- a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlan.java
+++ b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlan.java
@@ -33,12 +33,14 @@
     private final VlanId vlan;
 
     private final List<ConnectPoint> ports;
+    private final boolean iptv;
 
-    public FabricVlan(VlanId vlan, Collection<ConnectPoint> ports) {
+    public FabricVlan(VlanId vlan, Collection<ConnectPoint> ports, boolean iptv) {
         checkNotNull(vlan);
         checkNotNull(ports);
         this.vlan = vlan;
         this.ports = ImmutableList.copyOf(ports);
+        this.iptv = iptv;
     }
 
     public VlanId vlan() {
@@ -48,4 +50,8 @@
     public List<ConnectPoint> ports() {
         return ports;
     }
+
+    public boolean iptv() {
+        return iptv;
+    }
 }
diff --git a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlanCodec.java b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlanCodec.java
index 0a097b2..00736bc 100644
--- a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlanCodec.java
+++ b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/FabricVlanCodec.java
@@ -37,6 +37,7 @@
     // JSON field names
     private static final String VLAN = "vlan";
     private static final String PORTS = "ports";
+    private static final String IPTV = "iptv";
 
     @Override
     public ObjectNode encode(FabricVlan vlan, CodecContext context) {
@@ -54,6 +55,7 @@
     @Override
     public FabricVlan decode(ObjectNode json, CodecContext context) {
         short vlan =  json.path(VLAN).shortValue();
+        boolean iptv = json.path(IPTV).booleanValue();
         List<ConnectPoint> ports = new ArrayList<>();
 
         ArrayNode portArray = (ArrayNode) json.path(PORTS);
@@ -61,6 +63,6 @@
             ports.add(context.codec(ConnectPoint.class).decode((ObjectNode) o, context));
         }
 
-        return new FabricVlan(VlanId.vlanId(vlan), ports);
+        return new FabricVlan(VlanId.vlanId(vlan), ports, iptv);
     }
 }
diff --git a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/cli/FabricAddCommand.java b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/cli/FabricAddCommand.java
index cfa26be..e8cc641 100644
--- a/apps/cordfabric/src/main/java/org/onosproject/cordfabric/cli/FabricAddCommand.java
+++ b/apps/cordfabric/src/main/java/org/onosproject/cordfabric/cli/FabricAddCommand.java
@@ -59,6 +59,6 @@
             ports.add(ConnectPoint.deviceConnectPoint(portString));
         }
 
-        service.addVlan(new FabricVlan(vlan, ports));
+        service.addVlan(new FabricVlan(vlan, ports, false));
     }
 }