Fix to allow RESTCONF PUTing of Flows
[controller.git] / opendaylight / md-sal / forwardingrules-manager / src / main / java / org / opendaylight / controller / frm / group / GroupTransaction.xtend
diff --git a/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransaction.xtend b/opendaylight/md-sal/forwardingrules-manager/src/main/java/org/opendaylight/controller/frm/group/GroupTransaction.xtend
new file mode 100644 (file)
index 0000000..54382ea
--- /dev/null
@@ -0,0 +1,75 @@
+package org.opendaylight.controller.frm.group
+
+import org.opendaylight.controller.frm.AbstractTransaction
+import org.opendaylight.controller.md.sal.common.api.data.DataModification
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.UpdateFlowInputBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.OriginalFlowBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node
+import org.opendaylight.yangtools.yang.binding.DataObject
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.SalFlowService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupService
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInputBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.UpdateGroupInputBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroupBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.OriginalGroupBuilder
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder
+
+class GroupTransaction extends AbstractTransaction {
+    
+    @Property
+    val SalGroupService groupService;
+    
+    new(DataModification<InstanceIdentifier<? extends DataObject>, DataObject> modification,SalGroupService groupService) {
+        super(modification)
+        _groupService = groupService;
+    }
+    
+    override remove(InstanceIdentifier<?> instanceId, DataObject obj) {
+        if(obj instanceof Group) {
+            val group = (obj as Group)
+            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
+            val builder = new RemoveGroupInputBuilder(group);
+            builder.setNode(new NodeRef(nodeInstanceId));
+            _groupService.removeGroup(builder.build());            
+        }
+    }
+    
+    override update(InstanceIdentifier<?> instanceId, DataObject originalObj, DataObject updatedObj) {
+        if(originalObj instanceof Group && updatedObj instanceof Group) {
+            val originalGroup = (originalObj as Group)
+            val updatedGroup = (updatedObj as Group)
+            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
+            val builder = new UpdateGroupInputBuilder();
+            builder.setNode(new NodeRef(nodeInstanceId));
+            val ufb = new UpdatedGroupBuilder(updatedGroup);
+            builder.setUpdatedGroup((ufb.build()));
+            val ofb = new OriginalGroupBuilder(originalGroup);
+            builder.setOriginalGroup(ofb.build());      
+            _groupService.updateGroup(builder.build());
+           
+        }
+    }
+    
+    override add(InstanceIdentifier<?> instanceId, DataObject obj) {
+        if(obj instanceof Group) {
+            val group = (obj as Group)
+            val nodeInstanceId = instanceId.firstIdentifierOf(Node);
+            val builder = new AddGroupInputBuilder(group);
+            builder.setNode(new NodeRef(nodeInstanceId));
+            _groupService.addGroup(builder.build());            
+        }
+    }
+    
+    override validate() throws IllegalStateException {
+        GroupTransactionValidator.validate(this)
+    }  
+}
\ No newline at end of file