Fixed build failures for yang module changes
[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.NotificationService;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
14 import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterKey;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.SalGroupListener;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.config.rev131024.Meters;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterAdded;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterRemoved;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.MeterUpdated;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterListener;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
42 import org.opendaylight.yangtools.concepts.Registration;
43 import org.opendaylight.yangtools.yang.binding.DataObject;
44 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
45 import org.opendaylight.yangtools.yang.common.RpcResult;
46 import org.osgi.framework.BundleContext;
47 import org.slf4j.Logger;
48 import org.slf4j.LoggerFactory;
49
50 public class OpenflowpluginMeterTestCommandProvider implements CommandProvider {
51
52     private static final Logger LOG = LoggerFactory.getLogger(OpenflowpluginMeterTestCommandProvider.class);
53     private DataBrokerService dataBrokerService;
54     private ProviderContext pc;
55     private final BundleContext ctx;
56     private Meter testMeter;
57     private Node testNode;
58     private final String originalMeterName = "Foo";
59     private final String updatedMeterName = "Bar";
60     private MeterEventListener meterEventListener = new MeterEventListener();
61     private static NotificationService notificationService;
62     private Registration<org.opendaylight.yangtools.yang.binding.NotificationListener> listener1Reg;
63
64     public OpenflowpluginMeterTestCommandProvider(BundleContext ctx) {
65         this.ctx = ctx;
66     }
67
68     public void onSessionInitiated(ProviderContext session) {
69         pc = session;
70         dataBrokerService = session.getSALService(DataBrokerService.class);
71         ctx.registerService(CommandProvider.class.getName(), this, null);
72         notificationService = session.getSALService(NotificationService.class);
73         // For switch events
74         listener1Reg = notificationService.registerNotificationListener(meterEventListener);
75         
76         createTestNode();
77         createTestMeter();
78     }
79
80     private void createUserNode(String nodeRef) {
81         NodeBuilder builder = new NodeBuilder();
82         builder.setId(new NodeId(nodeRef));
83         builder.setKey(new NodeKey(builder.getId()));
84         testNode = builder.build();
85     }
86
87     private void createTestNode() {
88         NodeBuilder builder = new NodeBuilder();
89         builder.setId(new NodeId(OpenflowpluginTestActivator.NODE_ID));
90         builder.setKey(new NodeKey(builder.getId()));
91         testNode = builder.build();
92     }
93
94     private InstanceIdentifier<Node> nodeToInstanceId(Node node) {
95         return InstanceIdentifier.builder(Nodes.class).child(Node.class, node.getKey()).toInstance();
96     }
97
98     final class MeterEventListener implements SalMeterListener {
99
100         @Override
101         public void onMeterAdded(MeterAdded notification) {
102             LOG.info("Meter to be added.........................."+notification.toString());
103             LOG.info("Meter  Xid........................."+notification.getTransactionId().getValue());
104             LOG.info("-----------------------------------------------------------------------------------");            
105         }
106
107         @Override
108         public void onMeterRemoved(MeterRemoved notification) {
109             LOG.info("Meter to be removed.........................."+notification.toString());
110             LOG.info("Meter  Xid........................."+notification.getTransactionId().getValue());
111             LOG.info("-----------------------------------------------------------------------------------");            
112         }
113
114         @Override
115         public void onMeterUpdated(MeterUpdated notification) {
116             LOG.info("Meter to be updated.........................."+notification.toString());
117             LOG.info("Meter  Xid........................."+notification.getTransactionId().getValue());
118             LOG.info("-----------------------------------------------------------------------------------");            
119         }
120         
121     }
122     
123     private MeterBuilder createTestMeter() {
124         // Sample data , committing to DataStore
125         DataModification modification = dataBrokerService.beginTransaction();
126
127         long id = 12;
128         MeterKey key = new MeterKey(new MeterId(id));
129         MeterBuilder meter = new MeterBuilder();
130         meter.setContainerName("abcd");     
131         meter.setKey(key);       
132         meter.setMeterId(new MeterId(9L));
133         meter.setMeterName(originalMeterName);
134         meter.setFlags(new MeterFlags(true, false, false, false));
135         MeterBandHeadersBuilder bandHeaders = new MeterBandHeadersBuilder();
136         List<MeterBandHeader> bandHdr = new ArrayList<MeterBandHeader>();
137         MeterBandHeaderBuilder bandHeader = new MeterBandHeaderBuilder();
138         bandHeader.setBandRate((long) 234);
139         bandHeader.setBandBurstSize((long) 444);
140         DscpRemarkBuilder dscpRemark = new DscpRemarkBuilder();
141         dscpRemark.setDscpRemarkBurstSize((long) 5);
142         dscpRemark.setPercLevel((short) 1);
143         dscpRemark.setDscpRemarkRate((long) 12);
144         bandHeader.setBandType(dscpRemark.build());
145         MeterBandTypesBuilder bandTypes = new MeterBandTypesBuilder();
146         MeterBandType bandType = new MeterBandType(false, true, false);
147         bandTypes.setFlags(bandType);
148         bandHeader.setMeterBandTypes(bandTypes.build());
149         bandHeader.setBandId(new BandId(0L));
150         bandHdr.add(bandHeader.build());       
151         bandHeaders.setMeterBandHeader(bandHdr);
152         meter.setMeterBandHeaders(bandHeaders.build());
153
154         testMeter = meter.build();
155         return meter;
156     }
157
158     public void _removeMeter(CommandInterpreter ci) {
159         String nref = ci.nextArgument();
160
161         if (nref == null) {
162             ci.println("test node added");
163             createTestNode();
164         } else {
165             ci.println("User node added" + nref);
166             createUserNode(nref);
167         }
168         MeterBuilder mBuilder = createTestMeter();
169         DataModification modification = dataBrokerService.beginTransaction();
170         InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Nodes.class)
171                 .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class)
172                 .child(Meter.class, new MeterKey(testMeter.getMeterId()))
173                 .build();
174         modification.removeOperationalData(nodeToInstanceId(testNode));
175         modification.removeOperationalData(path1);
176         modification.removeConfigurationData(nodeToInstanceId(testNode));
177         modification.removeConfigurationData(path1);
178         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
179         try {
180             RpcResult<TransactionStatus> result = commitFuture.get();
181             TransactionStatus status = result.getResult();
182             ci.println("Status of Meter Data Loaded Transaction: " + status);
183
184         } catch (InterruptedException e) {
185             // TODO Auto-generated catch block
186             e.printStackTrace();
187         } catch (ExecutionException e) {
188             // TODO Auto-generated catch block
189             e.printStackTrace();
190         }
191     }
192
193     public void _addMeter(CommandInterpreter ci) {
194         String nref = ci.nextArgument();
195
196         if (nref == null) {
197             ci.println("test node added");
198             createTestNode();
199         } else {
200             ci.println("User node added" + nref);
201             createUserNode(nref);
202         }
203         createTestMeter();
204         writeMeter(ci, testMeter);
205     }
206
207     private void writeMeter(CommandInterpreter ci, Meter meter) {
208         DataModification modification = dataBrokerService.beginTransaction();
209         InstanceIdentifier<Meter> path1 = InstanceIdentifier.builder(Nodes.class)
210                 .child(Node.class, testNode.getKey()).augmentation(FlowCapableNode.class)
211                 .child(Meter.class, new MeterKey(meter.getMeterId()))
212                 .build();
213         DataObject cls = (DataObject) modification.readConfigurationData(path1);
214         modification.putOperationalData(nodeToInstanceId(testNode), testNode);
215         modification.putOperationalData(path1, meter);
216         modification.putConfigurationData(nodeToInstanceId(testNode), testNode);
217         modification.putConfigurationData(path1, meter);
218         Future<RpcResult<TransactionStatus>> commitFuture = modification.commit();
219         try {
220             RpcResult<TransactionStatus> result = commitFuture.get();
221             TransactionStatus status = result.getResult();
222             ci.println("Status of Meter Data Loaded Transaction: " + status);
223
224         } catch (InterruptedException e) {
225             // TODO Auto-generated catch block
226             e.printStackTrace();
227         } catch (ExecutionException e) {
228             // TODO Auto-generated catch block
229             e.printStackTrace();
230         }
231     }
232
233     public void _modifyMeter(CommandInterpreter ci) {
234         String nref = ci.nextArgument();
235
236         if (nref == null) {
237             ci.println("test node added");
238             createTestNode();
239         } else {
240             ci.println("User node added" + nref);
241             createUserNode(nref);
242         }
243         MeterBuilder meter = createTestMeter();
244         meter.setMeterName(updatedMeterName);
245         writeMeter(ci, meter.build());
246         meter.setMeterName(originalMeterName);
247         writeMeter(ci, meter.build());
248     }
249
250     @Override
251     public String getHelp() {
252         StringBuffer help = new StringBuffer();
253         help.append("---FRM MD-SAL Group test module---\n");
254         help.append("\t addMeter <node id>        - node ref\n");
255         help.append("\t modifyMeter <node id>        - node ref\n");
256         help.append("\t removeMeter <node id>        - node ref\n");
257
258         return help.toString();
259     }
260
261 }