// specify your DSL grammar rules here ... // IMPORTANT: You should change the property 'overwrite.pluginresources=true' in the properties file to 'overwrite.pluginresources=false' AFTER first generation Model: (properties+=PropertyReference)* (projections+=Projection)* (entityAreas+=EntityArea)* (queryAreas+=QueryArea)* (eventAreas+=EventArea)* (messageTypes+=MessageType)* (entities+=EntityReference)* (messageTypes+=MessageType)* (interactions+=Interaction)* ; EntityReference: "&entity" name=ID path=STRING ";"; Projection: "projection" name=ID "{" "&entity" entityRef=[EntityReference] ("exclude" "{" (exclusions+=[PropertyReference] ";")* "}")? ("include" "{" (includions+=[Projection] ";")* "}")? "}" ; PropertyReference: "property" name=ID path=STRING ";" ; QueryArea: "query" (isCollection?="collection")? name=ID "on" projection=[Projection] ";" ; EventArea: "event" name=ID "{" ("type")? type=ID ";" ("projection")? projection=[Projection] ";" "}" ; EntityArea: "entity" name=ID "{" projection=[Projection] ";" "}" ; Verb: Get="GET" | Notify="NOTIFY" | Cancel="CANCEL" | Show="SHOW" | Confirm="CONFIRM" | Patch="PATCH" | Prepare="PREPARE" | Submit="SUBMIT" ; Enum MessageExchangePattern: inout="in-out" | outin = "out-in" | in="in" | out="out" ; MessageType: "message" name = ID "{" "verb" verb = Verb ";" "noun" nound = ID ";" (isIdempotent?="idempotent" ";")? ("query" queryArea=[QueryArea] ";")? ("event" eventArea=[EventArea] ";")? ("entity" entityArea=[EntityArea] ";")? "}" ; Interaction: "interaction" name=ID "{" "mep" mep=MessageExchangePattern ";" ("in" "{" (ins+=[MessageType]";") "}")? ("out" "{" (outs+=[MessageType]";") "}")? ("faults" "{" (faults+=[MessageType]";") "}")? "}" ;