/** Ċ Copyright Ġ 2 0 2 1 ĠRe us abit ĠSoftware ĠLLC Ċ Ċ 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 Ċ Ċ http :// 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 Ġcom . re us abit . pro ze zz or Ċ Ċ import Ġjava . awt . Border Layout Ċ import Ġjava . awt . Desktop Ċ import Ġjava . awt . Dimension Ċ import Ġjava . awt . Grid BagConstraints Ċ import Ġjava . awt . Grid BagLayout Ċ import Ġjava . awt . Image Ċ import Ġjava . awt . Insets Ċ import Ġjava . awt . Toolkit Ċ import Ġjava . awt . event . Window Adapter Ċ import Ġjava . awt . event . Window Event Ċ import Ġjava . io . File Ċ import Ġjava . net . URI Ċ import Ġjavax . image io . Image IO Ċ import Ġjavax . swing . Image Icon Ċ import Ġjavax . swing . JButton Ċ import Ġjavax . swing . J FileChooser Ċ import Ġjavax . swing . J Frame Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . J Menu Ċ import Ġjavax . swing . J MenuBar Ċ import Ġjavax . swing . J MenuItem Ċ import Ġjavax . swing . JOptionPane Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . JTextField Ċ import Ġjavax . swing . file cho oser . FileName Extension Filter ĊĊ Ċ private Ġval ĠHEL P _ URL Ġ= Ġ" https :// re us abit . com / pro ze zz or - help " Ċ Ċ /** Ċ Ġ* ĠThe Ġgui Ġdisplays Ġa Ġdialog Ġbox Ġthat Ġis Ġinitially Ġpopulated Ġwith Ġthe Ġvalues Ġcalculated Ġpreviously , Ċ Ġ* Ġeither Ġfrom Ġcommand Ġline Ġprocessing Ġor Ġdefaults . ĠThe Ġuser Ġcan Ġchange Ġthese , Ġand Ġrun Ġthe Ġprocessing Ċ Ġ* Ġas Ġmany Ġtimes Ġas Ġdesired . Ċ Ġ*/ Ċ fun Ġdo Gui ( program Options : ĠProgram Options . Builder ) Ġ{ ĊĠ Ġval Ġgui Ġ= ĠGui ( program Options ) Ċ } Ċ Ċ fun Ġmake Insets ( ĊĠ Ġtop : ĠInt Ġ= Ġ 0 , ĊĠ Ġleft : ĠInt Ġ= Ġ 0 , ĊĠ Ġbottom : ĠInt Ġ= Ġ 0 , ĊĠ Ġright : ĠInt Ġ= Ġ 0 , Ċ ) Ġ= ĠIn sets ( top , Ġleft , Ġbottom , Ġright ) Ċ Ċ fun Ġmake Insets ( h : ĠInt Ġ= Ġ 0 , Ġv : ĠInt Ġ= Ġ 0 ) Ġ= Ġmake Insets ( v , Ġh , Ġv , Ġh ) Ċ fun Ġmake Insets ( all : ĠInt Ġ= Ġ 0 ) Ġ= Ġmake Insets ( all , Ġall ) Ċ Ċ fun Ġmake Constraints ( ĊĠ Ġgrid x : ĠInt , ĊĠ Ġgrid y : ĠInt , ĊĠ Ġgrid width : ĠInt Ġ= Ġ 1 , ĊĠ Ġgrid height : ĠInt Ġ= Ġ 1 , ĊĠ Ġweight x : ĠDouble Ġ= Ġ 0 . 0 , ĊĠ Ġweight y : ĠDouble Ġ= Ġ 0 . 0 , ĊĠ Ġanchor : ĠInt Ġ= ĠGridBagConstraints . WEST , ĊĠ Ġfill : ĠInt Ġ= ĠGridBagConstraints . NONE , ĊĠ Ġin sets : ĠIn sets Ġ= Ġmake Insets (), ĊĠ Ġip ad x : ĠInt Ġ= Ġ 0 , ĊĠ Ġip ady : ĠInt Ġ= Ġ 0 , Ċ ): ĠGridBagConstraints Ġ= ĠGridBagConstraints ( ĊĠ Ġgrid x , ĊĠ Ġgrid y , ĊĠ Ġgrid width , ĊĠ Ġgrid height , ĊĠ Ġweight x , ĊĠ Ġweight y , ĊĠ Ġanchor , ĊĠ Ġfill , ĊĠ Ġin sets , ĊĠ Ġip ad x , ĊĠ Ġip ady Ċ ) Ċ Ċ fun Ġget Notice Text (): ĠString Ġ{ ĊĠ Ġval Ġcl Ġ= ĠThread . currentThread (). context ClassLoader ĊĠ Ġval Ġstream Ġ= Ġcl . getResource AsStream (" NOTICE . txt ") ĊĠ Ġval Ġreader Ġ= Ġstream ?. reader ( Charsets . UTF _ 8 ) ĊĠ Ġval Ġnotice Text Ġ= Ġreader ?. read Text () Ġ?: Ġ"" ĊĠ Ġreturn Ġnotice Text Ċ } Ċ Ċ // class ĠNot ices Dialog ( owner : ĠJ Frame ) Ġ: ĠJ Dialog ( owner , Ġ" Third ĠParty ĠLicense ĠNot ices ", Ġtrue ) Ġ{ Ċ // Ġ Ġinit Ġ{ Ċ // ĠĠĠ Ġlayout Ġ= ĠGrid BagLayout () Ċ // Ċ // ĠĠĠ Ġcontent Pane . apply Ġ{ Ċ // ĠĠĠĠĠ Ġadd ( JLabel (" Third ĠParty ĠLicense ĠNot ices :" ), Ġmake Constraints ( 0 , Ġ 0 , Ġin sets Ġ= Ġmake Insets ( 2 0 ))) Ċ // Ċ // ĠĠĠĠĠ Ġval Ġcl Ġ= ĠThread . currentThread (). context ClassLoader Ċ // ĠĠĠĠĠ Ġval Ġstream Ġ= Ġcl . getResource AsStream (" NOTICE . txt ") Ċ // ĠĠĠĠĠ Ġval Ġreader Ġ= Ġstream ?. reader ( Charsets . UTF _ 8 ) Ċ // ĠĠĠĠĠ Ġval Ġnotice Text Ġ= Ġreader ?. read Text () Ġ?: Ġ"" Ċ // Ċ // ĠĠĠĠĠ Ġadd ( Ċ // ĠĠĠĠĠĠĠ ĠJ ScrollPane (( J Text Pane (). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġis Editable Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Something Ġshorter \ nan other line \ n ". repeat ( 1 0 0 0 0 0 0 ) Ċ // ĠĠĠĠĠĠĠ Ġ})), Ċ // ĠĠĠĠĠĠĠ Ġmake Constraints ( 0 , Ġ 1 , Ġin sets Ġ= Ġmake Insets ( 2 0 )) Ċ // ĠĠĠĠĠ Ġ) Ċ // Ċ // Ċ // ĠĠĠĠĠ Ġadd ( Ċ // ĠĠĠĠĠĠĠ ĠJButton (" Close "). apply Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠ Ġadd ActionListener Ġ{ Ġe Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Not ices Dialog . isVisible Ġ= Ġfalse Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Not ices Dialog . dispose () Ċ // ĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠ Ġthis @ Not ices Dialog . default Close Operation Ġ= ĠJ Dialog . DIS POSE _ ON _ CLOSE Ċ // ĠĠĠĠĠĠĠĠĠ Ġthis @ Not ices Dialog . root Pane . default Button Ġ= Ġthis Ċ // ĠĠĠĠĠĠĠ Ġ}, Ċ // ĠĠĠĠĠĠĠ Ġmake Constraints ( 0 , Ġ 2 , Ġin sets Ġ= Ġmake Insets ( 2 0 )) Ċ // ĠĠĠĠĠ Ġ) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġval Ġdesktop Size Ġ= ĠToolkit . getDefault Toolkit (). screen Size Ċ // ĠĠĠ Ġval ĠMAX _ WIDTH Ġ= Ġ 6 0 0 Ċ // ĠĠĠ Ġval ĠMAX _ HEIGHT Ġ= Ġ 1 0 0 0 Ċ // ĠĠĠ Ġval Ġwidth Ġ= Ġmin Of ( desktop Size . width , ĠMAX _ WIDTH ) Ċ // ĠĠĠ Ġval Ġheight Ġ= Ġmin Of ( desktop Size . height , ĠMAX _ HEIGHT ) Ċ // ĠĠĠ Ġval Ġx Ġ= Ġmax Of ( 0 , Ġdesktop Size . width Ġ/ Ġ 2 Ġ- Ġwidth Ġ/ Ġ 2 ) Ċ // ĠĠĠ Ġval Ġy Ġ= Ġmax Of ( 0 , Ġdesktop Size . height Ġ/ Ġ 2 Ġ- Ġheight Ġ/ Ġ 2 ) Ċ // ĠĠĠ Ġset Bounds ( x , Ġy , Ġwidth , Ġheight ) Ċ // Ċ // ĠĠĠ Ġdefault Close Operation Ġ= ĠJ Dialog . DIS POSE _ ON _ CLOSE Ċ // ĠĠĠ Ġis Modal Ġ= Ġtrue Ċ // Ġ Ġ} Ċ //} ĊĊ Ċ class ĠGui ( val Ġprogram Options : ĠProgram Options . Builder ) Ġ: ĠJ Frame (" Pro ze zz or ") Ġ{ ĊĠ Ġval Ġinput Dir Label Ġ= ĠJLabel (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Input ĠDirectory :" ĊĠ Ġ} ĊĊĠ Ġval Ġinput Dir Field Ġ= ĠJTextField (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġprogram Options . input Dir ?. path Ġ?: Ġ"" ĊĠĠĠ Ġtool Tip Text Ġ= Ġ" Select Ġor Ġenter Ġthe Ġdirectory Ġcontaining Ġthe Ġchat Ġfiles " ĊĠĠĠ Ġpreferred Size Ġ= ĠDimension ( 4 0 0 , Ġ 2 5 ) ĊĠ Ġ} ĊĊĠ Ġval Ġinput Dir Browse Button Ġ= ĠJButton (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Browse ..." ĊĠ Ġ} ĊĊĠ Ġval ĠoutputFile Label Ġ= ĠJLabel (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Output ĠFile :" ĊĠ Ġ} ĊĊĠ Ġval ĠoutputFile Field Ġ= ĠJTextField (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġprogram Options . outputFile ?. path Ġ?: Ġ"" ĊĠĠĠ Ġtool Tip Text Ġ= Ġ" Select Ġor Ġenter Ġthe Ġoutput Ġfile Ġname " ĊĠĠĠ Ġpreferred Size Ġ= ĠDimension ( 4 0 0 , Ġ 2 5 ) ĊĠ Ġ} ĊĊĠ Ġval ĠoutputFile Browse Button Ġ= ĠJButton (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Browse ..." ĊĠ Ġ} ĊĊĠ Ġval Ġrun Button Ġ= ĠJButton (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Run " ĊĠ Ġ} ĊĊĠ Ġval Ġexit Button Ġ= ĠJButton (). apply Ġ{ ĊĠĠĠ Ġtext Ġ= Ġ" Exit " ĊĠ Ġ} ĊĊĠ Ġval Ġhelp Ġ= ĠJ MenuItem (" Instructions ") ĊĠ Ġval Ġnotices Ġ= ĠJ MenuItem (" Third ĠParty ĠLicense ĠNot ices ") ĊĠ Ġval Ġabout Ġ= ĠJ MenuItem (" About ") ĊĠ Ġval Ġmenu Bar Ġ= ĠJ MenuBar (). apply Ġ{ ĊĠĠĠ Ġadd ( J Menu (" Help "). apply Ġ{ ĊĠĠĠĠĠ Ġadd ( help ) ĊĠĠĠĠĠ Ġadd ( notices ) ĊĠĠĠĠĠ Ġadd ( about ) ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġdesktop Size Ġ= ĠToolkit . getDefault Toolkit (). screen Size ĊĠĠĠ Ġval ĠMAX _ WIDTH Ġ= Ġ 7 0 0 ĊĠĠĠ Ġval ĠMAX _ HEIGHT Ġ= Ġ 2 3 0 ĊĠĠĠ Ġval Ġwidth Ġ= Ġmin Of ( desktop Size . width , ĠMAX _ WIDTH ) ĊĠĠĠ Ġval Ġheight Ġ= Ġmin Of ( desktop Size . height , ĠMAX _ HEIGHT ) ĊĠĠĠ Ġval Ġx Ġ= Ġmax Of ( 0 , Ġdesktop Size . width Ġ/ Ġ 2 Ġ- Ġwidth Ġ/ Ġ 2 ) ĊĠĠĠ Ġval Ġy Ġ= Ġmax Of ( 0 , Ġdesktop Size . height Ġ/ Ġ 2 Ġ- Ġheight Ġ/ Ġ 2 ) ĊĠĠĠ Ġset Bounds ( x , Ġy , Ġwidth , Ġheight ) ĊĠĠĠ Ġdefault Close Operation Ġ= ĠDIS POSE _ ON _ CLOSE ĊĊĠĠĠ Ġj MenuBar Ġ= Ġmenu Bar ĊĊĠĠĠ Ġhelp . addActionListener Ġ{ Ġdisplay Help () Ġ} ĊĠĠĠ Ġnotices . addActionListener Ġ{ Ġdisplay Not ices () Ġ} ĊĠĠĠ Ġabout . addActionListener Ġ{ Ġabout Dialog () Ġ} ĊĊĠĠĠ Ġicon Images Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠ ĠImage IO . read ( java Class . getResource ("/ icon 1 6 x 1 6 . png ")) Ġas ĠImage , ĊĠĠĠĠĠ ĠImage IO . read ( java Class . getResource ("/ icon 3 2 x 3 2 . png ")) Ġas ĠImage , ĊĠĠĠĠĠ ĠImage IO . read ( java Class . getResource ("/ icon 4 8 x 4 8 . png ")) Ġas ĠImage , ĊĠĠĠĠĠ ĠImage IO . read ( java Class . getResource ("/ icon 1 2 8 x 1 2 8 . png ")) Ġas ĠImage , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġmain Panel Ġ= ĠJPanel (). apply Ġ{ ĊĠĠĠĠĠ Ġcontent Pane . add ( this , ĠBorderLayout . CENTER ) ĊĊĠĠĠĠĠ Ġlayout Ġ= ĠGrid BagLayout (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġ// border Ġ= ĠEt ched Border () // make Insets ( all Ġ= Ġ 1 0 )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ Ġinput Dir Label , ĊĠĠĠĠĠ Ġmake Constraints ( gridx Ġ= Ġ 1 , Ġgrid y Ġ= Ġ 1 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ Ġinput Dir Field , ĊĠĠĠĠĠ Ġmake Constraints ( ĊĠĠĠĠĠĠĠ Ġgrid x Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġgrid y Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠ Ġfill Ġ= ĠGridBagConstraints . HORIZONTAL , ĊĠĠĠĠĠĠĠ Ġweight x Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠ Ġin sets Ġ= Ġmake Insets ( 5 ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ Ġinput Dir Browse Button , ĊĠĠĠĠĠ Ġmake Constraints ( gridx Ġ= Ġ 3 , Ġgrid y Ġ= Ġ 1 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ ĠoutputFile Label , ĊĠĠĠĠĠ Ġmake Constraints ( gridx Ġ= Ġ 1 , Ġgrid y Ġ= Ġ 2 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ ĠoutputFile Field , ĊĠĠĠĠĠ Ġmake Constraints ( ĊĠĠĠĠĠĠĠ Ġgrid x Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġgrid y Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġfill Ġ= ĠGridBagConstraints . HORIZONTAL , ĊĠĠĠĠĠĠĠ Ġweight x Ġ= Ġ 1 . 0 , ĊĠĠĠĠĠĠĠ Ġin sets Ġ= Ġmake Insets ( 5 ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ ĠoutputFile Browse Button , ĊĠĠĠĠĠ Ġmake Constraints ( gridx Ġ= Ġ 3 , Ġgrid y Ġ= Ġ 2 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// Empty Ġpanel ĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ ĠJPanel (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġset Size ( 5 0 , Ġ 3 0 ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġmake Constraints ( 3 , Ġ 3 ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġmain Panel . add ( ĊĠĠĠĠĠ ĠJPanel (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġlayout Ġ= ĠGrid BagLayout () ĊĊĠĠĠĠĠĠĠ Ġ// Empty ĊĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠ ĠJPanel (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset PreferredSize ( Dimension ( 1 0 , Ġ 1 0 )) ĊĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠ Ġmake Constraints ( 1 , Ġ 1 , Ġweight x Ġ= Ġ 1 . 0 , Ġfill Ġ= ĠGridBagConstraints . HORIZONTAL ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠ Ġrun Button , ĊĠĠĠĠĠĠĠĠĠ Ġmake Constraints ( 2 , Ġ 1 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠ Ġexit Button , ĊĠĠĠĠĠĠĠĠĠ Ġmake Constraints ( 3 , Ġ 1 , Ġin sets Ġ= Ġmake Insets ( 5 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠ Ġmake Constraints ( ĊĠĠĠĠĠĠĠ Ġgrid x Ġ= Ġ 2 , ĊĠĠĠĠĠĠĠ Ġgrid y Ġ= Ġ 4 , ĊĠĠĠĠĠĠĠ Ġfill Ġ= ĠGridBagConstraints . HORIZONTAL , ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinput Dir Browse Button . addActionListener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠ Ġval Ġcho oser Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ ĠFile ( input Dir Field . text ). isDirectory Ġ-> ĠJ FileChooser ( input Dir Field . text ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠJ FileChooser () ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġfile Selection Mode Ġ= ĠJ FileChooser . DIRECT ORIES _ ONLY ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġresult Ġ= Ġcho oser . show Open Dialog ( this ) ĊĠĠĠĠĠ Ġif Ġ( result Ġ== ĠJ FileChooser . APPRO VE _ OPTION ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinput Dir Field . text Ġ= Ġcho oser . selected File . path ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠoutputFile Browse Button . addActionListener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠ Ġval Ġfield Value Ġ= ĠFile ( outputFile Field . text ) ĊĠĠĠĠĠ Ġval Ġparent Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġfield Value . isDirectory Ġ-> Ġfield Value ĊĠĠĠĠĠĠĠ Ġfield Value . parent File ?. isDirectory Ġ?: Ġfalse Ġ-> Ġfield Value . parent File ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġcho oser Ġ= ĠJ FileChooser () ĊĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠ Ġ// file Selection Mode Ġ= ĠJ FileChooser . SAVE _ DIALOG Ġ// ĠThis Ġmakes Ġit Ġnot Ġwork , Ġshows Ġfolder Ġselection Ġrather Ġthan Ġfile Ġselection . ĊĠĠĠĠĠĠĠ Ġif Ġ( parent Ġ!= Ġnull ) Ġcurrent Directory Ġ= Ġparent ĊĠĠĠĠĠĠĠ Ġval Ġfilter Ġ= ĠFileName Extension Filter (" xlsx Ġfiles Ġ(* . xlsx )", Ġ" xlsx ") ĊĠĠĠĠĠĠĠ Ġadd Cho osable File Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġfile Filter Ġ= Ġfilter ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcho oser . show Save Dialog ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġnew FileName Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcho oser . selected File . path . endsWith (". xlsx ") Ġ-> Ġcho oser . selected File . path ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġcho oser . selected File . path Ġ+ Ġ". xlsx " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== ĠJ FileChooser . APPRO VE _ OPTION ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ// J FileChooser Ġdoesn 't Ġappend Ġthe Ġextension Ġif Ġit Ġis Ġnot Ġentered : ĊĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġprompt For Overwrite ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( new FileName ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmsg FileName Ġ= Ġ" output Ġfile " ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . to Pro ceed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile Field . text Ġ= Ġnew FileName ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Options . overwrite OutputFile Ġ= Ġresponse . to Overwrite () ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . to Repeat File Selection ()) Ġbreak ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġexit Button . addActionListener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠ Ġthis . dispose () ĊĠĠĠĠĠ ĠSystem . exit ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġrun Button . addActionListener Ġ{ Ġe Ġ-> ĊĠĠĠĠĠ Ġprogram Options . input Dir Ġ= ĠFile ( input Dir Field . text ) ĊĠĠĠĠĠ Ġprogram Options . outputFile Ġ= ĠFile ( outputFile Field . text ) ĊĠĠĠĠĠ Ġval Ġprompt Result Ġ= Ġprompt For Overwrite ( ĊĠĠĠĠĠĠĠ Ġparent Ġ= Ġthis , ĊĠĠĠĠĠĠĠ Ġfile Ġ= Ġprogram Options . outputFile !! , ĊĠĠĠĠĠĠĠ Ġoverwrite Ġ= Ġprogram Options . overwrite OutputFile !! , ĊĠĠĠĠĠĠĠ Ġmsg FileName Ġ= Ġ" output Ġfile ", ĊĠĠĠĠĠĠĠ Ġinclude Cancel Option Ġ= Ġfalse , ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġif Ġ(! prompt Result . to Pro ceed ()) Ġreturn @ addActionListener ĊĠĠĠĠĠ Ġprogram Options . overwrite OutputFile Ġ= Ġprompt Result . to Overwrite () ĊĠĠĠĠĠ Ġval Ġerrors Ġ= Ġprogram Options . validate () ĊĠĠĠĠĠ Ġif Ġ(! errors . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ ĠJOptionPane . showMessageDialog ( ĊĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠ Ġ" Unable Ġto Ġprocess . ĠThere Ġwere Ġerrors :\ n \ n ${ errors . join ToString ("\ n ") }", ĊĠĠĠĠĠĠĠĠĠ Ġ" Errors ", ĊĠĠĠĠĠĠĠĠĠ ĠJOptionPane . ERROR _ MESSAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogram Options 0 Ġ= Ġprogram Options . build () ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= Ġdo Processing Catch Exceptions ( program Options 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġval Ġoptions Ġ= ĠarrayOf (" Ok ", Ġ" Open ") ĊĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Ġ= ĠJOptionPane . show Option Dialog ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" The Ġspreadsheet Ġwas Ġcreated Ġsuccessfully . ĠSaved Ġto Ġ${ program Options . outputFile }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Success ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . DEFAULT _ OPTION , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠJOptionPane . INFORMATION _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoptions [ 0 ] ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( choice Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Desktop . is Desktop Supported () Ġ&& ĠDesktop . get Desktop (). is Supported ( Desktop . Action . OPEN )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDesktop . get Desktop (). open ( program Options 0 . outputFile ); ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġprocessing Error ( error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġadd WindowListener ( object Ġ: ĠWindow Adapter () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġwindow Closing ( e : ĠWindow Event ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠSystem . exit ( 0 ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĊĠĠĠ Ġis Visible Ġ= Ġtrue Ġ// Needs Ġto Ġbe Ġlast . ĊĠ Ġ} ĊĊĠ Ġ/** ĠDisplay Ġan Ġerror Ġdialog . ĠMust Ġbe Ġcalled Ġfrom Ġthe Ġevent Ġthread . Ġ*/ ĊĠ Ġfun Ġprocessing Error ( message : ĠString ) Ġ{ ĊĠĠĠ ĠJOptionPane . showMessageDialog ( ĊĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠ Ġ" There Ġwas Ġan Ġerror Ġduring Ġprocessing :\ n \ n ${ message }", ĊĠĠĠĠĠ Ġ" Error ", ĊĠĠĠĠĠ ĠJOptionPane . ERROR _ MESSAGE ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠDisplay Ġthe Ġabout Ġdialog . ĠMust Ġbe Ġcalled Ġfrom Ġthe Ġevent Ġthread . Ġ*/ ĊĠ Ġfun Ġabout Dialog () Ġ{ ĊĠĠĠ Ġval Ġversion Ġ= ĠVersion Service (). version ĊĠĠĠ ĠJOptionPane . showMessageDialog ( ĊĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠ Ġ" Pro ze zz or , Ġversion Ġ$ version , ĠCopyright Ġ 2 0 2 1 ĠRe us abit ĠSoftware ĠLLC ", ĊĠĠĠĠĠ Ġ" About ", ĊĠĠĠĠĠ ĠJOptionPane . PLAIN _ MESSAGE ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ/** ĠLaunch Ġa Ġtext Ġeditor Ġwith Ġthe Ġnotices Ġfile . ĠMust Ġbe Ġcalled Ġfrom Ġthe Ġevent Ġthread . Ġ*/ ĊĠ Ġfun Ġdisplay Not ices () Ġ{ ĊĠĠĠ Ġif Ġ( Desktop . is Desktop Supported () Ġ&& ĠDesktop . get Desktop (). is Supported ( Desktop . Action . EDIT )) Ġ{ ĊĠĠĠĠĠ Ġval Ġtemp File Ġ= ĠFile . create TempFile (" pro ze zz or - third - party - notice -", Ġ". txt ") ĊĠĠĠĠĠ Ġval Ġtext Ġ= Ġget Notice Text () ĊĠĠĠĠĠ Ġtemp File . write Text ( text , ĠChar sets . UTF _ 8 ) ĊĠĠĠĠĠ ĠDesktop . get Desktop (). edit ( temp File ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ ĠJOptionPane . showMessageDialog ( this , Ġ" Unable Ġto Ġopen Ġtext Ġeditor ", Ġ" Error ", ĠJOptionPane . ERROR _ MESSAGE ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ/** ĠLaunch Ġthe Ġbrowser Ġto Ġdisplay Ġhelp Ġpage . ĠMust Ġbe Ġcalled Ġfrom Ġthe Ġevent Ġthread . Ġ*/ ĊĠ Ġfun Ġdisplay Help () Ġ{ ĊĠĠĠ Ġif Ġ( Desktop . is Desktop Supported () Ġ&& ĠDesktop . get Desktop (). is Supported ( Desktop . Action . BROW SE )) Ġ{ ĊĠĠĠĠĠ ĠDesktop . get Desktop (). browse ( URI ( HELP _ URL )); ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ ĠJOptionPane . showMessageDialog ( this , Ġ" Unable Ġto Ġopen Ġweb Ġbrowser ", Ġ" Error ", ĠJOptionPane . ERROR _ MESSAGE ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } ĊĊ