blob: d9cad10c273324516f386e529d4ef84151c17d81 [file] [log] [blame]
Frank Wangcaef3142017-08-09 15:24:45 +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
17package org.onosproject.incubator.protobuf.services.nb;
18
19import com.google.common.annotations.Beta;
20import io.grpc.BindableService;
21import 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;
Frank Wangcaef3142017-08-09 15:24:45 +080027import org.onosproject.cfg.ComponentConfigService;
28import org.onosproject.incubator.protobuf.models.cfg.ConfigPropertyProtoTranslator;
29import org.onosproject.protobuf.api.GrpcServiceRegistry;
30import org.slf4j.Logger;
31
32import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceGrpc.ComponentConfigServiceImplBase;
33import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.getComponentNamesRequest;
34import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.getComponentNamesReply;
35import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.registerPropertiesRequest;
36import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.registerPropertiesReply;
37import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.unregisterPropertiesRequest;
38import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.unregisterPropertiesReply;
39import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.getPropertiesRequest;
40import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.getPropertiesReply;
41import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.setPropertyRequest;
42import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.setPropertyReply;
43import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.preSetPropertyRequest;
44import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.preSetPropertyReply;
45import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.unsetPropertyRequest;
46import static org.onosproject.grpc.nb.cfg.ComponentConfigServiceNb.unsetPropertyReply;
47import static org.slf4j.LoggerFactory.getLogger;
48
49
50/**
51 * A server that provides access to the methods exposed by {@link ComponentConfigService}.
52 */
53@Beta
54@Component(immediate = true)
55public class GrpcNbComponentConfigService {
56
57 private final Logger log = getLogger(getClass());
58
Ray Milkeyd84f89b2018-08-17 14:54:17 -070059 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Frank Wangcaef3142017-08-09 15:24:45 +080060 protected GrpcServiceRegistry registry;
61
Ray Milkeyd84f89b2018-08-17 14:54:17 -070062 @Reference(cardinality = ReferenceCardinality.MANDATORY)
Frank Wangcaef3142017-08-09 15:24:45 +080063 protected ComponentConfigService componentConfigService;
64
Ray Milkey06297ed2018-01-22 17:13:41 -080065 private ComponentConfigServiceNbServerInternal instance = null;
Frank Wangcaef3142017-08-09 15:24:45 +080066
67 @Activate
68 public void activate() {
69
70 registry.register(getInnerInstance());
71 log.info("Started.");
72 }
73
74 @Deactivate
75 public void deactivate() {
76
77 registry.unregister(getInnerInstance());
78 log.info("Stopped");
79 }
80
81 /**
82 * Register ComponentConfig Service, Used for unit testing purposes.
83 *
84 * @return An instance of binding ComponentConfig service
85 */
86 public InProcessServer<BindableService> registerInProcessServer() {
87 InProcessServer<BindableService> inprocessServer =
88 new InProcessServer(ComponentConfigServiceNbServerInternal.class);
89 inprocessServer.addServiceToBind(getInnerInstance());
90
91 return inprocessServer;
92 }
93
94 private final class ComponentConfigServiceNbServerInternal extends ComponentConfigServiceImplBase {
95
96 private ComponentConfigServiceNbServerInternal() {
97 super();
98 }
99
100 @Override
101 public void getComponentNames(getComponentNamesRequest request,
102 StreamObserver<getComponentNamesReply> responseObserver) {
103
104 getComponentNamesReply.Builder replyBuilder = getComponentNamesReply.newBuilder();
105
106 componentConfigService.getComponentNames().forEach(n -> replyBuilder.addNames(n));
107 responseObserver.onNext(replyBuilder.build());
108 responseObserver.onCompleted();
109 }
110
111 @Override
112 public void registerProperties(registerPropertiesRequest request,
113 StreamObserver<registerPropertiesReply> responseObserver) {
114
115 try {
116 componentConfigService.registerProperties(Class.forName(request.getComponentClass()));
117 responseObserver.onNext(registerPropertiesReply.getDefaultInstance());
118 responseObserver.onCompleted();
119 } catch (ClassNotFoundException e) {
120 responseObserver.onError(e);
121 }
122 }
123
124 @Override
125 public void unregisterProperties(unregisterPropertiesRequest request,
126 StreamObserver<unregisterPropertiesReply> responseObserver) {
127
128 try {
129 componentConfigService.unregisterProperties(Class.forName(request.getComponentClass()),
130 request.getClear());
131 responseObserver.onNext(unregisterPropertiesReply.getDefaultInstance());
132 responseObserver.onCompleted();
133 } catch (ClassNotFoundException e) {
134 responseObserver.onError(e);
135 }
136 }
137
138 @Override
139 public void getProperties(getPropertiesRequest request, StreamObserver<getPropertiesReply> responseObserver) {
140
141 getPropertiesReply.Builder replyBuilder = getPropertiesReply.newBuilder();
142
143 componentConfigService.getProperties(request.getComponentName())
144 .forEach(n -> replyBuilder.addConfigProperties(ConfigPropertyProtoTranslator.translate(n)));
145 responseObserver.onNext(replyBuilder.build());
146 responseObserver.onCompleted();
147 }
148
149 @Override
150 public void setProperty(setPropertyRequest request, StreamObserver<setPropertyReply> responseObserver) {
151
152 componentConfigService.setProperty(request.getComponentName(), request.getName(), request.getValue());
153 responseObserver.onNext(setPropertyReply.getDefaultInstance());
154 responseObserver.onCompleted();
155 }
156
157 @Override
158 public void preSetProperty(preSetPropertyRequest request,
159 StreamObserver<preSetPropertyReply> responseObserver) {
160
161 componentConfigService.preSetProperty(request.getComponentName(), request.getName(), request.getValue());
162 responseObserver.onNext(preSetPropertyReply.getDefaultInstance());
163 responseObserver.onCompleted();
164 }
165
166 @Override
167 public void unsetProperty(unsetPropertyRequest request, StreamObserver<unsetPropertyReply> responseObserver) {
168
169 componentConfigService.unsetProperty(request.getComponentName(), request.getName());
170 responseObserver.onNext(unsetPropertyReply.getDefaultInstance());
171 responseObserver.onCompleted();
172 }
173 }
174
175 private ComponentConfigServiceNbServerInternal getInnerInstance() {
176 if (instance == null) {
177 instance = new ComponentConfigServiceNbServerInternal();
178 }
179 return instance;
180 }
181}