1 /*******************************************************************************
2 * Copyright (c) 2017 Politecnico di Torino and others.
4 * All rights reserved. This program and the accompanying materials
5 * are made available under the terms of the Apache License, Version 2.0
6 * which accompanies this distribution, and is available at
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *******************************************************************************/
9 package it.polito.verigraph.grpc.server;
11 import java.io.IOException;
12 import java.util.HashMap;
14 import java.util.logging.FileHandler;
15 import java.util.logging.Level;
16 import java.util.logging.Logger;
17 import java.util.logging.SimpleFormatter;
19 import io.grpc.Server;
20 import io.grpc.ServerBuilder;
21 import io.grpc.stub.StreamObserver;
22 import it.polito.verigraph.exception.BadRequestException;
23 import it.polito.verigraph.exception.DataNotFoundException;
24 import it.polito.verigraph.exception.ForbiddenException;
25 import it.polito.verigraph.grpc.ConfigurationGrpc;
26 import it.polito.verigraph.grpc.GetRequest;
27 import it.polito.verigraph.grpc.GraphGrpc;
28 import it.polito.verigraph.grpc.NeighbourGrpc;
29 import it.polito.verigraph.grpc.NewGraph;
30 import it.polito.verigraph.grpc.NewNeighbour;
31 import it.polito.verigraph.grpc.NewNode;
32 import it.polito.verigraph.grpc.NewTopologyTemplate;
33 import it.polito.verigraph.grpc.NodeGrpc;
34 import it.polito.verigraph.grpc.Policy;
35 import it.polito.verigraph.grpc.RequestID;
36 import it.polito.verigraph.grpc.Status;
37 import it.polito.verigraph.grpc.TopologyTemplateGrpc;
38 import it.polito.verigraph.grpc.ToscaPolicy;
39 import it.polito.verigraph.grpc.ToscaRequestID;
40 import it.polito.verigraph.grpc.ToscaVerificationGrpc;
41 import it.polito.verigraph.grpc.VerificationGrpc;
42 import it.polito.verigraph.grpc.VerigraphGrpc;
43 import it.polito.verigraph.model.Configuration;
44 import it.polito.verigraph.model.Graph;
45 import it.polito.verigraph.model.Neighbour;
46 import it.polito.verigraph.model.Node;
47 import it.polito.verigraph.model.Verification;
48 import it.polito.verigraph.resources.beans.VerificationBean;
49 import it.polito.verigraph.service.GraphService;
50 import it.polito.verigraph.service.NeighbourService;
51 import it.polito.verigraph.service.NodeService;
52 import it.polito.verigraph.service.VerificationService;
53 import it.polito.verigraph.tosca.converter.grpc.GraphToGrpc;
54 import it.polito.verigraph.tosca.converter.grpc.GrpcToGraph;
56 public class Service {
57 /** Port on which the server should run. */
58 private static final Logger logger = Logger.getLogger(Service.class.getName());
59 private static final int port = 50051;
60 private static final String internalError = "Internal Server Error";
61 private Server server;
62 private GraphService graphService= new GraphService();
63 private VerificationService verificationService = new VerificationService();
64 private NodeService nodeService = new NodeService();
65 private NeighbourService neighboursService = new NeighbourService();
67 public Service(int port) {
68 this(ServerBuilder.forPort(port), port);
71 /** Create a RouteGuide server using serverBuilder as a base and features as data. */
72 public Service(ServerBuilder<?> serverBuilder, int port) {
73 server = serverBuilder.addService(new VerigraphImpl())
77 public void start() throws IOException {
78 FileHandler fileTxt = new FileHandler("grpc_server_log.txt");
79 SimpleFormatter formatterTxt = new SimpleFormatter();
80 fileTxt.setFormatter(formatterTxt);
81 logger.addHandler(fileTxt);
83 logger.info("Server started, listening on "+ port);
84 Runtime.getRuntime().addShutdownHook(new Thread() {
87 logger.info("*** Shutting down gRPC server since JVM is shutting down");
89 logger.info("*** Server shut down");
100 private void blockUntilShutdown() throws InterruptedException {
101 if (server != null) {
102 server.awaitTermination();
106 /** Main function to launch server from cmd. */
107 public static void main(String[] args) throws IOException, InterruptedException {
109 Service server = new Service(port);
111 server.blockUntilShutdown();
114 logger.log(Level.WARNING, ex.getMessage());
118 /** Here start methods */
119 private class VerigraphImpl extends VerigraphGrpc.VerigraphImplBase{
121 /** Here start methods of GraphResource*/
123 public void getGraphs(GetRequest request, StreamObserver<GraphGrpc> responseObserver) {
125 for(Graph item : graphService.getAllGraphs()) {
126 GraphGrpc gr = GrpcUtils.obtainGraph(item);
127 responseObserver.onNext(gr);
129 }catch(Exception ex){
130 GraphGrpc nr = GraphGrpc.newBuilder().setErrorMessage(internalError).build();
131 responseObserver.onNext(nr);
132 logger.log(Level.WARNING, ex.getMessage());
134 responseObserver.onCompleted();
138 public void createGraph(GraphGrpc request, StreamObserver<NewGraph> responseObserver) {
139 NewGraph.Builder response = NewGraph.newBuilder();
141 Graph graph = GrpcUtils.deriveGraph(request);
142 Graph newGraph = graphService.addGraph(graph);
143 response.setSuccess(true).setGraph(GrpcUtils.obtainGraph(newGraph));
144 }catch(BadRequestException ex){
145 response.setSuccess(false).setErrorMessage(ex.getMessage());
146 logger.log(Level.WARNING, ex.getClass().toString());
147 logger.log(Level.WARNING, ex.getMessage());
151 response.setSuccess(false).setErrorMessage(internalError);
152 logger.log(Level.WARNING, ex.getClass().toString());
153 logger.log(Level.WARNING, ex.getMessage());
155 responseObserver.onNext(response.build());
156 responseObserver.onCompleted();
160 public void deleteGraph(RequestID request, StreamObserver<Status> responseObserver) {
162 Status.Builder response = Status.newBuilder();
164 graphService.removeGraph(request.getIdGraph());
165 response.setSuccess(true);
166 }catch(ForbiddenException ex){
167 response.setSuccess(false).setErrorMessage(ex.getMessage());
168 logger.log(Level.WARNING, ex.getMessage());
169 }catch(Exception ex){
170 response.setSuccess(false).setErrorMessage(internalError);
171 logger.log(Level.WARNING, ex.getMessage());
173 responseObserver.onNext(response.build());
174 responseObserver.onCompleted();
178 public void getGraph(RequestID request, StreamObserver<GraphGrpc> responseObserver) {
180 Graph graph = graphService.getGraph(request.getIdGraph());
181 GraphGrpc gr = GrpcUtils.obtainGraph(graph);
182 responseObserver.onNext(gr);
183 }catch(ForbiddenException | DataNotFoundException ex){
184 GraphGrpc grError = GraphGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
185 responseObserver.onNext(grError);
186 logger.log(Level.WARNING, ex.getMessage());
187 }catch(Exception ex){
188 GraphGrpc grError = GraphGrpc.newBuilder().setErrorMessage(internalError).build();
189 responseObserver.onNext(grError);
190 logger.log(Level.WARNING, ex.getMessage());
192 responseObserver.onCompleted();
196 public void updateGraph(GraphGrpc request, StreamObserver<NewGraph> responseObserver) {
197 NewGraph.Builder response = NewGraph.newBuilder();
199 Graph graph = GrpcUtils.deriveGraph(request);
200 graph.setId(request.getId());
201 Graph newGraph = graphService.updateGraph(graph);
202 response.setSuccess(true).setGraph(GrpcUtils.obtainGraph(newGraph));
203 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
204 response.setSuccess(false).setErrorMessage(ex.getMessage());
205 logger.log(Level.WARNING, ex.getMessage());
206 }catch(Exception ex){
207 response.setSuccess(false).setErrorMessage(internalError);
208 logger.log(Level.WARNING, ex.getMessage());
210 responseObserver.onNext(response.build());
211 responseObserver.onCompleted();
215 public void verifyPolicy(Policy request, StreamObserver<VerificationGrpc> responseObserver) {
217 VerificationGrpc.Builder verification;
220 VerificationBean verify = new VerificationBean();
221 verify.setDestination(request.getDestination());
222 verify.setSource(request.getSource());
223 verify.setType(request.getType().toString());
224 verify.setMiddlebox(request.getMiddlebox());
227 Verification ver = verificationService.verify(request.getIdGraph(), verify);
228 verification = VerificationGrpc.newBuilder(GrpcUtils.obtainVerification(ver))
229 .setSuccessOfOperation(true);
230 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
231 verification = VerificationGrpc.newBuilder().setSuccessOfOperation(false)
232 .setErrorMessage(ex.getMessage());
233 logger.log(Level.WARNING, ex.getMessage());
234 }catch(Exception ex){
235 verification = VerificationGrpc.newBuilder().setSuccessOfOperation(false)
236 .setErrorMessage(internalError);
237 logger.log(Level.WARNING, ex.getMessage());
239 responseObserver.onNext(verification.build());
240 responseObserver.onCompleted();
243 /** Here start methods of NodeResource*/
246 public void getNodes(RequestID request, StreamObserver<NodeGrpc> responseObserver) {
248 for (Node item : nodeService.getAllNodes(request.getIdGraph())) {
249 NodeGrpc nr = GrpcUtils.obtainNode(item);
250 responseObserver.onNext(nr);
252 }catch(ForbiddenException | DataNotFoundException ex){
253 NodeGrpc nr = NodeGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
254 responseObserver.onNext(nr);
255 logger.log(Level.WARNING, ex.getMessage());
256 }catch(Exception ex){
257 NodeGrpc nr = NodeGrpc.newBuilder().setErrorMessage(internalError).build();
258 responseObserver.onNext(nr);
259 logger.log(Level.WARNING, ex.getMessage());
261 responseObserver.onCompleted();
265 public void createNode(NodeGrpc request, StreamObserver<NewNode> responseObserver) {
266 NewNode.Builder response = NewNode.newBuilder();
268 Node node = GrpcUtils.deriveNode(request);
269 Node newNode = nodeService.addNode(request.getIdGraph(), node);
270 response.setSuccess(true).setNode(GrpcUtils.obtainNode(newNode));
271 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
272 response.setSuccess(false).setErrorMessage(ex.getMessage());
273 logger.log(Level.WARNING, ex.getMessage());
274 }catch(Exception ex){
275 response.setSuccess(false).setErrorMessage(internalError);
276 logger.log(Level.WARNING, ex.getMessage());
278 responseObserver.onNext(response.build());
279 responseObserver.onCompleted();
283 public void deleteNode(RequestID request, StreamObserver<Status> responseObserver) {
284 Status.Builder response = Status.newBuilder();
286 nodeService.removeNode(request.getIdGraph(), request.getIdNode());
287 response.setSuccess(true);
288 }catch(ForbiddenException | DataNotFoundException ex){
289 response.setSuccess(false).setErrorMessage(ex.getMessage());
290 logger.log(Level.WARNING, ex.getMessage());
291 }catch(Exception ex){
292 response.setSuccess(false).setErrorMessage(internalError);
293 logger.log(Level.WARNING, ex.getMessage());
295 responseObserver.onNext(response.build());
296 responseObserver.onCompleted();
300 public void getNode(RequestID request, StreamObserver<NodeGrpc> responseObserver) {
303 Node node = nodeService.getNode(request.getIdGraph(), request.getIdNode());
304 nr= GrpcUtils.obtainNode(node);
305 }catch(ForbiddenException | DataNotFoundException ex){
306 nr = NodeGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
307 logger.log(Level.WARNING, ex.getMessage());
308 }catch(Exception ex){
309 nr = NodeGrpc.newBuilder().setErrorMessage(internalError).build();
310 logger.log(Level.WARNING, ex.getMessage());
312 responseObserver.onNext(nr);
313 responseObserver.onCompleted();
317 public void updateNode(NodeGrpc request, StreamObserver<NewNode> responseObserver) {
318 NewNode.Builder response = NewNode.newBuilder(); try{
319 Node node = GrpcUtils.deriveNode(request);
320 node.setId(request.getId());
321 Node newNode = nodeService.updateNode(request.getIdGraph(), node);
322 response.setSuccess(true).setNode(GrpcUtils.obtainNode(newNode));
323 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
324 response.setSuccess(false).setErrorMessage(ex.getMessage());
325 logger.log(Level.WARNING, ex.getMessage());
326 }catch(Exception ex){
327 response.setSuccess(false).setErrorMessage(internalError);
328 logger.log(Level.WARNING, ex.getMessage());
330 responseObserver.onNext(response.build());
331 responseObserver.onCompleted();
335 public void configureNode(ConfigurationGrpc request, StreamObserver<Status> responseObserver) {
336 Status.Builder response = Status.newBuilder();
338 if (request.getIdGraph() <= 0) {
339 throw new ForbiddenException("Illegal graph id: " + request.getIdGraph());
341 if (request.getIdNode() <= 0) {
342 throw new ForbiddenException("Illegal node id: " + request.getIdNode());
344 Graph graph = new GraphService().getGraph(request.getIdGraph());
346 throw new BadRequestException("Graph with id " + request.getIdGraph() + " not found");
348 Node node = nodeService.getNode(request.getIdGraph(), request.getIdNode());
350 throw new BadRequestException("Node with id " + request.getIdNode() +
351 " not found in graph with id " + request.getIdGraph());
353 Configuration nodeConfiguration = GrpcUtils.deriveConfiguration(request);
354 Node nodeCopy = new Node();
355 nodeCopy.setId(node.getId());
356 nodeCopy.setName(node.getName());
357 nodeCopy.setFunctional_type(node.getFunctional_type());
358 Map<Long,Neighbour> nodes = new HashMap<Long,Neighbour>();
359 nodes.putAll(node.getNeighbours());
360 nodeCopy.setNeighbours(nodes);
361 nodeConfiguration.setId(nodeCopy.getName());
362 nodeCopy.setConfiguration(nodeConfiguration);
363 Graph graphCopy = new Graph();
364 graphCopy.setId(graph.getId());
365 graphCopy.setNodes(new HashMap<Long, Node>(graph.getNodes()));
366 graphCopy.getNodes().remove(node.getId());
367 NodeService.validateNode(graphCopy, nodeCopy);
368 graph.getNodes().put(request.getIdNode(), nodeCopy);
369 response.setSuccess(true);
370 }catch(ForbiddenException | BadRequestException ex){
371 response.setSuccess(false).setErrorMessage(ex.getMessage());
372 logger.log(Level.WARNING, ex.getMessage());
373 }catch(Exception ex){
374 response.setSuccess(false).setErrorMessage(internalError);
375 logger.log(Level.WARNING, ex.getMessage());
377 responseObserver.onNext(response.build());
378 responseObserver.onCompleted();
381 /** Here start methods of NeighbourResource*/
383 public void getNeighbours(RequestID request, StreamObserver<NeighbourGrpc> responseObserver) {
385 for(Neighbour item : neighboursService.getAllNeighbours(request.getIdGraph(), request.getIdNode())) {
386 NeighbourGrpc nr = GrpcUtils.obtainNeighbour(item);
387 responseObserver.onNext(nr);
389 }catch(ForbiddenException | DataNotFoundException ex){
390 NeighbourGrpc nr = NeighbourGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
391 responseObserver.onNext(nr);
392 logger.log(Level.WARNING, ex.getMessage());
393 }catch(Exception ex){
394 NeighbourGrpc nr = NeighbourGrpc.newBuilder().setErrorMessage(internalError).build();
395 responseObserver.onNext(nr);
396 logger.log(Level.WARNING, ex.getMessage());
397 } responseObserver.onCompleted();
401 public void createNeighbour(NeighbourGrpc request, StreamObserver<NewNeighbour> responseObserver) {
402 NewNeighbour.Builder response = NewNeighbour.newBuilder();
404 Neighbour neighbour = GrpcUtils.deriveNeighbour(request);
405 Neighbour newNeighbour = neighboursService.addNeighbour(request.getIdGraph(), request.getIdNode(), neighbour);
406 response.setSuccess(true).setNeighbour(GrpcUtils.obtainNeighbour(newNeighbour));
407 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
408 response.setSuccess(false).setErrorMessage(ex.getMessage());
409 logger.log(Level.WARNING, ex.getMessage());
410 }catch(Exception ex){
411 response.setSuccess(false).setErrorMessage(ex.getMessage());
412 logger.log(Level.WARNING, ex.getMessage());
414 responseObserver.onNext(response.build());
415 responseObserver.onCompleted();
419 public void deleteNeighbour(RequestID request, StreamObserver<Status> responseObserver) {
420 Status.Builder response = Status.newBuilder();
422 neighboursService.removeNeighbour(request.getIdGraph(), request.getIdNode(), request.getIdNeighbour());
423 response.setSuccess(true);
424 }catch(ForbiddenException | DataNotFoundException ex){
425 response.setSuccess(false).setErrorMessage(ex.getMessage());
426 logger.log(Level.WARNING, ex.getMessage());
427 }catch(Exception ex){
428 response.setSuccess(false).setErrorMessage(ex.getMessage());
429 logger.log(Level.WARNING, ex.getMessage());
431 responseObserver.onNext(response.build());
432 responseObserver.onCompleted();
436 public void getNeighbour(RequestID request, StreamObserver<NeighbourGrpc> responseObserver) {
439 Neighbour neighbour = neighboursService.getNeighbour(request.getIdGraph(),
440 request.getIdNode(), request.getIdNeighbour());
441 nr = GrpcUtils.obtainNeighbour(neighbour);
443 }catch(ForbiddenException | DataNotFoundException ex){
444 nr = NeighbourGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
445 logger.log(Level.WARNING, ex.getMessage());
446 }catch(Exception ex){
447 nr = NeighbourGrpc.newBuilder().setErrorMessage(internalError).build();
448 logger.log(Level.WARNING, ex.getMessage());
450 responseObserver.onNext(nr);
451 responseObserver.onCompleted();
455 public void updateNeighbour(NeighbourGrpc request, StreamObserver<NewNeighbour> responseObserver) {
456 NewNeighbour.Builder response = NewNeighbour.newBuilder();
458 Neighbour neighbour = GrpcUtils.deriveNeighbour(request);
459 neighbour.setId(request.getId());
460 Neighbour newNeighbour = neighboursService.updateNeighbour(request.getIdGraph(), request.getIdNode(), neighbour);
461 response.setSuccess(true).setNeighbour(GrpcUtils.obtainNeighbour(newNeighbour));
462 }catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
463 response.setSuccess(false).setErrorMessage(ex.getMessage());
464 logger.log(Level.WARNING, ex.getMessage());
465 }catch(Exception ex){
466 response.setSuccess(false).setErrorMessage(ex.getMessage());
467 logger.log(Level.WARNING, ex.getMessage());
469 responseObserver.onNext(response.build());
470 responseObserver.onCompleted();
473 /** Here start methods of TOSCA gRPC server */ @Override
474 public void getTopologyTemplates (GetRequest request, StreamObserver<TopologyTemplateGrpc> responseObserver) {
475 boolean not_correct = false;
477 for(Graph item : graphService.getAllGraphs()) {
478 TopologyTemplateGrpc topol = GraphToGrpc.obtainTopologyTemplate(item);
479 responseObserver.onNext(topol);
481 } catch(Exception ex){
482 logger.log(Level.WARNING, ex.getMessage());
486 responseObserver.onNext(TopologyTemplateGrpc.newBuilder()
487 .setErrorMessage("Internal Server Error while retrieving TopologyTemplate").build());
488 responseObserver.onCompleted();
492 public void getTopologyTemplate (ToscaRequestID request, StreamObserver<TopologyTemplateGrpc> responseObserver) {
494 Long graphID = Long.valueOf(request.getIdTopologyTemplate());
495 //this method will throw a NumberFormatException in case the ID is not representable as a long
496 Graph graph = graphService.getGraph(graphID);
497 TopologyTemplateGrpc topol = GraphToGrpc.obtainTopologyTemplate(graph);
498 responseObserver.onNext(topol);
499 } catch(ForbiddenException | DataNotFoundException ex) {
500 TopologyTemplateGrpc topolError = TopologyTemplateGrpc.newBuilder().setErrorMessage(ex.getMessage()).build();
501 responseObserver.onNext(topolError);
502 logger.log(Level.WARNING, ex.getMessage());
503 } catch(NumberFormatException ex) {
504 TopologyTemplateGrpc topolError = TopologyTemplateGrpc.newBuilder()
505 .setErrorMessage("The TopologyTemplate ID must be a long value.").build();
506 responseObserver.onNext(topolError);
507 logger.log(Level.WARNING, ex.getMessage());
508 } catch(Exception ex) {
509 TopologyTemplateGrpc topolError = TopologyTemplateGrpc.newBuilder().setErrorMessage(internalError).build();
510 responseObserver.onNext(topolError);
511 logger.log(Level.WARNING, ex.getMessage());
513 responseObserver.onCompleted();
517 public void createTopologyTemplate (TopologyTemplateGrpc request, StreamObserver<NewTopologyTemplate> responseObserver) {
518 NewTopologyTemplate.Builder response = NewTopologyTemplate.newBuilder();
520 Graph graph = GrpcToGraph.deriveGraph(request);
521 Graph newGraph = graphService.addGraph(graph);
522 response.setSuccess(true).setTopologyTemplate(GraphToGrpc.obtainTopologyTemplate(newGraph));
523 } catch(BadRequestException ex) {
524 ex.printStackTrace();
525 response.setSuccess(false).setErrorMessage("Provided invalid request to the service.");
526 logger.log(Level.WARNING, ex.getClass().toString());
527 logger.log(Level.WARNING, ex.getMessage());
528 } catch(Exception ex) {
529 ex.printStackTrace();
530 response.setSuccess(false).setErrorMessage(internalError);
531 logger.log(Level.WARNING, ex.getClass().toString());
532 logger.log(Level.WARNING, ex.getMessage());
534 responseObserver.onNext(response.build());
535 responseObserver.onCompleted();
540 public void updateTopologyTemplate (TopologyTemplateGrpc request, StreamObserver<NewTopologyTemplate> responseObserver) {
541 NewTopologyTemplate.Builder response = NewTopologyTemplate.newBuilder();
543 Graph graph = GrpcToGraph.deriveGraph(request);
544 Graph newGraph = graphService.updateGraph(graph);
545 response.setSuccess(true).setTopologyTemplate(GraphToGrpc.obtainTopologyTemplate(newGraph));
546 } catch(ForbiddenException | DataNotFoundException | BadRequestException ex){
547 response.setSuccess(false).setErrorMessage(ex.getMessage());
548 logger.log(Level.WARNING, ex.getMessage());
549 } catch(Exception ex){
550 response.setSuccess(false).setErrorMessage(internalError);
551 logger.log(Level.WARNING, ex.getMessage());
553 responseObserver.onNext(response.build());
554 responseObserver.onCompleted();
559 public void deleteTopologyTemplate (ToscaRequestID request, StreamObserver<Status> responseObserver) {
560 Status.Builder response = Status.newBuilder();
563 graphID = Long.valueOf(request.getIdTopologyTemplate());
564 //this method will throw a NumberFormatException in case the ID is not representable as a long
565 graphService.removeGraph(graphID);
566 response.setSuccess(true);
567 } catch(ForbiddenException | DataNotFoundException ex) {
568 response.setSuccess(false).setErrorMessage(ex.getMessage());
569 logger.log(Level.WARNING, ex.getMessage());
570 } catch(NumberFormatException ex) {
571 response.setSuccess(false).setErrorMessage("The TopologyTemplate ID must be a long value.");
572 logger.log(Level.WARNING, ex.getMessage());
573 } catch(Exception ex) {
574 response.setSuccess(false).setErrorMessage(internalError);
575 logger.log(Level.WARNING, ex.getMessage());
577 responseObserver.onNext(response.build());
578 responseObserver.onCompleted();
583 public void verifyToscaPolicy(ToscaPolicy request, StreamObserver<ToscaVerificationGrpc> responseObserver) {
586 VerificationBean verify = new VerificationBean();
587 verify.setDestination(request.getDestination());
588 verify.setSource(request.getSource());
589 verify.setType(request.getType().toString());
590 verify.setMiddlebox(request.getMiddlebox());
593 Long graphID = Long.valueOf(request.getIdTopologyTemplate());
594 //this method will throw a NumberFormatException in case the ID is not representable as a long
595 Verification ver = verificationService.verify(graphID, verify);
596 responseObserver.onNext(GraphToGrpc.obtainToscaVerification(ver));
597 } catch(ForbiddenException | DataNotFoundException | BadRequestException ex) {
598 ToscaVerificationGrpc verError = ToscaVerificationGrpc.newBuilder().setSuccessOfOperation(false)
599 .setErrorMessage(ex.getMessage()).build();
600 responseObserver.onNext(verError);
601 logger.log(Level.WARNING, ex.getMessage());
602 } catch(NumberFormatException ex) {
603 ToscaVerificationGrpc verError = ToscaVerificationGrpc.newBuilder().setSuccessOfOperation(false)
604 .setErrorMessage("The TopologyTemplate ID must be a long value.").build();
605 responseObserver.onNext(verError);
606 logger.log(Level.WARNING, ex.getMessage());
607 } catch(Exception ex) {
608 ToscaVerificationGrpc verError = ToscaVerificationGrpc.newBuilder().setSuccessOfOperation(false)
609 .setErrorMessage(internalError).build();
610 responseObserver.onNext(verError);
611 logger.log(Level.WARNING, ex.getMessage());
612 } responseObserver.onCompleted();