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;
13 import java.util.logging.Level;
14 import java.util.logging.Logger;
15 import com.fasterxml.jackson.databind.JsonNode;
16 import com.fasterxml.jackson.databind.ObjectMapper;
17 import com.google.common.base.Splitter;
18 import it.polito.verigraph.grpc.ConfigurationGrpc;
19 import it.polito.verigraph.grpc.GraphGrpc;
20 import it.polito.verigraph.grpc.NeighbourGrpc;
21 import it.polito.verigraph.grpc.NodeGrpc;
22 import it.polito.verigraph.grpc.TestGrpc;
23 import it.polito.verigraph.grpc.VerificationGrpc;
24 import it.polito.verigraph.grpc.NodeGrpc.FunctionalType;
25 import it.polito.verigraph.model.Configuration;
26 import it.polito.verigraph.model.Graph;
27 import it.polito.verigraph.model.Neighbour;
28 import it.polito.verigraph.model.Node;
29 import it.polito.verigraph.model.Test;
30 import it.polito.verigraph.model.Verification;
32 public class GrpcUtils {
33 private static final Logger logger = Logger.getLogger(GrpcUtils.class.getName());
35 public static NeighbourGrpc obtainNeighbour(Neighbour ne){
36 return NeighbourGrpc.newBuilder()
38 .setName(ne.getName())
42 public static Neighbour deriveNeighbour(NeighbourGrpc request) {
44 Neighbour ne = new Neighbour();
45 ne.setName(request.getName());
49 public static ConfigurationGrpc obtainConfiguration(Configuration conf){
50 return ConfigurationGrpc.newBuilder()
52 .setDescription(conf.getDescription())
53 .setConfiguration(conf.getConfiguration().toString())
57 public static Configuration deriveConfiguration(ConfigurationGrpc request) {
58 Configuration conf = new Configuration();
59 conf.setId(request.getId());
60 conf.setDescription(request.getDescription());
61 ObjectMapper mapper = new ObjectMapper();
62 JsonNode rootNode = null;
64 if ("".equals(request.getConfiguration()))
65 rootNode=mapper.readTree("[]");
67 rootNode = mapper.readTree(request.getConfiguration());
68 } catch (IOException e) {
69 logger.log(Level.WARNING, e.getMessage());
71 conf.setConfiguration(rootNode);
75 public static NodeGrpc obtainNode(Node node) {
76 NodeGrpc.Builder nr = NodeGrpc.newBuilder();
77 nr.setId(node.getId());
78 nr.setName(node.getName());
79 nr.setFunctionalType(FunctionalType.valueOf(node.getFunctional_type()));
80 for(Neighbour neighbour:node.getNeighbours().values()){
81 NeighbourGrpc ng = obtainNeighbour(neighbour);
84 nr.setConfiguration(obtainConfiguration(node.getConfiguration()));
88 public static Node deriveNode(NodeGrpc request) {
90 Node node = new Node();
91 node.setName(request.getName());
92 node.setFunctional_type(request.getFunctionalType().toString());
93 Configuration conf = deriveConfiguration(request.getConfiguration());
94 node.setConfiguration(conf);
96 Map<Long,Neighbour> neighours = node.getNeighbours();
98 for(NeighbourGrpc neighbour:request.getNeighbourList()){
99 Neighbour ng = deriveNeighbour(neighbour);
100 neighours.put(i++, ng);
106 public static GraphGrpc obtainGraph(Graph graph){
107 GraphGrpc.Builder gr = GraphGrpc.newBuilder();
108 gr.setId(graph.getId());
109 for(Node node:graph.getNodes().values()){
110 NodeGrpc ng = obtainNode(node);
116 public static Graph deriveGraph(GraphGrpc request) {
118 Graph graph = new Graph();
121 Map<Long, Node> nodes= graph.getNodes();
122 for(NodeGrpc node:request.getNodeList()){
123 Node ng = deriveNode(node);
130 public static VerificationGrpc obtainVerification(Verification verify){
131 VerificationGrpc.Builder ver = VerificationGrpc.newBuilder();
132 ver.setComment(verify.getComment());
133 ver.setResult(verify.getResult());
134 for(Test test:verify.getTests()){
135 TestGrpc.Builder tst = TestGrpc.newBuilder().setResult(test.getResult());
136 for(Node node:test.getPath()){
137 NodeGrpc ng = obtainNode(node);
145 /**Intended for string that begins with "?"
147 public static Map<String,String> getParamGivenString(String str){
148 String string = str.substring(1);
149 final Map<String, String> map = Splitter.on('&').trimResults().withKeyValueSeparator("=").