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