package Ġde . mont ic ore . lang . mont ise car c . generator . docker Ċ Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġde . mont ic ore . lang . mont ise car c . generator . MS AG ener ator Ċ import Ġde . mont ic ore . lang . mont ise car c . generator . docker . data . Docker Service Ċ import Ġde . mont ic ore . lang . mont ise car c . psi . MS A Component Declaration Ċ import Ġde . mont ic ore . lang . mont ise car c . psi . MS A Component Instance Declaration Ċ Ċ /** Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠThomas ĠB uning Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ class ĠService Generator Ġ: ĠMS AG ener ator () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Component Identifier ( component Declaration : ĠM SA Component Declaration ): ĠString ? Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Declaration . instance Name . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcomponent Declaration . qualified Name . replace (".", Ġ"_ ") Ġ+ Ġ"_" Ġ+ Ġcomponent Declaration . instance Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate Component Instance Identifier ( ms a Component Declaration : ĠM SA Component Declaration , Ġinstance Name : ĠString ): ĠString Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġm sa Component Declaration . qualified Name . replace (".", Ġ"_ ") Ġ+ Ġ"_" Ġ+ Ġinstance Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġgenerate ( psi Element : ĠPsi Element ): ĠAny ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( psi Element Ġis ĠM SA Component Declaration ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Identifier Ġ= Ġcreate Component Identifier ( psi Element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( component Identifier Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( psi Element . component Body ?. c pe Statement List . or Empty (). isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc pe Ġ= Ġpsi Element . component Body !!. c pe Statement List . first (). string ?. text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! c pe . isNull OrEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDocker Service ( component Identifier , Ġc pe !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDocker Service ( component Identifier , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( psi Element Ġis ĠM SA Component Instance Declaration ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm sa Component Name Ġ= Ġpsi Element . component Name WithType Projection List . last (). component Name . references [ 0 ]. resolve () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm sa Component Declaration Ġ= ĠPsi Tree Util . getParent OfType ( ms a Component Name , ĠM SA Component Declaration :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms a Component Declaration Ġ!= Ġnull Ġ&& Ġm sa Component Declaration Ġis ĠM SA Component Declaration ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġc pe : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ms a Component Declaration . component Body ?. c pe Statement List . or Empty (). isNotEmpty ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc pe Ġ= Ġm sa Component Declaration . component Body !!. c pe Statement List . first (). string ?. text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġpsi Element . component Instance Name List . filter Ġ{ Ġit . name . isNotEmpty () Ġ}. map Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent Instance Identifier Ġ= Ġcreate Component Instance Identifier ( ms a Component Declaration , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDocker Service ( component Instance Identifier , Ġc pe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} Ċ Ċ }