X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=verigraph%2Fsrc%2Fit%2Fpolito%2Fverigraph%2Ftosca%2Fdeserializer%2FYamlConfigurationDeserializer.java;fp=verigraph%2Fsrc%2Fit%2Fpolito%2Fverigraph%2Ftosca%2Fdeserializer%2FYamlConfigurationDeserializer.java;h=8fb7e5221c55c253ca5e9f6e04eb06d13437afb9;hb=0f987a9e1b8e79caef48015adf865eef36216dbc;hp=0000000000000000000000000000000000000000;hpb=fcda9807cfa6a89d691877126b406c5d3909d9b9;p=parser.git diff --git a/verigraph/src/it/polito/verigraph/tosca/deserializer/YamlConfigurationDeserializer.java b/verigraph/src/it/polito/verigraph/tosca/deserializer/YamlConfigurationDeserializer.java new file mode 100644 index 0000000..8fb7e52 --- /dev/null +++ b/verigraph/src/it/polito/verigraph/tosca/deserializer/YamlConfigurationDeserializer.java @@ -0,0 +1,251 @@ +/******************************************************************************* + * Copyright (c) 2018 Politecnico di Torino and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Apache License, Version 2.0 + * which accompanies this distribution, and is available at + * http://www.apache.org/licenses/LICENSE-2.0 + *******************************************************************************/ +package it.polito.verigraph.tosca.deserializer; + + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.ObjectCodec; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import it.polito.verigraph.tosca.yaml.beans.AntispamConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.CacheConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.ConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.DpiConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.EndhostConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.EndpointConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.FieldModifierConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.FirewallConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.MailClientConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.MailServerConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.NatConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.VpnAccessConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.VpnExitConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.WebClientConfigurationYaml; +import it.polito.verigraph.tosca.yaml.beans.WebServerConfigurationYaml; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class YamlConfigurationDeserializer extends JsonDeserializer { + + @Override + public ConfigurationYaml deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + ObjectCodec oc = jp.getCodec(); + JsonNode node = oc.readTree(jp); + ConfigurationYaml deserialized; + boolean emptyConfig = false; + + try { + //Get the content from the array wrapping the JSON configuration + final Iterator elements = node.elements(); + + if(!elements.hasNext()) { + //System.out.println("The provided configuration is empty."); + emptyConfig = true; + } + + switch ((String)ctxt.findInjectableValue("type", null, null)) { + + case "antispam": + if(emptyConfig) { + deserialized = new AntispamConfigurationYaml(); + break; + } + AntispamConfigurationYaml antispam = new AntispamConfigurationYaml(); + antispam.setSources(new ArrayList()); + while (elements.hasNext()) { + antispam.getSources().add(elements.next().asText()); + } + deserialized = antispam; + break; + + case "cache": + if(emptyConfig) { + deserialized = new CacheConfigurationYaml(); + break; + } + CacheConfigurationYaml cache = new CacheConfigurationYaml(); + cache.setResources(new ArrayList()); + while(elements.hasNext()) { + cache.getResources().add(elements.next().asText()); + } + deserialized = cache; + break; + + case "dpi": + if(emptyConfig) { + deserialized = new DpiConfigurationYaml(); + break; + } + DpiConfigurationYaml dpi = new DpiConfigurationYaml(); + dpi.setNotAllowedList(new ArrayList()); + while(elements.hasNext()) { + dpi.getNotAllowedList().add(elements.next().asText()); + } + deserialized = dpi; + break; + + case "endhost": + if(emptyConfig) { + deserialized = new EndhostConfigurationYaml(); + break; + } + EndhostConfigurationYaml endhost = new EndhostConfigurationYaml(); + JsonNode thisnode = elements.next(); + if(thisnode.has("body")) + endhost.setBody(thisnode.findValue("body").asText()); + if(thisnode.has("sequence")) + endhost.setSequence(Integer.valueOf(thisnode.findValue("sequence").asText())); + if(thisnode.has("protocol")) + endhost.setProtocol(thisnode.findValue("protocol").asText()); + if(thisnode.has("email_from")) + endhost.setEmail_from(thisnode.findValue("email_from").asText()); + if(thisnode.has("options")) + endhost.setOptions(thisnode.findValue("options").asText()); + if(thisnode.has("url")) + endhost.setUrl(thisnode.findValue("url").asText()); + if(thisnode.has("destination")) + endhost.setDestination(thisnode.findValue("destination").asText()); + + deserialized = endhost; + break; + + case "endpoint": + if(emptyConfig) { + deserialized = new EndpointConfigurationYaml(); + break; + } + EndpointConfigurationYaml endpoint = new EndpointConfigurationYaml(); + deserialized = endpoint; + break; + + case "fieldmodifier": + if(emptyConfig) { + deserialized = new FieldModifierConfigurationYaml(); + break; + } + FieldModifierConfigurationYaml fieldmodifier = new FieldModifierConfigurationYaml(); + deserialized = fieldmodifier; + break; + + case "firewall": + if(emptyConfig) { + deserialized = new FirewallConfigurationYaml(); + break; + } + FirewallConfigurationYaml firewall = new FirewallConfigurationYaml(); + firewall.setElements(new HashMap()); + JsonNode current = elements.next(); + Iterator> iter = current.fields(); + + while (iter.hasNext()) { + Map.Entry entry = iter.next(); + firewall.getElements().put(entry.getKey(), entry.getValue().asText()); + } + + deserialized = firewall; + break; + + case "mailclient": + if(emptyConfig) { + deserialized = new MailClientConfigurationYaml(); + break; + } + MailClientConfigurationYaml mailclient = new MailClientConfigurationYaml(); + mailclient.setMailserver(elements.next().findValue("mailserver").asText()); + deserialized = mailclient; + break; + + case "mailserver": + if(emptyConfig) { + deserialized = new MailServerConfigurationYaml(); + break; + } + MailServerConfigurationYaml mailserver = new MailServerConfigurationYaml(); + deserialized = mailserver; + break; + + case "nat": + if(emptyConfig) { + deserialized = new NatConfigurationYaml(); + break; + } + NatConfigurationYaml nat = new NatConfigurationYaml(); + nat.setSources(new ArrayList()); + while(elements.hasNext()) { + nat.getSources().add(elements.next().asText()); + } + deserialized = nat; + break; + + case "vpnaccess": + if(emptyConfig) { + deserialized = new VpnAccessConfigurationYaml(); + break; + } + VpnAccessConfigurationYaml vpnaccess = new VpnAccessConfigurationYaml(); + vpnaccess.setVpnexit(elements.next().findValue("vpnexit").asText()); + deserialized = vpnaccess; + break; + + case "vpnexit": + if(emptyConfig) { + deserialized = new VpnExitConfigurationYaml(); + break; + } + VpnExitConfigurationYaml vpnexit = new VpnExitConfigurationYaml(); + vpnexit.setVpnaccess(elements.next().findValue("vpnaccess").asText()); + deserialized = vpnexit; + break; + + case "webclient": + if(emptyConfig) { + deserialized = new WebClientConfigurationYaml(); + break; + } + WebClientConfigurationYaml webclient = new WebClientConfigurationYaml(); + webclient.setNameWebServer(elements.next().findValue("webserver").asText()); + deserialized = webclient; + break; + + case "webserver": + if(emptyConfig) { + deserialized = new WebServerConfigurationYaml(); + break; + } + WebServerConfigurationYaml webserver = new WebServerConfigurationYaml(); + deserialized = webserver; + break; + + default: + deserialized = new FieldModifierConfigurationYaml(); + break; + } + + + } catch (Exception e) { + // TODO Auto-generated catch block + //System.err.println("Error converting the Json to YamlConfiguration"); + e.printStackTrace(); + return new FieldModifierConfigurationYaml(); + } + + return deserialized; + + } + +} \ No newline at end of file