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)}
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(
)
};
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