From f507893b4d5251ab7136176c1dccdf56e03398cf Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Thu, 31 Aug 2023 16:46:40 +0200 Subject: [PATCH] Show required dependencies not included in OSC file --- src/model/data_catalogue.rs | 14 +++++++++----- src/model/data_form.rs | 14 +++++++++++--- src/model/requirements.rs | 19 +++++++++++++++++++ src/model/unterformular.rs | 15 +++++++++++---- 4 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/model/data_catalogue.rs b/src/model/data_catalogue.rs index ca5b270..e46b0cd 100644 --- a/src/model/data_catalogue.rs +++ b/src/model/data_catalogue.rs @@ -112,9 +112,10 @@ impl Requires for DataCatalogue { }) .collect::>() .into_iter() - .map(|entry| all.find_property_catalogue(entry.as_str())) - .filter(Option::is_some) - .map(|entry| Requirement::PropertyCatalogue(entry.unwrap())) + .map(|entry| match all.find_property_catalogue(entry.as_str()) { + Some(contained) => Requirement::PropertyCatalogue(contained), + None => Requirement::ExternalPropertyCatalogue(entry), + }) .collect::>() } @@ -125,8 +126,11 @@ impl Requires for DataCatalogue { self.get_required_entries(all) .iter() .map(|entry| match entry { - Requirement::PropertyCatalogue(x) => { - Some(format!(" + {}\n", x.to_listed_string())) + Requirement::PropertyCatalogue(_) => { + Some(format!(" + {}\n", entry.to_string())) + } + Requirement::ExternalPropertyCatalogue(_) => { + Some(format!(" + {}\n", entry.to_string())) } _ => None, }) diff --git a/src/model/data_form.rs b/src/model/data_form.rs index ffb7432..5fd2ffa 100644 --- a/src/model/data_form.rs +++ b/src/model/data_form.rs @@ -242,9 +242,10 @@ impl Requires for DataForm { .iter() .collect::>() .into_iter() - .map(|entry| all.find_data_catalogue(entry.as_str())) - .filter(Option::is_some) - .map(|entry| Requirement::DataCatalogue(entry.unwrap())) + .map(|entry| match all.find_data_catalogue(entry.as_str()) { + Some(contained) => Requirement::DataCatalogue(contained), + None => Requirement::ExternalDataCatalogue(entry.to_string()), + }) .collect::>() } @@ -261,6 +262,10 @@ impl Requires for DataForm { .iter() .map(|inner_entry| match inner_entry { Requirement::PropertyCatalogue(y) => Some(y.to_listed_string()), + Requirement::ExternalPropertyCatalogue(name) => Some(format!( + "Merkmalskatalog (-) '{}' - hier nicht enthalten", + style(name).yellow() + )), _ => None, }) .filter(Option::is_some) @@ -274,6 +279,9 @@ impl Requires for DataForm { Some(format!(" + {}\n{}", x.to_listed_string(), inner)) } } + Requirement::ExternalDataCatalogue(_) => { + Some(format!(" + {}\n", entry.to_string())) + } _ => None, }) .filter(Option::is_some) diff --git a/src/model/requirements.rs b/src/model/requirements.rs index c74659f..04e4592 100644 --- a/src/model/requirements.rs +++ b/src/model/requirements.rs @@ -25,10 +25,29 @@ use crate::model::data_catalogue::DataCatalogue; use crate::model::onkostar_editor::OnkostarEditor; use crate::model::property_catalogue::PropertyCatalogue; +use crate::model::Listable; +#[allow(clippy::enum_variant_names)] pub enum Requirement<'a> { PropertyCatalogue(&'a PropertyCatalogue), DataCatalogue(&'a DataCatalogue), + ExternalPropertyCatalogue(String), + ExternalDataCatalogue(String), +} + +impl ToString for Requirement<'_> { + fn to_string(&self) -> String { + match self { + Requirement::PropertyCatalogue(item) => item.to_listed_string(), + Requirement::DataCatalogue(item) => item.to_listed_string(), + Requirement::ExternalPropertyCatalogue(name) => { + format!("Merkmalskatalog (-) '{}' - hier nicht enthalten", name) + } + Requirement::ExternalDataCatalogue(name) => { + format!("Datenkatalog (-) '{}' - hier nicht enthalten", name) + } + } + } } pub trait Requires { diff --git a/src/model/unterformular.rs b/src/model/unterformular.rs index d08fa39..f3a7509 100644 --- a/src/model/unterformular.rs +++ b/src/model/unterformular.rs @@ -265,9 +265,10 @@ impl Requires for Unterformular { .iter() .collect::>() .into_iter() - .map(|entry| all.find_data_catalogue(entry.as_str())) - .filter(Option::is_some) - .map(|entry| Requirement::DataCatalogue(entry.unwrap())) + .map(|entry| match all.find_data_catalogue(entry.as_str()) { + Some(contained) => Requirement::DataCatalogue(contained), + None => Requirement::ExternalDataCatalogue(entry.to_string()), + }) .collect::>() } @@ -283,7 +284,10 @@ impl Requires for Unterformular { .get_required_entries(all) .iter() .map(|inner_entry| match inner_entry { - Requirement::PropertyCatalogue(y) => Some(y.to_listed_string()), + Requirement::PropertyCatalogue(_) => Some(inner_entry.to_string()), + Requirement::ExternalPropertyCatalogue(_) => { + Some(inner_entry.to_string()) + } _ => None, }) .filter(Option::is_some) @@ -297,6 +301,9 @@ impl Requires for Unterformular { Some(format!(" + {}\n{}", x.to_listed_string(), inner)) } } + Requirement::ExternalDataCatalogue(_) => { + Some(format!(" + {}\n", entry.to_string())) + } _ => None, }) .filter(Option::is_some)