Exemplo n.º 1
0
 public override Nodo Clone()
 {
     VarNodo n = new VarNodo(name, null, abilitazione);
     foreach (Nodo child in children)
     {
         n.Append((child.Clone()));
     }
     n.rebuild();
     return n;
 }    
Exemplo n.º 2
0
 public static VarNodo importCSVVar(string fileName)
 {
     VarNodo retValue = new VarNodo();
     StreamReader sr = null; 
     List<List<string>> groupMap = new List<List<string>>();
     int varCount = 0;
     int lineCounter = 2;
     //Father.Children = new ObservableCollection<Nodo>();
     try
     {
         sr= new StreamReader(fileName);
         string[] intestazioni = sr.ReadLine().Split('#');
         List<string> gruppi = new List<string>();
         foreach (string i in intestazioni)
         {
             //gruppi.Add(i.Substring(0, i.IndexOf(';')));
             List<string> l = new List<string>();
             l.Add(i.Split(';').ElementAt(1));
             groupMap.Add(l);
         }
         intestazioni = sr.ReadLine().Split(new string[] { ";#;" }, StringSplitOptions.None);
         for (int j = 0; j < intestazioni.Length; j++)
         {
             groupMap[j].AddRange(intestazioni[j].Split(';').ToList());
         }
         int nIndent = 0;
         foreach (string s in groupMap[0])       //conto il numero di indentazioni
         {
             if (Regex.IsMatch(s, "Nome Variabile"))
                 nIndent++;
         }
         while (!sr.EndOfStream)
         {
             string line = sr.ReadLine();
             List<string> groups = line.Split(new string[] { ";#;" }, StringSplitOptions.None).ToList();
             Variable var = retValue.addVarCSV(groups[0], nIndent);
             if (var != null) 
                 var.addFluxes(groups.GetRange(1, groups.Count - 1), groupMap.GetRange(1, groupMap.Count - 1));
             varCount++;
             lineCounter++;
         }
         Logger.Log(varCount + " variabili importate.");
     }
     catch (Exception e)
     {
         Logger.Log("Errore di importazione CSV - riga "+lineCounter+": " + e.Message, "Red");
     }
     finally
     {
         sr.Close();
     }
     return retValue;
 }
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;
     }
 }