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

Sort dependencies and requirements

This commit is contained in:
Paul-Christian Volkmer 2023-09-30 13:26:25 +02:00
parent 8cae6ce706
commit d0de76770f
4 changed files with 32 additions and 3 deletions

View File

@ -102,7 +102,8 @@ impl Comparable for DataCatalogue {
impl Requires for DataCatalogue { impl Requires for DataCatalogue {
fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> { fn get_required_entries<'a>(&'a self, all: &'a OnkostarEditor) -> Vec<Requirement> {
self.entries let mut result = self
.entries
.entry .entry
.iter() .iter()
.filter(|&entry| entry.property_catalogue.is_some()) .filter(|&entry| entry.property_catalogue.is_some())
@ -116,7 +117,10 @@ impl Requires for DataCatalogue {
Some(contained) => Requirement::PropertyCatalogue(contained), Some(contained) => Requirement::PropertyCatalogue(contained),
None => Requirement::ExternalPropertyCatalogue(entry), None => Requirement::ExternalPropertyCatalogue(entry),
}) })
.collect::<Vec<_>>() .collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
result
} }
fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String { fn to_requirement_string<'a>(&'a self, all: &'a OnkostarEditor) -> String {

View File

@ -267,6 +267,7 @@ impl Requires for DataForm {
None => Requirement::ExternalDataCatalogue(entry.to_string()), None => Requirement::ExternalDataCatalogue(entry.to_string()),
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
let referenced_forms = &mut self let referenced_forms = &mut self
.entries .entries
@ -287,6 +288,7 @@ impl Requires for DataForm {
}, },
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
referenced_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(referenced_forms); result.append(referenced_forms);
let sub_forms = &mut self let sub_forms = &mut self
@ -308,6 +310,7 @@ impl Requires for DataForm {
}, },
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
sub_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(sub_forms); result.append(sub_forms);
result result

View File

@ -27,7 +27,7 @@ use crate::model::data_form::DataForm;
use crate::model::onkostar_editor::OnkostarEditor; use crate::model::onkostar_editor::OnkostarEditor;
use crate::model::property_catalogue::PropertyCatalogue; use crate::model::property_catalogue::PropertyCatalogue;
use crate::model::unterformular::Unterformular; use crate::model::unterformular::Unterformular;
use crate::model::Listable; use crate::model::{Comparable, Listable, Sortable};
#[allow(clippy::enum_variant_names)] #[allow(clippy::enum_variant_names)]
pub enum Requirement<'a> { pub enum Requirement<'a> {
@ -48,6 +48,25 @@ pub enum Requirement<'a> {
ExternalUnterformularSubform(String), 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<'_> { impl ToString for Requirement<'_> {
fn to_string(&self) -> String { fn to_string(&self) -> String {
match self { match self {

View File

@ -271,6 +271,7 @@ impl Requires for Unterformular {
None => Requirement::ExternalDataCatalogue(entry.to_string()), None => Requirement::ExternalDataCatalogue(entry.to_string()),
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
result.sort_unstable_by_key(|item| item.sorting_key());
let referenced_forms = &mut self let referenced_forms = &mut self
.entries .entries
@ -291,6 +292,7 @@ impl Requires for Unterformular {
}, },
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
referenced_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(referenced_forms); result.append(referenced_forms);
let sub_forms = &mut self let sub_forms = &mut self
@ -312,6 +314,7 @@ impl Requires for Unterformular {
}, },
}) })
.collect::<Vec<_>>(); .collect::<Vec<_>>();
sub_forms.sort_unstable_by_key(|item| item.sorting_key());
result.append(sub_forms); result.append(sub_forms);
result result