2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.controller.frm.flow
10 import org.opendaylight.controller.frm.AbstractTransaction
11 import org.opendaylight.controller.md.sal.common.api.data.DataModification
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
22 import org.opendaylight.yangtools.yang.binding.DataObject
23 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri
28 class FlowTransaction extends AbstractTransaction {
31 val SalFlowService salFlowService;
34 new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalFlowService salFlowService) {
36 _salFlowService = salFlowService;
39 override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
40 if(obj instanceof Flow) {
41 val flow = (obj as Flow)
42 val tableInstanceId = instanceId.firstIdentifierOf(Table);
43 val nodeInstanceId = instanceId.firstIdentifierOf(Node);
44 val builder = new RemoveFlowInputBuilder(flow);
45 builder.setFlowRef(new FlowRef(instanceId));
46 builder.setNode(new NodeRef(nodeInstanceId));
47 builder.setFlowTable(new FlowTableRef(tableInstanceId));
48 builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
49 _salFlowService.removeFlow(builder.build());
53 override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
54 if(originalObj instanceof Flow && updatedObj instanceof Flow) {
55 val originalFlow = (originalObj as Flow)
56 val updatedFlow = (updatedObj as Flow)
57 val nodeInstanceId = instanceId.firstIdentifierOf(Node);
58 val builder = new UpdateFlowInputBuilder();
59 builder.setNode(new NodeRef(nodeInstanceId));
60 builder.setFlowRef(new FlowRef(instanceId));
61 val ufb = new UpdatedFlowBuilder(updatedFlow);
62 builder.setUpdatedFlow((ufb.build()));
63 builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
64 val ofb = new OriginalFlowBuilder(originalFlow);
65 builder.setOriginalFlow(ofb.build());
66 _salFlowService.updateFlow(builder.build());
71 override add(InstanceIdentifier<?> instanceId, DataObject obj) {
72 if(obj instanceof Flow) {
73 val flow = (obj as Flow)
74 val tableInstanceId = instanceId.firstIdentifierOf(Table);
75 val nodeInstanceId = instanceId.firstIdentifierOf(Node);
76 val builder = new AddFlowInputBuilder(flow);
77 builder.setNode(new NodeRef(nodeInstanceId));
78 builder.setTransactionUri(new Uri(modification.getIdentifier() as String));
79 builder.setFlowRef(new FlowRef(instanceId));
80 builder.setFlowTable(new FlowTableRef(tableInstanceId));
81 _salFlowService.addFlow(builder.build());
85 override validate() throws IllegalStateException {
86 FlowTransactionValidator.validate(this)