mirror of
https://github.com/pcvolkmer/osc-variant.git
synced 2025-04-20 20:26:50 +00:00
Filter printed elements for list and tree sub command
This commit is contained in:
parent
ce8dca1c10
commit
d30c2991c0
@ -69,6 +69,12 @@ Ohne eine Angabe der Ausgabedatei wird auf die Standardausgabe ausgegeben.
|
|||||||
OSC-Dateien sind XML-Dateien. Diese Anwendung ermöglicht optional die Ausgabe als kompaktere XML-Datei ohne Zeilenumbrüche.
|
OSC-Dateien sind XML-Dateien. Diese Anwendung ermöglicht optional die Ausgabe als kompaktere XML-Datei ohne Zeilenumbrüche.
|
||||||
Hierzu ist die Option `--compact` vorgesehen. Es können, je nach Datei, bis zu 30% eingespart werden.
|
Hierzu ist die Option `--compact` vorgesehen. Es können, je nach Datei, bis zu 30% eingespart werden.
|
||||||
|
|
||||||
|
#### Filter
|
||||||
|
|
||||||
|
Bei der Auflistung von Inhalten ist es möglich, die Ausgaben anhand des Namens zu filtern.
|
||||||
|
Hierzu ist die Option `--filter=` vorgesehen.
|
||||||
|
Wird diese angewendet, werden nur Inhalte ausgegeben, deren Name die angegebene Zeichenkette beinhalten.
|
||||||
|
|
||||||
#### Sortierung
|
#### Sortierung
|
||||||
|
|
||||||
Bei der Auflistung der Inhalte, kann die Option `--sorted` dazu verwendet werden, die angezeigten Einträge alphabetisch zu sortieren.
|
Bei der Auflistung der Inhalte, kann die Option `--sorted` dazu verwendet werden, die angezeigten Einträge alphabetisch zu sortieren.
|
||||||
|
@ -47,6 +47,8 @@ pub enum Command {
|
|||||||
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
|
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
|
||||||
)]
|
)]
|
||||||
sorted: bool,
|
sorted: bool,
|
||||||
|
#[arg(long = "filter", help = "Filtere Ausgabe nach Name (Optional)")]
|
||||||
|
filter: Option<String>,
|
||||||
},
|
},
|
||||||
#[command(about = "Zeigt Kataloge und Formulare mit Revision und Abhängigkeiten an.")]
|
#[command(about = "Zeigt Kataloge und Formulare mit Revision und Abhängigkeiten an.")]
|
||||||
Tree {
|
Tree {
|
||||||
@ -56,6 +58,8 @@ pub enum Command {
|
|||||||
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
|
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
|
||||||
)]
|
)]
|
||||||
sorted: bool,
|
sorted: bool,
|
||||||
|
#[arg(long = "filter", help = "Filtere Ausgabe nach Name (Optional)")]
|
||||||
|
filter: Option<String>,
|
||||||
},
|
},
|
||||||
#[command(about = "Modifiziert die angegebene Datei anhand der Profildatei")]
|
#[command(about = "Modifiziert die angegebene Datei anhand der Profildatei")]
|
||||||
Modify {
|
Modify {
|
||||||
|
20
src/main.rs
20
src/main.rs
@ -112,18 +112,34 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
let cli = Cli::parse();
|
let cli = Cli::parse();
|
||||||
|
|
||||||
match cli.command {
|
match cli.command {
|
||||||
Command::List { inputfile, sorted } => {
|
Command::List {
|
||||||
|
inputfile,
|
||||||
|
sorted,
|
||||||
|
filter,
|
||||||
|
} => {
|
||||||
let mut data = read_inputfile(inputfile)?;
|
let mut data = read_inputfile(inputfile)?;
|
||||||
if sorted {
|
if sorted {
|
||||||
data.sorted()
|
data.sorted()
|
||||||
}
|
}
|
||||||
|
if let Some(name) = filter {
|
||||||
|
OnkostarEditor::print_list_filtered(&mut data, name.as_str());
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
data.print_list();
|
data.print_list();
|
||||||
}
|
}
|
||||||
Command::Tree { inputfile, sorted } => {
|
Command::Tree {
|
||||||
|
inputfile,
|
||||||
|
sorted,
|
||||||
|
filter,
|
||||||
|
} => {
|
||||||
let mut data = read_inputfile(inputfile)?;
|
let mut data = read_inputfile(inputfile)?;
|
||||||
if sorted {
|
if sorted {
|
||||||
data.sorted()
|
data.sorted()
|
||||||
}
|
}
|
||||||
|
if let Some(name) = filter {
|
||||||
|
OnkostarEditor::print_tree_filtered(&mut data, name.as_str());
|
||||||
|
return Ok(());
|
||||||
|
}
|
||||||
OnkostarEditor::print_tree(&data);
|
OnkostarEditor::print_tree(&data);
|
||||||
}
|
}
|
||||||
Command::Modify {
|
Command::Modify {
|
||||||
|
@ -130,6 +130,37 @@ impl OnkostarEditor {
|
|||||||
Self::print_items("Unterformulare", &self.editor.unterformular);
|
Self::print_items("Unterformulare", &self.editor.unterformular);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn filter_by_name_contains(&mut self, name: &str) {
|
||||||
|
self.editor
|
||||||
|
.property_catalogue
|
||||||
|
.retain(|e| e.get_name().contains(name));
|
||||||
|
self.editor
|
||||||
|
.data_catalogue
|
||||||
|
.retain(|e| e.get_name().contains(name));
|
||||||
|
self.editor
|
||||||
|
.data_form
|
||||||
|
.retain(|e| e.get_name().contains(name));
|
||||||
|
self.editor
|
||||||
|
.unterformular
|
||||||
|
.retain(|e| e.get_name().contains(name));
|
||||||
|
}
|
||||||
|
pub fn print_list_filtered(&mut self, name: &str) {
|
||||||
|
println!(
|
||||||
|
"Die Datei wurde am {} mit {} in Version {} erstellt.\n\nFolgende Inhalte für '{}' sind gespeichert",
|
||||||
|
style(&self.info_xml.datum_xml).yellow(),
|
||||||
|
style(&self.info_xml.name).yellow(),
|
||||||
|
style(&self.info_xml.version).yellow(),
|
||||||
|
name
|
||||||
|
);
|
||||||
|
|
||||||
|
self.filter_by_name_contains(name);
|
||||||
|
|
||||||
|
Self::print_items("Merkmalskataloge", &self.editor.property_catalogue);
|
||||||
|
Self::print_items("Datenkataloge", &self.editor.data_catalogue);
|
||||||
|
Self::print_items("Formulare", &self.editor.data_form);
|
||||||
|
Self::print_items("Unterformulare", &self.editor.unterformular);
|
||||||
|
}
|
||||||
|
|
||||||
fn print_items(title: &str, list: &[impl Listable]) {
|
fn print_items(title: &str, list: &[impl Listable]) {
|
||||||
print!("\n{} {}", list.len(), style(title).underlined());
|
print!("\n{} {}", list.len(), style(title).underlined());
|
||||||
println!(
|
println!(
|
||||||
@ -154,6 +185,23 @@ impl OnkostarEditor {
|
|||||||
self.print_items_tree("Unterformulare", &self.editor.unterformular);
|
self.print_items_tree("Unterformulare", &self.editor.unterformular);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn print_tree_filtered(&mut self, name: &str) {
|
||||||
|
println!(
|
||||||
|
"Die Datei wurde am {} mit {} in Version {} erstellt.\n\nFolgende Inhalte für '{}' sind gespeichert",
|
||||||
|
style(&self.info_xml.datum_xml).yellow(),
|
||||||
|
style(&self.info_xml.name).yellow(),
|
||||||
|
style(&self.info_xml.version).yellow(),
|
||||||
|
name
|
||||||
|
);
|
||||||
|
|
||||||
|
self.filter_by_name_contains(name);
|
||||||
|
|
||||||
|
Self::print_items("Merkmalskataloge", &self.editor.property_catalogue);
|
||||||
|
self.print_items_tree("Datenkataloge", &self.editor.data_catalogue);
|
||||||
|
self.print_items_tree("Formulare", &self.editor.data_form);
|
||||||
|
self.print_items_tree("Unterformulare", &self.editor.unterformular);
|
||||||
|
}
|
||||||
|
|
||||||
fn print_items_tree(&self, title: &str, list: &[impl Requires]) {
|
fn print_items_tree(&self, title: &str, list: &[impl Requires]) {
|
||||||
print!("\n{} {}", list.len(), style(title).underlined());
|
print!("\n{} {}", list.len(), style(title).underlined());
|
||||||
println!(
|
println!(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user