package Ġcom . utz co z . emulator . device . generator Ċ Ċ import Ġcom . utz co z . emulator . device . generator . hardware . Hardware Ċ import Ġorg . dom 4 j . io . Output Format Ċ import Ġorg . dom 4 j . io . SAX Reader Ċ import Ġorg . dom 4 j . io . XML Writer Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġjava . net . URL Ċ Ċ class ĠDevice Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtemplate Name : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġid : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġname : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġmanufacturer : ĠString Ġ= Ġ"" ĊĠĠĠ Ġvar Ġhardware : ĠHardware Ġ= ĠHardware () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġread Template ( template Name : ĠString ): ĠDevice Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Path Ġ= Ġ"/ templates /$ template Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠDevice :: class . java . getResource ( template Path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġread Template Internal ( template Name , Ġurl ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġread Device Config ( url : ĠURL ): ĠDevice Ġ= Ġread Template Internal ("", Ġurl ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġread Template Internal ( template Name : ĠString , Ġurl : ĠURL ): ĠDevice Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠSAX Reader (). read ( url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Element Ġ= Ġdocument . root Element ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Element Ġ= Ġroot Element . element (" device ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( device Element Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdevice Ġ= ĠDevice () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġdevice Element . element Iterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( element . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġdevice . name Ġ= Ġelement . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġ-> Ġdevice . id Ġ= Ġelement . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" manufacturer " Ġ-> Ġdevice . manufacturer Ġ= Ġelement . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hardware " Ġ-> Ġdevice . hardware . parse ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdevice . template Name Ġ= Ġtemplate Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdevice ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġsave Device ( device : ĠDevice , Ġsaved File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemplate Name Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( device . template Name . isEmpty ()) Ġ" tablet - device . xml " Ġelse Ġdevice . template Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠSAX Reader (). read ( Device :: class . java . getResource ("/ templates /$ template Name ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Element Ġ= Ġdocument . root Element . element (" device ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġroot Element . element Iterator ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( element . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name " Ġ-> Ġelement . text Ġ= Ġdevice . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" id " Ġ-> Ġelement . text Ġ= Ġdevice . id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" manufacturer " Ġ-> Ġelement . text Ġ= Ġdevice . manufacturer ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" hardware " Ġ-> Ġdevice . hardware . save ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġf os Ġ= ĠFileOutputStream ( saved File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠOutput Format . create Pretty Print () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠXML Writer ( fos , Ġformat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . write ( document ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter . flush () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }