1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
use crate::prelude::Agenda;
use super::{AgendaManager, Entity};
/// The [EntityCollection] should be implemented by objects which compose multiple entities.
///
pub trait EntityCollection: AgendaManager {
/// Adds an entity to this object's children.
///
/// # Arguments
///
/// * `entity` - The entity to add.
/// * `agenda` - Assigns the entity to a specific agenda. If none is specified will assign to Agenda::ALWAYS. (optional)
/// * `is_added_to_view` - If true will add the child entity's view to this object's view. (optional, default: false)
/// * `view_priority` - Sets the child entity's view stack priority order (higher numbers appear closer to the top of the stack). (optional, default: 0)
///
// TODO: Return Added entity (to allow decoration). Or null if addition was unsuccessful.
fn add_entity(
&self,
entity: Box<dyn Entity>,
agenda: Option<Agenda>,
is_added_to_view: Option<bool>,
view_priority: Option<i32>,
);
// TODO: -> Box<dyn Entity>;
/// Removes an entity from this object's children.
/// # Arguments
///
/// * `entity` - The entity to remove.
/// * `agenda` - If set then will only remove the specified entity from this agenda, else will remove from all agendas. (optional)
/// * `is_removed_from_view` - If true the child entity's view will be removed from this object's view. (optional, default: false)
///
fn remove_entity(&self, entity: Box<dyn Entity>, agenda: Option<Agenda>, is_removed_from_view: Option<bool>);
/// Retrieves all child entities.
/// Return Array of matching entities.
///
/// Consider this a runtime only method, rather than calling it during constructor or initialization phases.
///
/// # Arguments
///
/// * `agenda` - Used to filter results to the specified agenda. (optional)
///
fn get_entities(&self, agenda: Option<Agenda>) -> Vec<Box<dyn Entity>>;
// /// Retrieves all child entities that match type.
// /// Return Array of matching entities.
// ///
// /// Consider this a runtime only method, rather than calling it during constructor or initialization phases.
// ///
// /// # Arguments
// ///
// /// * `classType` - The type of class to match (can be any class, type or interface).
// /// * `agenda` - Used to filter results to the specified agenda.
// /// * `is_bubble_down` - Set to true if you want to search this object's children for the requested entity. (optional, default: false)
// /// * `is_bubble_up` - Set to true if you want to search this object's parent for the requested entity. (optional, default: false)
// /// * `is_bubble_everywhere` - Set to true if you want to search the entire entity traversal stack for the requested entity. (optional, default: false)
// ///
// fn get_entities_by_class<T>(
// classType: Class<T>,
// agenda: Option<Agenda>,
// is_bubble_down: Option<bool>,
// is_bubble_up: Option<bool>,
// is_bubble_everywhere: Option<bool>,
// ) -> Vec<T>;
/// Retrieves the child entity with the specified id.
/// Return The requested entity or null if no entity with this id was found.
/// Consider this a runtime only method, rather than calling it during constructor or initialization phases.
///
/// # Arguments
///
/// * `id` - The unique identifier of the entity you want to retrieve.
/// * `agenda` - Used to filter results to the specified agenda.
/// * `is_bubble_down` - Set to true if you want to search this object's children for the requested entity.
/// * `is_bubble_up` - Set to true if you want to search this object's parent for the requested entity.
/// * `is_bubble_everywhere` - Set to true if you want to search the entire entity traversal stack for the requested entity.
///
fn get_entity_by_id(
&self,
id: String,
agenda: Option<Agenda>,
is_bubble_down: Option<bool>,
is_bubble_up: Option<bool>,
is_bubble_everywhere: Option<bool>,
) -> Box<dyn Entity>;
}