package Ġgl 8 0 8 0 . life game . logic . definition čĊč Ċ import Ġgl 8 0 8 0 . life game . logic . Abstract Entity č Ċ import Ġgl 8 0 8 0 . life game . logic . Life Game č Ċ import Ġgl 8 0 8 0 . life game . logic . Life Game Cell č Ċ import Ġgl 8 0 8 0 . life game . logic . Position č Ċ import Ġgl 8 0 8 0 . life game . logic . exception . Illegal Parameter Exception č Ċ import Ġgl 8 0 8 0 . life game . util . Nested Loop č Ċ import Ġjava . util .* č Ċ import Ġjavax . persistence .* čĊč Ċ /** čĊ Ġ* ĠãĤ ² ãĥ¼ãĥł å®ļç¾© ãĤĴ è¡¨ ãģĻ ãĤ¯ãĥ©ãĤ¹ ãĢĤ čĊ Ġ*/ č Ċ @ Entity č Ċ @ Table ( name =" GAME _ DEFINITION ") č Ċ class ĠGame Definition ( čĊĠĠĠ Ġprivate Ġval Ġsize : ĠInt č Ċ ): ĠAbstract Entity (), ĠLife Game Ġ{ čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġ/** ãĤ ² ãĥ¼ãĥł ãģ® ãĤµ ãĤ¤ãĤº ãģ« æĮĩå®ļ ãģ§ãģįãĤĭ æľĢå¤§ åĢ¤ */ čĊĠĠĠĠĠĠĠ Ġval ĠMAX _ SIZE Ġ= Ġ 5 0 čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Version čĊĠĠĠ Ġprivate Ġvar Ġversion : ĠLong ? Ġ= Ġnull čĊčĊĠĠĠ Ġ@ OneToMany ( cascade Ġ= ĠarrayOf ( Cascade Type . PER SIST , ĠCascade Type . MERGE , ĠCascade Type . REMOVE )) čĊĠĠĠ Ġ@ JoinColumn ( name =" GAME _ DEFINITION _ ID ") čĊĠĠĠ Ġprivate Ġval Ġcells : ĠMap < Position , ĠCell Definition > čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġif Ġ( this . size Ġ< Ġ 1 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Parameter Exception (" ãĤµ ãĤ¤ãĤº ãģ« ï¼ Ĳ ä»¥ å¤ĸ ãģ® åĢ¤ ãģ¯ æĮĩå®ļ ãģ§ãģį ãģ¾ãģĽãĤĵ Ġsize Ġ= Ġ${ this . size }") čĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( MAX _ SIZE Ġ< Ġthis . size ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegal Parameter Exception (" ãĤµ ãĤ¤ãĤº ãģ« Ġ$ MAX _ SIZE Ġ ä»¥ä¸Ĭ ãģ® åĢ¤ ãģ¯ æĮĩå®ļ ãģ§ãģį ãģ¾ãģĽãĤĵ Ġsize Ġ= Ġ${ this . size }") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġthis . cells Ġ= ĠNested Loop . collect Map ( this . size , Ġ{ i : ĠInt , Ġj : ĠInt Ġ-> ĠPosition ( i , Ġj )}, Ġ{ Ġ-> ĠCell Definition () }) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠæĮĩå®ļ ãģĹãģŁ ä½įç½® ãģ® ãĤ» ãĥ« å®ļç¾© ãģ® çĬ¶æħĭ ãĤĴ å¤īæĽ´ ãģĹãģ¾ãģĻ ãĢĤ čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ@ param Ġposition Ġ ä½įç½® čĊĠĠĠĠ Ġ* Ġ@ param Ġstatus Ġ çĶŁ åŃĺ ãģ« å¤īæĽ´ ãģĻãĤĭ åł´åĲĪãģ¯ Ġ{@ code Ġtrue } čĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalArgumentException Ġ ä½įç½® ãģĮ Ġ{@ code Ġnull } Ġãģ® åł´åĲĪ čĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegal Parameter Exception Ġ ä½įç½® ãģ« æĮĩå®ļ ãģĹãģŁ åł´ æīĢ ãģ« ãĤ» ãĥ« å®ļç¾© ãģĮ åŃĺåľ¨ ãģĹãģªãģĦ åł´åĲĪ čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġfun ĠsetStatus ( position : ĠPosition , Ġstatus : ĠBoolean ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġcell Ġ= Ġthis . cells [ position ] čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠIllegal Parameter Exception (" ä½įç½® ãģĮ ç¯Ħ åĽ ² å¤ĸ ãģ§ãģĻ Ġ( size Ġ= Ġ${ this . size }, Ġposition Ġ= Ġ$ position )") čĊčĊĠĠĠĠĠĠĠ Ġcell . setStatus ( status ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget Cells (): ĠMap < Position , ĠLife Game Cell > Ġ= ĠHashMap ( this . cells ) čĊčĊĠĠĠ Ġoverride Ġfun Ġget Version () Ġ= Ġthis . version čĊčĊĠĠĠ Ġfun Ġset Version ( version : ĠLong ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . version Ġ= Ġversion čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġget Size () Ġ= Ġthis . size čĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString { čĊĠĠĠĠĠĠĠ Ġreturn Ġ" Game Definition ( id =${ this . getId ()}, Ġsize =$ size , Ġversion =$ version , Ġcells =$ cells )" čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ@ Deprecated ( message =" J PA ĠçĶ¨ ", Ġlevel Ġ= ĠDeprec ation Level . ERROR ) čĊĠĠĠ Ġconstructor () Ġ: Ġthis ( 1 ) č Ċ } čĊ