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