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
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
19 import it.polito.verigraph.tosca.yaml.beans.AntispamConfigurationYaml;
\r
20 import it.polito.verigraph.tosca.yaml.beans.CacheConfigurationYaml;
\r
21 import it.polito.verigraph.tosca.yaml.beans.ConfigurationYaml;
\r
22 import it.polito.verigraph.tosca.yaml.beans.DpiConfigurationYaml;
\r
23 import it.polito.verigraph.tosca.yaml.beans.EndhostConfigurationYaml;
\r
24 import it.polito.verigraph.tosca.yaml.beans.EndpointConfigurationYaml;
\r
25 import it.polito.verigraph.tosca.yaml.beans.FieldModifierConfigurationYaml;
\r
26 import it.polito.verigraph.tosca.yaml.beans.FirewallConfigurationYaml;
\r
27 import it.polito.verigraph.tosca.yaml.beans.MailClientConfigurationYaml;
\r
28 import it.polito.verigraph.tosca.yaml.beans.MailServerConfigurationYaml;
\r
29 import it.polito.verigraph.tosca.yaml.beans.NatConfigurationYaml;
\r
30 import it.polito.verigraph.tosca.yaml.beans.VpnAccessConfigurationYaml;
\r
31 import it.polito.verigraph.tosca.yaml.beans.VpnExitConfigurationYaml;
\r
32 import it.polito.verigraph.tosca.yaml.beans.WebClientConfigurationYaml;
\r
33 import it.polito.verigraph.tosca.yaml.beans.WebServerConfigurationYaml;
\r
35 import java.io.IOException;
\r
36 import java.util.ArrayList;
\r
37 import java.util.HashMap;
\r
38 import java.util.Iterator;
\r
39 import java.util.List;
\r
40 import java.util.Map;
\r
42 public class YamlConfigurationDeserializer extends JsonDeserializer<ConfigurationYaml> {
\r
45 public ConfigurationYaml deserialize(JsonParser jp, DeserializationContext ctxt)
\r
46 throws IOException, JsonProcessingException {
\r
47 ObjectCodec oc = jp.getCodec();
\r
48 JsonNode node = oc.readTree(jp);
\r
49 ConfigurationYaml deserialized;
\r
50 boolean emptyConfig = false;
\r
53 //Get the content from the array wrapping the JSON configuration
\r
54 final Iterator<JsonNode> elements = node.elements();
\r
56 if(!elements.hasNext()) {
\r
57 //System.out.println("The provided configuration is empty.");
\r
61 switch ((String)ctxt.findInjectableValue("type", null, null)) {
\r
65 deserialized = new AntispamConfigurationYaml();
\r
68 AntispamConfigurationYaml antispam = new AntispamConfigurationYaml();
\r
69 antispam.setSources(new ArrayList<String>());
\r
70 while (elements.hasNext()) {
\r
71 antispam.getSources().add(elements.next().asText());
\r
73 deserialized = antispam;
\r
78 deserialized = new CacheConfigurationYaml();
\r
81 CacheConfigurationYaml cache = new CacheConfigurationYaml();
\r
82 cache.setResources(new ArrayList<String>());
\r
83 while(elements.hasNext()) {
\r
84 cache.getResources().add(elements.next().asText());
\r
86 deserialized = cache;
\r
91 deserialized = new DpiConfigurationYaml();
\r
94 DpiConfigurationYaml dpi = new DpiConfigurationYaml();
\r
95 dpi.setNotAllowedList(new ArrayList<String>());
\r
96 while(elements.hasNext()) {
\r
97 dpi.getNotAllowedList().add(elements.next().asText());
\r
104 deserialized = new EndhostConfigurationYaml();
\r
107 EndhostConfigurationYaml endhost = new EndhostConfigurationYaml();
\r
108 JsonNode thisnode = elements.next();
\r
109 if(thisnode.has("body"))
\r
110 endhost.setBody(thisnode.findValue("body").asText());
\r
111 if(thisnode.has("sequence"))
\r
112 endhost.setSequence(Integer.valueOf(thisnode.findValue("sequence").asText()));
\r
113 if(thisnode.has("protocol"))
\r
114 endhost.setProtocol(thisnode.findValue("protocol").asText());
\r
115 if(thisnode.has("email_from"))
\r
116 endhost.setEmail_from(thisnode.findValue("email_from").asText());
\r
117 if(thisnode.has("options"))
\r
118 endhost.setOptions(thisnode.findValue("options").asText());
\r
119 if(thisnode.has("url"))
\r
120 endhost.setUrl(thisnode.findValue("url").asText());
\r
121 if(thisnode.has("destination"))
\r
122 endhost.setDestination(thisnode.findValue("destination").asText());
\r
124 deserialized = endhost;
\r
129 deserialized = new EndpointConfigurationYaml();
\r
132 EndpointConfigurationYaml endpoint = new EndpointConfigurationYaml();
\r
133 deserialized = endpoint;
\r
136 case "fieldmodifier":
\r
138 deserialized = new FieldModifierConfigurationYaml();
\r
141 FieldModifierConfigurationYaml fieldmodifier = new FieldModifierConfigurationYaml();
\r
142 deserialized = fieldmodifier;
\r
147 deserialized = new FirewallConfigurationYaml();
\r
150 FirewallConfigurationYaml firewall = new FirewallConfigurationYaml();
\r
151 firewall.setElements(new HashMap<String,String>());
\r
152 JsonNode current = elements.next();
\r
153 Iterator<Map.Entry<String, JsonNode>> iter = current.fields();
\r
155 while (iter.hasNext()) {
\r
156 Map.Entry<String, JsonNode> entry = iter.next();
\r
157 firewall.getElements().put(entry.getKey(), entry.getValue().asText());
\r
160 deserialized = firewall;
\r
165 deserialized = new MailClientConfigurationYaml();
\r
168 MailClientConfigurationYaml mailclient = new MailClientConfigurationYaml();
\r
169 mailclient.setMailserver(elements.next().findValue("mailserver").asText());
\r
170 deserialized = mailclient;
\r
175 deserialized = new MailServerConfigurationYaml();
\r
178 MailServerConfigurationYaml mailserver = new MailServerConfigurationYaml();
\r
179 deserialized = mailserver;
\r
184 deserialized = new NatConfigurationYaml();
\r
187 NatConfigurationYaml nat = new NatConfigurationYaml();
\r
188 nat.setSources(new ArrayList<String>());
\r
189 while(elements.hasNext()) {
\r
190 nat.getSources().add(elements.next().asText());
\r
192 deserialized = nat;
\r
197 deserialized = new VpnAccessConfigurationYaml();
\r
200 VpnAccessConfigurationYaml vpnaccess = new VpnAccessConfigurationYaml();
\r
201 vpnaccess.setVpnexit(elements.next().findValue("vpnexit").asText());
\r
202 deserialized = vpnaccess;
\r
207 deserialized = new VpnExitConfigurationYaml();
\r
210 VpnExitConfigurationYaml vpnexit = new VpnExitConfigurationYaml();
\r
211 vpnexit.setVpnaccess(elements.next().findValue("vpnaccess").asText());
\r
212 deserialized = vpnexit;
\r
217 deserialized = new WebClientConfigurationYaml();
\r
220 WebClientConfigurationYaml webclient = new WebClientConfigurationYaml();
\r
221 webclient.setNameWebServer(elements.next().findValue("webserver").asText());
\r
222 deserialized = webclient;
\r
227 deserialized = new WebServerConfigurationYaml();
\r
230 WebServerConfigurationYaml webserver = new WebServerConfigurationYaml();
\r
231 deserialized = webserver;
\r
235 deserialized = new FieldModifierConfigurationYaml();
\r
240 } catch (Exception e) {
\r
241 // TODO Auto-generated catch block
\r
242 //System.err.println("Error converting the Json to YamlConfiguration");
\r
243 e.printStackTrace();
\r
244 return new FieldModifierConfigurationYaml();
\r
247 return deserialized;
\r