/** Ċ Ġ* ĠLicensed Ġto Ġthe ĠApache ĠSoftware ĠFoundation Ġ( ASF ) Ġunder Ġone Ġor Ġmore Ċ Ġ* Ġcontributor Ġlicense Ġagreements . Ġ ĠSee Ġthe ĠNOTICE Ġfile Ġdistributed Ġwith Ċ Ġ* Ġthis Ġwork Ġfor Ġadditional Ġinformation Ġregarding Ġcopyright Ġownership . Ċ Ġ* ĠThe ĠASF Ġlicenses Ġthis Ġfile Ġto ĠYou Ġ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 Ġai . plat on . pulsar . crawl . parse Ċ Ċ import Ġai . plat on . pulsar . common . Check State Ċ import Ġai . plat on . pulsar . crawl . parse . html . Parse Context Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ Ċ /** Ċ Ġ* ĠExtension Ġpoint Ġfor ĠDOM - based Ġparsers . ĠPer mit s Ġone Ġto Ġadd Ġadditional Ġmetadata Ċ Ġ* Ġto Ġparses Ġprovided Ġby Ġthe Ġhtml Ġor Ġt ika Ġplugins . ĠAll Ġplugins Ġfound Ġwhich Ċ Ġ* Ġimplement Ġthis Ġextension Ġpoint Ġare Ġrun Ġse quent ially Ġon Ġthe Ġparse . Ċ Ġ*/ Ċ abstract Ġclass ĠAbstract Parse Filter ( ĊĠĠĠĠĠĠĠ Ġfinal Ġoverride Ġval Ġid : ĠInt Ġ= Ġinstance Se qu encer . increment AndGet (), ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġparent : ĠParse Filter ? Ġ= Ġnull Ċ ): ĠParse Filter Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Se qu encer Ġ= ĠAtomicInteger () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġchildren Ġ= Ġmutable ListOf < Parse Filter >() ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġis Re levant ( parse Context : ĠParse Context ): ĠCheck State Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= Ġparse Context . page . protocol Status ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheck State () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCheck State ( status . minor Code , Ġmessage Ġ= Ġstatus . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfilter ( parse Context : ĠParse Context ): ĠFilter Result Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Re levant ( parse Context ). isNot OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠFilter Result () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġon Before Filter ( parse Context ) ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġdo Filter ( parse Context ) ĊĠĠĠĠĠĠĠ Ġon After Filter ( parse Context ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( result . should Continue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result . should Continue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġit . filter ( parse Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġabstract Ġfun Ġdo Filter ( parse Context : ĠParse Context ): ĠFilter Result ĊĊĠĠĠ Ġoverride Ġfun Ġon Before Filter ( parse Context : ĠParse Context ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon After Filter ( parse Context : ĠParse Context ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd First ( child : ĠParse Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchild . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġchildren . add ( 0 , Ġchild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġadd Last ( child : ĠParse Filter ) Ġ{ ĊĠĠĠĠĠĠĠ Ġchild . parent Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġchildren . add ( child ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclose () Ġ{ ĊĠĠĠĠĠĠĠ Ġchildren . forEach Ġ{ Ġit . close () Ġ} ĊĠĠĠĠĠĠĠ Ġchildren . clear () ĊĠĠĠĠĠĠĠ Ġsuper . close () ĊĠĠĠ Ġ} Ċ } Ċ