public Flusso(Variable father, string[] fields, List<string> map) { this.father = father; protocolname = map[0]; propertyDefinitions = VarDefinitions.Map[map[0]]; propertyValues = new PropertyList(); if (Regex.IsMatch(map[0], "Variables|Common", RegexOptions.IgnoreCase)) name = map[0]; else name = fields[1]; name = name.Trim(); foreach (var pt in propertyDefinitions) { if (!pt.Value.Visibile) continue; int i = map.FindIndex(x => x == pt.Key); if (pt.Key=="Abilitato") { if (!Boolean.TryParse(fields[i-1], out abilitazione)) abilitazione = false; } if (i > 0) { propertyValues.Add(pt.Key, fields[i - 1].Replace("%sc%",";").Trim(),pt.Value); } else propertyValues.Add(pt.Key, "", pt.Value); } }
public override Nodo Clone() { Variable v = new Variable(name, null, abilitazione, GMAddress); foreach (var child in children) { v.Append(child.Clone()); } return v; }
/// <summary> /// Aggiunge una variabile al nodo a partire dalla stringa path e dal numero di indentazioni /// </summary> /// <param name="pathString">Stringa CSV contenente il path, GMAddress e abilitazione</param> /// <param name="nIndent">Numero di indentazioni della variabile</param> /// <returns></returns> public Variable addVarCSV(string pathString, int nIndent) { Nodo n = this, m = null; string[] fields = pathString.Split(';'); int GMAddress = Int32.Parse(fields[nIndent]); bool abilitazione = Boolean.Parse(fields[nIndent + 1]); for (int i = 0; i < nIndent; i++) { m = n.Children.FirstOrDefault(x => x.Name == fields[i]); //cerco tra i figli del nodo if (m == null) //se il nodo non è tra i figli lo aggiungo { if (i != nIndent - 1 && !String.IsNullOrWhiteSpace(fields[i+1])) //se non è tra i figli ma non è all'ultimo livello d'indentazione lo aggiungo e scorro al successivo. { m = new VarNodo(fields[i], n, abilitazione); n.Children.Add(m); n = m; } else { m = new Variable(fields[i], n, abilitazione, GMAddress); n.Children.Add(m); return (Variable)m; } } else //Se il figlio c'è già scorro al livello successivo d'indentazione { n = m; } } Logger.Log("Errore: variabile duplicata nel file CSV: " + pathString,"Red"); return null; }
internal void addVarNodeGPRJ(string path, Dictionary<string, string> props) { string[] pathFields = path.Split(';'); Nodo actualNode = this, nextNode = null; for (int i = 0; i < pathFields.Length; i++) { nextNode = actualNode.Children.FirstOrDefault(x => x.name == pathFields[i]); if (nextNode != null) { actualNode = nextNode; continue; } else if (i != pathFields.Length - 1) { actualNode.Append(nextNode = new VarNodo(pathFields[i], actualNode, true)); } else { switch (props["Tipo"]) { case "Nodo": actualNode.Append(nextNode = new VarNodo(pathFields[i], actualNode, Boolean.Parse(props["Enabled"].ToLower()))); break; case "Variabile": actualNode.Append(nextNode = new Variable(pathFields[i], actualNode, Boolean.Parse(props["Enabled"]), Int32.Parse(props["Addres"]))); break; case "Protocollo": actualNode.Append(nextNode = new Flusso(pathFields[i], actualNode, Boolean.Parse(props["Enabled"]))); Flusso f = nextNode as Flusso; f.ProtocolName = props["SottoTipo"]; if (f.ProtocolDefs == null) { var pname = VarDefinitions.Map.Keys.FirstOrDefault(x => Regex.IsMatch(props["SottoTipo"], x, RegexOptions.IgnoreCase)); if (pname != null) f.ProtocolName = pname; else { Logger.Log("Protocollo non trovato per il flusso " + f.Path, "Red"); continue; } } foreach (var pt in f.ProtocolDefs) { if (!pt.Value.Visibile) continue; string v = null; if (props.ContainsKey(pt.Value.NomeSalvato)) v = props[pt.Value.NomeSalvato]; f.propertylist.Add(new PropertyItem(pt.Value.NomeVisualizzato, v, pt.Value)); } break; } } actualNode = nextNode; } }