Added action bucket into group and Band types to Meter
[openflowplugin.git] / test-provider / src / main / java / org / opendaylight / openflowplugin / test / OpenflowpluginMeterTestCommandProvider.java
1 package org.opendaylight.openflowplugin.test;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.concurrent.ExecutionException;
6 import java.util.concurrent.Future;
7
8 import org.eclipse.osgi.framework.console.CommandInterpreter;
9 import org.eclipse.osgi.framework.console.CommandProvider;
10 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
11 import org.opendaylight.controller.md.sal.common.api.data.DataModification;
12 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
13 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.Meters;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.Meter;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.meters.MeterKey;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandType;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypes;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
35 import org.opendaylight.yangtools.yang.binding.DataObject;
36 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
37 import org.opendaylight.yangtools.yang.common.RpcResult;
38 import org.osgi.framework.BundleContext;
39
40 public class OpenflowpluginMeterTestCommandProvider implements CommandProvider {
41
42     private DataBrokerService dataBrokerService;
43     private ProviderContext pc;
44     private final BundleContext ctx;
45     private Meter testMeter;
46     private Node testNode;
47     private final String originalMeterName = "Foo";
48     private final String updatedMeterName = "Bar";
49
50     public OpenflowpluginMeterTestCommandProvider(BundleContext ctx) {
51         this.ctx = ctx;
52     }
53
54     public void onSessionInitiated(ProviderContext session) {
55         pc = session;
56         dataBrokerService = session.getSALService(DataBrokerService.class);
57         ctx.registerService(CommandProvider.class.getName(), this, null);
58         createTestNode();
59         createTestMeter();
60     }
61
62     private void createUserNode(String nodeRef) {
63         NodeRef nodeOne = createNodeRef(nodeRef);
64         NodeBuilder builder = new NodeBuilder();
65         builder.setId(new NodeId(nodeRef));
66         builder.setKey(new NodeKey(builder.getId()));
67         testNode = builder.build();
68     }
69     
70     private void createTestNode() {
71         NodeRef nodeOne = createNodeRef(OpenflowpluginTestActivator.NODE_ID);
72         NodeBuilder builder = new NodeBuilder();
73         builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
74         builder.setKey(new NodeKey(builder.getId()));
75         testNode = builder.build();
76     }
77
78     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
79         return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
80     }
81
82     private void createTestMeter() {
83         // Sample data , committing to DataStore
84         DataModification modification = dataBrokerService.beginTransaction();
85         long id = 123;
86         MeterKey key = new MeterKey(id, new NodeRef(new NodeRef(nodeToInstanceId(testNode))));
87         MeterBuilder meter = new MeterBuilder();
88         meter.setContainerName("abcd");     
89         meter.setId((long) 123);
90         meter.setKey(key);       
91         meter.setMeterName(originalMeterName);
92         meter.setFlags(new MeterFlags(true, false, false, false));   
93         MeterBandHeadersBuilder bandHeaders = new MeterBandHeadersBuilder();
94         List<MeterBandHeader> bandHdr = new ArrayList<MeterBandHeader>();
95         MeterBandHeaderBuilder bandHeader = new MeterBandHeaderBuilder();
96         bandHeader.setRate((long) 234);
97         bandHeader.setBurstSize((long) 444);
98         DscpRemarkBuilder dscpRemark = new DscpRemarkBuilder();
99         dscpRemark.setBurstSize((long) 5);
100         dscpRemark.setPercLevel((short) 1);
101         dscpRemark.setRate((long) 12);
102         bandHeader.setBandType(dscpRemark.build());
103         MeterBandTypesBuilder bandTypes = new MeterBandTypesBuilder();
104         MeterBandType bandType = new MeterBandType(false, true, false);   
105         bandTypes.setFlags(bandType);
106         bandHeader.setMeterBandTypes(bandTypes.build());
107         bandHdr.add(bandHeader.build());       
108         bandHeaders.setMeterBandHeader(bandHdr);
109         meter.setMeterBandHeaders(bandHeaders.build());
110         
111         testMeter = meter.build();
112     }
113
114     public void _removeMeter(CommandInterpreter ci) {
115         String nref = ci.nextArgument();
116         
117         if (nref == null) {
118             ci.println("test node added");
119             createTestNode();
120         } else {
121             ci.println("User node added" + nref);
122             createUserNode(nref);
123         }
124         createTestMeter();
125         DataModification modification = dataBrokerService.beginTransaction();
126         InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class)
127                 .child(Meter.class, testMeter.getKey()).toInstance();
128         DataObject cls = (DataObject) modification.readConfigurationData(path1);
129         modification.removeOperationalData(nodeToInstanceId(testNode));
130         modification.removeOperationalData(path1);
131         modification.removeConfigurationData(nodeToInstanceId(testNode));
132         modification.removeConfigurationData(path1);
133         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
134         try {
135             RpcResult<TransactionStatus> result = commitFuture.get();
136             TransactionStatus status = result.getResult();
137             ci.println("Status of Meter Data Loaded Transaction: " + status);
138
139         } catch (InterruptedException e) {
140             // TODO Auto-generated catch block
141             e.printStackTrace();
142         } catch (ExecutionException e) {
143             // TODO Auto-generated catch block
144             e.printStackTrace();
145         }
146     }
147
148     public void _addMeter(CommandInterpreter ci) {
149         String nref = ci.nextArgument();
150         
151         if (nref == null) {
152             ci.println("test node added");
153             createTestNode();
154         } else {
155             ci.println("User node added" + nref);
156             createUserNode(nref);
157         }
158         createTestMeter();        
159         writeMeter(ci, testMeter);
160     }
161
162     private void writeMeter(CommandInterpreter ci, Meter meter) {
163         DataModification modification = dataBrokerService.beginTransaction();
164         InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Meters.class).
165                 child(Meter.class, meter.getKey())
166                 .toInstance();
167         DataObject cls = (DataObject) modification.readConfigurationData(path1);
168         modification.putOperationalData(nodeToInstanceId(testNode), testNode);
169         modification.putOperationalData(path1, meter);
170         modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
171         modification.putConfigurationData(path1, meter);
172         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
173         try {
174             RpcResult<TransactionStatus> result = commitFuture.get();
175             TransactionStatus status = result.getResult();
176             ci.println("Status of Meter Data Loaded Transaction: " + status);
177
178         } catch (InterruptedException e) {
179             // TODO Auto-generated catch block
180             e.printStackTrace();
181         } catch (ExecutionException e) {
182             // TODO Auto-generated catch block
183             e.printStackTrace();
184         }
185     }
186
187     public void _modifyMeter(CommandInterpreter ci) {
188         String nref = ci.nextArgument();
189         
190         if (nref == null) {
191             ci.println("test node added");
192             createTestNode();
193         } else {
194             ci.println("User node added" + nref);
195             createUserNode(nref);
196         }
197         createTestMeter();
198         MeterBuilder meter = new MeterBuilder(testMeter);
199         meter.setMeterName(updatedMeterName);
200         writeMeter(ci, meter.build());
201         meter.setMeterName(originalMeterName);
202         writeMeter(ci, meter.build());
203     }
204     
205     @Override
206     public String getHelp() {
207         StringBuffer help = new StringBuffer();
208         help.append("---FRM MD-SAL Group test module---\n");
209         help.append("\t addMeter <node id>        - node ref\n");
210         help.append("\t modifyMeter <node id>        - node ref\n");
211         help.append("\t removeMeter <node id>        - node ref\n");
212        
213         return help.toString();
214     }
215     
216     private static NodeRef createNodeRef(String string) {
217         NodeKey key = new NodeKey(new NodeId(string));
218         InstanceIdentifier<Node> path =
219                 InstanceIdentifier.builder(Nodes.class).child(Node.class, key).toInstance();
220
221         return new NodeRef(path);
222     }
223 }