[comment encoding = UTF-8 /] [module petri2text('http://petri/1.0') /] [template public generateNet(aNet : Net) post(replaceAll('\t',' ').trim())] [comment @main/] [file (aNet.name.concat('.tpn'), false, 'UTF-8')] net [aNet.name/] [for (element : Element | aNet.element->selectByKind(Transition))] [generateElement(element)/] [/for] [for (element : Element | aNet.element->selectByKind(Place)->select(p | (not p.label.oclIsUndefined()) or p.init_marking <> 0))] [generateElement(element)/] [/for] [/file] [/template] [template public generateElement(element : Element) post(replaceAll('\t',' ').trim())] [if (element.oclIsKindOf(Transition))] [let tr : Transition = element.oclAsType(Transition)] [generateTransition(tr)/] [/let] [/if] [if (element.oclIsKindOf(Place))] [let pl : Place = element.oclAsType(Place)] [generatePlace(pl)/] [/let] [/if] [/template] [template public generateTransition(tr : Transition) post (replaceAll('\t|\n',' ').trim()) ] tr [tr.name/] [if (not tr.label.oclIsUndefined())] : [tr.label/] [/if] [if ( not tr.intervale_end.oclIsUndefined() or tr.intervale_end <> 0)] ['['/][tr.intervale_begin/],[tr.intervale_end/][']'/] [/if] [for (arc : Arc | tr.connectedBy)] [generateArcFrom(arc)/] [/for]-> [for (arc : Arc | tr.arc_sortant)] [generateArcTo(arc)/] [/for] [/template] [template public generatePlace(pl : Place) post(replaceAll('\t',' ').trim())] pl [pl.name/] [if (not pl.label.oclIsUndefined())] : [pl.label/] [/if] [if (pl.init_marking <> 0)] ([pl.init_marking/])[/if] [/template] [template public generateArcTo(arg : Arc) post(replaceAll('\t',' ').trim())] [if (arg.oclIsKindOf(STArc))] [let st : STArc = arg.oclAsType(STArc)] [st.to.name/][generateComportement(st.comportement)/][st.weight/] [/let] [/if] [if (arg.oclIsKindOf(TSArc))] [let ts : TSArc = arg.oclAsType(TSArc)] [ts.to.name/]*[ts.weight/] [/let] [/if] [/template] [template public generateArcFrom(arg : Arc) post(replaceAll('\t',' ').trim())] [if (arg.oclIsKindOf(STArc))] [let st : STArc = arg.oclAsType(STArc)] [st.from.name/][generateComportement(st.comportement)/][st.weight/] [/let] [/if] [if (arg.oclIsKindOf(TSArc))] [let ts : TSArc = arg.oclAsType(TSArc)] [ts.from.name/]*[ts.weight/] [/let] [/if] [/template] [template public generateComportement(arg : ArcComportement) post(replaceAll('\t',' ').trim())] [if (arg = ArcComportement::Regular)] * [/if] [if (arg = ArcComportement::Inhibit)] ?- [/if] [if (arg = ArcComportement::Read)] ? [/if] [if (arg = ArcComportement::Stopwatch)] ! [/if] [if (arg = ArcComportement::Stopwatch_Inhibit)] !- [/if] [/template]