dc2a7ee6f99647106818d9672bca999f87e372c6
[controller.git] / opendaylight / md-sal / forwardingrules-manager / src / main / java / org / opendaylight / controller / frm / flow / FlowTransaction.xtend
1 package org.opendaylight.controller.frm.flow
2
3 import org.opendaylight.controller.frm.AbstractTransaction
4 import org.opendaylight.controller.md.sal.common.api.data.DataModification
5 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table
6 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
7 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef
8 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
15 import org.opendaylight.yangtools.yang.binding.DataObject
16 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
20
21 class FlowTransaction extends AbstractTransaction {
22     
23     @Property
24     val SalFlowService salFlowService;   
25     
26     
27     new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalFlowService salFlowService) {
28         super(modification)        
29         _salFlowService = salFlowService;
30     }
31     
32     override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
33         if(obj instanceof Flow) {
34             val flow = (obj as Flow)
35             val tableInstanceId = instanceId.firstIdentifierOf(Table);
36             val nodeInstanceId = instanceId.firstIdentifierOf(Node);
37             val builder = new RemoveFlowInputBuilder(flow);
38             builder.setFlowRef(new FlowRef(instanceId));            
39             builder.setNode(new NodeRef(nodeInstanceId));
40             builder.setFlowTable(new FlowTableRef(tableInstanceId));
41             builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
42             _salFlowService.removeFlow(builder.build());            
43         }
44     }
45     
46     override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
47         if(originalObj instanceof Flow && updatedObj instanceof Flow) {
48             val originalFlow = (originalObj as Flow)
49             val updatedFlow = (updatedObj as Flow)
50             val nodeInstanceId = instanceId.firstIdentifierOf(Node);
51             val builder = new UpdateFlowInputBuilder();
52             builder.setNode(new NodeRef(nodeInstanceId));
53             builder.setFlowRef(new FlowRef(instanceId));
54             val ufb = new UpdatedFlowBuilder(updatedFlow);
55             builder.setUpdatedFlow((ufb.build()));
56             builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
57             val ofb = new OriginalFlowBuilder(originalFlow);
58             builder.setOriginalFlow(ofb.build());      
59             _salFlowService.updateFlow(builder.build());
60            
61         }
62     }
63     
64     override add(InstanceIdentifier<?> instanceId, DataObject obj) {
65         if(obj instanceof Flow) {
66             val flow = (obj as Flow)
67             val tableInstanceId = instanceId.firstIdentifierOf(Table);
68             val nodeInstanceId = instanceId.firstIdentifierOf(Node);
69             val builder = new AddFlowInputBuilder(flow);
70             builder.setNode(new NodeRef(nodeInstanceId));
71             builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
72             builder.setFlowRef(new FlowRef(instanceId));
73             builder.setFlowTable(new FlowTableRef(tableInstanceId));
74             _salFlowService.addFlow(builder.build());            
75         }
76     }
77     
78     override validate() throws IllegalStateException {
79         FlowTransactionValidator.validate(this)
80     }  
81 }