2 * Copyright (c) 2016 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.openflowplugin.applications.frsync.impl.strategy;
10 import com.google.common.util.concurrent.ListenableFuture;
11 import org.opendaylight.mdsal.binding.api.RpcConsumerRegistry;
12 import org.opendaylight.openflowplugin.applications.frsync.ForwardingRulesCommitter;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeter;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterOutput;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeter;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInputBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterOutput;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeter;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInputBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterOutput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.OriginalMeterBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeterBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterRef;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.opendaylight.yangtools.yang.common.RpcResult;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
35 * Implements {@link ForwardingRulesCommitter} methods for processing add, update and remove of {@link Meter}.
37 public class MeterForwarder
38 implements ForwardingRulesCommitter<Meter, AddMeterOutput, RemoveMeterOutput, UpdateMeterOutput> {
39 private static final Logger LOG = LoggerFactory.getLogger(MeterForwarder.class);
41 private final RemoveMeter removeMeter;
42 private final AddMeter addMeter;
43 private final UpdateMeter updateMeter;
45 public MeterForwarder(final RpcConsumerRegistry rpcConsumerRegistry) {
46 addMeter = rpcConsumerRegistry.getRpc(AddMeter.class);
47 removeMeter = rpcConsumerRegistry.getRpc(RemoveMeter.class);
48 updateMeter = rpcConsumerRegistry.getRpc(UpdateMeter.class);
52 public ListenableFuture<RpcResult<RemoveMeterOutput>> remove(final InstanceIdentifier<Meter> identifier,
53 final Meter removeDataObj, final InstanceIdentifier<FlowCapableNode> nodeIdent) {
54 LOG.trace("Received the Meter REMOVE request [Tbl id, node Id {} {}", identifier, nodeIdent);
55 return removeMeter.invoke(new RemoveMeterInputBuilder(removeDataObj)
56 .setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class)))
57 .setMeterRef(new MeterRef(identifier))
62 public ListenableFuture<RpcResult<UpdateMeterOutput>> update(final InstanceIdentifier<Meter> identifier,
63 final Meter original, final Meter update, final InstanceIdentifier<FlowCapableNode> nodeIdent) {
64 LOG.trace("Received the Meter UPDATE request [Tbl id, node Id {} {} {}", identifier, nodeIdent, update);
65 return updateMeter.invoke(new UpdateMeterInputBuilder()
66 .setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class)))
67 .setMeterRef(new MeterRef(identifier))
68 .setUpdatedMeter(new UpdatedMeterBuilder(update).build())
69 .setOriginalMeter(new OriginalMeterBuilder(original).build())
74 public ListenableFuture<RpcResult<AddMeterOutput>> add(final InstanceIdentifier<Meter> identifier,
75 final Meter addDataObj, final InstanceIdentifier<FlowCapableNode> nodeIdent) {
76 LOG.trace("Received the Meter ADD request [Tbl id, node Id {} {} {}", identifier, nodeIdent, addDataObj);
77 return addMeter.invoke(new AddMeterInputBuilder(addDataObj)
78 .setNode(new NodeRef(nodeIdent.firstIdentifierOf(Node.class)))
79 .setMeterRef(new MeterRef(identifier))