copyright header added
[openflowplugin.git] / test-provider / src / main / java / org / opendaylight / openflowplugin / test / OpenflowpluginGroupTestCommandProvider.java
1 /**
2  * Copyright IBM Corporation, 2013.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowplugin.test;
9
10 import java.util.ArrayList;
11 import java.util.List;
12 import java.util.concurrent.ExecutionException;
13 import java.util.concurrent.Future;
14
15 import org.eclipse.osgi.framework.console.CommandInterpreter;
16 import org.eclipse.osgi.framework.console.CommandProvider;
17 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
18 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
19 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
20 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.VlanCfi;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.ControllerActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.FloodAllActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.HwPathActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.LoopbackActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlTypeActionCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNextHopActionCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanCfiActionCaseBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SwPathActionCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.controller.action._case.ControllerActionBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropAction;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.drop.action._case.DropActionBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.action._case.FloodActionBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.flood.all.action._case.FloodAllActionBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.hw.path.action._case.HwPathActionBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.loopback.action._case.LoopbackActionBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.type.action._case.SetDlTypeActionBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.next.hop.action._case.SetNextHopActionBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.cfi.action._case.SetVlanCfiActionBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.sw.path.action._case.SwPathActionBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Groups;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
121 import org.opendaylight.yangtools.yang.binding.DataObject;
122 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
123 import org.opendaylight.yangtools.yang.common.RpcResult;
124 import org.osgi.framework.BundleContext;
125
126 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
127
128     private DataBrokerService dataBrokerService;
129     private ProviderContext pc;
130     private final BundleContext ctx;
131     private Group testGroup;
132     private Group testGroup2;
133     private Node testNode;
134     private final String originalGroupName = "Foo";
135     private final String updatedGroupName = "Bar";
136
137     public OpenflowpluginGroupTestCommandProvider(BundleContext ctx) {
138         this.ctx = ctx;
139     }
140
141     public void onSessionInitiated(ProviderContext session) {
142         pc = session;
143         dataBrokerService = session.getSALService(DataBrokerService.class);
144         ctx.registerService(CommandProvider.class.getName(), this, null);
145         createTestNode();
146     }
147
148     private void createUserNode(String nodeRef) {
149         NodeRef nodeOne = createNodeRef(nodeRef);
150         NodeBuilder builder = new NodeBuilder();
151         builder.setId(new NodeId(nodeRef));
152         builder.setKey(new NodeKey(builder.getId()));
153         testNode = builder.build();
154     }
155
156     private void createTestNode() {
157         NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
158         NodeBuilder builder = new NodeBuilder();
159         builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
160         builder.setKey(new NodeKey(builder.getId()));
161         testNode = builder.build();
162     }
163
164     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
165         return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
166     }
167
168     private GroupBuilder createTestGroup(String actiontype,String type,String mod) {
169         // Sample data , committing to DataStore
170         
171         String GroupType = type;
172         String ActionType = actiontype;
173         String Groupmod = mod;
174         DataModification modification = dataBrokerService.beginTransaction();
175
176         long id = 1;
177         GroupKey key = new GroupKey(new GroupId(id));
178         GroupBuilder group = new GroupBuilder();        
179         BucketBuilder bucket = new BucketBuilder();        
180         bucket.setBucketId(new BucketId((long) 12));
181         bucket.setKey(new BucketKey(new BucketId((long) 12)));  
182         
183         if (GroupType == null) {
184             GroupType = "g1";
185         }
186         if(ActionType==null){
187                 ActionType="a1";
188         }
189
190         switch (GroupType) {
191         case "g1":
192                  group.setGroupType(GroupTypes.GroupSelect); 
193             break;
194         case "g2":
195            group.setGroupType(GroupTypes.GroupAll); 
196           break;
197         case "g3":
198             group.setGroupType(GroupTypes.GroupIndirect); 
199            break;
200         case "g4":
201             group.setGroupType(GroupTypes.GroupFf); 
202            break;
203         }
204         
205         switch (ActionType){
206         case "a1":
207                  bucket.setAction(createPopVlanAction()); 
208                 break;
209         case "a2":
210                 bucket.setAction(createPushVlanAction()); 
211                 break;
212         case "a3":
213                 bucket.setAction(createPushMplsAction());  
214                 break;
215         case "a4":
216                 bucket.setAction(createPopMplsAction());  
217                 break;  
218         case "a5":
219                 bucket.setAction(createPopPbbAction());  
220                 break;  
221         case "a6":
222                 bucket.setAction(createPushPbbAction());  
223                 break;   
224         case "a7":
225                 bucket.setAction(createPushPbbAction());  
226                 break;         
227         case "a8":
228                 bucket.setAction(createCopyTtlInAction());  
229                 break;  
230         case "a9":
231                 bucket.setAction(createCopyTtlOutAction());  
232                 break;  
233         case "a10":
234                 bucket.setAction(createDecMplsTtlAction());  
235                 break;  
236         case "a11":
237                 bucket.setAction(createDecNwTtlAction());  
238                 break;         
239         case "a12":
240                 bucket.setAction(createSetQueueAction());   
241                 break;        
242         case "a13":
243                 bucket.setAction(createSetNwTtlAction());   
244                 break;         
245         case "a14":
246                 bucket.setAction(createGroupAction());  
247                 break;        
248         case "a15":
249                 bucket.setAction(createSetMplsTtlAction());  
250                 break;
251         case "a16":
252                 bucket.setAction(createFloodOutputAction());
253                 break;
254         case "a17":
255                 bucket.setAction(createAllOutputAction());
256                 break;
257         case "a18":
258                 bucket.setAction(createNormalOutputAction());
259                 break;
260         case "a19":
261                 bucket.setAction(creatTableOutputAction());
262                 break;
263         case "a20":
264                 bucket.setAction(createControllerAction());
265                 break;  
266         case "a21":
267                 bucket.setAction(createLocalOutputAction());
268                 break;  
269         case "a22":
270                 bucket.setAction(createAnyOutputAction());
271                 break;  
272         case "a23":
273                 bucket.setAction(createInportOutputAction());
274                 break; 
275         case "a24" :            
276                 bucket.setAction(null);
277                 break;
278         case "a25" :            
279                 bucket.setAction(createNonAppyOutputAction());
280                 break;
281         case "a26" :            
282                 bucket.setAction(createNonAppyPushMplsAction());
283                 break;
284         case "a27" :            
285                 bucket.setAction(createNonAppyPushPbbAction());
286                 break;
287         case "a28" :            
288                 bucket.setAction(createNonAppyPushVlanAction());
289                 break;
290                 
291         }
292            
293         if(Groupmod=="add"){            
294         bucket.setWatchGroup((long) 14);
295         bucket.setWatchPort((long) 1234);
296         bucket.setWeight(50);
297         }else {
298                  bucket.setWatchGroup((long) 13);
299              bucket.setWatchPort((long) 134);
300              bucket.setWeight(30);      
301         }
302         group.setKey(key);
303        // group.setInstall(false);
304         group.setGroupId(new GroupId(id));       
305         group.setGroupName(originalGroupName);
306         group.setBarrier(false);
307         BucketsBuilder value = new BucketsBuilder();
308         List<Bucket> value1 = new ArrayList<Bucket>();
309         value1.add(bucket.build());
310         value.setBucket(value1);
311         group.setBuckets(value.build());
312         testGroup = group.build();
313         return group;
314     }
315     
316   
317
318         private List<Action> createPopVlanAction(){     
319         PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
320         ActionBuilder action = new ActionBuilder();
321         action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
322         action.setKey(new ActionKey(0));
323         List<Action> actions = new ArrayList<Action>();
324         actions.add(action.build());
325         return actions;         
326     }
327     
328     private List<Action> createPushVlanAction(){        
329         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
330         vlan.setEthernetType(new Integer(0x8100));
331         ActionBuilder action = new ActionBuilder();
332         action.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
333         List<Action> actions = new ArrayList<Action>();
334         actions.add(action.build());
335         return actions;         
336     }
337     private List<Action> createPushMplsAction(){ 
338         PushMplsActionBuilder push = new PushMplsActionBuilder(); 
339         push.setEthernetType(new Integer(0x8847));
340             ActionBuilder action = new ActionBuilder();
341             action.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
342         List<Action> actions = new ArrayList<Action>();
343         actions.add(action.build());
344         return actions;         
345     }
346     private List<Action> createPopMplsAction(){ 
347         PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder(); 
348         popMplsActionBuilder.setEthernetType(0XB);
349             ActionBuilder action = new ActionBuilder();
350             action.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMplsActionBuilder.build()).build());
351         List<Action> actions = new ArrayList<Action>();
352         actions.add(action.build());
353         return actions;         
354     }
355             
356     private List<Action> createPopPbbAction(){ 
357         PopPbbActionBuilder popPbbActionBuilder = new PopPbbActionBuilder();       
358             ActionBuilder action = new ActionBuilder();
359             action.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPbbActionBuilder.build()).build());
360         List<Action> actions = new ArrayList<Action>();
361         actions.add(action.build());
362         return actions;         
363     }
364     private List<Action> createPushPbbAction(){ 
365         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
366         pbb.setEthernetType(new Integer(0x88E7));
367             ActionBuilder action = new ActionBuilder();
368             action.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
369         List<Action> actions = new ArrayList<Action>();
370         actions.add(action.build());
371         return actions;         
372     }
373     private List<Action> createSetMplsTtlAction(){ 
374         SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
375         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
376             ActionBuilder action = new ActionBuilder();
377             action.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMplsTtlActionBuilder.build()).build());
378         List<Action> actions = new ArrayList<Action>();
379         actions.add(action.build());
380         return actions;         
381     }
382     private List<Action> createSetNwTtlAction(){ 
383         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
384         setNwTtlActionBuilder.setNwTtl((short) 1);
385             ActionBuilder action = new ActionBuilder();
386             action.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());          
387         List<Action> actions = new ArrayList<Action>();
388         actions.add(action.build());
389         return actions;         
390     }
391     private List<Action> createSetQueueAction(){ 
392         SetQueueActionBuilder setQueueActionBuilder = new SetQueueActionBuilder();
393         setQueueActionBuilder.setQueueId(1L);
394             ActionBuilder action = new ActionBuilder();
395             action.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQueueActionBuilder.build()).build());
396          action.setKey(new ActionKey(0));
397         List<Action> actions = new ArrayList<Action>();
398         actions.add(action.build());
399         return actions;         
400     }
401     
402   
403     private List<Action> createCopyTtlInAction(){ 
404          CopyTtlInBuilder ttlin = new CopyTtlInBuilder();          
405             ActionBuilder action = new ActionBuilder();
406             action.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(ttlin.build()).build());
407        List<Action> actions = new ArrayList<Action>();
408        actions.add(action.build());
409        return actions;          
410     }
411  
412    private List<Action> createCopyTtlOutAction(){ 
413          CopyTtlOutBuilder ttlout = new CopyTtlOutBuilder();
414             ActionBuilder action = new ActionBuilder();
415             action.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(ttlout.build()).build());
416        List<Action> actions = new ArrayList<Action>();
417        actions.add(action.build());
418        return actions;          
419     }
420  
421    private List<Action> createDecMplsTtlAction(){ 
422         DecMplsTtlBuilder mpls = new DecMplsTtlBuilder();
423             ActionBuilder action = new ActionBuilder();
424             action.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(mpls.build()).build());
425        List<Action> actions = new ArrayList<Action>();
426        actions.add(action.build());
427        return actions;          
428     }
429    private List<Action> createDecNwTtlAction(){ 
430           DecNwTtlBuilder nwttl = new DecNwTtlBuilder();
431             ActionBuilder action = new ActionBuilder();
432             action.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(nwttl.build()).build());
433        List<Action> actions = new ArrayList<Action>();       
434       
435        ActionBuilder ab = new ActionBuilder();     
436        OutputActionBuilder output = new OutputActionBuilder();
437      //  output.setMaxLength(30);
438        Uri value = new Uri("2");
439        output.setOutputNodeConnector(value);
440        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
441        ab.setKey(new ActionKey(0));
442        ab.setOrder(0);
443        actions.add(ab.build());
444        actions.add(action.build());
445        return actions;          
446     } 
447    
448    private List<Action> createFloodOutputAction(){
449      
450        List<Action> actions = new ArrayList<Action>();
451        ActionBuilder ab = new ActionBuilder();
452        OutputActionBuilder output = new OutputActionBuilder();
453        output.setMaxLength(30);
454        Uri value = new Uri(OutputPortValues.FLOOD.toString());
455        output.setOutputNodeConnector(value);
456        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
457        ab.setKey(new ActionKey(0));
458        actions.add(ab.build());      
459        return actions;
460     }
461    
462    private List<Action> createAllOutputAction(){
463              
464        List<Action> actions = new ArrayList<Action>();
465        ActionBuilder ab = new ActionBuilder();
466        OutputActionBuilder output = new OutputActionBuilder();
467        output.setMaxLength(30);
468        Uri value = new Uri(OutputPortValues.ALL.toString());
469        output.setOutputNodeConnector(value);
470        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
471        ab.setKey(new ActionKey(0));
472        actions.add(ab.build());      
473        return actions;
474     }
475    
476    private List<Action> createAnyOutputAction(){
477              
478        List<Action> actions = new ArrayList<Action>();
479        ActionBuilder ab = new ActionBuilder();
480        OutputActionBuilder output = new OutputActionBuilder();
481        output.setMaxLength(30);
482        Uri value = new Uri(OutputPortValues.ANY.toString());
483        output.setOutputNodeConnector(value);
484        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
485        ab.setKey(new ActionKey(0));
486        actions.add(ab.build());      
487        return actions;
488     }
489    private List<Action> createNormalOutputAction(){
490              
491        List<Action> actions = new ArrayList<Action>();
492        ActionBuilder ab = new ActionBuilder();
493        OutputActionBuilder output = new OutputActionBuilder();
494        output.setMaxLength(30);
495        Uri value = new Uri(OutputPortValues.NORMAL.toString());
496        output.setOutputNodeConnector(value);
497        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
498        ab.setKey(new ActionKey(0));
499        actions.add(ab.build());      
500        return actions;
501     }
502    private List<Action> createInportOutputAction(){
503              
504        List<Action> actions = new ArrayList<Action>();
505        ActionBuilder ab = new ActionBuilder();
506        OutputActionBuilder output = new OutputActionBuilder();
507        output.setMaxLength(30);
508        Uri value = new Uri(OutputPortValues.INPORT.toString());
509        output.setOutputNodeConnector(value);
510        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
511        ab.setKey(new ActionKey(0));
512        actions.add(ab.build());      
513        return actions;
514     }
515    private List<Action> creatTableOutputAction(){
516              
517        List<Action> actions = new ArrayList<Action>();
518        ActionBuilder ab = new ActionBuilder();
519        OutputActionBuilder output = new OutputActionBuilder();
520        output.setMaxLength(30);
521        Uri value = new Uri(OutputPortValues.TABLE.toString());
522        output.setOutputNodeConnector(value);
523        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
524        ab.setKey(new ActionKey(0));
525        actions.add(ab.build());      
526        return actions;
527     }
528    
529    private List<Action> createControllerAction(){
530              
531        List<Action> actions = new ArrayList<Action>();
532        ActionBuilder ab = new ActionBuilder();
533        OutputActionBuilder output = new OutputActionBuilder();
534        output.setMaxLength(30);
535        Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
536        output.setOutputNodeConnector(value);
537        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
538        ab.setKey(new ActionKey(0));
539        actions.add(ab.build());      
540        return actions;
541     }
542    
543    private List<Action> createLocalOutputAction(){
544              
545        List<Action> actions = new ArrayList<Action>();
546        ActionBuilder ab = new ActionBuilder();
547        OutputActionBuilder output = new OutputActionBuilder();
548        output.setMaxLength(30);
549        Uri value = new Uri(OutputPortValues.LOCAL.toString());
550        output.setOutputNodeConnector(value);
551        ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
552        ab.setKey(new ActionKey(0));
553        actions.add(ab.build());      
554        return actions;
555     }
556    private List<Action> createGroupAction(){ 
557            
558            GroupActionBuilder groupActionB = new GroupActionBuilder();
559        groupActionB.setGroupId(1L);
560        groupActionB.setGroup("0");   
561            ActionBuilder action = new ActionBuilder();
562            action.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
563            action.setKey(new ActionKey(0));
564        List<Action> actions = new ArrayList<Action>();
565        actions.add(action.build());
566        return actions;          
567     }
568
569  private static List<Action> createNonAppyOutputAction(){
570
571         List<Action> actionList = new ArrayList<Action>();
572         ActionBuilder ab = new ActionBuilder();
573         OutputActionBuilder output = new OutputActionBuilder();
574         Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
575         output.setOutputNodeConnector(value);
576         //output.setMaxLength(null);
577         output.setMaxLength(66000);        
578         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
579         actionList.add(ab.build());
580         return actionList;
581     }
582     
583     private static List<Action> createNonAppyPushMplsAction(){
584
585         List<Action> actionList = new ArrayList<Action>();
586         ActionBuilder ab = new ActionBuilder();
587         PushMplsActionBuilder push = new PushMplsActionBuilder();
588         push.setEthernetType(new Integer(0x8849));
589         ab.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
590         actionList.add(ab.build());
591         return actionList;
592         
593     }
594     private static List<Action> createNonAppyPushPbbAction(){
595
596         List<Action> actionList = new ArrayList<Action>();
597         ActionBuilder ab = new ActionBuilder();
598         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
599         pbb.setEthernetType(new Integer(0x88E8));
600         ab.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
601         actionList.add(ab.build()); 
602         return actionList;
603         
604     }
605
606     
607     private static List<Action> createNonAppyPushVlanAction(){
608
609         List<Action> actionList = new ArrayList<Action>();
610         ActionBuilder ab = new ActionBuilder();
611         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
612         vlan.setEthernetType(new Integer(0x8101));
613         ab.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
614         actionList.add(ab.build());
615         return actionList;
616         
617     }
618    
619
620     private GroupBuilder createTestRemoveGroup(){
621         // Sample data , committing to DataStore
622         DataModification modification = dataBrokerService.beginTransaction();
623
624         long id = 123;
625         GroupKey key = new GroupKey(new GroupId(id));
626         GroupBuilder group = new GroupBuilder();
627      /*   BucketBuilder bucket = new BucketBuilder();
628         bucket.setBucketId(new BucketId((long) 12));
629         bucket.setKey(new BucketKey(new BucketId((long) 12))); */
630         group.setKey(key);
631     //    group.setInstall(false);      
632
633         group.setGroupId(new GroupId(id));
634       /*  PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
635         ActionBuilder action = new ActionBuilder();
636         action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
637         List<Action> actions = new ArrayList<Action>();
638         actions.add(action.build()); */
639      /*   bucket.setAction(actions);
640         bucket.setWatchGroup((long) 14);
641         bucket.setWatchPort((long) 1234);
642         bucket.setWeight(15); */
643      //   group.setGroupType(GroupTypes.GroupSelect);
644      //   group.setGroupName(originalGroupName);
645      //   group.setBarrier(false);
646     //    BucketsBuilder value = new BucketsBuilder();
647     //    List<Bucket> value1 = new ArrayList<Bucket>();
648     //    value1.add(bucket.build());
649      //   value.setBucket(value1);
650       //  group.setBuckets(value.build());
651         testGroup2 = group.build();
652         return group;
653     }
654     
655    
656     
657     public void _removeGroup(CommandInterpreter ci){
658         String nref = ci.nextArgument();
659
660         if (nref == null) {
661             ci.println("test node added");
662             createTestNode();
663         } else {
664             ci.println("User node added" + nref);
665             createUserNode(nref);
666         }
667         GroupBuilder gbuilder = createTestGroup(ci.nextArgument(),ci.nextArgument(),"add");
668         DataModification<InstanceIdentifier<?>, DataObject> modification = dataBrokerService.beginTransaction();
669         InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class).child(Node.class, testNode.getKey())
670                 .augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(gbuilder.getGroupId())).build();
671         // DataObject cls = (DataObject)
672         // modification.readConfigurationData(path1);
673         // modification.removeOperationalData(nodeToInstanceId(testNode));
674         modification.removeOperationalData(path1);
675         // modification.removeConfigurationData(nodeToInstanceId(testNode));
676         modification.removeConfigurationData(path1);
677         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
678         try {
679             RpcResult<TransactionStatus> result = commitFuture.get();
680             TransactionStatus status = result.getResult();
681             ci.println("Status of Group Data Loaded Transaction: " + status);
682             ci.println("Status of Group Data Loaded Transaction: ");
683
684         } catch (InterruptedException e) {
685             // TODO Auto-generated catch block
686             e.printStackTrace();
687         } catch (ExecutionException e) {
688             // TODO Auto-generated catch block
689             e.printStackTrace();
690         }
691     }
692
693     public void _addGroup(CommandInterpreter ci) {
694         String nref = ci.nextArgument();
695
696         if (nref == null) {
697             ci.println("test node added");
698             createTestNode();
699         } else {
700             ci.println("User node added" + nref);
701             createUserNode(nref);
702         }
703         createTestGroup(ci.nextArgument(),ci.nextArgument(),"add");
704         writeGroup(ci, testGroup);
705     }
706
707     private void writeGroup(CommandInterpreter ci, Group group) {
708         DataModification modification = dataBrokerService.beginTransaction();
709         InstanceIdentifier<Group> path1 = InstanceIdentifier.builder(Nodes.class)
710                 .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class)
711                 .child(Group.class, new GroupKey(group.getGroupId()))
712                 .build();
713         modification.putOperationalData(nodeToInstanceId(testNode), testNode);
714         modification.putOperationalData(path1, group);
715         modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
716         modification.putConfigurationData(path1, group);
717         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
718         try {
719             RpcResult<TransactionStatus> result = commitFuture.get();
720             TransactionStatus status = result.getResult();
721             ci.println("Status of Group Data Loaded Transaction: " + status);
722
723         } catch (InterruptedException e) {
724             // TODO Auto-generated catch block
725             e.printStackTrace();
726         } catch (ExecutionException e) {
727             // TODO Auto-generated catch block
728             e.printStackTrace();
729         }
730     }
731
732     public void _modifyGroup(CommandInterpreter ci) {
733         String nref = ci.nextArgument();
734
735         if (nref == null) {
736             ci.println("test node added");
737             createTestNode();
738         } else {
739             ci.println("User node added" + nref);
740             createUserNode(nref);
741         }
742         GroupBuilder group = createTestGroup(ci.nextArgument(),ci.nextArgument(),"modify");           
743         writeGroup(ci, group.build());
744         
745    //     group.setGroupName(originalGroupName);
746      //   writeGroup(ci, group.build());
747     }
748
749     @Override
750     public String getHelp() {
751         StringBuffer help = new StringBuffer();
752         help.append("---FRM MD-SAL Group test module---\n");
753         help.append("\t addGroup <node id>        - node ref\n");
754         help.append("\t modifyGroup <node id>        - node ref\n");
755         help.append("\t removeGroup <node id>        - node ref\n");
756
757         return help.toString();
758     }
759
760     private static NodeRef createNodeRef(String string) {
761         NodeKey key = new NodeKey(new NodeId(string));
762         InstanceIdentifier<Node> path =
763                 InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
764
765         return new NodeRef(path);
766     }
767 }