blob: cda8608923d8e8c0d7031f3f0795ebf0de195b74 [file] [log] [blame]
zhiyong ke0c26c282017-07-07 08:58:19 +08001/*
2 * Copyright 2017-present Open Networking Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Jian Li4c703b92017-10-17 00:35:53 +090017package org.onosproject.incubator.protobuf.services.nb;
zhiyong ke0c26c282017-07-07 08:58:19 +080018
19import org.apache.felix.scr.annotations.Reference;
20import org.apache.felix.scr.annotations.ReferenceCardinality;
21import org.onosproject.net.meter.MeterService;
Jian Li4c703b92017-10-17 00:35:53 +090022import org.onosproject.incubator.protobuf.models.net.meter.MeterProtoTranslator;
zhiyong ke0c26c282017-07-07 08:58:19 +080023
24import org.onosproject.grpc.nb.net.meter.MeterServiceGrpc.MeterServiceImplBase;
25import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitRequest;
26import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitReply;
27import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawRequest;
28import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawReply;
29import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterRequest;
30import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterReply;
31import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersRequest;
32import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersReply;
33import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersRequest;
34import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersReply;
35
36import io.grpc.stub.StreamObserver;
37import org.apache.felix.scr.annotations.Activate;
38import org.apache.felix.scr.annotations.Deactivate;
39import com.google.common.annotations.Beta;
40import org.apache.felix.scr.annotations.Component;
41
42import org.onosproject.net.meter.Meter;
43import org.onosproject.net.meter.MeterId;
44import org.onosproject.net.DeviceId;
Tian Jian5e4be912017-09-19 12:47:55 +080045import org.onosproject.protobuf.api.GrpcServiceRegistry;
zhiyong ke0c26c282017-07-07 08:58:19 +080046
47/**
48 * A server that provides access to the methods exposed by {@link MeterService}.
49 * TODO this requires major refactoring, translation should be delegated to calls to
Jian Li4c703b92017-10-17 00:35:53 +090050 * TODO{@link MeterProtoTranslator}.
zhiyong ke0c26c282017-07-07 08:58:19 +080051 */
52@Beta
53@Component(immediate = true)
Tian Jian5e4be912017-09-19 12:47:55 +080054public class GrpcNbMeterService extends MeterServiceImplBase {
zhiyong ke0c26c282017-07-07 08:58:19 +080055
56 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
57 protected MeterService meterService;
58
Tian Jian5e4be912017-09-19 12:47:55 +080059 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
60 protected GrpcServiceRegistry grpcServiceRegistry;
61
zhiyong ke0c26c282017-07-07 08:58:19 +080062 @Activate
63 public void activate() {
Tian Jian5e4be912017-09-19 12:47:55 +080064 grpcServiceRegistry.register(this);
zhiyong ke0c26c282017-07-07 08:58:19 +080065 }
66
67 @Deactivate
68 public void deactivate() {
Tian Jian5e4be912017-09-19 12:47:55 +080069 grpcServiceRegistry.unregister(this);
zhiyong ke0c26c282017-07-07 08:58:19 +080070 }
71
Tian Jian5e4be912017-09-19 12:47:55 +080072 @Override
73 public void submit(submitRequest request,
74 StreamObserver<submitReply> responseObserver) {
75 submitReply.Builder replyBuilder = submitReply.newBuilder();
76 Meter meter = meterService.submit(MeterProtoTranslator.translate(request.getMeter()));
77 responseObserver.onNext(replyBuilder.setSubmitMeter(MeterProtoTranslator.translate(meter)).build());
78 responseObserver.onCompleted();
zhiyong ke0c26c282017-07-07 08:58:19 +080079 }
Tian Jian5e4be912017-09-19 12:47:55 +080080
81 @Override
82 public void withdraw(withdrawRequest request,
83 StreamObserver<withdrawReply> responseObserver) {
84 withdrawReply.Builder replyBuilder = withdrawReply.newBuilder();
85 meterService.withdraw(MeterProtoTranslator.translate(request.getMeter()),
86 MeterId.meterId(request.getMeterId()));
87 responseObserver.onNext(replyBuilder.build());
88 responseObserver.onCompleted();
89 }
90
91 @Override
92 public void getMeter(getMeterRequest request,
93 StreamObserver<getMeterReply> responseObserver) {
94 getMeterReply.Builder replyBuilder = getMeterReply.newBuilder();
95 Meter meter = meterService.getMeter(DeviceId.deviceId(request.getDeviceId()),
96 MeterId.meterId(request.getMeterId()));
97 responseObserver.onNext(replyBuilder.setMeter(MeterProtoTranslator.translate(meter)).build());
98 responseObserver.onCompleted();
99 }
100
101 @Override
102 public void getAllMeters(getAllMetersRequest request,
103 StreamObserver<getAllMetersReply> responseObserver) {
104 getAllMetersReply.Builder replyBuilder = getAllMetersReply.newBuilder();
105 meterService.getAllMeters().forEach(d -> {
106 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
107 });
108 responseObserver.onNext(replyBuilder.build());
109 responseObserver.onCompleted();
110 }
111
112 @Override
113 public void getMeters(getMetersRequest request,
114 StreamObserver<getMetersReply> responseObserver) {
115 getMetersReply.Builder replyBuilder = getMetersReply.newBuilder();
116 meterService.getMeters(DeviceId.deviceId(request.getDeviceId())).forEach(d -> {
117 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
118 });
119 responseObserver.onNext(replyBuilder.build());
120 responseObserver.onCompleted();
121 }
122
zhiyong ke0c26c282017-07-07 08:58:19 +0800123}
124