/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠJ oh ann es ĠDon ath Ġ< jo h ann es d @ torch mind . com > Ċ Ġ* Ġand Ġother Ġcopyright Ġowners Ġas Ġdocumented Ġin Ġthe Ġproject 's ĠIP Ġlog . Ċ Ġ* Ċ Ġ* Ġ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 . Ċ Ġ*/ Ċ package Ġorg . bas in mc . fa uc et . extension . error Ċ Ċ import Ġorg . bas in mc . fa uc et . extension . Extension Ċ import Ġorg . bas in mc . fa uc et . extension . dependency . Extension Dependency Ċ import Ġorg . bas in mc . fa uc et . extension . dependency . Service Dependency Ċ import Ġorg . bas in mc . fa uc et . extension . manifest . Extension Author Ċ import Ġorg . bas in mc . fa uc et . extension . manifest . Extension Manifest Ċ Ċ /** Ċ Ġ* ĠNot ifies Ġthe Ġcaller Ġabout Ġun resolved Ġdependencies Ġwhich Ġprevent Ġan Ġextension Ġfrom Ġstarting . Ċ Ġ* Ċ Ġ* Ġ@ author Ġ[ J oh ann es ĠDon ath ]( mailto : jo h ann es d @ torch mind . com ) Ċ Ġ*/ Ċ class ĠExtension Resolver Exception Ġ: ĠExtension Container Exception Ġ{ ĊĊĠ Ġconstructor ( manifest : ĠExtension Manifest , ĊĠĠĠĠĠ Ġextension Dependencies : ĠList < Extension Dependency >, ĊĠĠĠĠĠ Ġservice Dependencies : ĠList < Service Dependency >) Ġ: Ġsuper ( ĊĠĠĠĠĠ Ġbuild ErrorMessage ( manifest , Ġextension Dependencies , Ġservice Dependencies )) ĊĊĠ Ġconstructor ( manifest : ĠExtension Manifest , ĊĠĠĠĠĠ Ġextensions : ĠList < Extension >) Ġ: Ġsuper ( build ErrorMessage ( manifest , Ġextensions )) ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġbuild ErrorMessage ( manifest : ĠExtension Manifest , ĊĠĠĠĠĠĠĠ Ġextension Dependencies : ĠList < Extension Dependency >, ĊĠĠĠĠĠĠĠ Ġservice Dependencies : ĠList < Service Dependency >): ĠString Ġ{ ĊĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Cannot Ġresolve Ġone Ġor Ġmore Ġdependencies Ġfor Ġextension ") ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( manifest . identifier ) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġv "). append ( manifest . version ) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĊĠĠĠĠĠ Ġappend Extension Metadata ( builder , Ġmanifest ) ĊĊĠĠĠĠĠ Ġif Ġ(! extension Dependencies . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append (" === ĠUn resolved ĠExtension ĠDependencies Ġ== =" ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠ Ġextension Dependencies . forEach Ġ{ Ġext Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( ext . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġv "). append ( ext . version Range ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append ( System . line Separator ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġif Ġ(! service Dependencies . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġbuilder . append (" === ĠUn resolved ĠService ĠDependencies Ġ= =" ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠ Ġservice Dependencies . forEach Ġ{ Ġsrv Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( srv . base ClassName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġv "). append ( srv . version Range ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . append ( System . line Separator ()) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġappend Footer ( builder , Ġmanifest ) ĊĊĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild ErrorMessage ( manifest : ĠExtension Manifest , ĊĠĠĠĠĠĠĠ Ġextensions : ĠList < Extension >): ĠString Ġ{ ĊĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Cannot Ġresolve Ġone Ġor Ġmore Ġdependencies Ġfor Ġextension ") ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( manifest . identifier ) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġv "). append ( manifest . version ) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĊĠĠĠĠĠ Ġappend Extension Metadata ( builder , Ġmanifest ) ĊĊĠĠĠĠĠ Ġbuilder . append (" === ĠUn resolved ĠExtensions Ġ== =") ĊĠĠĠĠĠ Ġextensions . forEach Ġ{ Ġe Ġ-> ĊĠĠĠĠĠĠĠ Ġbuilder . append (" Ġ- Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( e . manifest . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġv "). append ( e . manifest . version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġbuilder . append ( System . line Separator ()) ĊĊĠĠĠĠĠ Ġappend Footer ( builder , Ġmanifest ) ĊĊĠĠĠĠĠ Ġreturn Ġbuilder . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Extension Metadata ( builder : ĠStringBuilder , Ġmanifest : ĠExtension Manifest ) Ġ{ ĊĠĠĠĠĠ Ġbuilder . append (" === ĠMetadata Ġ== =" ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ ĠExtension ĠId : Ġ"). append ( manifest . identifier ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ ĠVersion : Ġ"). append ( manifest . version ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ ĠDisplay ĠName : Ġ"). append ( manifest . displayName ). append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ ĠAuthor ( s ): Ġ"). append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest . authors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Extension Author :: toString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append (" Ġ ĠContributor ( s ): Ġ"). append ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest . contributors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ( Extension Author :: toString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġappend Footer ( builder : ĠStringBuilder , Ġmanifest : ĠExtension Manifest ) Ġ{ ĊĠĠĠĠĠ Ġ// ĠTODO : ĠRefer Ġto Ġdocumentation Ġlink Ġwhen Ġavailable ĊĠĠĠĠĠ Ġbuilder . append (" This Ġextension Ġwill Ġnot Ġload Ġuntil Ġthese Ġdependencies Ġare Ġmade Ġavailable .") ĊĠĠĠĠĠĠĠĠĠ Ġ. append ( System . line Separator ()) ĊĠĠĠĠĠ Ġbuilder . append (" Please Ġrefer Ġto Ġthe Ġextension Ġdocumentation Ġfor Ġmore Ġinformation ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊ Ċ } Ċ