package Ġat . cp ick l . g ads u . client . view . detail Ċ Ċ import Ġat . cp ick l . g ads u . appointment . view . App oin ments In Client View Ċ import Ġat . cp ick l . g ads u . client . Client Ċ import Ġat . cp ick l . g ads u . client . Contact Ċ import Ġat . cp ick l . g ads u . client . Current Client Ċ import Ġat . cp ick l . g ads u . client . Save Client Event Ċ import Ġat . cp ick l . g ads u . client . for Client Ċ import Ġat . cp ick l . g ads u . development . debug Color Ċ import Ġat . cp ick l . g ads u . service . Current Event Ċ import Ġat . cp ick l . g ads u . service . LOG Ċ import Ġat . cp ick l . g ads u . service . Logged Ċ import Ġat . cp ick l . g ads u . t reatment . in client . T reat ments In Client View Ċ import Ġat . cp ick l . g ads u . view . G ads u MenuBar Ċ import Ġat . cp ick l . g ads u . view . Swing Factory Ċ import Ġat . cp ick l . g ads u . view . View Names Ċ import Ġat . cp ick l . g ads u . view . add K Tabs Ċ import Ġat . cp ick l . g ads u . view . components . g ads u Width Ċ import Ġat . cp ick l . g ads u . view . components . new Persist able Event Button Ċ import Ġat . cp ick l . g ads u . view . components . panels . Grid Panel Ċ import Ġat . cp ick l . g ads u . view . logic . Modification Aware Ċ import Ġat . cp ick l . g ads u . view . logic . Modification Checker Ċ import Ġat . cp ick l . g ads u . view . swing . transparent Ċ import Ġcom . google . common . event bus . EventBus Ċ import Ġcom . google . common . event bus . Subscribe Ċ import Ġcom . google . inject . Inject Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Color Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Grid BagConstraints Ċ import Ġjavax . swing . JButton Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . J Tabbed Pane Ċ Ċ interface ĠClient Detail View Ġ{ ĊĊĠĠĠ Ġfun Ġread Client (): ĠClient ĊĠĠĠ Ġ// ĠĠĠ Ġfun Ġchange Client ( client : ĠClient ) ĊĠĠĠ Ġfun Ġis Modified (): ĠBoolean ĊĊĠĠĠ Ġ// ĠĠĠ Ġfun Ġchange Image ( new Image : ĠMy Image ) ĊĠĠĠ Ġfun Ġfocus First () ĊĊĠĠĠ Ġfun Ġas Component (): ĠComponent ĊĠĠĠ Ġfun Ġclose Pre par ations () ĊĊĠĠĠ Ġfun Ġchange Tab ( tab : ĠClient Tab Type ) Ċ } Ċ Ċ @ Logged Ċ open Ġclass ĠSw ing Client Detail View Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġsw ing : ĠSw ing Factory , ĊĠĠĠĠĠĠĠ Ġbus : ĠEvent Bus , ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcurrent Client : ĠCurrent Client , ĊĠĠĠĠĠĠĠ Ġapp ointments Sub View : ĠApp oin ments In Client View , Ġ// Ġpassed Ġthrough Ġto ĠTab Main ĊĠĠĠĠĠĠĠ Ġtreatment Sub view : ĠT reat ments In Client View , Ġ// Ġpassed Ġthrough Ġto ĠTab Main ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtab Ass ist : ĠClient Tab Ass ist , Ċ // ĠĠĠĠĠĠĠ Ġimage Picker Factory : ĠImage Picker Factory , Ċ // ĠĠĠĠĠĠĠ Ġprefs : ĠP refs ĊĠĠĠĠĠĠĠ Ġmenu Bar : ĠG ads u MenuBar Ġ// Ġthis Ġis Ġkind Ġa Ġdesign Ġhack , Ġbut Ġit Ġwas Ġqu icker Ġto Ġdo Ġ;) Ċ ) Ġ: ĠGrid Panel (), ĠClient Detail View , ĠMod ification Aware Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLOG ( java Class ) ĊĊĠĠĠ Ġprivate Ġval Ġbtn Save Ġ= Ġsw ing . new Persist able Event Button ( View Names . Client . Save Button , Ġ{ ĠSave Client Event () Ġ}). g ads u Width () ĊĊĠĠĠ Ġprivate Ġval Ġbtn Cancel Ġ= ĠJButton (" Abbre chen "). g ads u Width () ĊĠĠĠ Ġprivate Ġval Ġmodification Checker Ġ= ĠMod ification Checker ( this , Ġbtn Save , Ġbtn Cancel , Ġmenu Bar . client Save ) ĊĊĠĠĠ Ġ// Ġattention : Ġmust Ġcome ĠAFTER Ġlist Ġof Ġbuttons Ġdue Ġto Ġhack y Ġdesign Ġnature Ġ;) ĊĊĠĠĠ Ġprivate Ġval Ġtab Main Ġ= ĠClient Tab Main ( current Client . data , Ġmodification Checker , Ġapp ointments Sub View , Ġtreatment Sub view , Ġbus ) ĊĠĠĠ Ġprivate Ġval Ġtab Texts Ġ= ĠClient Tab Texts ( modification Checker , Ġbus ) ĊĠĠĠ Ġprivate Ġval Ġtab T cm Ġ= ĠClient Tab T cm ( current Client . data , Ġmodification Checker , Ġbus ) ĊĠĠĠ Ġprivate Ġval Ġtab 5 e Ġ= ĠClient Tab 5 e ( current Client . data , Ġmodification Checker , Ġbus ) ĊĊĠĠĠ Ġprivate Ġval Ġtab bed Pane Ġ= ĠJ Tabbed Pane ( J Tabbed Pane . NORTH , ĠJ Tabbed Pane . SCROLL _ TAB _ LAYOUT ) ĊĠĠĠ Ġprivate Ġval Ġall Tabs Ġ= ĠlistOf ( tab Main , Ġtab Texts , Ġtab T cm , Ġtab 5 e , Ġtab Ass ist ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġmodification Checker . disable All () ĊĊĠĠĠĠĠĠĠ Ġbtn Cancel . name Ġ= ĠView Names . Client . Cancel Button ĊĠĠĠĠĠĠĠ Ġbtn Cancel . addActionListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" btn Cancel Ġclicked ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Fields () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtab bed Pane . add ChangeListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġtab bed Pane . selected Component Ġas ĠClient Tab ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbus . post ( Client Tab Selected ( tab )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Layout () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchange Tab ( tab : ĠClient Tab Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Tab Ġ= Ġwhen Ġ( tab ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Tab Type . MAIN Ġ-> Ġtab Main ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Tab Type . TEXT S Ġ-> Ġtab Texts ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Tab Type . T CM Ġ-> Ġtab T cm ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Tab Type . FI VE E Ġ-> Ġtab 5 e ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClient Tab Type . AS SIST Ġ-> Ġtab Ass ist ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( new Tab Ġ!= Ġtab bed Pane . selected Component ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . trace (" Switch ing Ġto Ġtab : Ġ{}", Ġtab ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtab bed Pane . selected Component Ġ= Ġnew Tab ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose Pre par ations () Ġ{ ĊĠĠĠĠĠĠĠ Ġtab Main . inp Birth day . hide Popup () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġc . fill Ġ= ĠGridBagConstraints . BOTH ĊĠĠĠĠĠĠĠ Ġc . weight x Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġc . weight y Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġadd ( init Tabbed Pane ()) ĊĊĠĠĠĠĠĠĠ Ġc . gridy ++ ĊĠĠĠĠĠĠĠ Ġc . fill Ġ= ĠGridBagConstraints . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġc . anchor Ġ= ĠGridBagConstraints . CENTER ĊĠĠĠĠĠĠĠ Ġc . weight x Ġ= Ġ 1 . 0 ĊĠĠĠĠĠĠĠ Ġc . weight y Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġadd ( create Button Panel ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Tabbed Pane (): ĠJ Tabbed Pane Ġ{ ĊĠĠĠĠĠĠĠ Ġtab bed Pane . transparent () ĊĠĠĠĠĠĠĠ Ġtab bed Pane . name Ġ= ĠView Names . Client . Tabbed Pane ĊĠĠĠĠĠĠĠ Ġtab bed Pane . add K Tabs ( all Tabs ) Ċ // ĠĠĠĠĠĠĠ Ġvar Ġi : ĠInt Ġ= Ġ 0 Ċ // ĠĠĠĠĠĠĠ Ġall Tabs . forEach Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtab Content : ĠComponent Ġ= Ġif Ġ( it . sc rolled ) ĠJ ScrollPane ( it . as Component ()). transparent () Ġelse Ġit . as Component () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtab bed Pane . add Tab ("< html >< body >< table Ġwidth =' 1 0 0 '>< span Ġstyle =' align : center '> ${ it . tab Title }</ span ></ table ></ body ></ html >", Ġtab Content ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtab bed Pane . set Tab Component At ( i ++, ĠJLabel ( it . tab Title , ĠJLabel . CENTER ). enforce Width ( 1 0 0 )) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtab bed Pane ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Button Panel (): ĠJPanel Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Panel Ġ= ĠJPanel ( Border Layout ()) ĊĠĠĠĠĠĠĠ Ġbutton Panel . transparent () ĊĠĠĠĠĠĠĠ Ġbutton Panel . debug Color Ġ= ĠColor . BLUE ĊĠĠĠĠĠĠĠ Ġbutton Panel . add ( btn Save , ĠBorderLayout . WEST ) ĊĠĠĠĠĠĠĠ Ġbutton Panel . add ( btn Cancel , ĠBorderLayout . EAST ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbutton Panel ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Client (): ĠClient Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . trace (" read Client () ") ĊĠĠĠĠĠĠĠ Ġreturn ĠClient ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġcurrent Client . data . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreated Ġ= Ġcurrent Client . data . created , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġcurrent Client . data . state , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠfirstName Ġ= Ġtab Main . inp FirstName . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlastName Ġ= Ġtab Main . inp LastName . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnick Name Ext Ġ= Ġtab Main . inp Nick Name Ext . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnick Name Int Ġ= Ġtab Main . inp Nick Name Int . text , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontact Ġ= ĠContact ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmail Ġ= Ġtab Main . inp Mail . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphone Ġ= Ġtab Main . inp Phone . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstreet Ġ= Ġtab Main . inp Street . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġzip Code Ġ= Ġtab Main . inp Zip Code . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcity Ġ= Ġtab Main . inp City . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġknown By Ġ= Ġtab Main . inp Known By . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġd sg vo Accepted Ġ= Ġtab Main . inp D sg vo Accepted . delegate . isSelected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwant Receive M ails Ġ= Ġtab Main . inp Want Receive M ails . delegate . isSelected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbirthday Ġ= Ġtab Main . inp Birth day . selected Date , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgender Ġ= Ġtab Main . inp Gender . selected Item Typed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcountry Of Origin Ġ= Ġtab Main . inp Country Of Origin . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Ġ= Ġtab Main . inp Origin . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelationship Ġ= Ġtab Main . inp Relationship . selected Item Typed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjob Ġ= Ġtab Main . inp Job . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchildren Ġ= Ġtab Main . inp Children . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh obb ies Ġ= Ġtab Main . inp H obb ies . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnote Ġ= Ġtab Main . inp Note . to En ric hed Text (), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Imp ression Ġ= Ġtab Texts . inp Imp ression . to En ric hed Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Medical Ġ= Ġtab Texts . inp Medical . to En ric hed Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Comp l aints Ġ= Ġtab Texts . inp Comp l aints . to En ric hed Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Personal Ġ= Ġtab Texts . inp Personal . to En ric hed Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Objective Ġ= Ġtab Texts . inp Objective . to En ric hed Text (), ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Main Objective Ġ= Ġtab Main . inp Main Objective . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Sy mptoms Ġ= Ġtab Main . inp Sy mptoms . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Syn d rom Ġ= Ġtab Main . inp Syn d rom . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcategory Ġ= Ġcurrent Client . data . category , Ġ// Ġnot Ġchange able Ġvia Ġclient Ġdetail Ġview , Ġbut Ġvia Ġpopup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdon ation Ġ= Ġcurrent Client . data . don ation , Ġ// Ġnot Ġchange able Ġvia Ġclient Ġdetail Ġview , Ġbut Ġvia Ġpopup ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyy T end ency Ġ= Ġtab 5 e . inp Yy T end ency . selected Item Typed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Y in Y ang Ġ= Ġtab 5 e . inp Text Y in Y ang . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelement T end ency Ġ= Ġtab 5 e . inp Element T end ency . selected Item Typed , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Five Elements Ġ= Ġtab 5 e . inp Five Elements . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext W ood Ġ= Ġtab 5 e . inp Text W ood . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Fire Ġ= Ġtab 5 e . inp Text Fire . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Earth Ġ= Ġtab 5 e . inp Text Earth . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Metal Ġ= Ġtab 5 e . inp Text Metal . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Water Ġ= Ġtab 5 e . inp Text Water . text , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt cm Note Ġ= Ġtab T cm . inp T cm Note . to En ric hed Text (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpicture Ġ= Ġcurrent Client . data . picture , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc props Ġ= Ġtab T cm . read Props () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Subscribe Ġopen Ġfun Ġon Current Event ( event : ĠCurrent Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġevent . for Client Ġ{ Ġupdate Fields () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfocus First () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . trace (" focus First () ") ĊĠĠĠĠĠĠĠ Ġval Ġrequested Ġ= Ġtab Main . inp FirstName . request Focus In Window () ĊĠĠĠĠĠĠĠ Ġif Ġ(! requested ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog . warn (" Request ing Ġfocus Ġfailed Ġfor : Ġ{}", Ġtab Main . inp FirstName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Modified (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( tab Ġin Ġall Tabs ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tab . is Modified ( current Client . data )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġupdate Fields () Ġ{ ĊĠĠĠĠĠĠĠ Ġlog . debug (" update Fields (), Ġcurrent Client . data ={ }", Ġcurrent Client . data ) ĊĊĠĠĠĠĠĠĠ Ġbtn Save . change Label ( current Client . data ) ĊĠĠĠĠĠĠĠ Ġall Tabs . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . update Fields ( current Client . data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmodification Checker . trigger () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Component () Ġ= Ġthis Ċ Ċ } Ċ