xquery version "1.0"; (: $Id$ :) (: Module: display status information on the current database instance. :) module namespace corr = "http://exist-db.org/xquery/rebind/correction"; import module namespace report = "http://exist-db.org/xquery/rebind/correction" at "report.xql"; declare namespace xdb="http://exist-db.org/xquery/xmldb"; declare namespace config="http://rebind.bgbm.org/modules"; declare namespace correction-report = "http://rebind.bgbm.org/code/correction-report"; declare namespace datetime="http://exist-db.org/xquery/datetime"; declare function corr:main() as element() { let $file := request:get-parameter("file", "")[1] let $action := request:get-parameter("action", "")[1] let $isView := $action eq "view" let $correction-config-default-file := rebind:getSetting('default-correction-config') let $config-file := request:get-parameter("config-file", $correction-config-default-file)[1] let $report-file := request:get-parameter("report", "")[1] let $correction-config-folder := rebind:getSetting('correction-config-folder') (: check if collections exist, if not: create them :) let $output1 := if(not(xmldb:collection-available($correction-config-folder))) then (xmldb:create-collection("", $correction-config-folder)) else () let $all-config-files := xdb:get-child-resources($correction-config-folder) let $valid-config-files := corr:filter-correction-config-files($all-config-files) return if(empty($file) or (string-length($file) eq 0)) then(
no file was specified
)else if($isView) then(

Current Report:

{report:get-report($report-file)}
Spinner correcting File: '{$file}'
)else(
{if(empty($valid-config-files))then(
No correction config files found at '{$correction-config-folder}'
)else(
)}
) }; declare function corr:filter-correction-config-files($config-files) as xs:string* { let $correction-config-folder := rebind:getSetting('correction-config-folder') let $schemaCollection := doc("/rebind/schema/rebind-correction-config_0.1.xsd") for $child at $count in $config-files let $report := validation:jaxv-report(doc(concat($correction-config-folder,"/",$child)), $schemaCollection) let $isValid := ($report/status eq "valid") return if($isValid) then ( $child )else() }; declare function corr:list-correction-config-files($config-files, $selected-config-file) as element()* { let $correction-config-folder := rebind:getSetting('correction-config-folder') for $child at $count in $config-files let $isDefaultConfig := $child eq $selected-config-file let $configName := corr:get-correction-config-name(concat($correction-config-folder,"/",$child)) let $spacer := if(string-length($configName) eq 0)then()else(" - ") order by $child return if($isDefaultConfig)then() else() }; declare function corr:get-correction-config-name($config-file) as xs:string?{ doc($config-file)/config:modules/@name/xs:string(.) }; declare function corr:start-correction($file, $config-file) as xs:string?{ let $correction-config-folder := rebind:getSetting('correction-config-folder') return rebind:startCorrection(doc($file),doc((concat($correction-config-folder,"/",$config-file)))) }; declare function corr:is-correction-running($file) as xs:string?{ rebind:isCorrectionRunning(doc($file)) }; declare function corr:dispatch() as element()?{ let $file := request:get-parameter("file", "")[1] let $action := request:get-parameter("action", "")[1] return if(empty($file) or (string-length($file) eq 0)) then( (: just let the call pass and do not forward it. The error message will be created later on in corr:main() :) )else( let $runningCorrection := corr:is-correction-running($file) return if(not(empty($runningCorrection) or string-length($runningCorrection) eq 0) and not($action eq "view"))then( )else( let $config-file := request:get-parameter("config-file", "")[1] return if($action eq "correct")then( let $report-file := corr:start-correction($file, $config-file) return if(not(empty($report-file) or string-length($report-file) eq 0))then( )else((: TODO #33: something went wrong, maybe show error? :) ) )else() ) ) }; declare function corr:get-report($report-file-name) as element(){ let $config-folder := rebind:getSetting('correction-config-folder') let $report-folder := rebind:getSetting('correction-report-folder') let $report-file := concat($report-folder,"/",$report-file-name) let $restUri := concat(request:get-context-path(), '/rest') let $doc := doc($report-file) let $data-file-path := $doc/correction-report:correction/@target/xs:string(.) let $data-file-path-short := replace($data-file-path,concat(rebind:getSetting('db-protected-folder'),"/?"),"") let $config-file-name := $doc/correction-report:correction/@configuration/xs:string(.) let $config-file := concat($config-folder,"/",$config-file-name) return if(not(empty($doc)))then(
{if(not(empty($doc//correction-report:finished)))then( ( , if(exists($doc//correction-report:finished/@file))then( )else() ) )else()}
File: {$data-file-path-short}
Configuration: {$config-file-name}
Report: {$report-file-name}
Started: {replace($doc/correction-report:correction/@begin/xs:string(.),"(T|(\.\d\d\d$))"," ")}
Modules:
{corr:get-modules-table($doc)}
Finished! { let $begin := $doc/correction-report:correction/@begin/xs:string(.) let $end := $doc/correction-report:correction/@end/xs:string(.) (:let $beginTime := datetime:parse-dateTime(replace($begin,'\.\d\d\d$',''),"yyyy-MM-dd'T'HH:mm:ss") let $endTime := datetime:parse-dateTime(replace($end,'\.\d\d\d$',''),"yyyy-MM-dd'T'HH:mm:ss") let $duration := $endTime - $beginTime return {replace($end,"(T|(\.\d\d\d$))"," ")} {replace(hours-from-duration($duration),'^(\d)$','0$1')}:{replace(minutes-from-duration($duration),'^(\d)$','0$1')}:{replace(seconds-from-duration($duration),'^(\d)$','0$1')} :) return }
Final File: {$doc//correction-report:finished/@file/xs:string(.)}
)else(
Report '{$report-file}' does not exist!
) }; declare function corr:get-modules-table($doc) as element()?{ if(count($doc//correction-report:module) > 0)then( {corr:get-modules-report($doc)}
)else() }; declare function corr:get-modules-report($doc) as element()*{ let $debug := count($doc//correction-report:module/@file)>0 for $module in $doc//correction-report:module let $description := if(exists($module/@description) and not($module/@description/xs:string(.) eq ""))then(concat(" (",$module/@description/xs:string(.),")"))else() let $skipped := if($module/@skipped/xs:string(.) eq "true")then("skipped")else("") return ( {$module/@name/xs:string(.)} {$description} {$module/@info/xs:string(.)} {$module/@warning/xs:string(.)} {$module/@error/xs:string(.)} {$module/@duration/xs:string(.)} {if($debug)then( {$module/@file/xs:string(.)} )else()} , if(count($module/correction-report:message) > 0)then( for $message in $module/correction-report:message return {$message/text()} )else() ) };