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