package Ġcom . strument a . kol as u . emf Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . google . gson . Json Parser Ċ import Ġcom . strument a . kol as u . model .* Ċ import Ġcom . strument a . kol as u . validation . Issue Ċ import Ġcom . strument a . kol as u . validation . Result Ċ import Ġorg . eclipse . emf . common . util . E List Ċ import Ġorg . eclipse . emf . common . util . URI Ċ import Ġorg . eclipse . emf . ecore .* Ċ import Ġorg . eclipse . emf . ecore . resource . Resource Ċ import Ġorg . eclipse . emf . ecore . resource . impl . Resource Set Impl Ċ import Ġorg . eclipse . emf . ecore . x mi . impl . X MI Resource Factory Impl Ċ import Ġorg . emf json . jackson . resource . Json Resource Factory Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . File Ċ import Ġjava . time . LocalDate Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Local Time Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property 1 Ċ import Ġkotlin . reflect . full . member Properties Ċ Ċ fun ĠE Package . get EClass ( java Class : ĠClass < *> ): ĠE Class Ġ{ ĊĠĠĠ Ġreturn Ġthis . get EClass ( java Class . e Classifier Name ) Ċ } Ċ Ċ fun ĠE Package . get EClass ( klass : ĠK Class < *> ): ĠE Class Ġ{ ĊĠĠĠ Ġreturn Ġthis . get EClass ( klass . e Classifier Name ) Ċ } Ċ Ċ fun ĠE Package . get EClass ( name : ĠString ): ĠE Class Ġ{ ĊĠĠĠ Ġreturn Ġ( this . e Class ifiers . find Ġ{ Ġit . name Ġ== Ġname Ġ} Ġ?: Ġthrow ĠIllegalArgumentException (" Class Ġnot Ġfound : Ġ$ name ")) ĊĠĠĠĠĠĠĠ Ġas ĠE Class Ċ } Ċ Ċ fun ĠE Package . get E Enum ( java Class : ĠClass < *> ): ĠE Enum Ġ{ ĊĠĠĠ Ġreturn Ġ( ĊĠĠĠĠĠĠĠ Ġthis . e Class ifiers . find Ġ{ Ġit . name Ġ== Ġjava Class . e Classifier Name Ġ} Ġ?: Ġthrow ĠIllegalArgumentException ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Class Ġnot Ġfound : Ġ$ java Class " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) Ġas ĠE Enum Ċ } Ċ Ċ fun ĠAny . data To EObject ( e Package : ĠE Package ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġec Ġ= Ġe Package . get EClass ( this :: class ) ĊĠĠĠ Ġval Ġe o Ġ= Ġe Package . e Factory Instance . create ( ec ) ĊĠĠĠ Ġec . e All Attributes . forEach Ġ{ Ġattr Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġprop Ġ= Ġthis :: class . member Properties . find Ġ{ Ġit . name Ġ== Ġattr . name Ġ} Ġas ĠK Property 1 < Any , Ġ* >? ĊĠĠĠĠĠĠĠ Ġif Ġ( prop Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġprop . getValue ( this , Ġprop ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe o . e Set ( attr , Ġvalue ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġset Ġattribute Ġ$ attr Ġin Ġ$ this ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġe o Ċ } Ċ Ċ fun ĠPoint . to EObject (): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġec Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" Point ") ĊĠĠĠ Ġval Ġe o Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( ec ) ĊĠĠĠ Ġe o . e Set ( ec . get ES tr uct ural Feature (" line "), Ġthis . line ) ĊĠĠĠ Ġe o . e Set ( ec . get ES tr uct ural Feature (" column "), Ġthis . column ) ĊĠĠĠ Ġreturn Ġe o Ċ } Ċ Ċ fun ĠPosition . to EObject (): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġec Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" Position ") ĊĠĠĠ Ġval Ġe o Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( ec ) ĊĠĠĠ Ġe o . e Set ( ec . get ES tr uct ural Feature (" start "), Ġthis . start . to EObject ()) ĊĠĠĠ Ġe o . e Set ( ec . get ES tr uct ural Feature (" end "), Ġthis . end . to EObject ()) ĊĠĠĠ Ġreturn Ġe o Ċ } Ċ Ċ fun Ġ< T Ġ: ĠNode > ĠResult < T >. to EObject ( ast Package : ĠE Package ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġresult EO Ġ= Ġmake Result EObject ( this ) ĊĠĠĠ Ġval Ġroot SF Ġ= Ġresult EO . e Class (). e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" root " Ġ} !! ĊĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult EO . e Set ( root SF , Ġroot !!. to EObject ( ast Package )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult EO Ċ } Ċ Ċ private Ġfun Ġmake Result EObject ( result : ĠResult < *> ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġresult EC Ġ= ĠK OL AS U _ MET AMO DEL . get EClass ( Result :: class . java ) ĊĠĠĠ Ġval Ġresult EO Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( result EC ) ĊĠĠĠ Ġval Ġissues SF Ġ= Ġresult EC . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" issues " Ġ} !! ĊĠĠĠ Ġval Ġissues Ġ= Ġresult EO . e Get ( issues SF ) Ġas ĠMutable List < EObject > ĊĠĠĠ Ġresult . issues . forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġissues . add ( it . to EObject ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult EO Ċ } Ċ Ċ fun Ġ< T Ġ: ĠNode > ĠResult < T >. to EObject ( resource : ĠResource ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġresult EO Ġ= Ġmake Result EObject ( this ) ĊĠĠĠ Ġval Ġroot SF Ġ= Ġresult EO . e Class (). e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" root " Ġ} !! ĊĠĠĠ Ġif Ġ( root Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult EO . e Set ( root SF , Ġroot !!. to EObject ( resource )) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult EO Ċ } Ċ Ċ fun ĠIssue . to EObject (): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġec Ġ= ĠK OL AS U _ MET AMO DEL . get EClass ( Issue :: class . java ) ĊĠĠĠ Ġval Ġe o Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( ec ) ĊĠĠĠ Ġval Ġet Ġ= ĠK OL AS U _ MET AMO DEL . get E Classifier (" Issue Type ") ĊĠĠĠ Ġval Ġes Ġ= ĠK OL AS U _ MET AMO DEL . get E Classifier (" Issue Severity ") ĊĠĠĠ Ġval Ġtype SF Ġ= Ġec . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" type " Ġ} !! ĊĠĠĠ Ġe o . e Set ( type SF , Ġ( et Ġas ĠE Enum ). get E Enum Literal ( type . ordinal )) ĊĠĠĠ Ġval Ġseverity SF Ġ= Ġec . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" severity " Ġ} !! ĊĠĠĠ Ġe o . e Set ( severity SF , Ġ( es Ġas ĠE Enum ). get E Enum Literal ( severity . ordinal )) ĊĠĠĠ Ġval Ġmessage SF Ġ= Ġec . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" message " Ġ} !! ĊĠĠĠ Ġe o . e Set ( message SF , Ġmessage ) ĊĠĠĠ Ġval Ġposition SF Ġ= Ġec . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġ" position " Ġ} !! ĊĠĠĠ Ġif Ġ( position Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe o . e Set ( position SF , Ġposition !!. to EObject ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġe o Ċ } Ċ Ċ private Ġfun Ġto Value ( e Package : ĠE Package , Ġvalue : ĠAny ?): ĠAny ? Ġ{ ĊĠĠĠ Ġval Ġpd Value : ĠAny ? Ġ= Ġvalue ĊĠĠĠ Ġif Ġ( pd Value Ġis ĠEnum <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġee Ġ= Ġe Package . get E Enum ( pd Value . java Class ) ĊĠĠĠĠĠĠĠ Ġreturn Ġee . get E Enum Literal ( pd Value . name ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( pd Value Ġis ĠLocalDate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġto LocalDate Object ( pd Value ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( pd Value Ġis ĠLocal Time ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġto Local Time Object ( pd Value ) ĊĠĠĠ Ġ} Ġelse Ġif Ġ( pd Value Ġis ĠLocalDateTime ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe Class Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" LocalDateTime ") ĊĠĠĠĠĠĠĠ Ġval Ġe Object Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( e Class ) ĊĠĠĠĠĠĠĠ Ġval Ġdate Component Ġ= Ġto LocalDate Object ( pd Value . to LocalDate ()) ĊĠĠĠĠĠĠĠ Ġval Ġtime Component Ġ= Ġto Local Time Object ( pd Value . to Local Time ()) ĊĠĠĠĠĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" date "), Ġdate Component ) ĊĠĠĠĠĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" time "), Ġtime Component ) ĊĠĠĠĠĠĠĠ Ġreturn Ġe Object ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġthis Ġcould Ġbe Ġnot Ġa Ġprimitive Ġvalue Ġbut Ġa Ġvalue Ġthat Ġwe Ġmapped Ġto Ġan ĠE Class ĊĠĠĠĠĠĠĠ Ġval Ġe Class Ġ= Ġif Ġ( pd Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe Package . e Class ifiers . filter Is Instance < EClass >(). find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . name Ġ== Ġpd Value . java Class . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe Class Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpd Value !!. data To EObject ( e Package ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpd Value Ġis ĠReference ByName < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref EC Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" Reference ByName ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġref EO Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( ref EC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref EO . e Set ( ref EC . get ES tr uct ural Feature (" name ") !! , Ġpd Value . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġcomplete ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġref EO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpd Value Ġis ĠResult < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres EC Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" Result ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres EO Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( res EC ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pd Value . root Ġis ĠNode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres EO . e Set ( res EC . get ES tr uct ural Feature (" root "), Ġ( pd Value . root Ġas ĠNode ). to EObject ( e Package )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres EO . e Set ( res EC . get ES tr uct ural Feature (" root "), Ġto Value ( e Package , Ġpd Value . root )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġissues Ġ= Ġres EO . e Get ( res EC . get ES tr uct ural Feature (" issues ")) Ġas ĠE List < EObject > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġissues . addAll ( pd Value . issues . map Ġ{ Ġit . to EObject () Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġres EO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġpd Value ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġto Local Time Object ( value : ĠLocal Time ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġe Class Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" Local Time ") ĊĠĠĠ Ġval Ġe Object Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( e Class ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" hour "), Ġvalue . hour ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" minute "), Ġvalue . minute ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" second "), Ġvalue . second ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" nan ose cond "), Ġvalue . nano ) ĊĠĠĠ Ġreturn Ġe Object Ċ } Ċ Ċ private Ġfun Ġto LocalDate Object ( value : ĠLocalDate ): ĠE Object Ġ{ ĊĠĠĠ Ġval Ġe Class Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" LocalDate ") ĊĠĠĠ Ġval Ġe Object Ġ= ĠK OL AS U _ MET AMO DEL . e Factory Instance . create ( e Class ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" year "), Ġvalue . year ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" month "), Ġvalue . month Value ) ĊĠĠĠ Ġe Object . e Set ( e Class . get ES tr uct ural Feature (" day OfMonth "), Ġvalue . day OfMonth ) ĊĠĠĠ Ġreturn Ġe Object Ċ } Ċ Ċ fun ĠpackageName ( klass : ĠK Class < *> ): ĠString Ġ= ĊĠĠĠ Ġklass . qualified Name !!. substring ( 0 , Ġklass . qualified Name !!. lastIndexOf (". ")) Ċ Ċ fun ĠE Package . find EClass ( klass : ĠK Class < *> ): ĠE Class ? Ġ{ ĊĠĠĠ Ġreturn Ġthis . find EClass ( klass . e Classifier Name ) Ċ } Ċ Ċ fun ĠE Package . find EClass ( name : ĠString ): ĠE Class ? Ġ{ ĊĠĠĠ Ġreturn Ġthis . e Class ifiers . find Ġ{ Ġit Ġis ĠE Class Ġ&& Ġit . name Ġ== Ġname Ġ} Ġas ĠE Class ? Ċ } Ċ Ċ fun ĠResource . find EClass ( klass : ĠK Class < *> ): ĠE Class ? Ġ{ ĊĠĠĠ Ġval Ġe Package Ġ= Ġthis . contents . find Ġ{ Ġit Ġis ĠE Package Ġ&& Ġit . name Ġ== ĠpackageName ( klass ) Ġ} Ġas ĠE Package ? ĊĠĠĠ Ġreturn Ġe Package ?. find EClass ( klass ) Ċ } Ċ Ċ fun ĠResource . get EClass ( klass : ĠK Class < *> ): ĠE Class Ġ= Ġthis . find EClass ( klass ) ĊĠĠĠ Ġ?: Ġthrow ĠClass NotFoundException ( klass . qualified Name ) Ċ Ċ fun ĠNode . to EObject ( e Package : ĠE Package ): ĠE Object Ġ= Ġto EObject ( e Package . e Resource ()) Ċ Ċ /** Ċ Ġ* ĠTrans lates Ġthis Ġnode ĠâĢĵ Ġand , Ġrecursively , Ġits Ġdesc endants ĠâĢĵ Ġinto Ġan Ġ[ EObject ] Ġ( EM F / E core Ġrepresentation ). Ċ Ġ* Ċ Ġ* ĠThe Ġclasses Ġof Ġthe Ġnode Ġare Ġresolved Ġagainst Ġthe Ġprovided Ġ[ Resource ]. ĠThat Ġis , Ġthe Ġresource Ġmust Ġcontain : Ċ Ġ* Ġ Ġ- Ġthe Ġ[ K olas u Ġmet amodel Ġpackage ][ K OL AS U _ MET AMO DEL ] Ċ Ġ* Ġ Ġ- Ġevery Ġ[ E Package ] Ġcontaining Ġthe Ġdefinitions Ġof Ġthe Ġnode Ġclasses Ġin Ġthe Ġtree . Ċ Ġ*/ Ċ fun ĠNode . to EObject ( e Resource : ĠResource ): ĠE Object Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġec Ġ= Ġe Resource . get EClass ( this :: class ) ĊĠĠĠĠĠĠĠ Ġval Ġe o Ġ= Ġec . e Package . e Factory Instance . create ( ec ) ĊĠĠĠĠĠĠĠ Ġval Ġast Node Ġ= ĠK OL AS U _ MET AMO DEL . get EClass (" AST Node ") ĊĠĠĠĠĠĠĠ Ġval Ġposition Ġ= Ġast Node . get ES tr uct ural Feature (" position ") ĊĠĠĠĠĠĠĠ Ġval Ġposition Value Ġ= Ġthis . position ?. to EObject () ĊĠĠĠĠĠĠĠ Ġe o . e Set ( position , Ġposition Value ) ĊĠĠĠĠĠĠĠ Ġthis . process Properties Ġ{ Ġpd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġes f Ġ= Ġec . e All Structural Features . find Ġ{ Ġit . name Ġ== Ġpd . name Ġ} !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pd . provide Nodes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pd . multiple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel ist Ġ= Ġe o . e Get ( es f ) Ġas ĠMutable List < EObject > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pd . value Ġas ĠList < *> ?) ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild EO Ġ= Ġ( it Ġas ĠNode ). to EObject ( e Resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel ist . add ( child EO ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġmap Ġto ĠE Object Ġchild Ġ$ it Ġin Ġproperty Ġ$ pd Ġof Ġ$ this ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pd . value Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe o . e Set ( es f , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe o . e Set ( es f , Ġ( pd . value Ġas ĠNode ). to EObject ( e Resource )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pd . multiple ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġel ist Ġ= Ġe o . e Get ( es f ) Ġas ĠMutable List < Any > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( pd . value Ġas ĠList < *> ?) ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Value Ġ= Ġto Value ( ec . e Package , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġel ist . add ( child Value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġmap Ġto ĠE Object Ġchild Ġ$ it Ġin Ġproperty Ġ$ pd Ġof Ġ$ this ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe o . e Set ( es f , Ġto Value ( ec . e Package , Ġpd . value )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġset Ġproperty Ġ$ pd . ĠStructural Ġfeature : Ġ$ es f ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġe o ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Unable Ġto Ġmap Ġto ĠE Object Ġ$ this ", Ġe ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE Object . save X MI ( x mi File : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġresource Set Ġ= ĠResource Set Impl () ĊĠĠĠ Ġresource Set . resource Factory Registry . extension To Factory Map [" x mi "] Ġ= ĠX MI Resource Factory Impl () ĊĠĠĠ Ġval Ġuri : ĠURI Ġ= ĠURI . create File URI ( x mi File . absolute Path ) ĊĠĠĠ Ġval Ġresource : ĠResource Ġ= Ġresource Set . create Resource ( uri ) ĊĠĠĠ Ġresource . contents . add ( this ) ĊĠĠĠ Ġresource . save ( null ) Ċ } Ċ Ċ fun ĠE Package . save As Json ( json File : ĠFile , Ġrest oring URI : ĠBoolean Ġ= Ġtrue ) Ġ{ ĊĠĠĠ Ġval Ġstart URI Ġ= Ġthis . e Resource (). uri ĊĠĠĠ Ġ( this Ġas ĠE Object ). save As Json ( json File ) ĊĠĠĠ Ġif Ġ( rest oring URI ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . set Resource URI ( start URI . toString ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠE Object . save As Json ( json File : ĠFile ) Ġ{ ĊĠĠĠ Ġval Ġresource Set Ġ= ĠResource Set Impl () ĊĠĠĠ Ġresource Set . resource Factory Registry . extension To Factory Map [" json "] Ġ= ĠJson Resource Factory () ĊĠĠĠ Ġval Ġuri : ĠURI Ġ= ĠURI . create File URI ( json File . absolute Path ) ĊĠĠĠ Ġval Ġresource : ĠResource Ġ= Ġresource Set . create Resource ( uri ) ĊĠĠĠ Ġresource . contents . add ( this ) ĊĠĠĠ Ġresource . save ( null ) Ċ } Ċ Ċ fun ĠE Object . save As Json (): ĠString Ġ{ ĊĠĠĠ Ġval Ġuri : ĠURI Ġ= ĠURI . create URI (" dummy - URI ") ĊĠĠĠ Ġval Ġresource : ĠResource Ġ= ĠJson Resource Factory (). create Resource ( uri ) ĊĠĠĠ Ġresource . contents . add ( this ) ĊĠĠĠ Ġval Ġu f Ġ= Ġresource . get UR IF ragment ( this ) ĊĠĠĠ Ġval Ġoutput Ġ= ĠByteArrayOutputStream () ĊĠĠĠ Ġresource . save ( output , Ġnull ) ĊĠĠĠ Ġreturn Ġoutput . toString ( Charsets . UTF _ 8 . name ()) Ċ } Ċ Ċ fun ĠE Object . save As JsonObject (): ĠJsonObject Ġ{ ĊĠĠĠ Ġreturn ĠJson Parser (). parse ( this . save As Json ()). as JsonObject Ċ } Ċ