From d0de76770fdf04b87f9b91016b078083db5e3e69 Mon Sep 17 00:00:00 2001 From: Paul-Christian Volkmer Date: Sat, 30 Sep 2023 13:26:25 +0200 Subject: [PATCH] Sort dependencies and requirements --- src/model/data_catalogue.rs | 8 ++++++-- src/model/data_form.rs | 3 +++ src/model/requirements.rs | 21 ++++++++++++++++++++- src/model/unterformular.rs | 3 +++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/model/data_catalogue.rs b/src/model/data_catalogue.rs index 750ee47..ed360f6 100644 --- a/src/model/data_catalogue.rs +++ b/src/model/data_catalogue.rs @@ -102,7 +102,8 @@ impl Comparable for DataCatalogue { impl Requires for DataCatalogue { fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec { - self.entries + let mut result = self + .entries .entry .iter() .filter(|&entry| entry.property_catalogue.is_some()) @@ -116,7 +117,10 @@ impl Requires for DataCatalogue { Some(contained) => Requirement::PropertyCatalogue(contained), None => Requirement::ExternalPropertyCatalogue(entry), }) - .collect::>() + .collect::>(); + result.sort_unstable_by_key(|item| item.sorting_key()); + + result } fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { diff --git a/src/model/data_form.rs b/src/model/data_form.rs index 68362d7..6e863dc 100644 --- a/src/model/data_form.rs +++ b/src/model/data_form.rs @@ -267,6 +267,7 @@ impl Requires for DataForm { None => Requirement::ExternalDataCatalogue(entry.to_string()), }) .collect::>(); + result.sort_unstable_by_key(|item| item.sorting_key()); let referenced_forms = &mut self .entries @@ -287,6 +288,7 @@ impl Requires for DataForm { }, }) .collect::>(); + referenced_forms.sort_unstable_by_key(|item| item.sorting_key()); result.append(referenced_forms); let sub_forms = &mut self @@ -308,6 +310,7 @@ impl Requires for DataForm { }, }) .collect::>(); + sub_forms.sort_unstable_by_key(|item| item.sorting_key()); result.append(sub_forms); result diff --git a/src/model/requirements.rs b/src/model/requirements.rs index 84595d6..4a3fb65 100644 --- a/src/model/requirements.rs +++ b/src/model/requirements.rs @@ -27,7 +27,7 @@ use crate::model::data_form::DataForm; use crate::model::onkostar_editor::OnkostarEditor; use crate::model::property_catalogue::PropertyCatalogue; use crate::model::unterformular::Unterformular; -use crate::model::Listable; +use crate::model::{Comparable, Listable, Sortable}; #[allow(clippy::enum_variant_names)] pub enum Requirement<'a> { @@ -48,6 +48,25 @@ pub enum Requirement<'a> { ExternalUnterformularSubform(String), } +impl Sortable for Requirement<'_> { + fn sorting_key(&self) -> String { + match self { + Requirement::PropertyCatalogue(item) => item.get_name(), + Requirement::DataCatalogue(item) => item.get_name(), + Requirement::DataFormReference(item) => item.get_name(), + Requirement::UnterformularReference(item) => item.get_name(), + Requirement::DataFormSubform(item) => item.get_name(), + Requirement::UnterformularSubform(item) => item.get_name(), + Requirement::ExternalPropertyCatalogue(name) + | Requirement::ExternalDataCatalogue(name) + | Requirement::ExternalDataFormReference(name) + | Requirement::ExternalDataFormSubform(name) + | Requirement::ExternalUnterformularReference(name) + | Requirement::ExternalUnterformularSubform(name) => name.to_string(), + } + } +} + impl ToString for Requirement<'_> { fn to_string(&self) -> String { match self { diff --git a/src/model/unterformular.rs b/src/model/unterformular.rs index d096552..9459024 100644 --- a/src/model/unterformular.rs +++ b/src/model/unterformular.rs @@ -271,6 +271,7 @@ impl Requires for Unterformular { None => Requirement::ExternalDataCatalogue(entry.to_string()), }) .collect::>(); + result.sort_unstable_by_key(|item| item.sorting_key()); let referenced_forms = &mut self .entries @@ -291,6 +292,7 @@ impl Requires for Unterformular { }, }) .collect::>(); + referenced_forms.sort_unstable_by_key(|item| item.sorting_key()); result.append(referenced_forms); let sub_forms = &mut self @@ -312,6 +314,7 @@ impl Requires for Unterformular { }, }) .collect::>(); + sub_forms.sort_unstable_by_key(|item| item.sorting_key()); result.append(sub_forms); result