blob: f60a36efe37f52dc6e2b1b93c65737a7e89f4c4c [file] [log] [blame]
Jian Li8780edc2017-08-26 02:44:29 +09001/*
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 */
Jian Li4c703b92017-10-17 00:35:53 +090016package org.onosproject.incubator.protobuf.services.nb;
Jian Li8780edc2017-08-26 02:44:29 +090017
18import com.google.common.annotations.Beta;
Jian Lifc889782017-10-17 00:47:53 +090019import io.grpc.BindableService;
Jian Li8780edc2017-08-26 02:44:29 +090020import io.grpc.stub.StreamObserver;
Ray Milkeyd84f89b2018-08-17 14:54:17 -070021import org.osgi.service.component.annotations.Activate;
22import org.osgi.service.component.annotations.Component;
23import org.osgi.service.component.annotations.Deactivate;
24import org.osgi.service.component.annotations.Reference;
25import org.osgi.service.component.annotations.ReferenceCardinality;
Jian Li8780edc2017-08-26 02:44:29 +090026import org.onosproject.app.ApplicationService;
27import org.onosproject.app.ApplicationState;
28import org.onosproject.core.Application;
29import org.onosproject.core.ApplicationId;
30import org.onosproject.grpc.nb.app.ApplicationServiceGrpc.ApplicationServiceImplBase;
Jian Li4c703b92017-10-17 00:35:53 +090031import org.onosproject.grpc.nb.app.ApplicationServiceNb;
Jian Li8780edc2017-08-26 02:44:29 +090032import org.onosproject.grpc.nb.app.ApplicationServiceNb.getApplicationReply;
33import org.onosproject.grpc.nb.app.ApplicationServiceNb.getApplicationsReply;
34import org.onosproject.grpc.nb.app.ApplicationServiceNb.getIdReply;
35import org.onosproject.grpc.nb.app.ApplicationServiceNb.getPermissionsReply;
36import org.onosproject.grpc.nb.app.ApplicationServiceNb.getStateReply;
37import org.onosproject.incubator.protobuf.models.core.ApplicationEnumsProtoTranslator;
38import org.onosproject.incubator.protobuf.models.core.ApplicationIdProtoTranslator;
39import org.onosproject.incubator.protobuf.models.core.ApplicationProtoTranslator;
40import org.onosproject.incubator.protobuf.models.security.PermissionProtoTranslator;
Jian Lifc889782017-10-17 00:47:53 +090041import org.onosproject.protobuf.api.GrpcServiceRegistry;
42import org.slf4j.Logger;
43
44import static org.slf4j.LoggerFactory.getLogger;
Jian Li8780edc2017-08-26 02:44:29 +090045
46/**
47 * A server that provides access to the methods exposed by {@link ApplicationService}.
48 */
49
50@Beta
51@Component(immediate = true)
52public class GrpcNbApplicationService {
53
Jian Lifc889782017-10-17 00:47:53 +090054 private final Logger log = getLogger(getClass());
55
Ray Milkeyd84f89b2018-08-17 14:54:17 -070056 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Jian Lifc889782017-10-17 00:47:53 +090057 protected GrpcServiceRegistry registry;
58
Ray Milkeyd84f89b2018-08-17 14:54:17 -070059 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Jian Li8780edc2017-08-26 02:44:29 +090060 protected ApplicationService applicationService;
61
Ray Milkey06297ed2018-01-22 17:13:41 -080062 private ApplicationServiceNbServerInternal instance = null;
Jian Lifc889782017-10-17 00:47:53 +090063
64
Jian Li8780edc2017-08-26 02:44:29 +090065 @Activate
66 public void activate() {
Jian Lifc889782017-10-17 00:47:53 +090067 registry.register(getInnerInstance());
68 log.info("Started.");
Jian Li8780edc2017-08-26 02:44:29 +090069 }
70
71 @Deactivate
72 public void deactivate() {
Jian Lifc889782017-10-17 00:47:53 +090073 registry.unregister(getInnerInstance());
74 log.info("Stopped");
75 }
76
77 /**
78 * Register Application Service, Used for unit testing purposes.
79 *
80 * @return An instance of binding Application service
81 */
82 public InProcessServer<BindableService> registerInProcessServer() {
83 InProcessServer<BindableService> inprocessServer =
84 new InProcessServer(GrpcNbApplicationService.ApplicationServiceNbServerInternal.class);
85 inprocessServer.addServiceToBind(getInnerInstance());
86
87 return inprocessServer;
Jian Li8780edc2017-08-26 02:44:29 +090088 }
89
90 private class ApplicationServiceNbServerInternal extends ApplicationServiceImplBase {
91
92 public ApplicationServiceNbServerInternal() {
93 super();
94 }
95
96 @Override
97 public void getApplications(ApplicationServiceNb.getApplicationsRequest request,
98 StreamObserver<getApplicationsReply> responseObserver) {
99 getApplicationsReply.Builder replyBuilder = getApplicationsReply.newBuilder();
100
101 applicationService.getApplications().forEach(a ->
102 replyBuilder.addApplication(ApplicationProtoTranslator.translate(a)));
103 responseObserver.onNext(replyBuilder.build());
104 responseObserver.onCompleted();
105 }
106
107 @Override
108 public void getId(ApplicationServiceNb.getIdRequest request,
109 StreamObserver<getIdReply> responseObserver) {
110 ApplicationId appId = applicationService.getId(request.getName());
111
112 responseObserver.onNext(getIdReply.newBuilder()
113 .setApplicationId(ApplicationIdProtoTranslator.translate(appId)).build());
114 responseObserver.onCompleted();
115 }
116
117 @Override
118 public void getApplication(ApplicationServiceNb.getApplicationRequest request,
119 StreamObserver<getApplicationReply> responseObserver) {
120
121 Application application = applicationService.getApplication(
122 ApplicationIdProtoTranslator.translate(request.getApplicationId()));
123
124 responseObserver.onNext(getApplicationReply.newBuilder()
125 .setApplication(ApplicationProtoTranslator
126 .translate(application)).build());
127 responseObserver.onCompleted();
128 }
129
130 @Override
131 public void getState(ApplicationServiceNb.getStateRequest request,
132 StreamObserver<getStateReply> responseObserver) {
133 ApplicationState state = applicationService.getState(
134 ApplicationIdProtoTranslator.translate(request.getApplicationId()));
135
136 responseObserver.onNext(getStateReply
137 .newBuilder().setState(ApplicationEnumsProtoTranslator
138 .translate(state)).build());
139 responseObserver.onCompleted();
140 }
141
142 @Override
143 public void getPermissions(ApplicationServiceNb.getPermissionsRequest request,
144 StreamObserver<getPermissionsReply> responseObserver) {
145 getPermissionsReply.Builder replyBuilder = getPermissionsReply.newBuilder();
146
147 applicationService.getPermissions(ApplicationIdProtoTranslator
148 .translate(request.getApplicationId()))
149 .forEach(p -> replyBuilder.addPermission(
150 PermissionProtoTranslator.translate(p)));
151 responseObserver.onNext(replyBuilder.build());
152 responseObserver.onCompleted();
153 }
154 }
Jian Lifc889782017-10-17 00:47:53 +0900155
156 private ApplicationServiceNbServerInternal getInnerInstance() {
157 if (instance == null) {
158 instance = new ApplicationServiceNbServerInternal();
159 }
160 return instance;
161 }
Jian Li8780edc2017-08-26 02:44:29 +0900162}