Add CLI in verigraph.
[parser.git] / verigraph / src / it / polito / verigraph / tosca / converter / grpc / GrpcToXml.java
diff --git a/verigraph/src/it/polito/verigraph/tosca/converter/grpc/GrpcToXml.java b/verigraph/src/it/polito/verigraph/tosca/converter/grpc/GrpcToXml.java
new file mode 100644 (file)
index 0000000..002737a
--- /dev/null
@@ -0,0 +1,145 @@
+/*******************************************************************************\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.io.IOException;\r
+import java.util.List;\r
+\r
+import javax.xml.namespace.QName;\r
+\r
+import it.polito.tosca.jaxb.Configuration;\r
+import it.polito.tosca.jaxb.Definitions;\r
+import it.polito.tosca.jaxb.TEntityTemplate.Properties;\r
+import it.polito.tosca.jaxb.TNodeTemplate;\r
+import it.polito.tosca.jaxb.TRelationshipTemplate;\r
+import it.polito.tosca.jaxb.TRelationshipTemplate.SourceElement;\r
+import it.polito.tosca.jaxb.TRelationshipTemplate.TargetElement;\r
+import it.polito.tosca.jaxb.TServiceTemplate;\r
+import it.polito.tosca.jaxb.TTopologyTemplate;\r
+import it.polito.verigraph.exception.BadRequestException;\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.tosca.MappingUtils;\r
+\r
+public class GrpcToXml {\r
+\r
+    public static Definitions mapGraph(TopologyTemplateGrpc topologyGrpc) {\r
+        Definitions definitions = new Definitions();\r
+        TServiceTemplate serviceTemplate = new TServiceTemplate();\r
+        TTopologyTemplate topologyTemplate = new TTopologyTemplate();\r
+\r
+        for(NodeTemplateGrpc node : topologyGrpc.getNodeTemplateList()) {\r
+            TNodeTemplate nodeTemplate = mapNode(node);\r
+            topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(nodeTemplate);\r
+        }\r
+        for(RelationshipTemplateGrpc relat : topologyGrpc.getRelationshipTemplateList()) {\r
+            TRelationshipTemplate relationshipTemplate = mapRelationship(relat, topologyGrpc.getNodeTemplateList());\r
+            topologyTemplate.getNodeTemplateOrRelationshipTemplate().add(relationshipTemplate);\r
+        }\r
+\r
+        try {\r
+            serviceTemplate.setId(String.valueOf(topologyGrpc.getId()));\r
+        } catch (NullPointerException e) {\r
+            throw new NullPointerException("The TopologyTemplateGrpc must have an ID.");\r
+        }\r
+        serviceTemplate.setTopologyTemplate(topologyTemplate);\r
+        definitions.getServiceTemplateOrNodeTypeOrNodeTypeImplementation().add(serviceTemplate);\r
+        return definitions;\r
+    }\r
+\r
+\r
+    private static TNodeTemplate mapNode(NodeTemplateGrpc node){\r
+        TNodeTemplate nodeTemplate = new TNodeTemplate();\r
+\r
+        try {\r
+            nodeTemplate.setId(String.valueOf(node.getId()));\r
+        } catch (NullPointerException e) {\r
+            throw new NullPointerException("The NodeTemplateGrpc must have an ID.");\r
+        }\r
+        try {\r
+            nodeTemplate.setName(node.getName());\r
+        } catch (NullPointerException e) {\r
+            throw new NullPointerException("The NodeTemplateGrpc must have a name.");\r
+        }\r
+\r
+        try {\r
+            //QName type = new QName("http://docs.oasis-open.org/tosca/ns/2011/12/ToscaVerigraphDefinition")\r
+            QName type = new QName("http://docs.oasis-open.org/tosca/ns/2011/12",\r
+                    node.getType().toString().substring(0, 1).toUpperCase() +\r
+                    node.getType().toString().substring(1) + "Type");\r
+            nodeTemplate.setType(type);\r
+        } catch (NullPointerException e) {\r
+            throw new NullPointerException("The NodeTemplateGrpc must have a valid type.");\r
+        }\r
+\r
+        Configuration config = mapModelConfiguration(node.getConfiguration(), node.getType().toString().toLowerCase());\r
+        nodeTemplate.setProperties(new Properties());\r
+        nodeTemplate.getProperties().setAny(config);\r
+        return nodeTemplate;\r
+    }\r
+\r
+\r
+    private static TRelationshipTemplate mapRelationship(RelationshipTemplateGrpc relat, List<NodeTemplateGrpc> nodeList) {\r
+        TRelationshipTemplate relationship = new TRelationshipTemplate();\r
+        SourceElement source = new SourceElement();\r
+        TargetElement target = new TargetElement();\r
+        int check = 0;\r
+\r
+        TNodeTemplate sourceNode = new TNodeTemplate();\r
+        TNodeTemplate targetNode = new TNodeTemplate();\r
+\r
+        try {\r
+            for(NodeTemplateGrpc node : nodeList) {\r
+                if(node.getId().equals(relat.getIdSourceNodeTemplate())) {\r
+                    sourceNode = mapNode(node);\r
+                    check++;\r
+                }\r
+                if(node.getId().equals(relat.getIdTargetNodeTemplate())) {\r
+                    targetNode = mapNode(node);\r
+                    check++;\r
+                }\r
+            }\r
+        } catch (NullPointerException e) {\r
+            throw new BadRequestException("A RelationshipTemplateGrpc must contain both source and target node ID.");\r
+        }\r
+        if(check != 2)\r
+            throw new BadRequestException("A RelationshipTemplateGrpc must contain both source and target node ID.");\r
+\r
+        source.setRef(sourceNode);\r
+        target.setRef(targetNode);\r
+\r
+        relationship.setId(relat.getId()); //TODO da valutare\r
+        relationship.setSourceElement(source);\r
+        relationship.setTargetElement(target);\r
+        relationship.setName(sourceNode.getName()+"To"+targetNode.getName());\r
+\r
+        return relationship;\r
+    }\r
+\r
+\r
+    private static it.polito.tosca.jaxb.Configuration mapModelConfiguration(ToscaConfigurationGrpc toscaConfigurationGrpc, String type) {\r
+        it.polito.tosca.jaxb.Configuration configuration = new it.polito.tosca.jaxb.Configuration();\r
+        try {\r
+            //We are passing the configuration type to the Deserializer context\r
+            configuration = MappingUtils.obtainToscaConfiguration(toscaConfigurationGrpc, type);\r
+\r
+            //In Graph, ID and DESCRIPTION are always empty\r
+            //configuration.setConfID(confGrpc.getId());\r
+            //configuration.setConfDescr(confGrpc.getDescription());\r
+\r
+        } catch (IOException | NullPointerException e) {\r
+            e.printStackTrace();\r
+        }\r
+        return configuration;\r
+    }\r
+\r
+}\r
+\r