/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 ĠSer ge ĠMer z li ak ov Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttps :// 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 . install m ation . service Ċ Ċ import Ġcom . google . common . event bus . Subscribe Ċ import Ġorg . apache . logging . log 4 j . Log Manager Ċ import Ġorg . apache . logging . log 4 j . Logger Ċ import Ġorg . install m ation . configuration .* Ċ import Ġorg . install m ation . controller . Validator Ċ import Ġorg . install m ation . io . Application Json Writer Ċ import Ġorg . install m ation . model . Install Project Ċ import Ġjava . io . File ĊĊ Ċ private Ġval Ġlog : ĠLogger Ġ= ĠLog Manager . getLogger ( Workspace :: class . java ) Ċ Ċ fun Ġworkspace FileName ( base Directory : ĠFile ): ĠFile Ġ{ ĊĠĠ Ġreturn ĠFile ( File ( base Directory , ĠConstant . WORK SPACE _ DIR ), ĠConstant . WORK SPACE _ FILE ) Ċ } Ċ Ċ /** Ċ Ġ* ĠStores Ġhistory Ġof Ġprojects Ġworked Ġon , Ġand Ġhas Ġits Ġown Ċ Ġ* Ġpersistent Ġfile . ĠIf Ġthis Ġis Ġcannot Ġbe Ġloaded Ġor Ġsaved , Ċ Ġ* Ġall Ġthat Ġis Ġlost Ġis Ġa Ġlist Ġof Ġprojects . Ċ Ġ* Ċ Ġ* ĠNot Ġa Ġconcept Ġthat Ġis Ġvisible Ġto Ġthe Ġuser , Ġso Ġthey Ġwill Ċ Ġ* Ġnever Ġ' see ' Ġwork spaces Ċ Ġ*/ Ċ class ĠWorkspace ( var Ġuser History : ĠUser History , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Transient Ġvar Ġconfiguration : ĠConfiguration , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Transient Ġvar Ġproject Service : ĠProject Service Ġ?= Ġnull ) Ġ{ ĊĊĠĠ Ġvar Ġcurrent Project : ĠInstall Project ? Ġ= Ġnull ĊĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠ Ġ// Ġproject Ġname Ġ-> Ġlocation Ġon Ġdisk ĊĠĠ Ġval Ġproject History Ġ= Ġmutable Map Of < String , ĠFile >() ĊĊĠĠ Ġinit { ĊĠĠĠĠĠ Ġconfiguration . event Bus . register ( this ) ĊĠĠ Ġ} ĊĊĠĠ Ġfun ĠsetCurrent Project ( p : ĠInstall Project ) Ġ{ ĊĠĠĠĠĠ ĠcheckNotNull ( p . name , Ġ{ Ġ" Project Ġmust Ġhave Ġa Ġname Ġbefore Ġit Ġcan Ġbe Ġused " Ġ}) ĊĠĠĠĠĠ Ġcurrent Project Ġ= Ġp ĊĠĠĠĠĠ Ġlog . debug (" Workspace Ġcurrent Ġproject Ġis Ġset Ġto Ġ'${ p . name }' ") ĊĠĠ Ġ} ĊĊĠĠ Ġfun Ġclose Current Project () Ġ{ ĊĠĠĠĠĠ Ġif Ġ( current Project Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġlog . debug (" Project Ġ'${ current Project !!. name }' Ġclosed ") ĊĠĠĠĠĠĠĠĠ Ġcurrent Project Ġ= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĊĠĠ Ġfun Ġcurrent Project Location (): ĠFile ? Ġ{ ĊĠĠĠĠĠ Ġreturn Ġproject History [ current Project ?. name ] ĊĠĠ Ġ} ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠFor Ġfiles Ġalready Ġsaved . Ġreturn Ġfalse Ġif Ġno Ġprevious Ġfile Ġsaved s ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġsave (): ĠBoolean Ġ{ ĊĠĠĠĠĠ Ġval Ġname Ġ= Ġcurrent Project ?. name ĊĠĠĠĠĠ Ġval Ġfile Ġ= Ġproject History [ current Project ?. name ] ĊĊĠĠĠĠĠ Ġif Ġ( current Project Ġ== Ġnull Ġ|| Ġfile Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĊĠĠĠĠĠ Ġif Ġ( Validator . ensure ProjectName ( current Project !! , Ġconfiguration )) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġlog . debug (" Saving Ġproject Ġ[$ name ] Ġto Ġfile ") ĊĠĠĠĠĠĠĠĠ Ġproject Service ?. save ( file , Ġcurrent Project !! ) ĊĠĠĠĠĠĠĠĠ Ġval Ġworkspace Writer Ġ= ĠApplication Json Writer < Workspace >( workspace FileName ( configuration . base Directory ), ĠJson Parser Factory . workspace Parser ( configuration )) ĊĠĠĠĠĠĠĠĠ Ġworkspace Writer . save ( this ) ĊĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠ Ġ} ĊĊĠĠ Ġ/** ĊĠĠĠ Ġ* ĠNew Ġlocation Ġfor Ġsaved Ġfile ĊĠĠĠ Ġ*/ ĊĠĠ Ġfun Ġsave As ( file : ĠFile ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( current Project Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠ ĠsetCurrent Project ( Install Project ()) ĊĊĠĠĠĠĠ Ġval Ġname Ġ= Ġcurrent Project !!. name !! ĊĠĠĠĠĠ Ġif Ġ( Validator . ensure ProjectName ( current Project !! , Ġconfiguration )) Ġ{ ĊĠĠĠĠĠĠĠĠ Ġproject Service ?. save ( file , Ġcurrent Project !! ) ĊĠĠĠĠĠĠĠĠ Ġ// Ġsave Ġprojects Ġhistory ĊĠĠĠĠĠĠĠĠ Ġproject History [ name ] Ġ= Ġfile ĊĠĠĠĠĠĠĠĠ Ġval Ġworkspace Writer Ġ= ĠApplication Json Writer < Workspace >( workspace FileName ( configuration . base Directory ), ĠJson Parser Factory . workspace Parser ( configuration )) ĊĠĠĠĠĠĠĠĠ Ġworkspace Writer . save ( this ) ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ} ĊĊĊĠĠ Ġ// ------------------------------------------------ ------- ĊĠĠ Ġ// Ġ ĠEvent ĠSub scribers ĊĠĠ Ġ// ------------------------------------------------ ------- ĊĊĠĠ Ġ@ Subscribe ĊĠĠ Ġfun Ġhandle Project Loading ( e : ĠProject Loading Event ) Ġ{ ĊĠĠĠĠĠ Ġuser History . set ( HISTORY _ PROJECT , Ġe . project File . parent File ) ĊĠĠĠĠĠ Ġval Ġp Ġ= Ġproject Service ?. load ( e . project File ) ĊĠĠĠĠĠ Ġif Ġ( p Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠ ĠsetCurrent Project ( p ) ĊĠĠĠĠĠĠĠĠ Ġproject History [ p . name !! ] Ġ= Ġe . project File ĊĠĠĠĠĠ Ġ} else ĊĠĠĠĠĠĠĠĠ Ġthrow ĠProject Load Exception ( e . project File ) ĊĠĠ Ġ} Ċ Ċ }