6ea8a43b11a509ce612527285fdcc03430750149
[openflowplugin.git] / applications / forwardingrules-sync / src / main / java / org / opendaylight / openflowplugin / applications / frsync / impl / strategy / MeterForwarder.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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 package org.opendaylight.openflowplugin.applications.frsync.impl.strategy;
9
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;
33
34 /**
35  * Implements {@link ForwardingRulesCommitter} methods for processing add, update and remove of {@link Meter}.
36  */
37 public class MeterForwarder
38         implements ForwardingRulesCommitter<Meter, AddMeterOutput, RemoveMeterOutput, UpdateMeterOutput> {
39     private static final Logger LOG = LoggerFactory.getLogger(MeterForwarder.class);
40
41     private final RemoveMeter removeMeter;
42     private final AddMeter addMeter;
43     private final UpdateMeter updateMeter;
44
45     public MeterForwarder(final RpcConsumerRegistry rpcConsumerRegistry) {
46         addMeter = rpcConsumerRegistry.getRpc(AddMeter.class);
47         removeMeter = rpcConsumerRegistry.getRpc(RemoveMeter.class);
48         updateMeter = rpcConsumerRegistry.getRpc(UpdateMeter.class);
49     }
50
51     @Override
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))
58             .build());
59     }
60
61     @Override
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())
70             .build());
71     }
72
73     @Override
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))
80             .build());
81     }
82 }