Support TOSCA in verigraph (gRPC service)
[parser.git] / verigraph / src / it / polito / verigraph / tosca / converter / grpc / GraphToGrpc.java
diff --git a/verigraph/src/it/polito/verigraph/tosca/converter/grpc/GraphToGrpc.java b/verigraph/src/it/polito/verigraph/tosca/converter/grpc/GraphToGrpc.java
new file mode 100644 (file)
index 0000000..fb52c7b
--- /dev/null
@@ -0,0 +1,101 @@
+/*******************************************************************************\r
+ * Copyright (c) 2018 Politecnico di Torino and others.\r
+ *\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Apache License, Version 2.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *******************************************************************************/\r
+package it.polito.verigraph.tosca.converter.grpc;\r
+\r
+import java.util.Map;\r
+\r
+import it.polito.verigraph.grpc.NodeTemplateGrpc;\r
+import it.polito.verigraph.grpc.RelationshipTemplateGrpc;\r
+import it.polito.verigraph.grpc.TopologyTemplateGrpc;\r
+import it.polito.verigraph.grpc.ToscaConfigurationGrpc;\r
+import it.polito.verigraph.grpc.ToscaTestGrpc;\r
+import it.polito.verigraph.grpc.ToscaVerificationGrpc;\r
+import it.polito.verigraph.model.Configuration;\r
+import it.polito.verigraph.model.Graph;\r
+import it.polito.verigraph.model.Neighbour;\r
+import it.polito.verigraph.model.Node;\r
+import it.polito.verigraph.model.Test;\r
+import it.polito.verigraph.model.Verification;\r
+\r
+public class GraphToGrpc {\r
+\r
+    /** Mapping method --> from model Graph to grpc TopologyTemplate */\r
+    public static TopologyTemplateGrpc obtainTopologyTemplate(Graph graph) {\r
+        TopologyTemplateGrpc.Builder topol = TopologyTemplateGrpc.newBuilder();\r
+        topol.setId(String.valueOf(graph.getId()));\r
+\r
+        //NodeTemplate\r
+        for(Node node : graph.getNodes().values()) {\r
+            NodeTemplateGrpc nt = obtainNodeTemplate(node);\r
+            topol.addNodeTemplate(nt);\r
+            //RelationshipTemplate\r
+            Map<Long,Neighbour> neighMap = node.getNeighbours();\r
+            for (Map.Entry<Long, Neighbour> myentry : neighMap.entrySet()) {\r
+                Neighbour neigh = myentry.getValue();\r
+                RelationshipTemplateGrpc relat = obtainRelationshipTemplate(neigh, node);\r
+                topol.addRelationshipTemplate(relat);\r
+            }\r
+        }\r
+        return topol.build();\r
+    }\r
+\r
+\r
+    /** Mapping method --> from model Node to grpc NodeTemplate */\r
+    private static NodeTemplateGrpc obtainNodeTemplate(Node node){\r
+        NodeTemplateGrpc.Builder nodegrpc = NodeTemplateGrpc.newBuilder();\r
+\r
+        nodegrpc.setId(String.valueOf(node.getId()));\r
+        nodegrpc.setName(node.getName());\r
+        nodegrpc.setType(NodeTemplateGrpc.Type.valueOf(node.getFunctional_type().toLowerCase()));\r
+\r
+        ToscaConfigurationGrpc config = obtainToscaConfiguration(node.getConfiguration());\r
+        nodegrpc.setConfiguration(config);\r
+\r
+        return nodegrpc.build();\r
+    }\r
+\r
+\r
+    /** Mapping method --> from model Neighbour to grpc RelationshipTemplate */\r
+    private static RelationshipTemplateGrpc obtainRelationshipTemplate(Neighbour neigh, Node sourceNode) {\r
+        RelationshipTemplateGrpc.Builder relat = RelationshipTemplateGrpc.newBuilder();\r
+        relat.setId(String.valueOf(sourceNode.getId()));\r
+        //Neighbour does not have a neighbourID! RelationshipTemplate does, so it is set to sourceNodeID\r
+        relat.setIdSourceNodeTemplate(String.valueOf(sourceNode.getId()));\r
+        relat.setIdTargetNodeTemplate(String.valueOf(neigh.getId()));\r
+        relat.setName(sourceNode.getName()+"to"+neigh.getName());\r
+        return relat.build();\r
+    }\r
+\r
+\r
+    /** Mapping method --> from model Configuration to grpc ToscaConfigurationGrpc */\r
+    private static ToscaConfigurationGrpc obtainToscaConfiguration(Configuration conf) {\r
+        return ToscaConfigurationGrpc.newBuilder()\r
+                .setId(conf.getId())\r
+                .setDescription(conf.getDescription())\r
+                .setConfiguration(conf.getConfiguration().toString())\r
+                .build();\r
+    }\r
+\r
+    /** Mapping method --> from model Verification to grpc ToscaVerificationGrpc */\r
+    public static ToscaVerificationGrpc obtainToscaVerification(Verification verify){\r
+        ToscaVerificationGrpc.Builder ver = ToscaVerificationGrpc.newBuilder();\r
+        ver.setComment(verify.getComment());\r
+        ver.setResult(verify.getResult());\r
+        for(Test test:verify.getTests()){\r
+            ToscaTestGrpc.Builder tst = ToscaTestGrpc.newBuilder().setResult(test.getResult());\r
+            for(Node node:test.getPath()){\r
+                NodeTemplateGrpc nodetempl = obtainNodeTemplate(node);\r
+                tst.addNodeTemplate(nodetempl);\r
+            }\r
+            ver.addTest(tst);\r
+        }\r
+        return ver.build();\r
+    }\r
+\r
+}\r