Exemplo n.º 1
0
        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);
            }   
        }
Exemplo n.º 2
0
        public override Nodo Clone()
        {
            Variable v = new Variable(name, null, abilitazione, GMAddress);
            foreach (var child in children)
            {
                v.Append(child.Clone());
            }
            return v;

        }
Exemplo n.º 3
0
 /// <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;
 }
Exemplo n.º 4
0
 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;
     }
 }