blob: c30accd63ac7f28074c6441deb6113fcc36e281f [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;
45
46/**
47 * A server that provides access to the methods exposed by {@link MeterService}.
48 * TODO this requires major refactoring, translation should be delegated to calls to
Jian Li4c703b92017-10-17 00:35:53 +090049 * TODO{@link MeterProtoTranslator}.
zhiyong ke0c26c282017-07-07 08:58:19 +080050 */
51@Beta
52@Component(immediate = true)
53public class GrpcNbMeterService {
54
55 @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
56 protected MeterService meterService;
57
58 @Activate
59 public void activate() {
60 //TODO this should contact the registry service and register an instance
61 // of this service.
62 }
63
64 @Deactivate
65 public void deactivate() {
66 }
67
68 private class MeterServiceNbServerInternal extends MeterServiceImplBase {
69
70 public MeterServiceNbServerInternal() {
71 super();
72 }
73
74 @Override
75 public void submit(submitRequest request,
76 StreamObserver<submitReply> responseObserver) {
77 submitReply.Builder replyBuilder = submitReply.newBuilder();
Jian Li4c703b92017-10-17 00:35:53 +090078 Meter meter = meterService.submit(MeterProtoTranslator.translate(request.getMeter()));
79 responseObserver.onNext(replyBuilder.setSubmitMeter(MeterProtoTranslator.translate(meter)).build());
zhiyong ke0c26c282017-07-07 08:58:19 +080080 responseObserver.onCompleted();
81 }
82
83 @Override
84 public void withdraw(withdrawRequest request,
85 StreamObserver<withdrawReply> responseObserver) {
86 withdrawReply.Builder replyBuilder = withdrawReply.newBuilder();
Jian Li4c703b92017-10-17 00:35:53 +090087 meterService.withdraw(MeterProtoTranslator.translate(request.getMeter()),
zhiyong ke0c26c282017-07-07 08:58:19 +080088 MeterId.meterId(request.getMeterId()));
89 responseObserver.onNext(replyBuilder.build());
90 responseObserver.onCompleted();
91 }
92
93 @Override
94 public void getMeter(getMeterRequest request,
95 StreamObserver<getMeterReply> responseObserver) {
96 getMeterReply.Builder replyBuilder = getMeterReply.newBuilder();
97 Meter meter = meterService.getMeter(DeviceId.deviceId(request.getDeviceId()),
98 MeterId.meterId(request.getMeterId()));
Jian Li4c703b92017-10-17 00:35:53 +090099 responseObserver.onNext(replyBuilder.setMeter(MeterProtoTranslator.translate(meter)).build());
zhiyong ke0c26c282017-07-07 08:58:19 +0800100 responseObserver.onCompleted();
101 }
102
103 @Override
104 public void getAllMeters(getAllMetersRequest request,
105 StreamObserver<getAllMetersReply> responseObserver) {
106 getAllMetersReply.Builder replyBuilder = getAllMetersReply.newBuilder();
107 meterService.getAllMeters().forEach(d -> {
Jian Li4c703b92017-10-17 00:35:53 +0900108 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
zhiyong ke0c26c282017-07-07 08:58:19 +0800109 });
110 responseObserver.onNext(replyBuilder.build());
111 responseObserver.onCompleted();
112 }
113
114 @Override
115 public void getMeters(getMetersRequest request,
116 StreamObserver<getMetersReply> responseObserver) {
117 getMetersReply.Builder replyBuilder = getMetersReply.newBuilder();
118 meterService.getMeters(DeviceId.deviceId(request.getDeviceId())).forEach(d -> {
Jian Li4c703b92017-10-17 00:35:53 +0900119 replyBuilder.addMeters(MeterProtoTranslator.translate(d));
zhiyong ke0c26c282017-07-07 08:58:19 +0800120 });
121 responseObserver.onNext(replyBuilder.build());
122 responseObserver.onCompleted();
123 }
124 }
125}
126