blob: 6aed88f5c1c9c7816d145ea79d7af7713819f6df [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
Ray Milkeyd84f89b2018-08-17 14:54:17 -070019import org.osgi.service.component.annotations.Reference;
20import org.osgi.service.component.annotations.ReferenceCardinality;
Jian Li40f4d6c2017-12-14 00:07:21 +090021import org.onosproject.incubator.protobuf.models.net.meter.MeterRequestProtoTranslator;
zhiyong ke0c26c282017-07-07 08:58:19 +080022import org.onosproject.net.meter.MeterService;
Jian Li4c703b92017-10-17 00:35:53 +090023import org.onosproject.incubator.protobuf.models.net.meter.MeterProtoTranslator;
zhiyong ke0c26c282017-07-07 08:58:19 +080024
25import org.onosproject.grpc.nb.net.meter.MeterServiceGrpc.MeterServiceImplBase;
26import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitRequest;
27import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitReply;
28import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawRequest;
29import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawReply;
30import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterRequest;
31import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterReply;
32import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersRequest;
33import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersReply;
34import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersRequest;
35import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersReply;
36
37import io.grpc.stub.StreamObserver;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070038import org.osgi.service.component.annotations.Activate;
39import org.osgi.service.component.annotations.Deactivate;
zhiyong ke0c26c282017-07-07 08:58:19 +080040import com.google.common.annotations.Beta;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070041import org.osgi.service.component.annotations.Component;
zhiyong ke0c26c282017-07-07 08:58:19 +080042
43import org.onosproject.net.meter.Meter;
44import org.onosproject.net.meter.MeterId;
45import org.onosproject.net.DeviceId;
Tian Jian5e4be912017-09-19 12:47:55 +080046import org.onosproject.protobuf.api.GrpcServiceRegistry;
zhiyong ke0c26c282017-07-07 08:58:19 +080047
48/**
49 * A server that provides access to the methods exposed by {@link MeterService}.
50 * TODO this requires major refactoring, translation should be delegated to calls to
Jian Li4c703b92017-10-17 00:35:53 +090051 * TODO{@link MeterProtoTranslator}.
zhiyong ke0c26c282017-07-07 08:58:19 +080052 */
53@Beta
54@Component(immediate = true)
Tian Jian5e4be912017-09-19 12:47:55 +080055public class GrpcNbMeterService extends MeterServiceImplBase {
zhiyong ke0c26c282017-07-07 08:58:19 +080056
Ray Milkeyd84f89b2018-08-17 14:54:17 -070057 @Reference(cardinality = ReferenceCardinality.MANDATORY)
zhiyong ke0c26c282017-07-07 08:58:19 +080058 protected MeterService meterService;
59
Ray Milkeyd84f89b2018-08-17 14:54:17 -070060 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Tian Jian5e4be912017-09-19 12:47:55 +080061 protected GrpcServiceRegistry grpcServiceRegistry;
62
zhiyong ke0c26c282017-07-07 08:58:19 +080063 @Activate
64 public void activate() {
Tian Jian5e4be912017-09-19 12:47:55 +080065 grpcServiceRegistry.register(this);
zhiyong ke0c26c282017-07-07 08:58:19 +080066 }
67
68 @Deactivate
69 public void deactivate() {
Tian Jian5e4be912017-09-19 12:47:55 +080070 grpcServiceRegistry.unregister(this);
zhiyong ke0c26c282017-07-07 08:58:19 +080071 }
72
Tian Jian5e4be912017-09-19 12:47:55 +080073 @Override
74 public void submit(submitRequest request,
75 StreamObserver<submitReply> responseObserver) {
76 submitReply.Builder replyBuilder = submitReply.newBuilder();
Jian Li40f4d6c2017-12-14 00:07:21 +090077 Meter meter = meterService.submit(MeterRequestProtoTranslator.translate(request.getMeter()));
Tian Jian5e4be912017-09-19 12:47:55 +080078 responseObserver.onNext(replyBuilder.setSubmitMeter(MeterProtoTranslator.translate(meter)).build());
79 responseObserver.onCompleted();
zhiyong ke0c26c282017-07-07 08:58:19 +080080 }
Tian Jian5e4be912017-09-19 12:47:55 +080081
82 @Override
83 public void withdraw(withdrawRequest request,
84 StreamObserver<withdrawReply> responseObserver) {
85 withdrawReply.Builder replyBuilder = withdrawReply.newBuilder();
Jian Li40f4d6c2017-12-14 00:07:21 +090086 meterService.withdraw(MeterRequestProtoTranslator.translate(request.getMeter()),
Tian Jian5e4be912017-09-19 12:47:55 +080087 MeterId.meterId(request.getMeterId()));
88 responseObserver.onNext(replyBuilder.build());
89 responseObserver.onCompleted();
90 }
91
92 @Override
93 public void getMeter(getMeterRequest request,
94 StreamObserver<getMeterReply> responseObserver) {
95 getMeterReply.Builder replyBuilder = getMeterReply.newBuilder();
96 Meter meter = meterService.getMeter(DeviceId.deviceId(request.getDeviceId()),
97 MeterId.meterId(request.getMeterId()));
98 responseObserver.onNext(replyBuilder.setMeter(MeterProtoTranslator.translate(meter)).build());
99 responseObserver.onCompleted();
100 }
101
102 @Override
103 public void getAllMeters(getAllMetersRequest request,
104 StreamObserver<getAllMetersReply> responseObserver) {
105 getAllMetersReply.Builder replyBuilder = getAllMetersReply.newBuilder();
106 meterService.getAllMeters().forEach(d -> {
107 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
108 });
109 responseObserver.onNext(replyBuilder.build());
110 responseObserver.onCompleted();
111 }
112
113 @Override
114 public void getMeters(getMetersRequest request,
115 StreamObserver<getMetersReply> responseObserver) {
116 getMetersReply.Builder replyBuilder = getMetersReply.newBuilder();
117 meterService.getMeters(DeviceId.deviceId(request.getDeviceId())).forEach(d -> {
118 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
119 });
120 responseObserver.onNext(replyBuilder.build());
121 responseObserver.onCompleted();
122 }
123
zhiyong ke0c26c282017-07-07 08:58:19 +0800124}
125