use crate::{BusinessProcessModelAndNotation, parser::parser_state::GlobalIndex};
use anyhow::Result;
use ebi_activity_key::Activity;
pub(crate) static EMPTY_FLOWS: Vec<usize> = vec![];
pub trait BPMNObject {
fn global_index(&self) -> GlobalIndex;
fn local_index(&self) -> usize;
fn id(&self) -> &str;
fn activity(&self) -> Option<Activity>;
fn is_unconstrained_start_event(&self, bpmn: &BusinessProcessModelAndNotation) -> Result<bool>;
fn is_end_event(&self) -> bool;
fn incoming_sequence_flows(&self) -> &[usize];
fn outgoing_sequence_flows(&self) -> &[usize];
fn incoming_message_flows(&self) -> &[usize];
fn outgoing_message_flows(&self) -> &[usize];
fn can_start_process_instance(&self, bpmn: &BusinessProcessModelAndNotation) -> Result<bool>;
fn outgoing_message_flows_always_have_tokens(&self) -> bool;
fn outgoing_messages_cannot_be_removed(&self) -> bool;
fn incoming_messages_are_ignored(&self) -> bool;
fn can_have_incoming_sequence_flows(&self) -> bool;
fn can_have_outgoing_sequence_flows(&self) -> bool;
}
impl BPMNObject for BusinessProcessModelAndNotation {
fn global_index(&self) -> GlobalIndex {
self.definitions_index
}
fn local_index(&self) -> usize {
0
}
fn id(&self) -> &str {
&self.definitions_id
}
fn activity(&self) -> Option<Activity> {
None
}
fn is_unconstrained_start_event(
&self,
_bpmn: &BusinessProcessModelAndNotation,
) -> Result<bool> {
Ok(false)
}
fn is_end_event(&self) -> bool {
false
}
fn incoming_sequence_flows(&self) -> &[usize] {
&EMPTY_FLOWS
}
fn outgoing_sequence_flows(&self) -> &[usize] {
&EMPTY_FLOWS
}
fn incoming_message_flows(&self) -> &[usize] {
&EMPTY_FLOWS
}
fn outgoing_message_flows(&self) -> &[usize] {
&EMPTY_FLOWS
}
fn can_start_process_instance(&self, _bpmn: &BusinessProcessModelAndNotation) -> Result<bool> {
Ok(false)
}
fn outgoing_message_flows_always_have_tokens(&self) -> bool {
false
}
fn outgoing_messages_cannot_be_removed(&self) -> bool {
false
}
fn incoming_messages_are_ignored(&self) -> bool {
false
}
fn can_have_incoming_sequence_flows(&self) -> bool {
false
}
fn can_have_outgoing_sequence_flows(&self) -> bool {
false
}
}