1 /*******************************************************************************
\r
2 * Copyright (c) 2018 Politecnico di Torino and others.
\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
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
24 public class XmlConfigurationDeserializer extends JsonDeserializer<Configuration> {
\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
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
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
43 return new Configuration();
\r
46 switch ((String) ctxt.findInjectableValue("type", null, null)) {
\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
54 deserialized.setAntispamConfiguration(antispam);
\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
63 deserialized.setCacheConfiguration(cache);
\r
67 Configuration.EndhostConfiguration endhost = new Configuration.EndhostConfiguration();
\r
68 JsonNode thisnode = elements.next();
\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
85 deserialized.setEndhostConfiguration(endhost);
\r
89 Configuration.EndpointConfiguration endpoint = new Configuration.EndpointConfiguration();
\r
90 deserialized.setEndpointConfiguration(endpoint);
\r
93 case "fieldmodifier":
\r
94 Configuration.FieldmodifierConfiguration fieldmodifier = new Configuration.FieldmodifierConfiguration();
\r
95 deserialized.setFieldmodifierConfiguration(fieldmodifier);
\r
99 Configuration.FirewallConfiguration firewall = new Configuration.FirewallConfiguration();
\r
100 List<Configuration.FirewallConfiguration.Elements> fwelements = firewall.getElements();
\r
101 Configuration.FirewallConfiguration.Elements element;
\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
113 deserialized.setFirewallConfiguration(firewall);
\r
117 Configuration.MailclientConfiguration mailclient = new Configuration.MailclientConfiguration();
\r
118 mailclient.setMailserver(elements.next().findValue("mailserver").asText());
\r
119 deserialized.setMailclientConfiguration(mailclient);
\r
123 Configuration.MailserverConfiguration mailserver = new Configuration.MailserverConfiguration();
\r
124 deserialized.setMailserverConfiguration(mailserver);
\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
133 deserialized.setNatConfiguration(nat);
\r
137 Configuration.VpnaccessConfiguration vpnaccess = new Configuration.VpnaccessConfiguration();
\r
138 vpnaccess.setVpnexit(elements.next().findValue("vpnexit").asText());
\r
139 deserialized.setVpnaccessConfiguration(vpnaccess);
\r
143 Configuration.VpnexitConfiguration vpnexit = new Configuration.VpnexitConfiguration();
\r
144 vpnexit.setVpnaccess(elements.next().findValue("vpnaccess").asText());
\r
145 deserialized.setVpnexitConfiguration(vpnexit);
\r
149 Configuration.WebclientConfiguration webclient = new Configuration.WebclientConfiguration();
\r
150 webclient.setNameWebServer(elements.next().findValue("webserver").asText());
\r
151 deserialized.setWebclientConfiguration(webclient);
\r
155 Configuration.WebserverConfiguration webserver = new Configuration.WebserverConfiguration();
\r
156 deserialized.setWebserverConfiguration(webserver);
\r
160 Configuration.FieldmodifierConfiguration defaultForwarder = new Configuration.FieldmodifierConfiguration();
\r
161 deserialized.setFieldmodifierConfiguration(defaultForwarder);
\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
173 return deserialized;
\r