package org.kevoree.kevscript.statement; import org.kevoree.ContainerNode; import org.kevoree.ContainerRoot; import org.kevoree.NetworkInfo; import org.kevoree.Value; import org.kevoree.factory.DefaultKevoreeFactory; import org.kevoree.kevscript.KevScriptError; import org.kevoree.kevscript.Type; import org.kevoree.kevscript.expression.CtxVarExpr; import org.waxeye.ast.IAST; import java.util.Map; /** * * Created by leiko on 12/15/16. */ public class NetworkStmt { public static void interpret(IAST<Type> stmt, ContainerRoot model, Map<String, String> ctxVars) { final IAST<Type> leftHandNetwork = stmt.getChildren().get(0); if (leftHandNetwork.getChildren().size() != 3) { throw new KevScriptError("Network must be: network nodeName.propertyType.interfaceName IP"); } else { final String nodeName = leftHandNetwork.getChildren().get(0).childrenAsString(); final String propType = leftHandNetwork.getChildren().get(1).childrenAsString(); final String interfaceName = leftHandNetwork.getChildren().get(2).childrenAsString(); final ContainerNode networkTargetNode = model.findNodesByID(nodeName); if (networkTargetNode == null) { throw new KevScriptError("Node not found for name " + nodeName); } NetworkInfo info = networkTargetNode.findNetworkInformationByID(propType); DefaultKevoreeFactory factory = new DefaultKevoreeFactory(); if (info == null) { info = factory.createNetworkInfo(); info.setName(propType); networkTargetNode.addNetworkInformation(info); } Value netprop = info.findValuesByID(interfaceName); if (netprop == null) { netprop = factory.createValue(); netprop.setName(interfaceName); info.addValues(netprop); } IAST<Type> valuePart = stmt.getChildren().get(1); if (valuePart.getType().equals(Type.CtxVar)) { netprop.setValue(CtxVarExpr.interpret(valuePart, ctxVars)); } else { // string netprop.setValue(valuePart.childrenAsString()); } } } }