2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.frm.meter;
10 import org.opendaylight.controller.frm.AbstractChangeListener;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.SalMeterService;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeter;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeter;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef;
27 import org.opendaylight.yangtools.yang.binding.DataObject;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
34 * @author <a href="mailto:vdemcak@cisco.com">Vaclav Demcak</a>
37 public class MeterChangeListener extends AbstractChangeListener {
39 private final static Logger LOG = LoggerFactory.getLogger(MeterChangeListener.class);
41 private final SalMeterService salMeterService;
43 public SalMeterService getSalMeterService() {
44 return this.salMeterService;
47 public MeterChangeListener(final SalMeterService manager) {
48 this.salMeterService = manager;
52 protected void validate() throws IllegalStateException {
53 MeterTransactionValidator.validate(this);
57 protected void remove(InstanceIdentifier<? extends DataObject> identifier, DataObject removeDataObj) {
58 if ((removeDataObj instanceof Meter)) {
60 final Meter meter = ((Meter) removeDataObj);
61 final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
62 final RemoveMeterInputBuilder builder = new RemoveMeterInputBuilder(meter);
64 builder.setNode(new NodeRef(nodeInstanceId));
65 builder.setMeterRef(new MeterRef(identifier));
67 Uri uri = new Uri(this.getTransactionId());
68 builder.setTransactionUri(uri);
69 this.salMeterService.removeMeter((RemoveMeterInput) builder.build());
70 LOG.debug("Transaction {} - Remove Meter has removed meter: {}", new Object[]{uri, removeDataObj});
75 protected void update(InstanceIdentifier<? extends DataObject> identifier, DataObject original, DataObject update) {
76 if (original instanceof Meter && update instanceof Meter) {
78 final Meter originalMeter = ((Meter) original);
79 final Meter updatedMeter = ((Meter) update);
80 final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
81 final UpdateMeterInputBuilder builder = new UpdateMeterInputBuilder();
83 builder.setNode(new NodeRef(nodeInstanceId));
84 builder.setMeterRef(new MeterRef(identifier));
86 Uri uri = new Uri(this.getTransactionId());
87 builder.setTransactionUri(uri);
89 builder.setUpdatedMeter((UpdatedMeter) (new UpdatedMeterBuilder(updatedMeter)).build());
90 builder.setOriginalMeter((OriginalMeter) (new OriginalMeterBuilder(originalMeter)).build());
92 this.salMeterService.updateMeter((UpdateMeterInput) builder.build());
93 LOG.debug("Transaction {} - Update Meter has updated meter {} with {}", new Object[]{uri, original, update});
98 protected void add(InstanceIdentifier<? extends DataObject> identifier, DataObject addDataObj) {
99 if ((addDataObj instanceof Meter)) {
101 final Meter meter = ((Meter) addDataObj);
102 final InstanceIdentifier<Node> nodeInstanceId = identifier.<Node> firstIdentifierOf(Node.class);
103 final AddMeterInputBuilder builder = new AddMeterInputBuilder(meter);
105 builder.setNode(new NodeRef(nodeInstanceId));
106 builder.setMeterRef(new MeterRef(identifier));
108 Uri uri = new Uri(this.getTransactionId());
109 builder.setTransactionUri(uri);
110 this.salMeterService.addMeter((AddMeterInput) builder.build());
111 LOG.debug("Transaction {} - Add Meter has added meter: {}", new Object[]{uri, addDataObj});