transformation MXML2KDM (mxml:mxml, event:event){
key event::EventModel {name};
key kdm::ExtensionFamily
{name};
key kdm::Stereotype {name};
key event::EventResource{name};
key event::Event {name, kind, taggedValue};
key kdm::TagDefinition
{tag};
key event::EventRelationship {from, to};
key code::CodeModel {name};
key code::Package {name};
key code::CodeElement {name, stereotype};
top relation eventLog2eventModel {
xModelName : String;
checkonly domain mxml log:mxml::WorkflowLog {
name
= xModelName
};
enforce domain event eventModel:event::EventModel{
name
= xModelName,
extensionFamily = runtimeModelExtension
: kdm::ExtensionFamily {
name
= 'EventLogExtensionFamily',
stereotype
= stProcess : kdm::Stereotype
{
name
= 'Process',
tag
= tagProcess : kdm::TagDefinition {tag = 'Process'}
},
stereotype
= stProcessInstance : kdm::Stereotype
{
name
= 'ProcessInstance',
tag
= tagProcessInstance : kdm::TagDefinition {tag = 'ProcessInstance'}
},
stereotype
= stOriginator : kdm::Stereotype
{
name
= 'Originator',
tag
= tagOriginator : kdm::TagDefinition {tag = 'Originator'}
},
stereotype
= stTimestamp : kdm::Stereotype
{
name
= 'Timestamp',
tag
= tagTimestamp : kdm::TagDefinition {tag = 'Timestamp'}
}
}
};
}
top relation process2eventResource {
xEventModelName : String;
xProcessName : String;
checkonly domain mxml pro:mxml::Process
{
name
= xProcessName,
workflowLog = wlog:mxml::WorkflowLog{
name
= xEventModelName
}
};
enforce domain event eventModel:event::EventModel{
name
= xEventModelName,
eventElement = eRes:event::EventResource {
name
= xProcessName,
stereotype
= stProcess : kdm::Stereotype
{
name
= 'Process',
tag
= tagProcess : kdm::TagDefinition {tag = 'Process'}
}
}
};
when {
eventLog2eventModel(wlog, eventModel);
}
}
top relation processInstance2eventResource {
xEventModelName : String;
xProcessName : String;
xProcessInstanceName :
String;
checkonly domain mxml proInst:mxml::ProcessInstance {
name
= xProcessInstanceName,
process
= pro:mxml::Process {
name
= xProcessName,
workflowLog = wlog:mxml::WorkflowLog{
name
= xEventModelName
}
}
};
enforce domain event eventModel:event::EventModel{
name
= xEventModelName,
eventElement = eRes:event::EventResource {
name
= xProcessName,
eventElement = eRes2:event::EventResource
{
name
= xProcessInstanceName,
stereotype
= st : kdm::Stereotype {
name
= 'ProcessInstance',
tag
= tagProcessInstance : kdm::TagDefinition {tag = 'ProcessInstance'}
}
}
}
};
when {
process2eventResource(pro,
eventModel);
}
}
top relation auditTrailEntry2Event {
xEventName : String;
xEventType : String;
xOriginatorName : String;
xDate : String;
xProcessInstanceName :
String;
xProcessName : String;
xModelName : String;
checkonly domain mxml ate : mxml::AuditTrailEntry {
workflowModelElement = wme
: mxml::WorkflowModelElement
{
name
= xEventName
},
eventType = type : mxml::EventType {
type
= xEventType
},
originator
= originator : mxml::Originator {
name
= xOriginatorName
},
timestamp
= timestamp : mxml::Timestamp {
date
= xDate
},
processInstance = pi : mxml::ProcessInstance {
name
= xProcessInstanceName,
process
= p : mxml::Process {
name
= xProcessName,
workflowLog = wl : mxml::WorkflowLog {
name
= xModelName
}
}
}
};
enforce domain event eventModel:event::EventModel{
name
= xModelName,
eventElement = eRes:event::EventResource {
name
= xProcessName,
eventElement = eRes2:event::EventResource
{
name
= xProcessInstanceName,
eventElement = event : event::Event {
name
= xEventName,
kind
= xEventType,
taggedValue = originatorTag
: kdm::TaggedValue {
tag
= ot : kdm::TagDefinition {tag = 'Originator'},
value
= xOriginatorName
},
taggedValue = timestampTag
: kdm::TaggedValue {
tag
= dt : kdm::TagDefinition {tag = 'Timestamp'},
value
= xDate
},
eventRelation = nextEventRelation
: event::EventRelationship {
from
= event
}
}
}
}
};
when {
processInstance2eventResource(pi,
eventModel);
}
}
query queryNextAuditTrailEntryName
(p:mxml::Process, pi:mxml::ProcessInstance,
e: mxml::AuditTrailEntry) :
String {
--oclExpression
'nextActivity'
}
top relation auditTrailEntry2CodeElement {
xModelName : String;
xEventName : String;
xProcessName : String;
checkonly domain mxml proInst:mxml::ProcessInstance {
process
= pro:mxml::Process {
name
= xProcessName,
workflowLog = wlog:mxml::WorkflowLog{
name
= xModelName
}
},
auditTrailEntries = ate:mxml::AuditTrailEntry {
workflowModelElement = wme
: mxml::WorkflowModelElement
{
name
= xEventName
}
}
};
enforce domain event eventModel:code::CodeModel{
name
= 'implementation',
codeElement = pakage :
code::Package{
name
= xProcessName,
codeElement = codeElement :
code::CodeElement {
name
= xEventName,
stereotype
= st : kdm::Stereotype {
name
= xProcessName
}
}
}
};
}
}