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:
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.
|
||||
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.
|
||||
|
@ -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 {
|
||||
|
20
src/main.rs
20
src/main.rs
@ -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 {
|
||||
|
@ -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!(
|
||||
|
Loading…
x
Reference in New Issue
Block a user