use crate::activity::{Activity, ActivityError, ActivityFactory};
use crate::elements::event::{
EndEventActivity, IntermediateCatchEventActivity, IntermediateThrowEventActivity,
StartEventActivity,
};
use crate::elements::gateway::{
ExclusiveGatewayActivity, InclusiveGatewayActivity, ParallelGatewayActivity,
};
use crate::elements::task::{
ManualTaskActivity, ScriptTaskActivity, ServiceTaskActivity, UserTaskActivity,
};
use crate::model::ProcessElement;
use std::sync::Arc;
#[derive(Debug)]
pub struct DefaultActivityFactory;
impl DefaultActivityFactory {
pub fn new() -> Self {
Self
}
}
impl Default for DefaultActivityFactory {
fn default() -> Self {
Self::new()
}
}
impl ActivityFactory for DefaultActivityFactory {
fn create_activity(&self, element: &ProcessElement) -> Result<Arc<dyn Activity>, ActivityError> {
match element {
ProcessElement::StartEvent(e) => {
Ok(Arc::new(StartEventActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::EndEvent(e) => {
Ok(Arc::new(EndEventActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::IntermediateCatchEvent(e) => Ok(Arc::new(IntermediateCatchEventActivity::new(
e.clone(),
)) as Arc<dyn Activity>),
ProcessElement::IntermediateThrowEvent(e) => Ok(Arc::new(IntermediateThrowEventActivity::new(
e.clone(),
)) as Arc<dyn Activity>),
ProcessElement::ServiceTask(e) => {
Ok(Arc::new(ServiceTaskActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::UserTask(e) => {
Ok(Arc::new(UserTaskActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::ScriptTask(e) => {
Ok(Arc::new(ScriptTaskActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::ManualTask(e) => {
Ok(Arc::new(ManualTaskActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::ExclusiveGateway(e) => {
Ok(Arc::new(ExclusiveGatewayActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::ParallelGateway(e) => {
Ok(Arc::new(ParallelGatewayActivity::new(e.clone())) as Arc<dyn Activity>)
}
ProcessElement::InclusiveGateway(e) => {
Ok(Arc::new(InclusiveGatewayActivity::new(e.clone())) as Arc<dyn Activity>)
}
}
}
}