blob: 6aed88f5c1c9c7816d145ea79d7af7713819f6df [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.incubator.protobuf.services.nb;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
import org.onosproject.incubator.protobuf.models.net.meter.MeterRequestProtoTranslator;
import org.onosproject.net.meter.MeterService;
import org.onosproject.incubator.protobuf.models.net.meter.MeterProtoTranslator;
import org.onosproject.grpc.nb.net.meter.MeterServiceGrpc.MeterServiceImplBase;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitRequest;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.submitReply;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawRequest;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.withdrawReply;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterRequest;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMeterReply;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersRequest;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getAllMetersReply;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersRequest;
import org.onosproject.grpc.nb.net.meter.MeterServiceNbProto.getMetersReply;
import io.grpc.stub.StreamObserver;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Deactivate;
import com.google.common.annotations.Beta;
import org.osgi.service.component.annotations.Component;
import org.onosproject.net.meter.Meter;
import org.onosproject.net.meter.MeterId;
import org.onosproject.net.DeviceId;
import org.onosproject.protobuf.api.GrpcServiceRegistry;
/**
* A server that provides access to the methods exposed by {@link MeterService}.
* TODO this requires major refactoring, translation should be delegated to calls to
* TODO{@link MeterProtoTranslator}.
*/
@Beta
@Component(immediate = true)
public class GrpcNbMeterService extends MeterServiceImplBase {
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected MeterService meterService;
@Reference(cardinality = ReferenceCardinality.MANDATORY)
protected GrpcServiceRegistry grpcServiceRegistry;
@Activate
public void activate() {
grpcServiceRegistry.register(this);
}
@Deactivate
public void deactivate() {
grpcServiceRegistry.unregister(this);
}
@Override
public void submit(submitRequest request,
StreamObserver<submitReply> responseObserver) {
submitReply.Builder replyBuilder = submitReply.newBuilder();
Meter meter = meterService.submit(MeterRequestProtoTranslator.translate(request.getMeter()));
responseObserver.onNext(replyBuilder.setSubmitMeter(MeterProtoTranslator.translate(meter)).build());
responseObserver.onCompleted();
}
@Override
public void withdraw(withdrawRequest request,
StreamObserver<withdrawReply> responseObserver) {
withdrawReply.Builder replyBuilder = withdrawReply.newBuilder();
meterService.withdraw(MeterRequestProtoTranslator.translate(request.getMeter()),
MeterId.meterId(request.getMeterId()));
responseObserver.onNext(replyBuilder.build());
responseObserver.onCompleted();
}
@Override
public void getMeter(getMeterRequest request,
StreamObserver<getMeterReply> responseObserver) {
getMeterReply.Builder replyBuilder = getMeterReply.newBuilder();
Meter meter = meterService.getMeter(DeviceId.deviceId(request.getDeviceId()),
MeterId.meterId(request.getMeterId()));
responseObserver.onNext(replyBuilder.setMeter(MeterProtoTranslator.translate(meter)).build());
responseObserver.onCompleted();
}
@Override
public void getAllMeters(getAllMetersRequest request,
StreamObserver<getAllMetersReply> responseObserver) {
getAllMetersReply.Builder replyBuilder = getAllMetersReply.newBuilder();
meterService.getAllMeters().forEach(d -> {
replyBuilder.addMeters(MeterProtoTranslator.translate(d));
});
responseObserver.onNext(replyBuilder.build());
responseObserver.onCompleted();
}
@Override
public void getMeters(getMetersRequest request,
StreamObserver<getMetersReply> responseObserver) {
getMetersReply.Builder replyBuilder = getMetersReply.newBuilder();
meterService.getMeters(DeviceId.deviceId(request.getDeviceId())).forEach(d -> {
replyBuilder.addMeters(MeterProtoTranslator.translate(d));
});
responseObserver.onNext(replyBuilder.build());
responseObserver.onCompleted();
}
}