1 package org.opendaylight.controller.frm.flow
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
21 class FlowTransaction extends AbstractTransaction {
24 val SalFlowService salFlowService;
27 new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalFlowService salFlowService) {
29 _salFlowService = salFlowService;
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());
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());
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());
78 override validate() throws IllegalStateException {
79 FlowTransactionValidator.validate(this)