blob: f98d880bd516358ceced47edfde90f46d2584d2e [file] [log] [blame]
shivani vaidya530917c2017-07-11 11:27:48 -07001/*
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
17package org.onosproject.incubator.protobuf.services.nb;
shivani vaidya530917c2017-07-11 11:27:48 -070018
19import com.google.common.annotations.Beta;
Jian Lic20272e2017-10-20 17:50:01 +090020import io.grpc.BindableService;
shivani vaidya530917c2017-07-11 11:27:48 -070021import io.grpc.stub.StreamObserver;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070022import org.osgi.service.component.annotations.Activate;
23import org.osgi.service.component.annotations.Component;
24import org.osgi.service.component.annotations.Deactivate;
25import org.osgi.service.component.annotations.Reference;
26import org.osgi.service.component.annotations.ReferenceCardinality;
shivani vaidya530917c2017-07-11 11:27:48 -070027import org.onosproject.grpc.nb.net.region.RegionServiceGrpc.RegionServiceImplBase;
shivani vaidya530917c2017-07-11 11:27:48 -070028import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionDevicesReply;
Jian Lic20272e2017-10-20 17:50:01 +090029import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionDevicesRequest;
30import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceReply;
31import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionForDeviceRequest;
shivani vaidya530917c2017-07-11 11:27:48 -070032import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionHostsReply;
Jian Lic20272e2017-10-20 17:50:01 +090033import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionHostsRequest;
34import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionReply;
35import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionRequest;
36import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsReply;
37import org.onosproject.grpc.nb.net.region.RegionServiceNb.getRegionsRequest;
38import org.onosproject.incubator.protobuf.models.net.RegionProtoTranslator;
39import org.onosproject.net.DeviceId;
40import org.onosproject.net.region.Region;
41import org.onosproject.net.region.RegionId;
42import org.onosproject.net.region.RegionService;
43import org.onosproject.protobuf.api.GrpcServiceRegistry;
shivani vaidya530917c2017-07-11 11:27:48 -070044import org.slf4j.Logger;
45
46import static org.slf4j.LoggerFactory.getLogger;
47
48/**
49 * A server that provides access to the methods exposed by {@link RegionService}.
50 */
51@Beta
52@Component(immediate = true)
53public class GrpcNbRegionService {
54
shivani vaidya530917c2017-07-11 11:27:48 -070055 private final Logger log = getLogger(getClass());
Jian Lic20272e2017-10-20 17:50:01 +090056
Ray Milkeyd84f89b2018-08-17 14:54:17 -070057 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Jian Lic20272e2017-10-20 17:50:01 +090058 protected GrpcServiceRegistry registry;
shivani vaidya530917c2017-07-11 11:27:48 -070059
Ray Milkeyd84f89b2018-08-17 14:54:17 -070060 @Reference(cardinality = ReferenceCardinality.MANDATORY)
shivani vaidya530917c2017-07-11 11:27:48 -070061 protected RegionService regionService;
62
Jian Lic20272e2017-10-20 17:50:01 +090063 private RegionServiceNbServerInternal innerClassInstance = null;
64
shivani vaidya530917c2017-07-11 11:27:48 -070065 @Activate
66 public void activate() {
Jian Lic20272e2017-10-20 17:50:01 +090067
68 registry.register(getInnerClassInstance());
69 log.info("Started.");
shivani vaidya530917c2017-07-11 11:27:48 -070070 }
71
72 @Deactivate
73 public void deactivate() {
Jian Lic20272e2017-10-20 17:50:01 +090074
75 registry.unregister(getInnerClassInstance());
76 log.info("Stopped.");
shivani vaidya530917c2017-07-11 11:27:48 -070077 }
78
Jian Lic20272e2017-10-20 17:50:01 +090079 /**
80 * Register Region Service, used for unit testing purposes.
81 *
82 * @return An instance of binding Region service
83 */
84 public InProcessServer<BindableService> registerInProcessServer() {
85 InProcessServer<BindableService> inprocessServer =
86 new InProcessServer(GrpcNbRegionService.RegionServiceNbServerInternal.class);
87 inprocessServer.addServiceToBind(getInnerClassInstance());
88
89 return inprocessServer;
90 }
91
92 private final class RegionServiceNbServerInternal extends RegionServiceImplBase {
shivani vaidya530917c2017-07-11 11:27:48 -070093 /**
94 * Service for interacting with inventory of network control regions.
95 */
96 @Override
97 public void getRegions(getRegionsRequest request,
98 StreamObserver<getRegionsReply> responseObserver) {
99 getRegionsReply.Builder builder = getRegionsReply.newBuilder();
100 regionService.getRegions().forEach(r -> {
101 builder.addRegion(RegionProtoTranslator.translate(r));
102 });
103 responseObserver.onNext(builder.build());
104 responseObserver.onCompleted();
105 }
106
107 @Override
108 public void getRegion(getRegionRequest request,
109 StreamObserver<getRegionReply> responseObserver) {
110 RegionId regionId = RegionId.regionId(request.getRegionId());
111 Region region = regionService.getRegion(regionId);
112
113 getRegionReply reply = getRegionReply.newBuilder()
114 .setRegion(RegionProtoTranslator.translate(region)).build();
115
116 responseObserver.onNext(reply);
117 responseObserver.onCompleted();
118 }
119
120 @Override
121 public void getRegionForDevice(getRegionForDeviceRequest request,
122 StreamObserver<getRegionForDeviceReply> responseObserver) {
123 DeviceId deviceId = DeviceId.deviceId(request.getDeviceId());
124 Region region = regionService.getRegionForDevice(deviceId);
125
126 getRegionForDeviceReply reply = getRegionForDeviceReply.newBuilder()
127 .setRegion(RegionProtoTranslator.translate(region)).build();
128
129 responseObserver.onNext(reply);
130 responseObserver.onCompleted();
131 }
132
133 @Override
134 public void getRegionDevices(getRegionDevicesRequest request,
135 StreamObserver<getRegionDevicesReply> responseObserver) {
136 RegionId regionId = RegionId.regionId(request.getRegionId());
137 getRegionDevicesReply.Builder builder = getRegionDevicesReply.newBuilder();
138
139 regionService.getRegionDevices(regionId).forEach(d -> {
140 builder.addDeviceId(d.toString());
141 });
142
143 responseObserver.onNext(builder.build());
144 responseObserver.onCompleted();
145 }
146
147 @Override
148 public void getRegionHosts(getRegionHostsRequest request,
149 StreamObserver<getRegionHostsReply> responseObserver) {
150 RegionId regionId = RegionId.regionId(request.getRegionId());
151 getRegionHostsReply.Builder builder = getRegionHostsReply.newBuilder();
152
153 regionService.getRegionHosts(regionId).forEach(h -> {
154 builder.addHostId(h.toString());
155 });
156
157 responseObserver.onNext(builder.build());
158 responseObserver.onCompleted();
159 }
160 }
161
Jian Lic20272e2017-10-20 17:50:01 +0900162 private RegionServiceNbServerInternal getInnerClassInstance() {
shivani vaidya530917c2017-07-11 11:27:48 -0700163 if (innerClassInstance == null) {
Jian Lic20272e2017-10-20 17:50:01 +0900164 innerClassInstance = new RegionServiceNbServerInternal();
shivani vaidya530917c2017-07-11 11:27:48 -0700165 }
166 return innerClassInstance;
167 }
168}
169
170
171
172
173
174
175