/* Ċ Ġ* ĠSource ++, Ġthe Ġopen - source Ġlive Ġcoding Ġplatform . Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 2 ĠCode B rig , ĠInc . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ċ Ġ* Ġby Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠAffero ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ package Ġs pp . jetbrains . source marker . portal Ċ Ċ import Ġcom . fasterxml . jackson . databind . module . Simple Module Ċ import Ġcom . intellij . ide . ui . l af . Int elli JL af Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . editor . Editor Ċ import Ġio . vertx . core . json . JsonObject Ċ import Ġio . vertx . core . json . jackson . D atab ind Codec Ċ import Ġio . vertx . kotlin . coroutines . Coroutine Vert icle Ċ import Ġio . vertx . kotlin . coroutines . await Ċ import Ġkotlinx . datetime . Instant Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġs pp . boost er . Portal Server Ċ import Ġs pp . boost er . Source Portal Ċ import Ġs pp . jetbrains . marker . Source Marker Ċ import Ġs pp . jetbrains . marker . source . mark . api . component . api . config . Component Size Evaluator Ċ import Ġs pp . jetbrains . marker . source . mark . api . component . api . config . Source Mark Component Configuration Ċ import Ġs pp . jetbrains . marker . source . mark . api . component . j cef . Source Mark Single J cef Component Provider Ċ import Ġs pp . jetbrains . marker . source . mark . api . component . j cef . config . Browser Loading Listener Ċ import Ġs pp . jetbrains . marker . source . mark . api . component . j cef . config . Source Mark J cef Component Configuration Ċ import Ġs pp . jetbrains . marker . source . mark . api . event . Source Mark Event Code Ċ import Ġs pp . jetbrains . marker . source . mark . guide . Guide Mark Ċ import Ġs pp . jetbrains . source marker . mark . Source Mark Keys Ċ import Ġs pp . jetbrains . source marker . settings . Source Marker Config Ċ import Ġs pp . jetbrains . source marker . settings . getService Port Normalized Ċ import Ġs pp . jetbrains . source marker . settings . is Ssl Ċ import Ġs pp . jetbrains . source marker . settings . service Host Normalized Ċ import Ġs pp . protocol . marshall . K Serial izers Ċ import Ġjava . awt . Dimension Ċ import Ġjava . util . concurrent . atomic . Atomic Reference Ċ import Ġjavax . swing . UI Manager Ċ import Ġkotlin . math . ceil Ċ import Ġkotlin . math . floor Ċ Ċ class ĠPortal Controller ( private Ġval Ġmarker Config : ĠSource Marker Config ) Ġ: ĠCor outine Vert icle () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Portal Controller :: class . java ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . info (" Initializing Ġportal ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmodule Ġ= ĠSimple Module () ĊĠĠĠĠĠĠĠ Ġmodule . add Serializer ( Instant :: class . java , ĠK Serial izers . Kotlin Instant Serializer ()) ĊĠĠĠĠĠĠĠ Ġmodule . add Deserializer ( Instant :: class . java , ĠK Serial izers . Kotlin Instant Deserializer ()) ĊĠĠĠĠĠĠĠ ĠD atab ind Codec . mapper (). register Module ( module ) ĊĊĠĠĠĠĠĠĠ Ġlog . info (" Initializing Ġportal Ġserver ") ĊĠĠĠĠĠĠĠ Ġval Ġportal Server Ġ= ĠPortal Server ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsky walk ing Host Ġ= Ġmarker Config . service Host Normalized , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsky walk ing Port Ġ= Ġmarker Config . getService Port Normalized (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġssl Ġ= Ġmarker Config . is Ssl (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjwt Token Ġ= Ġmarker Config . service Token ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvert x . deploy Vert icle ( portal Server ). await () ĊĠĠĠĠĠĠĠ Ġlog . info (" Portal Ġserver Ġinitialized ") ĊĊĠĠĠĠĠĠĠ Ġval Ġinitial Url Ġ= ĠAtomic Reference ("") ĊĠĠĠĠĠĠĠ Ġval Ġcomponent Provider Ġ= ĠSource Mark Single J cef Component Provider (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Configuration . browser Loading Listener Ġ= Ġobject : ĠBrowser Loading Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore Browser Created ( configuration : ĠSource Mark J cef Component Configuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration . initial Url Ġ= Ġinitial Url . get () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Configuration . zoom Level Ġ= Ġmarker Config . portal Config . zoom Level ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefault Configuration . component Size Evaluator Ġ= Ġobject Ġ: ĠComponent Size Evaluator () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Dynamic Size ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeditor : ĠEditor , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfiguration : ĠSource Mark Component Configuration ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠDimension Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwidth Double Ġ= Ġ 9 6 3 Ġ* Ġmarker Config . portal Config . zoom Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheight Double Ġ= Ġ 3 5 0 Ġ* Ġmarker Config . portal Config . zoom Level ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġwidth : ĠInt Ġ= Ġwidth Double . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ceil ( width Double ) Ġ!= Ġfloor ( width Double )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwidth Ġ= Ġceil ( width Double ). toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġheight Ġ= Ġheight Double . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ceil ( height Double ) Ġ!= Ġfloor ( height Double )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheight Ġ= Ġceil ( height Double ). toInt () Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠDimension ( width , Ġheight ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠSource Marker . configuration . guide Mark Configuration . component Provider Ġ= Ġcomponent Provider ĊĠĠĠĠĠĠĠ ĠSource Marker . configuration . in lay Mark Configuration . component Provider Ġ= Ġcomponent Provider ĊĊĠĠĠĠĠĠĠ ĠSource Marker . add Global Source Mark EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . event Code Ġ== ĠSource Mark Event Code . MARK _ BEFORE _ AD DED Ġ&& Ġit . source Mark Ġis ĠGuide Mark ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// register Ġportal Ġfor Ġsource Ġmark ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġportal Ġ= ĠSource Portal . get Portal ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSource Portal . register ( it . source Mark . artifact QualifiedName , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . source Mark . put UserData ( Source Mark Keys . PORT AL _ CONFIGURATION , Ġportal . configuration ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . source Mark . addEventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . event Code Ġ== ĠSource Mark Event Code . UPDATE _ PORT AL _ CONFIG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . params . first () Ġis ĠString Ġ&& Ġit . params . first () Ġ== Ġ" set Page ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Url . set (" http :// localhost :${ portal Server . server Port }${ it . params . get ( 1 )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvert x . event Bus (). publish ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" portal . Set Current Page ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJsonObject (). put (" page ", Ġit . params . get ( 1 ) Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . event Code Ġ== ĠSource Mark Event Code . PORT AL _ OPEN ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġportal . configuration . dark Mode Ġ= ĠUI Manager . get Look And Feel () Ġ! is ĠIntelli JL af ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġportal . configuration . config [" portal _ uuid "] Ġ= Ġportal . portal Uuid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApplication Manager . getApplication (). invoke Later ( it . source Mark :: display Popup ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlog . info (" Portal Ġinitialized ") ĊĠĠĠ Ġ} Ċ } Ċ