Switch to MD-SAL APIs
[openflowplugin.git] / test-provider / src / main / java / org / opendaylight / openflowplugin / test / OpenflowpluginGroupTestCommandProvider.java
1 /*
2  * Copyright (c) 2013, 2015 IBM Corporation and others.  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 com.google.common.base.Preconditions;
11 import com.google.common.util.concurrent.FutureCallback;
12 import com.google.common.util.concurrent.MoreExecutors;
13 import java.util.ArrayList;
14 import java.util.List;
15 import org.eclipse.osgi.framework.console.CommandInterpreter;
16 import org.eclipse.osgi.framework.console.CommandProvider;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
18 import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
19 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
71 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
72 import org.osgi.framework.BundleContext;
73
74 @SuppressWarnings("checkstyle:MethodName")
75 public class OpenflowpluginGroupTestCommandProvider implements CommandProvider {
76     private static final String ORIGINAL_GROUP_NAME = "Foo";
77
78     private final DataBroker dataBroker;
79     private final BundleContext ctx;
80     private Group testGroup;
81     private Node testNode;
82
83     public OpenflowpluginGroupTestCommandProvider(DataBroker dataBroker, BundleContext ctx) {
84         this.dataBroker = dataBroker;
85         this.ctx = ctx;
86     }
87
88     public void init() {
89         ctx.registerService(CommandProvider.class.getName(), this, null);
90         createTestNode();
91     }
92
93     private void createUserNode(String nodeRef) {
94         NodeBuilder builder = new NodeBuilder();
95         builder.setId(new NodeId(nodeRef));
96         builder.withKey(new NodeKey(builder.getId()));
97         testNode = builder.build();
98     }
99
100     private void createTestNode() {
101         NodeBuilder builder = new NodeBuilder();
102         builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
103         builder.withKey(new NodeKey(builder.getId()));
104         testNode = builder.build();
105     }
106
107     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
108         return InstanceIdentifier.create(Nodes.class).child(Node.class, node.key());
109     }
110
111     private GroupBuilder createTestGroup(String actionType, String groupType, String groupMod) {
112         // Sample data , committing to DataStore
113
114         GroupBuilder group = new GroupBuilder();
115         BucketBuilder bucket = new BucketBuilder();
116         bucket.setBucketId(new BucketId((long) 12));
117         bucket.withKey(new BucketKey(new BucketId((long) 12)));
118
119         if (groupType == null) {
120             groupType = "g1";
121         }
122         if (actionType == null) {
123             actionType = "a1";
124         }
125
126         switch (groupType) {
127             case "g1":
128                 group.setGroupType(GroupTypes.GroupSelect);
129                 break;
130             case "g2":
131                 group.setGroupType(GroupTypes.GroupAll);
132                 break;
133             case "g3":
134                 group.setGroupType(GroupTypes.GroupIndirect);
135                 break;
136             case "g4":
137                 group.setGroupType(GroupTypes.GroupFf);
138                 break;
139             default:
140                 break;
141         }
142
143         switch (actionType) {
144             case "a1":
145                 bucket.setAction(createPopVlanAction());
146                 break;
147             case "a2":
148                 bucket.setAction(createPushVlanAction());
149                 break;
150             case "a3":
151                 bucket.setAction(createPushMplsAction());
152                 break;
153             case "a4":
154                 bucket.setAction(createPopMplsAction());
155                 break;
156             case "a5":
157                 bucket.setAction(createPopPbbAction());
158                 break;
159             case "a6":
160             case "a7":
161                 bucket.setAction(createPushPbbAction());
162                 break;
163             case "a8":
164                 bucket.setAction(createCopyTtlInAction());
165                 break;
166             case "a9":
167                 bucket.setAction(createCopyTtlOutAction());
168                 break;
169             case "a10":
170                 bucket.setAction(createDecMplsTtlAction());
171                 break;
172             case "a11":
173                 bucket.setAction(createDecNwTtlAction());
174                 break;
175             case "a12":
176                 bucket.setAction(createSetQueueAction());
177                 break;
178             case "a13":
179                 bucket.setAction(createSetNwTtlAction());
180                 break;
181             case "a14":
182                 bucket.setAction(createGroupAction());
183                 break;
184             case "a15":
185                 bucket.setAction(createSetMplsTtlAction());
186                 break;
187             case "a16":
188                 bucket.setAction(createFloodOutputAction());
189                 break;
190             case "a17":
191                 bucket.setAction(createAllOutputAction());
192                 break;
193             case "a18":
194                 bucket.setAction(createNormalOutputAction());
195                 break;
196             case "a19":
197                 bucket.setAction(creatTableOutputAction());
198                 break;
199             case "a20":
200                 bucket.setAction(createControllerAction());
201                 break;
202             case "a21":
203                 bucket.setAction(createLocalOutputAction());
204                 break;
205             case "a22":
206                 bucket.setAction(createAnyOutputAction());
207                 break;
208             case "a23":
209                 bucket.setAction(createInportOutputAction());
210                 break;
211             case "a24":
212                 bucket.setAction(null);
213                 break;
214             case "a25":
215                 bucket.setAction(createNonAppyOutputAction());
216                 break;
217             case "a26":
218                 bucket.setAction(createNonAppyPushMplsAction());
219                 break;
220             case "a27":
221                 bucket.setAction(createNonAppyPushPbbAction());
222                 break;
223             case "a28":
224                 bucket.setAction(createNonAppyPushVlanAction());
225                 break;
226             default:
227                 break;
228         }
229
230         if ("add".equals(groupMod)) {
231             bucket.setWatchGroup((long) 14);
232             bucket.setWatchPort((long) 1234);
233             bucket.setWeight(50);
234         } else {
235             bucket.setWatchGroup((long) 13);
236             bucket.setWatchPort((long) 134);
237             bucket.setWeight(30);
238         }
239
240         long id = 1;
241         GroupKey key = new GroupKey(new GroupId(id));
242         group.withKey(key);
243         // group.setInstall(false);
244         group.setGroupId(new GroupId(id));
245         group.setGroupName(ORIGINAL_GROUP_NAME);
246         group.setBarrier(false);
247         BucketsBuilder value = new BucketsBuilder();
248         List<Bucket> value1 = new ArrayList<>();
249         value1.add(bucket.build());
250         value.setBucket(value1);
251         group.setBuckets(value.build());
252         testGroup = group.build();
253         return group;
254     }
255
256
257     private List<Action> createPopVlanAction() {
258         PopVlanActionBuilder vlanAction = new PopVlanActionBuilder();
259         ActionBuilder action = new ActionBuilder();
260         action.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(vlanAction.build()).build());
261         action.withKey(new ActionKey(0));
262         List<Action> actions = new ArrayList<>();
263         actions.add(action.build());
264         return actions;
265     }
266
267     private List<Action> createPushVlanAction() {
268         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
269         vlan.setEthernetType(0x8100);
270         ActionBuilder action = new ActionBuilder();
271         action.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
272         List<Action> actions = new ArrayList<>();
273         actions.add(action.build());
274         return actions;
275     }
276
277     private List<Action> createPushMplsAction() {
278         PushMplsActionBuilder push = new PushMplsActionBuilder();
279         push.setEthernetType(0x8847);
280         ActionBuilder action = new ActionBuilder();
281         action.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
282         List<Action> actions = new ArrayList<>();
283         actions.add(action.build());
284         return actions;
285     }
286
287     private List<Action> createPopMplsAction() {
288         PopMplsActionBuilder popMplsActionBuilder = new PopMplsActionBuilder();
289         popMplsActionBuilder.setEthernetType(0XB);
290         ActionBuilder action = new ActionBuilder();
291         action.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMplsActionBuilder.build()).build());
292         List<Action> actions = new ArrayList<>();
293         actions.add(action.build());
294         return actions;
295     }
296
297     private List<Action> createPopPbbAction() {
298         PopPbbActionBuilder popPbbActionBuilder = new PopPbbActionBuilder();
299         ActionBuilder action = new ActionBuilder();
300         action.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPbbActionBuilder.build()).build());
301         List<Action> actions = new ArrayList<>();
302         actions.add(action.build());
303         return actions;
304     }
305
306     private List<Action> createPushPbbAction() {
307         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
308         pbb.setEthernetType(0x88E7);
309         ActionBuilder action = new ActionBuilder();
310         action.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
311         List<Action> actions = new ArrayList<>();
312         actions.add(action.build());
313         return actions;
314     }
315
316     private List<Action> createSetMplsTtlAction() {
317         SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
318         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
319         ActionBuilder action = new ActionBuilder();
320         action.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(
321                 setMplsTtlActionBuilder.build()).build());
322         List<Action> actions = new ArrayList<>();
323         actions.add(action.build());
324         return actions;
325     }
326
327     private List<Action> createSetNwTtlAction() {
328         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
329         setNwTtlActionBuilder.setNwTtl((short) 1);
330         ActionBuilder action = new ActionBuilder();
331         action.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
332         List<Action> actions = new ArrayList<>();
333         actions.add(action.build());
334         return actions;
335     }
336
337     private List<Action> createSetQueueAction() {
338         SetQueueActionBuilder setQueueActionBuilder = new SetQueueActionBuilder();
339         setQueueActionBuilder.setQueueId(1L);
340         ActionBuilder action = new ActionBuilder();
341         action.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQueueActionBuilder.build()).build());
342         action.withKey(new ActionKey(0));
343         List<Action> actions = new ArrayList<>();
344         actions.add(action.build());
345         return actions;
346     }
347
348
349     private List<Action> createCopyTtlInAction() {
350         CopyTtlInBuilder ttlin = new CopyTtlInBuilder();
351         ActionBuilder action = new ActionBuilder();
352         action.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(ttlin.build()).build());
353         List<Action> actions = new ArrayList<>();
354         actions.add(action.build());
355         return actions;
356     }
357
358     private List<Action> createCopyTtlOutAction() {
359         CopyTtlOutBuilder ttlout = new CopyTtlOutBuilder();
360         ActionBuilder action = new ActionBuilder();
361         action.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(ttlout.build()).build());
362         List<Action> actions = new ArrayList<>();
363         actions.add(action.build());
364         return actions;
365     }
366
367     private List<Action> createDecMplsTtlAction() {
368         DecMplsTtlBuilder mpls = new DecMplsTtlBuilder();
369         ActionBuilder action = new ActionBuilder();
370         action.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(mpls.build()).build());
371         List<Action> actions = new ArrayList<>();
372         actions.add(action.build());
373         return actions;
374     }
375
376     private List<Action> createDecNwTtlAction() {
377         DecNwTtlBuilder nwttl = new DecNwTtlBuilder();
378         ActionBuilder action = new ActionBuilder();
379         action.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(nwttl.build()).build());
380
381         ActionBuilder ab = new ActionBuilder();
382         OutputActionBuilder output = new OutputActionBuilder();
383         //  output.setMaxLength(30);
384         Uri value = new Uri("2");
385         output.setOutputNodeConnector(value);
386         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
387         ab.withKey(new ActionKey(0));
388         ab.setOrder(0);
389
390         List<Action> actions = new ArrayList<>();
391         actions.add(ab.build());
392         actions.add(action.build());
393         return actions;
394     }
395
396     private List<Action> createFloodOutputAction() {
397         ActionBuilder ab = new ActionBuilder();
398         OutputActionBuilder output = new OutputActionBuilder();
399         output.setMaxLength(30);
400         Uri value = new Uri(OutputPortValues.FLOOD.toString());
401         output.setOutputNodeConnector(value);
402         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
403         ab.withKey(new ActionKey(0));
404
405         List<Action> actions = new ArrayList<>();
406         actions.add(ab.build());
407         return actions;
408     }
409
410     private List<Action> createAllOutputAction() {
411         ActionBuilder ab = new ActionBuilder();
412         OutputActionBuilder output = new OutputActionBuilder();
413         output.setMaxLength(30);
414         Uri value = new Uri(OutputPortValues.ALL.toString());
415         output.setOutputNodeConnector(value);
416         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
417         ab.withKey(new ActionKey(0));
418
419         List<Action> actions = new ArrayList<>();
420         actions.add(ab.build());
421         return actions;
422     }
423
424     private List<Action> createAnyOutputAction() {
425         ActionBuilder ab = new ActionBuilder();
426         OutputActionBuilder output = new OutputActionBuilder();
427         output.setMaxLength(30);
428         Uri value = new Uri(OutputPortValues.ANY.toString());
429         output.setOutputNodeConnector(value);
430         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
431         ab.withKey(new ActionKey(0));
432
433         List<Action> actions = new ArrayList<>();
434         actions.add(ab.build());
435         return actions;
436     }
437
438     private List<Action> createNormalOutputAction() {
439         ActionBuilder ab = new ActionBuilder();
440         OutputActionBuilder output = new OutputActionBuilder();
441         output.setMaxLength(30);
442         Uri value = new Uri(OutputPortValues.NORMAL.toString());
443         output.setOutputNodeConnector(value);
444         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
445         ab.withKey(new ActionKey(0));
446
447         List<Action> actions = new ArrayList<>();
448         actions.add(ab.build());
449         return actions;
450     }
451
452     private List<Action> createInportOutputAction() {
453         ActionBuilder ab = new ActionBuilder();
454         OutputActionBuilder output = new OutputActionBuilder();
455         output.setMaxLength(30);
456         Uri value = new Uri(OutputPortValues.INPORT.toString());
457         output.setOutputNodeConnector(value);
458         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
459         ab.withKey(new ActionKey(0));
460
461         List<Action> actions = new ArrayList<>();
462         actions.add(ab.build());
463         return actions;
464     }
465
466     private List<Action> creatTableOutputAction() {
467         ActionBuilder ab = new ActionBuilder();
468         OutputActionBuilder output = new OutputActionBuilder();
469         output.setMaxLength(30);
470         Uri value = new Uri(OutputPortValues.TABLE.toString());
471         output.setOutputNodeConnector(value);
472         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
473         ab.withKey(new ActionKey(0));
474
475         List<Action> actions = new ArrayList<>();
476         actions.add(ab.build());
477         return actions;
478     }
479
480     private List<Action> createControllerAction() {
481         ActionBuilder ab = new ActionBuilder();
482         OutputActionBuilder output = new OutputActionBuilder();
483         output.setMaxLength(30);
484         Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
485         output.setOutputNodeConnector(value);
486         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
487         ab.withKey(new ActionKey(0));
488
489         List<Action> actions = new ArrayList<>();
490         actions.add(ab.build());
491         return actions;
492     }
493
494     private List<Action> createLocalOutputAction() {
495         ActionBuilder ab = new ActionBuilder();
496         OutputActionBuilder output = new OutputActionBuilder();
497         output.setMaxLength(30);
498         Uri value = new Uri(OutputPortValues.LOCAL.toString());
499         output.setOutputNodeConnector(value);
500         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
501         ab.withKey(new ActionKey(0));
502
503         List<Action> actions = new ArrayList<>();
504         actions.add(ab.build());
505         return actions;
506     }
507
508     private List<Action> createGroupAction() {
509         GroupActionBuilder groupActionB = new GroupActionBuilder();
510         groupActionB.setGroupId(1L);
511         groupActionB.setGroup("0");
512         ActionBuilder action = new ActionBuilder();
513         action.setAction(new GroupActionCaseBuilder().setGroupAction(groupActionB.build()).build());
514         action.withKey(new ActionKey(0));
515         List<Action> actions = new ArrayList<>();
516         actions.add(action.build());
517         return actions;
518     }
519
520     private static List<Action> createNonAppyOutputAction() {
521         ActionBuilder ab = new ActionBuilder();
522         OutputActionBuilder output = new OutputActionBuilder();
523         Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
524         output.setOutputNodeConnector(value);
525         //output.setMaxLength(null);
526         output.setMaxLength(66000);
527         ab.setAction(new OutputActionCaseBuilder().setOutputAction(output.build()).build());
528
529         List<Action> actionList = new ArrayList<>();
530         actionList.add(ab.build());
531         return actionList;
532     }
533
534     private static List<Action> createNonAppyPushMplsAction() {
535
536         List<Action> actionList = new ArrayList<>();
537         ActionBuilder ab = new ActionBuilder();
538         PushMplsActionBuilder push = new PushMplsActionBuilder();
539         push.setEthernetType(0x8849);
540         ab.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(push.build()).build());
541         actionList.add(ab.build());
542         return actionList;
543     }
544
545     private static List<Action> createNonAppyPushPbbAction() {
546
547         List<Action> actionList = new ArrayList<>();
548         ActionBuilder ab = new ActionBuilder();
549         PushPbbActionBuilder pbb = new PushPbbActionBuilder();
550         pbb.setEthernetType(0x88E8);
551         ab.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pbb.build()).build());
552         actionList.add(ab.build());
553         return actionList;
554
555     }
556
557
558     private static List<Action> createNonAppyPushVlanAction() {
559
560         List<Action> actionList = new ArrayList<>();
561         ActionBuilder ab = new ActionBuilder();
562         PushVlanActionBuilder vlan = new PushVlanActionBuilder();
563         vlan.setEthernetType(0x8101);
564         ab.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(vlan.build()).build());
565         actionList.add(ab.build());
566         return actionList;
567     }
568
569     public void _removeGroup(final CommandInterpreter ci) {
570         String nref = ci.nextArgument();
571
572         if (nref == null) {
573             ci.println("test node added");
574             createTestNode();
575         } else {
576             ci.println("User node added" + nref);
577             createUserNode(nref);
578         }
579         GroupBuilder gbuilder = createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
580         ReadWriteTransaction modification = Preconditions.checkNotNull(dataBroker).newReadWriteTransaction();
581         InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class).child(Node.class, testNode.key())
582                 .augmentation(FlowCapableNode.class).child(Group.class, new GroupKey(gbuilder.getGroupId()));
583         modification.delete(LogicalDatastoreType.CONFIGURATION, path1);
584         modification.commit().addCallback(new FutureCallback<Object>() {
585             @Override
586             public void onSuccess(Object notUsed) {
587                 ci.println("Status of Group Data Loaded Transaction: success.");
588             }
589
590             @Override
591             public void onFailure(Throwable throwable) {
592                 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
593             }
594         }, MoreExecutors.directExecutor());
595     }
596
597     public void _addGroup(CommandInterpreter ci) {
598         String nref = ci.nextArgument();
599
600         if (nref == null) {
601             ci.println("test node added");
602             createTestNode();
603         } else {
604             ci.println("User node added" + nref);
605             createUserNode(nref);
606         }
607         createTestGroup(ci.nextArgument(), ci.nextArgument(), "add");
608         writeGroup(ci, testGroup);
609     }
610
611     private void writeGroup(final CommandInterpreter ci, Group group) {
612         ReadWriteTransaction modification = Preconditions.checkNotNull(dataBroker).newReadWriteTransaction();
613         InstanceIdentifier<Group> path1 = InstanceIdentifier.create(Nodes.class)
614                 .child(Node.class, testNode.key()).augmentation(FlowCapableNode.class)
615                 .child(Group.class, new GroupKey(group.getGroupId()));
616         modification.merge(LogicalDatastoreType.CONFIGURATION, nodeToInstanceId(testNode), testNode, true);
617         modification.merge(LogicalDatastoreType.CONFIGURATION, path1, group, true);
618         modification.commit().addCallback(new FutureCallback<Object>() {
619             @Override
620             public void onSuccess(Object notUsed) {
621                 ci.println("Status of Group Data Loaded Transaction: success.");
622             }
623
624             @Override
625             public void onFailure(Throwable throwable) {
626                 ci.println(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
627             }
628         }, MoreExecutors.directExecutor());
629     }
630
631     public void _modifyGroup(CommandInterpreter ci) {
632         String nref = ci.nextArgument();
633
634         if (nref == null) {
635             ci.println("test node added");
636             createTestNode();
637         } else {
638             ci.println("User node added" + nref);
639             createUserNode(nref);
640         }
641         GroupBuilder group = createTestGroup(ci.nextArgument(), ci.nextArgument(), "modify");
642         writeGroup(ci, group.build());
643
644         //     group.setGroupName(originalGroupName);
645         //   writeGroup(ci, group.build());
646     }
647
648     @Override
649     public String getHelp() {
650         StringBuilder help = new StringBuilder();
651         help.append("---FRM MD-SAL Group test module---\n");
652         help.append("\t addGroup <node id>        - node ref\n");
653         help.append("\t modifyGroup <node id>        - node ref\n");
654         help.append("\t removeGroup <node id>        - node ref\n");
655
656         return help.toString();
657     }
658 }