Skip to content

Commit

Permalink
feat: parse related parameter (#47)
Browse files Browse the repository at this point in the history
  • Loading branch information
bc-m committed May 9, 2024
1 parent dc2b681 commit 2ee71d6
Show file tree
Hide file tree
Showing 28 changed files with 137 additions and 45 deletions.
25 changes: 14 additions & 11 deletions src/script_steps/parameters/layout_reference.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use crate::utils::xml_utils::text_to_string;
#[derive(Debug, Default)]
pub struct LayoutReferenceContainer {
pub reference_type: String,
pub layout_reference: String,
pub layout_reference: Option<String>,
}

impl LayoutReferenceContainer {
Expand Down Expand Up @@ -54,18 +54,16 @@ impl LayoutReferenceContainer {
.to_string();
}
b"LayoutReference" => {
item.layout_reference = get_attribute(&e, "name").unwrap().to_string();
item.layout_reference = get_attribute(&e, "name");
}
b"Label" => {
item.layout_reference =
LayoutReferenceContainer::parse_label(reader, &e).unwrap();
Some(LayoutReferenceContainer::parse_label(reader, &e).unwrap());
depth -= 1;
}
b"Calculation" => {
item.layout_reference = Calculation::from_xml(reader, &e)
.unwrap()
.display()
.unwrap();
item.layout_reference =
Calculation::from_xml(reader, &e).unwrap().display();
depth -= 1;
}
_ => {}
Expand All @@ -86,14 +84,19 @@ impl LayoutReferenceContainer {
}

pub fn display(&self) -> Option<String> {
let layout_reference = self
.layout_reference
.clone()
.unwrap_or("🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨".to_string());

if self.reference_type == "1" {
Some(format!("Layout: <{}>", self.layout_reference))
Some(format!("Layout: <{}>", layout_reference))
} else if self.reference_type == "3" {
Some(format!("{}: {}", "Layoutname", self.layout_reference))
Some(format!("{}: {}", "Layoutname", layout_reference))
} else if self.reference_type == "4" {
Some(format!("{}: {}", "Layoutnr.", self.layout_reference))
Some(format!("{}: {}", "Layoutnr.", layout_reference))
} else if self.reference_type == "5" {
Some(format!("{}: \"{}\"", "Layout", self.layout_reference))
Some(format!("{}: \"{}\"", "Layout", layout_reference))
} else {
None
}
Expand Down
1 change: 1 addition & 0 deletions src/script_steps/parameters/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ pub(crate) mod field_reference;
pub(crate) mod layout_reference;
pub(crate) mod list;
pub(crate) mod parameter_values;
pub(crate) mod related;
pub(crate) mod select;
pub(crate) mod style;
pub(crate) mod target;
Expand Down
9 changes: 9 additions & 0 deletions src/script_steps/parameters/parameter_values.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use crate::script_steps::parameters::comment::Comment;
use crate::script_steps::parameters::field_reference::FieldReference;
use crate::script_steps::parameters::layout_reference::LayoutReferenceContainer;
use crate::script_steps::parameters::list::List;
use crate::script_steps::parameters::related::Related;
use crate::script_steps::parameters::target::Target;
use crate::script_steps::parameters::window_reference::WindowReference;
use crate::utils::attributes::get_attribute;
Expand Down Expand Up @@ -139,6 +140,14 @@ impl ParameterValues {
}
depth -= 1;
}
"Related" => {
if let Some(param_value) = Related::from_xml(reader, &e) {
if let Some(display) = param_value.display() {
item.parameters.push(display);
}
}
depth -= 1;
}
_ => {
item.parameters
.push(format!(r#"⚠️ PARAMETER "{}" NOT PARSED ⚠️"#, parameter_type));
Expand Down
79 changes: 79 additions & 0 deletions src/script_steps/parameters/related.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
use quick_xml::events::{BytesStart, Event};
use quick_xml::Reader;

use crate::script_steps::parameters::layout_reference::LayoutReferenceContainer;
use crate::utils::attributes::get_attribute;

#[derive(Debug, Default)]
pub struct Related {
pub parameters: Vec<String>,
}

impl Related {
pub fn from_xml(reader: &mut Reader<&[u8]>, _: &BytesStart) -> Option<Related> {
let mut depth = 1;
let mut item = Related {
parameters: Vec::new(),
};

let mut buf: Vec<u8> = Vec::new();
loop {
match reader.read_event_into(&mut buf) {
Err(_) => continue,
Ok(Event::Eof) => break,
Ok(Event::Start(e)) => {
depth += 1;

let element_name = e.name();
match element_name.as_ref() {
b"TableOccurrenceReference" => {
let table_occurrence = get_attribute(&e, "name")
.unwrap_or("🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨".to_string());
item.parameters.push(format!("Table: {}", table_occurrence));
}
b"LayoutReferenceContainer" => {
item.parameters.push(
LayoutReferenceContainer::from_xml(reader, &e)
.unwrap()
.display()
.unwrap_or("".to_string()),
);
depth -= 1;
}
b"WindowReference" => {
item.parameters.push("New window".to_string());
depth -= 1;
}
b"Options" => {
if let Some(show_related) = get_attribute(&e, "ShowRelated") {
if show_related == "True" {
item.parameters.push("Show related".to_string())
}
};
if let Some(match_found_set) = get_attribute(&e, "matchFoundSet") {
if match_found_set == "True" {
item.parameters.push("Match found set".to_string())
}
};
}
_ => {}
}
}
Ok(Event::End(_)) => {
depth -= 1;
if depth == 0 {
break;
}
}
_ => {}
}
buf.clear()
}

Some(item)
}

pub fn display(&self) -> Option<String> {
Some(self.parameters.join(" ; "))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ Wenn [ Hole ( ScriptErgebnis ) = "1" ]
Wenn [ IstLeer ( FMS_CLI__clients::ID ) ]
Gehe zu Layout [ Layout: "CLI__clients" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_CLI__clients ; Layout: "CLI__clients" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Variable setzen [ $error ; 0 ]
# -------------------------------------------------------------
# SET-UP
# -------------------------------------------------------------
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: PUB_FMS__fmserver ; Layout: "Admin API" ; Show related ]
Script ausführen [ Aus Liste ; "Set Config" ]
Schreibe Änderung Datens./Abfrage [ Mit Dialog: OFF ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Wenn [ NICHT IstLeer ( PUB__publickeys::dateAdded ) ]
Ende (wenn)

Schreibe Änderung Datens./Abfrage [ Mit Dialog: OFF ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: PUB_FMS__fmserver ; Layout: "Admin API" ; Show related ]
Script ausführen [ Aus Liste ; "Set Config" ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Variable setzen [ $endpoint ; "/server/config/pkipublickey" ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Wenn [ Hole ( ScriptErgebnis ) = "1" ]
Fenster fixieren
Wenn [ IstLeer ( FMS_PUB__publickeys::ID ) ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_PUB__publickeys ; Layout: "PUB__publickeys" ; Show related ]
Ersetze alle Feldwerte [ PUB__publickeys::zz_sync ; Durch Berechnung ersetzen: "missing" ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Ende (wenn)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ Variable setzen [ $error ; 0 ]
# -------------------------------------------------------------
# SET-UP
# -------------------------------------------------------------
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: PUB_FMS__fmserver ; Layout: "Admin API" ; Show related ]
Script ausführen [ Aus Liste ; "Set Config" ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Variable setzen [ $endpoint ; "/server/config/pkipublickey" ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Wenn [ Hole ( ScriptErgebnis ) = "1" ]
Wenn [ IstLeer ( FMS_FIL__files::ID ) ]
Gehe zu Layout [ Layout: "FIL__files" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_FIL__files ; Layout: "FIL__files" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Wenn [ Hole ( ScriptErgebnis ) = "1" ]
Wenn [ IstLeer ( FMS_PLG__plugins::ID ) ]
Gehe zu Layout [ Layout: "PLG__plugins" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_PLG__plugins ; Layout: "PLG__plugins" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,11 +152,11 @@ Sonst, wenn [ $_param = "cancel schedule" ]
Script ausführen [ Aus Liste ; "List Schedules" ]

Sonst, wenn [ $_param = "schedule" ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_SCH__schedules ; Layout: "Card - Schedule" ; New window ; Layout: "Card - Schedule" ]
Variable setzen [ $$sched.RecordModificationCount ; Hole ( DatensatzÄnderungenAnzahl ) ]

Sonst, wenn [ $_param = "apikey" ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_PUB__publickeys ; Layout: "Card - Public Keys" ; New window ; Layout: "Card - Public Keys" ]
Variable setzen [ $$sched.RecordModificationCount ; Hole ( DatensatzÄnderungenAnzahl ) ]

Sonst, wenn [ $_param = "create apikey" ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Variable setzen [ $error ; 0 ]
# SET-UP
# -------------------------------------------------------------
Fenster fixieren
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: SCH_FMS__fmserver ; Layout: "Admin API" ; Show related ]
Script ausführen [ Aus Liste ; "Set Config" ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ Fenster fixieren
Wenn [ IstLeer ( FMS_SCH__schedules::ID ) ]
Gehe zu Layout [ Layout: "SCH__schedules" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_SCH__schedules ; Layout: "SCH__schedules" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Fenster fixieren
Wenn [ IstLeer ( FMS_SCH__schedules::ID ) ]
Gehe zu Layout [ Layout: "SCH__schedules" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_SCH__schedules ; Layout: "SCH__schedules" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Wenn [ Hole ( ScriptErgebnis ) = "1" ]
Wenn [ IstLeer ( FMS_WPE__wpe::ID ) ]
Gehe zu Layout [ Layout: "WPE__wpe" ; Animation: Ohne ]
Sonst
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: FMS_WPE__wpe ; Layout: "WPE__wpe" ; Show related ]
Alle Datensätze löschen [ Mit Dialog: OFF ]
Ende (wenn)
Variable setzen [ $this.loop ; 0 ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ Gehe zu Ausschnittreihe [ Auswahl: ON ; Erste(r) ]
Gehe zu Ausschnittreihe [ Auswahl: ON ; Erste(r) ]
Gehe zu vorherigem Feld
Gehe zu Datens./Abfrage/Seite [ Erste(r) ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Layout: <Originallayout> ]

# Editing
Löschen [ Auswahl: ON ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ Gehe zu Layout [ Layout: "Colors" ; Animation: Verkleinern ]
Gehe zu Layout [ Layout: "Colors" ; Animation: Überblendung ]

# Some error cases for fmSyntaxColorizer
Gehe zu Layout [ Layout: "" ; Animation: Ohne ]
Gehe zu Layout [ Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ; Animation: Ohne ]
Gehe zu Layout [ Layoutname: <Funktion NICHT vorhanden> ; Animation: Ohne ]
Gehe zu Layout [ Layoutname: /*cf_LayoutName*/ ; Animation: Ohne ]
# and undefined variables
Expand Down Expand Up @@ -190,12 +190,12 @@ Gehe zu Datens./Abfrage/Seite [ Mit Dialog: ON ; $Nr ]
Gehe zu Datens./Abfrage/Seite [ Mit Dialog: ON ; <Funktion NICHT vorhanden> + 1 ]
Gehe zu Datens./Abfrage/Seite [ Mit Dialog: ON ; /*cf_LayoutNumber + 1*/ ]

Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: Syntax.Palette_Active ; Layout: <Originallayout> ; Show related ]
Gehe zu Bezugsdatensatz [ Table: Syntax.Palette_Active ; Layout: <Originallayout> ; Show related ]
Gehe zu Bezugsdatensatz [ Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ; Show related ]
Gehe zu Bezugsdatensatz [ Table: Syntax.GUISyntax ; Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ; New window ; Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ]
Gehe zu Bezugsdatensatz [ Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ; New window ; Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ]
Gehe zu Bezugsdatensatz [ Table: _Home ; Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ; New window ; Layout: "🚨🚨🚨 <BROKEN REFERENCE> 🚨🚨🚨" ]

# =============
# EDITING STEPS
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ Ende (wenn)
Schleife (Anfang) [ Flush: Immer ]
Verlasse Schleife wenn []
Schleife (Ende)
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Layout: <Originallayout> ]
Schreibe Änderung Datens./Abfrage [ Mit Dialog: ON ]
Feldwert setzen [ ; ]
Berechneten Wert einfügen [ Auswahl: ON ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ Gehe zu Objekt []
Gehe zu Ausschnittreihe [ Auswahl: ON ; Erste(r) ]
Gehe zu vorherigem Feld
Gehe zu Datens./Abfrage/Seite [ Erste(r) ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Layout: <Originallayout> ]
Alle Scripts abbrechen
Wenn []
Sonst, wenn []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ Gehe zu Feld []
Gehe zu vorherigem Feld
Gehe zu nächstem Feld
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Layout: <Originallayout> ]
Gehe zu Objekt []
Gehe zu Ausschnittreihe [ Auswahl: ON ; Erste(r) ]
Datensätze zeigen als [ Durchwechseln ]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Regionsmonitor-Script konfigurieren [ ⚠️ PARAMETER "Monitor" NOT PARSED ⚠

# Changed: Layout animations
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Layout: <Originallayout> ]
Neues Fenster [ Style: Dokument ; Layout: <Originallayout> ]


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ expression: output_content
---
# 20120706 MrW

Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: Palette.Color ; Layout: "Colors" ; Show related ]
Wenn [ Hole ( LayoutTabellenname ) <> "_Color" ]
Gehe zu Layout [ Layout: "Colors" ; Animation: Ohne ]
Alle Datensätze anzeigen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ expression: output_content
AnwenderAbbruchZulassen setzen [ OFF ]
Fehleraufzeichnung setzen [ ON ]

Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: Syntax.GUISyntax ; Layout: "GUISyntax" ; Show related ]
Wenn [ NICHT _IsLayoutTableName( _GUISyntax::__ID ) ]
Gehe zu Layout [ Layout: "GUISyntax" ; Animation: Ohne ]
Alle Datensätze anzeigen
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Variable setzen [ $FilePath ; $FolderPath & $FileName ]


Fenster fixieren
Gehe zu Bezugsdatensatz [ ⚠️ PARAMETER "Related" NOT PARSED ⚠️ ]
Gehe zu Bezugsdatensatz [ Table: Palette.Color ; Layout: "Colors" ; Show related ; Match found set ]

Wenn [ Hole( LayoutTabellenname ) <> "_Color" ]
Gehe zu Layout [ Layout: <Originallayout> ; Animation: Ohne ]
Expand Down

0 comments on commit 2ee71d6

Please sign in to comment.