From d7cb3d2dbc49d1c5623ccfc6a1304a21a8cb3219 Mon Sep 17 00:00:00 2001
From: "zaccaria.majid"
Date: Mon, 7 Aug 2023 11:30:37 +0200
Subject: [PATCH 1/9] fix filtro eventi e stati
---
SMGen.Data/Data/FilesClass.cs | 4 +
SMGen.Data/Data/RuleClass.cs | 4 +-
SMGen.Data/Services/SMGDataService.cs | 421 +++++++++++++++-----------
SMGen/Pages/SMIn2Event.razor | 31 +-
4 files changed, 262 insertions(+), 198 deletions(-)
diff --git a/SMGen.Data/Data/FilesClass.cs b/SMGen.Data/Data/FilesClass.cs
index f926a46..a97550a 100644
--- a/SMGen.Data/Data/FilesClass.cs
+++ b/SMGen.Data/Data/FilesClass.cs
@@ -27,6 +27,10 @@
/// File name originale (caricato)
///
public string origFileName { get; set; } = "";
+ ///
+ /// Messaggio di errore in caso qualcosa andasse storto
+ ///
+ public string errorMsg { get; set; } = "";
#endregion Public Properties
}
diff --git a/SMGen.Data/Data/RuleClass.cs b/SMGen.Data/Data/RuleClass.cs
index 263a1b3..923fdc7 100644
--- a/SMGen.Data/Data/RuleClass.cs
+++ b/SMGen.Data/Data/RuleClass.cs
@@ -2,10 +2,10 @@
{
public class RuleClass
{
- public int id_state { get; set; } = 0;
+ //public int id_state { get; set; } = 0;
public string state { get; set; } = "";
public string expression { get; set; } = "";
- public int id_next_state { get; set; } = 0;
+ //public int id_next_state { get; set; } = 0;
public string next_state { get; set; } = "";
public string event_to_send { get; set; } = "";
public int id_event_to_send { get; set; } = 0;
diff --git a/SMGen.Data/Services/SMGDataService.cs b/SMGen.Data/Services/SMGDataService.cs
index bd130c8..7c0f7a4 100644
--- a/SMGen.Data/Services/SMGDataService.cs
+++ b/SMGen.Data/Services/SMGDataService.cs
@@ -253,122 +253,161 @@ namespace SMGen.Data.Services
Bits.Clear();
Events_to_send.Clear();
Rules.Clear();
+ string line = "";
// recupero nome file x partire
string filePath = currFile.tempFileName;
-
+ string errMgs = "";
Dictionary eventsFromDb = await AnagEventiGetAll();
-
- // stream lettura file
- using (StreamReader sr = new StreamReader(filePath))
+ try
{
- string line = "";
- while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
+ // stream lettura file
+ var isProcActive = true;
+ if (isProcActive)
{
- if (!line.StartsWith("#") && !string.IsNullOrEmpty(line) && line.Length >= 3)
+ using (StreamReader sr = new StreamReader(filePath))
{
- if (line.Contains("#"))
+ while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
{
- var lineSplit = line.Split("#");
- line = lineSplit[0];
- }
-
- var sz_tokens = line.Split(":");
-
- var sz_temp = sz_tokens[0].Trim();
- switch (sz_temp)
- {
- case "$DEFINITIONS":
- b_rules_definition = false;
- break;
-
- case "$NAME":
- sz_state_machine_name = sz_tokens[1].Trim();
- break;
-
- case "$IDX":
- n_state_machine_index = sz_tokens[1].Trim();
- break;
-
- case "$N_STATES":
- n_states = int.Parse(sz_tokens[1].Trim());
- break;
-
- case "$N_BITS":
- n_bits = int.Parse(sz_tokens[1].Trim());
- break;
-
- case "$BIT":
- Bits.Add(sz_tokens[2].Trim().ToUpper());
- break;
-
- case "$STATE":
- States.Add(sz_tokens[2].Trim().ToUpper());
- break;
-
- case "$EVENT":
- Events_to_send.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
- var newEvent = new AnagEventiModelTemp()
+ if (!line.StartsWith("#") && !string.IsNullOrEmpty(line) && line.Length >= 3)
+ {
+ if (line.Contains("#"))
{
- IdxTipo = int.Parse(sz_tokens[1].Trim().ToUpper()),
- Nome = sz_tokens[2].Trim().ToUpper()
- };
-
- var listElement = events2Add.FirstOrDefault(x => x.IdxTipo == newEvent.IdxTipo);
-
- if (listElement != null && listElement.Nome != newEvent.Nome)
- {
- Log.Error($"L'evento '{newEvent.IdxTipo}: {newEvent.Nome}' non può essere importato perchè diverso da '{listElement.IdxTipo}: {listElement.Nome}' nel file {currFile.origFileName}.{Environment.NewLine}");
- return null;
+ var lineSplit = line.Split("#");
+ line = lineSplit[0];
}
- else if(listElement == null)
+
+ var sz_tokens = line.Split(":");
+
+ var sz_temp = sz_tokens[0].Trim();
+ switch (sz_temp)
{
- events2Add.Add(newEvent);
+ case "$DEFINITIONS":
+ b_rules_definition = false;
+ break;
+
+ case "$NAME":
+ sz_state_machine_name = sz_tokens[1].Trim();
+ break;
+
+ case "$IDX":
+ n_state_machine_index = sz_tokens[1].Trim();
+ break;
+
+ case "$N_STATES":
+ n_states = int.Parse(sz_tokens[1].Trim());
+ break;
+
+ case "$N_BITS":
+ n_bits = int.Parse(sz_tokens[1].Trim());
+ break;
+
+ case "$BIT":
+ Bits.Add(sz_tokens[2].Trim().ToUpper());
+ break;
+
+ case "$STATE":
+ //States.Add(sz_tokens[2].Trim().ToUpper());
+ if (!StatesAll.ContainsKey(sz_tokens[2].Trim().ToUpper()))
+ {
+ StatesAll.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
+ }
+ break;
+
+ case "$EVENT":
+#if false
+ Events_to_send.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
+ var newEvent = new AnagEventiModelTemp()
+ {
+ IdxTipo = int.Parse(sz_tokens[1].Trim().ToUpper()),
+ Nome = sz_tokens[2].Trim().ToUpper()
+ };
+
+#endif
+ Events_to_send.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
+
+
+ //events2Add.Add(newEvent);
+
+ break;
+
+ case "$RULES":
+ b_rules_definition = true;
+ break;
+
+ case "$DO":
+ b_rules_definition = false;
+ var isOk = checkDirExist(procRootDir);
+ if (isOk)
+ {
+ var fileName = $"{currFile.origFileName.Split(".")[0]}.csv";
+ currFile.DLoadFileName = $"{Path.Combine(procRootDir, bitCsvPath, fileName)}";
+ currFile = await evalIn2Ev_transitions(currFile);
+ if (saveToDb)
+ {
+ //await AnagEventinInsert(events2Add);
+
+ await Task.Delay(1);
+ //await TranInInsert(TranInList2add, int.Parse(n_state_machine_index));
+ }
+ }
+ isProcActive = false;
+
+ break;
+
+ default:
+ if (b_rules_definition)
+ {
+ var temp_rule = new RuleClass()
+ {
+ //id_state = StatesAll[sz_temp.Trim().ToUpper()],
+ state = sz_temp.Trim().ToUpper(),
+ expression = sz_tokens[1].Trim().ToUpper(),
+ next_state = sz_tokens[2].Trim().ToUpper(),
+ //id_next_state = StatesAll[sz_temp.Trim().ToUpper()],
+ event_to_send = sz_tokens[3].Trim().ToUpper(),
+ id_event_to_send = Events_to_send[sz_tokens[3].Trim().ToUpper()]
+ };
+
+ Rules.Add(temp_rule);
+ }
+ break;
}
- break;
-
- case "$RULES":
- b_rules_definition = true;
- break;
-
- case "$DO":
- b_rules_definition = false;
- var isOk = checkDirExist(procRootDir);
- if (isOk)
- {
- var fileName = $"{currFile.origFileName.Split(".")[0]}.csv";
- currFile.DLoadFileName = $"{Path.Combine(procRootDir, bitCsvPath, fileName)}";
- currFile = await evalIn2Ev_transitions(currFile);
- if (saveToDb)
- {
- //await AnagEventinInsert(events2Add);
-
- await Task.Delay(1);
- //await TranInInsert(TranInList2add, int.Parse(n_state_machine_index));
- }
- }
- break;
-
- default:
- if (b_rules_definition)
- {
- var temp_rule = new RuleClass()
- {
- id_state = StatesAll[sz_temp.Trim().ToUpper()],
- state = sz_temp.Trim().ToUpper(),
- expression = sz_tokens[1].Trim().ToUpper(),
- next_state = sz_tokens[2].Trim().ToUpper(),
- id_next_state = StatesAll[sz_temp.Trim().ToUpper()],
- event_to_send = sz_tokens[3].Trim().ToUpper(),
- id_event_to_send = Events_to_send[sz_tokens[3].Trim().ToUpper()]
- };
-
- Rules.Add(temp_rule);
- }
- break;
+ }
}
}
}
}
+ catch (Exception exc)
+ {
+ errMgs = $"Eccezione durante la lettura del file {currFile.origFileName} alla riga {line}: {exc}{Environment.NewLine}";
+ currFile.errorMsg = errMgs;
+ currFile.isOk = false;
+ Log.Error(errMgs);
+ }
+
+ Events_to_send = Events_to_send.Select(a => a.Value).Intersect(Rules.Select(b => b.id_event_to_send)).ToDictionary(x => x.ToString());
+ foreach (var item in Events_to_send)
+ {
+ var newEvent = new AnagEventiModelTemp()
+ {
+ IdxTipo = item.Value,
+ Nome = item.Key.Trim().ToUpper()
+ };
+ var listElement = events2Add.FirstOrDefault(x => x.IdxTipo == newEvent.IdxTipo);
+
+ if (listElement != null && listElement.Nome != newEvent.Nome)
+ {
+ errMgs = $"L'evento '{newEvent.IdxTipo}: {newEvent.Nome}' non può essere importato perchè diverso da '{listElement.IdxTipo}: {listElement.Nome}' nel file {currFile.origFileName}.{Environment.NewLine}";
+ Log.Error(errMgs);
+ currFile.errorMsg = errMgs;
+ currFile.isOk = false;
+ //return null;
+ }
+ else if (listElement == null)
+ {
+ events2Add.Add(newEvent);
+ }
+ }
return currFile;
}
@@ -396,88 +435,92 @@ namespace SMGen.Data.Services
try
{
- // stream lettura file
- using (StreamReader sr = new StreamReader(filePath))
+ var isProcActive = true;
+ if (isProcActive)
{
- while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
+ // stream lettura file
+ using (StreamReader sr = new StreamReader(filePath))
{
- if (!line.StartsWith("#") && !string.IsNullOrEmpty(line) && line.Length >= 3)
+ while ((line = await sr.ReadLineAsync().ConfigureAwait(false)) != null)
{
- if (line.Contains("#"))
+ if (!line.StartsWith("#") && !string.IsNullOrEmpty(line) && line.Length >= 3)
{
- var lineSplit = line.Split("#");
- line = lineSplit[0];
- }
+ if (line.Contains("#"))
+ {
+ var lineSplit = line.Split("#");
+ line = lineSplit[0];
+ }
- var sz_tokens = line.Split(":");
+ var sz_tokens = line.Split(":");
- var sz_temp = sz_tokens[0].Trim();
- switch (sz_temp)
- {
- case "$DEFINITIONS":
- b_rules_definition = false;
- break;
+ var sz_temp = sz_tokens[0].Trim();
+ switch (sz_temp)
+ {
+ case "$DEFINITIONS":
+ b_rules_definition = false;
+ break;
- case "$NAME":
- sz_state_machine_name = sz_tokens[1].Trim();
- break;
+ case "$NAME":
+ sz_state_machine_name = sz_tokens[1].Trim();
+ break;
- case "$IDX":
- n_state_machine_index = sz_tokens[1].Trim();
- break;
+ case "$IDX":
+ n_state_machine_index = sz_tokens[1].Trim();
+ break;
- case "$STATE":
- if (!StatesAll.ContainsKey(sz_tokens[2].Trim().ToUpper()))
- {
- StatesAll.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
- }
- break;
-
- case "$EVENT":
- Events_to_send.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
- var newEvent = new AnagEventiModelTemp()
- {
- IdxTipo = int.Parse(sz_tokens[1].Trim().ToUpper()),
- Nome = sz_tokens[2].Trim().ToUpper()
- };
-
- events2Add.Add(newEvent);
- break;
-
- case "$RULES":
- b_rules_definition = true;
- break;
-
- case "$DO":
- b_rules_definition = false;
- var isOk = checkDirExist(Path.Combine(procRootDir, statiCsvPath));
- if (isOk)
- {
- var fileName = $"{currFile.origFileName.Split(".")[0]}.csv";
- currFile.DLoadFileName = $"{Path.Combine(procRootDir, bitCsvPath, fileName)}";
- currFile = await evalIn2State_transitions(currFile, calcItself, calcEmptyState);
- }
- break;
-
- default:
- if (b_rules_definition)
- {
- var state = sz_temp.Trim().ToUpper();
- var event_to_send = sz_tokens[1].Trim().ToUpper();
- var next_state = sz_tokens[2].Trim().ToUpper();
-
- var temp_rule = new RuleClass()
+ case "$STATE":
+ if (!StatesAll.ContainsKey(sz_tokens[2].Trim().ToUpper()))
{
- state = state,
- event_to_send = event_to_send,
- next_state = next_state,
- id_next_state = StatesAll[next_state],
- id_event_to_send = Events_to_send[event_to_send]
+ StatesAll.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
+ }
+ break;
+
+ case "$EVENT":
+ Events_to_send.Add(sz_tokens[2].Trim().ToUpper(), int.Parse(sz_tokens[1].Trim().ToUpper()));
+ var newEvent = new AnagEventiModelTemp()
+ {
+ IdxTipo = int.Parse(sz_tokens[1].Trim().ToUpper()),
+ Nome = sz_tokens[2].Trim().ToUpper()
};
- Rules.Add(temp_rule);
- States2Rules.Add(next_state);
- }
- break;
+
+ events2Add.Add(newEvent);
+ break;
+
+ case "$RULES":
+ b_rules_definition = true;
+ break;
+
+ case "$DO":
+ b_rules_definition = false;
+ var isOk = checkDirExist(Path.Combine(procRootDir, statiCsvPath));
+ if (isOk)
+ {
+ var fileName = $"{currFile.origFileName.Split(".")[0]}.csv";
+ currFile.DLoadFileName = $"{Path.Combine(procRootDir, bitCsvPath, fileName)}";
+ currFile = await evalIn2State_transitions(currFile, calcItself, calcEmptyState);
+ }
+ break;
+
+ default:
+ if (b_rules_definition)
+ {
+ var state = sz_temp.Trim().ToUpper();
+ var event_to_send = sz_tokens[1].Trim().ToUpper();
+ var next_state = sz_tokens[2].Trim().ToUpper();
+
+ var temp_rule = new RuleClass()
+ {
+ state = state,
+ event_to_send = event_to_send,
+ next_state = next_state,
+ //id_next_state = StatesAll[next_state],
+ //id_event_to_send = Events_to_send[event_to_send]
+ };
+ Rules.Add(temp_rule);
+ States2Rules.Add(next_state);
+ }
+ break;
+ }
}
}
}
@@ -488,6 +531,27 @@ namespace SMGen.Data.Services
Log.Error($"Eccezione durante la lettura del file {currFile.origFileName} alla riga {line}: {exc}{Environment.NewLine}");
}
+ Events_to_send = Events_to_send.Select(a => a.Value).Intersect(Rules.Select(b => b.id_event_to_send)).ToDictionary(x => x.ToString());
+ foreach (var item in Events_to_send)
+ {
+ var newEvent = new AnagEventiModelTemp()
+ {
+ IdxTipo = item.Value,
+ Nome = item.Key.Trim().ToUpper()
+ };
+ var listElement = events2Add.FirstOrDefault(x => x.IdxTipo == newEvent.IdxTipo);
+
+ if (listElement != null && listElement.Nome != newEvent.Nome)
+ {
+ Log.Error($"L'evento '{newEvent.IdxTipo}: {newEvent.Nome}' non può essere importato perchè diverso da '{listElement.IdxTipo}: {listElement.Nome}' nel file {currFile.origFileName}.{Environment.NewLine}");
+ return null;
+ }
+ else if (listElement == null)
+ {
+ events2Add.Add(newEvent);
+ }
+ }
+
return currFile;
}
@@ -518,12 +582,15 @@ namespace SMGen.Data.Services
bool[] b_bit = new bool[20];
bool b_invert = false;
+
+
+
//ciclo negli stati
try
{
for (var i = 0; i <= n_states - 1; i++)
{
- sz_actual_state = States.ToArray()[i];
+ sz_actual_state = Events_to_send.FirstOrDefault(x => x.Value == i).Key;
//ciclo negli ingressi
for (n_input = 0; n_input <= (Math.Pow(2, n_bits) - 1); n_input++)
@@ -562,7 +629,7 @@ namespace SMGen.Data.Services
exitFor = true;
}
- int nextState = States.IndexOf(act_rule.next_state);
+ int nextState = StatesAll[act_rule.next_state];
if (!exitFor)
{
@@ -570,7 +637,7 @@ namespace SMGen.Data.Services
{
sz_line = "";
//eseguo solo se diverso dallo stato corrente
- if (States.IndexOf(act_rule.next_state) != i)
+ if (StatesAll[act_rule.next_state] != i)
{
if (nextState < 0)
{
@@ -652,7 +719,9 @@ namespace SMGen.Data.Services
}
Events_to_send = Events_to_send.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value);
- Rules = Rules.OrderBy(x => x.id_event_to_send).ToList();
+ //Rules = Rules.OrderBy(x => x.id_event_to_send).ToList();
+
+
//ciclo negli stati
try
diff --git a/SMGen/Pages/SMIn2Event.razor b/SMGen/Pages/SMIn2Event.razor
index 3f86d12..64cc5c3 100644
--- a/SMGen/Pages/SMIn2Event.razor
+++ b/SMGen/Pages/SMIn2Event.razor
@@ -14,26 +14,17 @@
Vista in preview si può poi inserire in prod se confermato
-
-
- @*
*@
+
+
-
-
-
+
+
+
\ No newline at end of file
From cf941dcede69b968c682e4c81516b4f82e13d3c8 Mon Sep 17 00:00:00 2001
From: "zaccaria.majid"
Date: Mon, 7 Aug 2023 13:08:46 +0200
Subject: [PATCH 2/9] fix grafici
---
SMGen/Components/FilesList.razor | 37 +++++++++++++++++++++++++++--
SMGen/Components/FilesList.razor.cs | 21 ++++++++++++++--
SMGen/Pages/_Layout.cshtml | 1 +
3 files changed, 55 insertions(+), 4 deletions(-)
diff --git a/SMGen/Components/FilesList.razor b/SMGen/Components/FilesList.razor
index 556a984..dd82ce5 100644
--- a/SMGen/Components/FilesList.razor
+++ b/SMGen/Components/FilesList.razor
@@ -1,15 +1,22 @@
-
+
+
+
| Rul file |
Status |
- @if(Files!=null && Files.Count>0)
+ @if (Files != null && Files.Count > 0)
{
}
|
+ |
@@ -40,10 +47,36 @@
}
+ @if (item.Value.errorMsg != "")
+ {
+
+
+ |
+ }
+ else
+ {}
}
}
+
+
+
+
\ No newline at end of file
diff --git a/SMGen/Components/FilesList.razor.cs b/SMGen/Components/FilesList.razor.cs
index efd3e15..0090893 100644
--- a/SMGen/Components/FilesList.razor.cs
+++ b/SMGen/Components/FilesList.razor.cs
@@ -85,11 +85,12 @@ namespace SMGen.Components
await InvokeAsync(() => StateHasChanged());
}
+ protected int succFiles { get; set; } = 0;
protected async Task Read_rule_file_transitions()
{
Files = await SMGDService.FilesGetAll();
- foreach (var item in Files.OrderBy(x=>x.Value.origFileName))
+ foreach (var item in Files.OrderBy(x => x.Value.origFileName))
{
item.Value.calcRunning = true;
await InvokeAsync(() => StateHasChanged());
@@ -104,9 +105,25 @@ namespace SMGen.Components
await SMGDService.EvalIn2StateRuleFile(item.Value, false, calcItSelf, calcEmptyState);
}
item.Value.calcRunning = false;
+ if (item.Value.isOk)
+ {
+ succFiles = succFiles + 1;
+ }
await InvokeAsync(() => StateHasChanged());
}
- var currEvents = SMGDService.events2Add;
+
+ }
+
+ protected string currMsg { get; set; } = "";
+ protected string currFileName { get; set; } = "";
+
+ protected async Task setCurrMsg(FilesClass currFile)
+ {
+ if (currFile.errorMsg != "")
+ {
+ currMsg = currFile.errorMsg;
+ }
+ currFileName = currFile.origFileName;
}
}
}
\ No newline at end of file
diff --git a/SMGen/Pages/_Layout.cshtml b/SMGen/Pages/_Layout.cshtml
index b4bbedf..41efeaf 100644
--- a/SMGen/Pages/_Layout.cshtml
+++ b/SMGen/Pages/_Layout.cshtml
@@ -29,6 +29,7 @@
🗙
+