Show form references using tree sub command

This commit is contained in:
2023-09-03 17:31:38 +02:00
parent 31eda3efc9
commit 8edd50feb4
5 changed files with 136 additions and 6 deletions

View File

@@ -260,7 +260,8 @@ impl Comparable for Unterformular {
impl Requires for Unterformular {
fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> {
self.data_catalogues
let mut data_catalogues = self
.data_catalogues
.data_catalogue
.iter()
.collect::<HashSet<_>>()
@@ -269,7 +270,45 @@ impl Requires for Unterformular {
Some(contained) => Requirement::DataCatalogue(contained),
None => Requirement::ExternalDataCatalogue(entry.to_string()),
})
.collect::<Vec<_>>()
.collect::<Vec<_>>();
let data_forms = &mut self
.entries
.entry
.iter()
.filter(|&entry| entry.get_type() == "formReference")
.filter_map(|entry| match &entry.referenced_data_form {
Some(name) => Some(name),
None => None,
})
.collect::<HashSet<_>>()
.into_iter()
.map(|entry| match all.find_data_form(entry.as_str()) {
Some(contained) => Requirement::DataFormReference(contained),
None => Requirement::ExternalDataFormReference(entry.to_string()),
})
.collect::<Vec<_>>();
data_catalogues.append(data_forms);
let unterformulare = &mut self
.entries
.entry
.iter()
.filter(|&entry| entry.get_type() == "formReference")
.filter_map(|entry| match &entry.referenced_data_form {
Some(name) => Some(name),
None => None,
})
.collect::<HashSet<_>>()
.into_iter()
.map(|entry| match all.find_unterformular(entry.as_str()) {
Some(contained) => Requirement::UnterformularReference(contained),
None => Requirement::ExternalUnterformularReference(entry.to_string()),
})
.collect::<Vec<_>>();
data_catalogues.append(unterformulare);
data_catalogues
}
fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String {
@@ -304,6 +343,12 @@ impl Requires for Unterformular {
Requirement::ExternalDataCatalogue(_) => {
Some(format!(" + {}\n", entry.to_string()))
}
Requirement::UnterformularReference(_) => {
Some(format!(" > {}\n", entry.to_string()))
}
Requirement::ExternalUnterformularReference(_) => {
Some(format!(" > {}\n", entry.to_string()))
}
_ => None,
})
.filter(Option::is_some)