use crate::ebi_framework::{
ebi_file_handler::EbiFileHandler,
ebi_input::{EbiObjectImporter, EbiObjectImporterFallible, EbiTraitImporter},
ebi_output::EbiObjectExporter,
object_importers::{ImportAsLabelledPetriNetObject, TryToBusinessProcessModelAndNotationObject},
trait_importers::{ImportAsActivitiesTrait, ImportAsGraphableTrait, ImportAsSemanticsTrait},
validate::Validate,
};
use ebi_objects::{DirectlyFollowsModel, Exportable, Importable};
pub const EBI_DIRECTLY_FOLLOWS_MODEL: EbiFileHandler = EbiFileHandler {
name: "directly follows model",
article: "a",
file_extension: "dfm",
is_binary: false,
format_specification: DirectlyFollowsModel::FILE_FORMAT_SPECIFICATION_LATEX,
validator: Some(DirectlyFollowsModel::validate),
trait_importers: &[
EbiTraitImporter::Activities(
DirectlyFollowsModel::import_as_activities_trait,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
EbiTraitImporter::Semantics(
DirectlyFollowsModel::import_as_semantics_trait,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
EbiTraitImporter::Graphable(
DirectlyFollowsModel::import_as_graphable_trait,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
],
object_importers: &[
EbiObjectImporter::DirectlyFollowsModel(
DirectlyFollowsModel::import_as_object,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
EbiObjectImporter::LabelledPetriNet(
DirectlyFollowsModel::import_as_labelled_petri_net_object,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
],
object_importers_fallible: &[
EbiObjectImporterFallible::BusinessProcessModelAndNotation(
DirectlyFollowsModel::try_import_as_business_process_model_and_notation_object,
DirectlyFollowsModel::IMPORTER_PARAMETERS,
),
],
object_exporters: &[
EbiObjectExporter::DirectlyFollowsModel(DirectlyFollowsModel::export_from_object),
EbiObjectExporter::StochasticDirectlyFollowsModel(DirectlyFollowsModel::export_from_object),
EbiObjectExporter::DirectlyFollowsGraph(DirectlyFollowsModel::export_from_object),
],
object_exporters_fallible: &[],
java_object_handlers: &[],
};
#[cfg(test)]
mod tests {
use std::fs;
use ebi_objects::{ActivityKey, DirectlyFollowsModel, HasActivityKey, TranslateActivityKey};
#[test]
fn activity_key_translating() {
let fin = fs::read_to_string("testfiles/a-b_star.dfm").unwrap();
let mut dfm = fin.parse::<DirectlyFollowsModel>().unwrap();
let mut activity_key = ActivityKey::new();
let x = activity_key.process_activity("xyz");
dfm.translate_using_activity_key(&mut activity_key);
assert_eq!(
dfm.activity_key().get_activity_label(&x),
activity_key.get_activity_label(&x)
);
}
}