package Ġio . github . sim ons ch iller . permission check . internal Ċ Ċ import Ġio . github . sim ons ch iller . permission check . internal . data . Base Permission Ċ import Ġio . github . sim ons ch iller . permission check . internal . data . Permission Ċ import Ġio . github . sim ons ch iller . permission check . internal . data . Sdk 2 3 Permission Ċ import Ġio . github . sim ons ch iller . permission check . internal . util . append Element Ċ import Ġio . github . sim ons ch iller . permission check . internal . util . create Document Builder Ċ import Ġio . github . sim ons ch iller . permission check . internal . util . forEach Ċ import Ġio . github . sim ons ch iller . permission check . internal . util . write ToFile Ċ import Ġjava . io . File Ċ Ċ internal Ġclass ĠBase line Handler ( private Ġval Ġbaseline File : ĠFile ) Ġ{ ĊĊĠĠĠ Ġ// ĠOnly ĠXML Ġbaseline Ġfiles Ġare Ġallowed ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! baseline File . extension . equals (" xml ", Ġignore Case Ġ= Ġtrue )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" The Ġpermission Ġbaseline Ġhas Ġto Ġbe Ġa Ġ. xml Ġfile ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġserialize ( permissions : ĠMap < String , ĠSet < Base Permission >>) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbaseline Ġ= Ġdeserialize (). to Mutable Map () Ġ// ĠParse Ġexisting Ġbaseline Ġand Ġadd Ġnew Ġor Ġupdated Ġpermissions ĊĠĠĠĠĠĠĠ Ġpermissions . forEach Ġ{ Ġ( variant Name , Ġvariant Permissions ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbaseline [ variant Name ] Ġ= Ġvariant Permissions ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPackage Ġchanges Ġinto Ġa ĠXML Ġdocument ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġcreate Document Builder (). new Document () ĊĠĠĠĠĠĠĠ Ġdocument . append Element (" baseline ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbaseline . forEach Ġ{ Ġ( variant Name , Ġvariant Permissions ) Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġpermission Ġentries Ġfor Ġa Ġsingle Ġvariant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Element (" variant ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Attribute (" name ", Ġvariant Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Permissions . forEach Ġ{ Ġpermission Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend Child ( permission . to XmlElement ( document )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWrite Ġupdated Ġbaseline Ġto Ġdisk ĊĠĠĠĠĠĠĠ Ġdocument . write ToFile ( baseline File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdeserialize (): ĠMap < String , ĠSet < Base Permission >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermissions Ġ= Ġmutable Map Of < String , ĠSet < Base Permission >>() ĊĊĠĠĠĠĠĠĠ Ġ// ĠMissing Ġfiles Ġare Ġinterpreted Ġas Ġempty Ġbase lines ĊĠĠĠĠĠĠĠ Ġif Ġ(! baseline File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġempty Map () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠParse Ġthe Ġbaseline Ġfile ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Document Builder (). parse ( baseline File ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġparse Ġbaseline , Ġplease Ġmake Ġsure Ġthe Ġformat Ġis Ġvalid ", Ġexception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdocument . getElementsByTagName (" variant "). forEach Ġ{ Ġvariant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Name Ġ= Ġvariant . getAttribute (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Permissions Ġ= Ġmutable Set Of < Base Permission >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠParse Ġregular Ġpermissions Ġfor Ġvariant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregular Permissions Ġ= Ġvariant . getElementsByTagName (" uses - permission ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregular Permissions . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġelement . getAttribute (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Sdk Version Ġ= Ġelement . getAttribute (" max Sdk Version "). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Permissions Ġ+= ĠPermission ( name , Ġmax Sdk Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠParse ĠSDK Ġ 2 3 Ġpermissions Ġfor Ġvariant ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsdk 2 3 Permissions Ġ= Ġvariant . getElementsByTagName (" uses - permission - sdk - 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsdk 2 3 Permissions . forEach Ġ{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġelement . getAttribute (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmax Sdk Version Ġ= Ġelement . getAttribute (" max Sdk Version "). toInt OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvariant Permissions Ġ+= ĠS dk 2 3 Permission ( name , Ġmax Sdk Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpermissions [ variant Name ] Ġ= Ġvariant Permissions ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġpermissions ĊĠĠĠ Ġ} Ċ } Ċ