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