package Ġmain . kotlin . util . converter Ċ // Ġ Ë ħ Ċ import Ġcom . change _ vision . j ude . api . inf . editor . Model Editor Factory Ċ import Ġcom . change _ vision . j ude . api . inf . exception . Invalid Editing Exception Ċ import Ġcom . change _ vision . j ude . api . inf . model . I Association Ċ // Ġ Ë Ħ Ċ Ċ // ĠConvert Ġthe ĠKotlin Ġassociation Ġtype Ġof Ġthe Ġtarget Ġassociation . Ċ class ĠKotlin Association Converter ( target Association : ĠI Association ) Ġ{ ĊĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĊĠĠĠ Ġ// Ġ Ë Ħ ĊĊĠĠĠ Ġenum Ġclass ĠCollection Kind ( val Ġvalue : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠMUT ABLE _ LIST (" Mutable List "), ĊĊĠĠĠĠĠĠĠ ĠMUT ABLE _ SET (" Mutable Set "), ĊĊĠĠĠĠĠĠĠ ĠLIST (" List "), ĊĊĠĠĠĠĠĠĠ ĠSET (" Set "), ĊĊĠĠĠĠĠĠĠ ĠSTACK (" Stack "), ĊĊĠĠĠĠĠĠĠ ĠARRAY (" Array "), ĊĊĠĠĠĠĠĠĠ ĠARRAY _ LIST (" ArrayList "), ĊĊĠĠĠĠĠĠĠ ĠLINK ED _ LIST (" LinkedList "), ĊĊĠĠĠĠĠĠĠ ĠHASH _ SET (" HashSet "), ĊĊĠĠĠĠĠĠĠ ĠLINK ED _ HASH _ SET (" Linked HashSet "), ĊĊĠĠĠĠĠĠĠ ĠT REE _ SET (" Tree Set "), ĊĊĠĠĠĠĠĠĠ ĠMUT ABLE _ MAP (" Mutable Map "), ĊĊĠĠĠĠĠĠĠ ĠMAP (" Map "), ĊĊĠĠĠĠĠĠĠ ĠHASH _ MAP (" HashMap "), ĊĊĠĠĠĠĠĠĠ ĠLINK ED _ HASH _ MAP (" Linked HashMap "), ĊĊĠĠĠĠĠĠĠ ĠT REE _ MAP (" TreeMap "), ĊĊĠĠĠĠĠĠĠ ĠNO _ COLLECTION (""); ĊĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġtarget Association : ĠI Association Ġ= Ġtarget Association ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĊĠĠĠ Ġ// ĠCheck Ġwhether Ġit Ġis Ġthe Ġsame Ġas Ġthe Ġargument Ġcollection Ġkind . ĊĠĠĠ Ġfun Ġis Kotlin Collection Kind ( kind s : ĠList < Collection Kind >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġargument Ġkinds Ġdo se Ġnot Ġexist , Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġkinds . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! target Association . stere otypes . contains ( it . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġkinds Ġother Ġthan Ġthe Ġargument Ġkinds Ġexist , Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ ĠCollection Kind . values (). subtract ( kind s ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġtarget Association . stere otypes . contains ( it . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠConvert Ġto Ġthe Ġargument Ġcollection Ġkind . ĊĠĠĠ Ġfun Ġconvert Kotlin Collection Kind ( kind s : ĠList < Collection Kind >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĠĠĠ Ġ// ĠRemove Ġthe Ġrelated Ġst ere otypes ĊĠĠĠĠĠĠĠ Ġfor Ġ( stereotype Ġin Ġtarget Association . stere otypes ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Regex (" collection _ kind Ġ*= .* "). contains Match In ( stereotype . toString (). trim (). toLowerCase ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Association . remove Ster e otype ( stereotype . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( collection Kind Ġin ĠCollection Kind . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( stereotype Ġ== Ġcollection Kind . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Association . remove Ster e otype ( stereotype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġrelated Ġtagged Values ĊĠĠĠĠĠĠĠ Ġfor Ġ( tagged Value Ġin Ġtarget Association . tagged Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tagged Value . key . trim (). toLowerCase () Ġ== Ġ" collection _ kind ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtagged Value . value Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġkinds . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbasic Model Editor Ġ= ĠModel Editor Factory . get Basic Model Editor () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġ" collection _ kind " Ġtagged Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbasic Model Editor . create Tagged Value ( target Association , Ġ" collection _ kind ", Ġit . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠInvalid Editing Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSet Ġ" collection _ kind " Ġtagged Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( tagged Value Ġin Ġtarget Association . tagged Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tagged Value . key . trim (). toLowerCase () Ġ== Ġ" collection _ kind ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtagged Value . value Ġ= Ġit . value ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġst ere otype ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠNotice : ĠThis Ġsetting Ġmakes Ġit Ġeasy Ġto Ġgr asp . ĠThe Ġsetting Ġdoes Ġnot Ġaffect Ġcode Ġgeneration . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ! target Association . has Ster e otype ( it . value )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Association . add Ster e otype ( it . value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ Ë Ħ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ Ë ħ ĊĠĠĠĠĊĠĠĠ Ġ// Ġ Ë Ħ Ċ } Ċ Ċ // Ġ Ë ħ Ċ Ċ // Ġ Ë Ħ Ċ