package Ġnl . delt ad ak . ple p . ui . drag and drop Ċ Ċ import Ġjavafx . scene . control . Progress Indicator Ċ import Ġjavafx . scene . control . Tree Cell Ċ import Ġjavafx . scene . control . TreeItem Ċ import Ġjavafx . scene . control . TreeView Ċ import Ġjavafx . scene . input . Drag Event Ċ import Ġnl . delt ad ak . ple p . Home work Task Ċ import Ġnl . delt ad ak . ple p . database . Content Provider Ċ import Ġnl . delt ad ak . ple p . database . Database Facade Ċ import Ġnl . delt ad ak . ple p . ui . task cell . selection . Selector Ċ import Ġnl . delt ad ak . ple p . ui . tree view . TreeView Clean er Ċ import Ġnl . delt ad ak . ple p . ui . util . converters . getParent Tasks Ċ import Ġnl . delt ad ak . ple p . ui . util . converters . to Home work TaskList Ċ import Ġjava . time . LocalDate ĊĊ Ċ /** Ċ Ġ* ĠWhen Ġthe Ġdrag ged Ġobject Ġis Ġdropped , Ġupdate Or Insert ĠTree View Ġand Ġdatabase . Ċ Ġ* Ċ Ġ* Ġ@ property Ġtask Cell ĠTree Cell Ġon Ġwhich Ġthe Ġtask Ġis Ġdropped . Ċ Ġ* Ġ@ property Ġtree ĠTree View Ġto Ġupdate Or Insert . Ċ Ġ* Ġ@ property Ġday Ġof Ġthe ĠTree View . Ċ Ġ* Ġ@ property Ġprogress Indicator ĠN eeded Ġfor Ġrefresh ing ĠUI . Ċ Ġ*/ Ċ class ĠDrag Drop ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtask Cell : ĠTree Cell < Home work Task >, ĊĠĠĠĠĠĠĠ Ġval Ġtree : ĠTree View < Home work Task >, ĊĠĠĠĠĠĠĠ Ġval Ġday : ĠLocalDate , ĊĠĠĠĠĠĠĠ Ġval Ġprogress Indicator : ĠProgress Indicator ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Cell . setOn Drag Dropped Ġ{ Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Drag Drop ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Drag Drop ( event : ĠDrag Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrag Board Ġ= Ġevent . drag board ĊĠĠĠĠĠĠĠ Ġvar Ġsuccess Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( drag Board . has Content ( DATA _ FORMAT )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Home work Task Ġ= Ġdrag Board . getContent ( DATA _ FORMAT ) Ġas ĠHome work Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Ġ= Ġdrop Task ( new Home work Task ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevent . is Drop Completed Ġ= Ġsuccess ĊĠĠĠĠĠĠĠ Ġevent . consume () ĊĠĠĠĠĠĠĠ Ġ// ĠClean Ġup Ġimmediately Ġfor Ġa Ġsmooth Ġreaction . ĊĠĠĠĠĠĠĠ ĠTree View Clean er (). clean Single TreeView ( tree ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġorder Ġto Ġshow Ġthe Ġsub tasks Ġagain Ġfor Ġthe Ġdropped Ġitem , Ġwe Ġrequest Ġthem Ġfrom Ġthe Ġdatabase . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġmay Ġseem Ġslow Ġbut Ġin Ġpractice Ġfast Ġenough . ĊĠĠĠĠĠĠĠ ĠContent Provider (). set For One Day ( tree , Ġday , Ġprogress Indicator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdrop Task ( new Home work Task : ĠHome work Task ): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠ Ġ* ĠInsert Ġthe Ġdropped Ġtask , Ġremoving Ġthe Ġold Ġone Ġwill Ġhappen Ġin Ġon Drag Done . ĊĠĠĠĠĠĠĠĠ Ġ* ĠThe Ġitem Ġcould Ġbe Ġdropped Ġway Ġbelow Ġthe Ġexisting Ġlist , Ġin Ġwhich Ġcase Ġwe Ġadd Ġit Ġto Ġthe Ġend . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġtask Ġwas Ġdropped Ġon Ġan Ġempty Ġobject , Ġreplace Ġit , Ġotherwise Ġadd Ġit . ĊĠĠĠĠĠĠĠ Ġval Ġreceiving Item Ġ= Ġtask Cell . tree Item ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġdropped Ġon Ġa Ġsub task . ĊĠĠĠĠĠĠĠ Ġif Ġ( task Cell . tree Item . parent Ġ!= Ġtree . root ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġindex Ġof Ġparent . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent Index Ġ= Ġtree . root . children . indexOf ( task Cell . tree Item . parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDrop Ġtask Ġbelow Ġsub tasks . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtree . root . children . add ( parent Index Ġ+ Ġ 1 , ĠTree Item < Home work Task >( new Home work Task )) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// ĠIf Ġdropped Ġon Ġa Ġparent Ġtask . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( re ceiving Item . value . text Ġ== Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠReplace Ġempty Ġitem . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreceiving Item . value Ġ= Ġnew Home work Task ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Item Ġ= ĠTree Item < Home work Task >( new Home work Task ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtree . root . children Ġcontains Ġonly Ġparent Ġtasks . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtask Cell . index Ġis Ġthe Ġindex Ġin Ġthe Ġlist Ġincluding Ġsub tasks , Ġso Ġthese Ġtwo Ġdon 't Ġmatch . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSo Ġwe Ġfind Ġthe Ġindex Ġcounting Ġparents Ġonly . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġtree . root . children . indexOf ( task Cell . tree Item ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtree . root . children . add ( index , Ġnew Item ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġdatabase , Ġonly Ġupdate Or Insert Ġthe Ġparents , Ġbecause Ġthe Ġsub tasks Ġonly Ġdepend Ġon Ġtheir Ġparents , Ġand Ġare Ġindependent Ġof Ġthe Ġday Ġand Ġthe Ġorder Ġin Ġthe Ġday . ĊĠĠĠĠĠĠĠ ĠDatabase Facade ( progress Indicator ). push Parent Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġday , Ġtree . to Home work TaskList (). getParent Tasks () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġselection Ġon Ġall Ġother Ġitems Ġimmediately . ĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġresult Ġin Ġa Ġsmooth Ġreaction , Ġwhereas Ġotherwise Ġit Ġtakes Ġa Ġbit Ġof Ġnot ic able Ġtime Ġbefore Ġselection Ġof Ġthe Ġjust - drag ged Ġitem Ġ( on Ġits Ġprevious Ġlocation ) Ġis Ġcleared . ĊĠĠĠĠĠĠĠ ĠSelector ( tree ). de selectAll () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ Ċ }