Add CLI in verigraph.
[parser.git] / verigraph / src / it / polito / verigraph / tosca / deserializer / XmlConfigurationDeserializer.java
1 /*******************************************************************************\r
2  * Copyright (c) 2018 Politecnico di Torino and others.\r
3  *\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Apache License, Version 2.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.apache.org/licenses/LICENSE-2.0\r
8  *******************************************************************************/\r
9 package it.polito.verigraph.tosca.deserializer;\r
10 \r
11 import it.polito.tosca.jaxb.Configuration;\r
12 import com.fasterxml.jackson.core.JsonParser;\r
13 import com.fasterxml.jackson.core.JsonProcessingException;\r
14 import com.fasterxml.jackson.core.ObjectCodec;\r
15 import com.fasterxml.jackson.databind.DeserializationContext;\r
16 import com.fasterxml.jackson.databind.JsonDeserializer;\r
17 import com.fasterxml.jackson.databind.JsonNode;\r
18 import java.io.IOException;\r
19 import java.math.BigInteger;\r
20 import java.util.Iterator;\r
21 import java.util.List;\r
22 import java.util.Map;\r
23 \r
24 public class XmlConfigurationDeserializer extends JsonDeserializer<Configuration> {\r
25 \r
26     @Override\r
27     public Configuration deserialize(JsonParser jp, DeserializationContext ctxt)\r
28             throws IOException, JsonProcessingException {\r
29         ObjectCodec oc = jp.getCodec();\r
30         JsonNode node = oc.readTree(jp);\r
31         Configuration deserialized;\r
32 \r
33         try {\r
34             //Get the content from the array wrapping the JSON configuration\r
35             final Iterator<JsonNode> elements = node.elements();\r
36             deserialized = new Configuration();\r
37 \r
38 \r
39             if(!elements.hasNext()) {\r
40                 //System.out.println("The provided configuration is empty.");\r
41                 //return null; //TODO shall we return an empty configuration?\r
42 \r
43                 return new Configuration();\r
44             }\r
45 \r
46             switch ((String) ctxt.findInjectableValue("type", null, null)) {\r
47 \r
48             case "antispam":\r
49                 Configuration.AntispamConfiguration antispam = new Configuration.AntispamConfiguration();\r
50                 List<String> sources = antispam.getSource();\r
51                 while (elements.hasNext()) {\r
52                     sources.add(elements.next().asText());\r
53                 }\r
54                 deserialized.setAntispamConfiguration(antispam);\r
55                 break;\r
56 \r
57             case "cache":\r
58                 Configuration.CacheConfiguration cache = new Configuration.CacheConfiguration();\r
59                 List<String> resources = cache.getResource();\r
60                 while(elements.hasNext()) {\r
61                     resources.add(elements.next().asText());\r
62                 }\r
63                 deserialized.setCacheConfiguration(cache);\r
64                 break;\r
65 \r
66             case "endhost":\r
67                 Configuration.EndhostConfiguration endhost = new Configuration.EndhostConfiguration();\r
68                 JsonNode thisnode = elements.next();\r
69 \r
70                 if(thisnode.has("body"))\r
71                     endhost.setBody(thisnode.findValue("body").asText());\r
72                 if(thisnode.has("sequence"))\r
73                     endhost.setSequence(BigInteger.valueOf(Long.valueOf(thisnode.findValue("sequence").asText())));\r
74                 if(thisnode.has("protocol"))\r
75                     endhost.setProtocol(thisnode.findValue("protocol").asText());\r
76                 if(thisnode.has("email_from"))\r
77                     endhost.setEmailFrom(thisnode.findValue("email_from").asText());\r
78                 if(thisnode.has("url"))\r
79                     endhost.setUrl(thisnode.findValue("url").asText());\r
80                 if(thisnode.has("options"))\r
81                     endhost.setOptions(thisnode.findValue("options").asText());\r
82                 if(thisnode.has("destination"))\r
83                     endhost.setDestination(thisnode.findValue("destination").asText());\r
84 \r
85                 deserialized.setEndhostConfiguration(endhost);\r
86                 break;\r
87 \r
88             case "endpoint":\r
89                 Configuration.EndpointConfiguration endpoint = new Configuration.EndpointConfiguration();\r
90                 deserialized.setEndpointConfiguration(endpoint);\r
91                 break;\r
92 \r
93             case "fieldmodifier":\r
94                 Configuration.FieldmodifierConfiguration fieldmodifier = new Configuration.FieldmodifierConfiguration();\r
95                 deserialized.setFieldmodifierConfiguration(fieldmodifier);\r
96                 break;\r
97 \r
98             case "firewall":\r
99                 Configuration.FirewallConfiguration firewall = new Configuration.FirewallConfiguration();\r
100                 List<Configuration.FirewallConfiguration.Elements> fwelements = firewall.getElements();\r
101                 Configuration.FirewallConfiguration.Elements element;\r
102 \r
103                 Iterator<Map.Entry<String, JsonNode>> current = elements.next().fields();\r
104                 Map.Entry<String, JsonNode> entry;\r
105                 while(current.hasNext()) {\r
106                     entry = current.next();\r
107                     element = new Configuration.FirewallConfiguration.Elements();\r
108                     element.setSource(entry.getKey());\r
109                     element.setDestination(entry.getValue().asText());\r
110                     fwelements.add(element);\r
111                 }\r
112 \r
113                 deserialized.setFirewallConfiguration(firewall);\r
114                 break;\r
115 \r
116             case "mailclient":\r
117                 Configuration.MailclientConfiguration mailclient = new Configuration.MailclientConfiguration();\r
118                 mailclient.setMailserver(elements.next().findValue("mailserver").asText());\r
119                 deserialized.setMailclientConfiguration(mailclient);\r
120                 break;\r
121 \r
122             case "mailserver":\r
123                 Configuration.MailserverConfiguration mailserver = new Configuration.MailserverConfiguration();\r
124                 deserialized.setMailserverConfiguration(mailserver);\r
125                 break;\r
126 \r
127             case "nat":\r
128                 Configuration.NatConfiguration nat = new Configuration.NatConfiguration();\r
129                 List<String> natsource = nat.getSource();\r
130                 while(elements.hasNext()) {\r
131                     natsource.add(elements.next().asText());\r
132                 }\r
133                 deserialized.setNatConfiguration(nat);\r
134                 break;\r
135 \r
136             case "vpnaccess":\r
137                 Configuration.VpnaccessConfiguration vpnaccess = new Configuration.VpnaccessConfiguration();\r
138                 vpnaccess.setVpnexit(elements.next().findValue("vpnexit").asText());\r
139                 deserialized.setVpnaccessConfiguration(vpnaccess);\r
140                 break;\r
141 \r
142             case "vpnexit":\r
143                 Configuration.VpnexitConfiguration vpnexit = new Configuration.VpnexitConfiguration();\r
144                 vpnexit.setVpnaccess(elements.next().findValue("vpnaccess").asText());\r
145                 deserialized.setVpnexitConfiguration(vpnexit);\r
146                 break;\r
147 \r
148             case "webclient":\r
149                 Configuration.WebclientConfiguration webclient = new Configuration.WebclientConfiguration();\r
150                 webclient.setNameWebServer(elements.next().findValue("webserver").asText());\r
151                 deserialized.setWebclientConfiguration(webclient);\r
152                 break;\r
153 \r
154             case "webserver":\r
155                 Configuration.WebserverConfiguration webserver = new Configuration.WebserverConfiguration();\r
156                 deserialized.setWebserverConfiguration(webserver);\r
157                 break;\r
158 \r
159             default:\r
160                 Configuration.FieldmodifierConfiguration defaultForwarder = new Configuration.FieldmodifierConfiguration();\r
161                 deserialized.setFieldmodifierConfiguration(defaultForwarder);\r
162                 break;\r
163             }\r
164 \r
165 \r
166         } catch (Exception e) {\r
167             // TODO Auto-generated catch block\r
168             System.err.println("Error converting the Json to XmlConfiguration");\r
169             e.printStackTrace();\r
170             return null;\r
171         }\r
172 \r
173         return deserialized;\r
174 \r
175     }\r
176 \r
177 }\r