1
0
mirror of https://github.com/pcvolkmer/osc-variant.git synced 2025-04-19 11:46:50 +00:00

Filter printed elements for list and tree sub command

This commit is contained in:
Paul-Christian Volkmer 2023-09-04 13:24:28 +02:00
parent ce8dca1c10
commit d30c2991c0
4 changed files with 76 additions and 2 deletions

View File

@ -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.
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
Bei der Auflistung der Inhalte, kann die Option `--sorted` dazu verwendet werden, die angezeigten Einträge alphabetisch zu sortieren.

View File

@ -47,6 +47,8 @@ pub enum Command {
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
)]
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.")]
Tree {
@ -56,6 +58,8 @@ pub enum Command {
help = "Sortiere Kataloge und Formulare nach Name (Optional)"
)]
sorted: bool,
#[arg(long = "filter", help = "Filtere Ausgabe nach Name (Optional)")]
filter: Option<String>,
},
#[command(about = "Modifiziert die angegebene Datei anhand der Profildatei")]
Modify {

View File

@ -112,18 +112,34 @@ fn main() -> Result<(), Box<dyn Error>> {
let cli = Cli::parse();
match cli.command {
Command::List { inputfile, sorted } => {
Command::List {
inputfile,
sorted,
filter,
} => {
let mut data = read_inputfile(inputfile)?;
if sorted {
data.sorted()
}
if let Some(name) = filter {
OnkostarEditor::print_list_filtered(&mut data, name.as_str());
return Ok(());
}
data.print_list();
}
Command::Tree { inputfile, sorted } => {
Command::Tree {
inputfile,
sorted,
filter,
} => {
let mut data = read_inputfile(inputfile)?;
if sorted {
data.sorted()
}
if let Some(name) = filter {
OnkostarEditor::print_tree_filtered(&mut data, name.as_str());
return Ok(());
}
OnkostarEditor::print_tree(&data);
}
Command::Modify {

View File

@ -130,6 +130,37 @@ impl OnkostarEditor {
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]) {
print!("\n{} {}", list.len(), style(title).underlined());
println!(
@ -154,6 +185,23 @@ impl OnkostarEditor {
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]) {
print!("\n{} {}", list.len(), style(title).underlined());
println!(