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