package com.marklogic.client.qconsole.impl;
/**
* This scripts are defined as strings so that it's easy to reuse this in an environment like Gradle without
* having to read files from the classpath.
*/
public class QconsoleScripts {
public static final String IMPORT = "xquery version \"1.0-ml\";\n" +
"\n" +
"declare namespace qconsole=\"http://marklogic.com/appservices/qconsole\";\n" +
"\n" +
"import module namespace amped-qconsole = \"http://marklogic.com/appservices/qconsole/util-amped\" at \"/MarkLogic/appservices/qconsole/qconsole-amped.xqy\";\n" +
"import module namespace idecl = \"http://marklogic.com/appservices/qconsole/decl\" at \"/MarkLogic/appservices/qconsole/qconsole-decl.xqy\";\n" +
"import module namespace qconsole-model = \"http://marklogic.com/appservices/qconsole/model\" at \"/MarkLogic/appservices/qconsole/qconsole-model.xqy\";\n" +
"\n" +
"declare namespace eval = \"xdmp:eval\";\n" +
"\n" +
"declare variable $exported-workspace as node() external;\n" +
"declare variable $user as xs:string external;\n" +
"\n" +
"declare function local:qconsole-eval(\n" +
" $xquery as xs:string,\n" +
" $vars as item()*,\n" +
" $options as element(eval:options)?\n" +
") as item()*\n" +
"{ xdmp:log(text{(\"local:qconsole-eval\", xdmp:quote($vars))}),\n" +
" xdmp:security-assert(\"http://marklogic.com/xdmp/privileges/qconsole\", \"execute\"),\n" +
" xdmp:eval($xquery, $vars, <options xmlns=\"xdmp:eval\">\n" +
" <database>{xdmp:database(\"App-Services\")}</database>\n" +
" </options>)\n" +
"};\n" +
"\n" +
"declare function local:import-workspace(\n" +
" $workspace as element(),\n" +
" $user as xs:string \n" +
") as xs:string*\n" +
"{\n" +
" let $eval-query :=\n" +
" 'declare namespace qconsole = \"http://marklogic.com/appservices/qconsole\";\n" +
" import module namespace qconsole-model=\"http://marklogic.com/appservices/qconsole/model\"\n" +
" at \"/MarkLogic/appservices/qconsole/qconsole-model.xqy\";\n" +
" import module namespace amped-qconsole = \"http://marklogic.com/appservices/qconsole/util-amped\"\n" +
" at \"/MarkLogic/appservices/qconsole/qconsole-amped.xqy\";\n" +
" declare variable $xquery-query-template as xs:string external;\n" +
" declare variable $workspace as element(export) external;\n" +
" declare variable $user as xs:string external;\n" +
" let $_ := xdmp:log(text{(\"user\", $user)})\n" +
" let $wsid := xdmp:random()\n" +
" let $imported-wsname := string($workspace/workspace/@name)\n" +
" let $existing-wsnames := amped-qconsole:qconsole-get-user-workspaces(())/qconsole:name/string()\n" +
" let $wsname :=\n" +
" if( $imported-wsname = $existing-wsnames )\n" +
" then qconsole-model:generate-workspace-name(())\n" +
" else $imported-wsname\n" +
" let $queries := $workspace/workspace/query\n" +
" let $userid := xdmp:user($user)\n" +
" let $_ := xdmp:log(text{(\"userid\", $userid)})\n" +
" let $ws := <qconsole:workspace>\n" +
" <qconsole:id>{$wsid}</qconsole:id>\n" +
" <qconsole:name>{$wsname}</qconsole:name>\n" +
" <qconsole:security>\n" +
" <qconsole:userid>{$userid}</qconsole:userid>\n" +
" </qconsole:security>\n" +
" <qconsole:active>true</qconsole:active>\n" +
" <qconsole:queries>\n" +
" {\n" +
" for $q at $i in $queries\n" +
" let $qid := xdmp:random()\n" +
" let $qname := string($q/@name)\n" +
" let $focus := string($q/@focus)\n" +
" let $active := string($q/@active)\n" +
" let $content-source :=\n" +
" if ( exists($q/@content-source) )\n" +
" then string($q/@content-source)\n" +
" else qconsole-model:default-content-source()\n" +
" let $mode := string($q/@mode)\n" +
" let $query-text := text { $q }\n" +
" let $q-uri := concat(\"/queries/\", $qid, \".txt\")\n" +
" let $save-q := amped-qconsole:qconsole-document-insert($q-uri, $query-text)\n" +
" return\n" +
" <qconsole:query>\n" +
" <qconsole:id>{$qid}</qconsole:id>\n" +
" <qconsole:name>{$qname}</qconsole:name>\n" +
" <qconsole:content-source>{$content-source}</qconsole:content-source>\n" +
" <qconsole:active>{$active}</qconsole:active>\n" +
" <qconsole:focus>{$focus}</qconsole:focus>\n" +
" <qconsole:mode>{$mode}</qconsole:mode>\n" +
" </qconsole:query>\n" +
" }\n" +
" </qconsole:queries>\n" +
" </qconsole:workspace>\n" +
" let $ws-uri := concat(\"/workspaces/\", $wsid, \".xml\")\n" +
" let $save-ws := amped-qconsole:qconsole-document-insert($ws-uri, $ws)\n" +
" let $set-active := qconsole-model:set-only-one-workspace-active($wsid)\n" +
" return $wsid'\n" +
" \n" +
" let $new-wsid := \n" +
" local:qconsole-eval($eval-query, \n" +
" (xs:QName(\"workspace\"), $workspace, \n" +
" xs:QName(\"xquery-query-template\"), $idecl:default-query-text,\n" +
" xs:QName(\"user\"), $user), ())\n" +
" let $ws-uri := concat(\"/workspaces/\", $new-wsid, \".xml\")\n" +
" return $ws-uri\n" +
"};\n" +
"\n" +
"local:import-workspace($exported-workspace/element(), $user)";
public final static String EXPORT = "xquery version \"1.0-ml\";\n" +
"\n" +
"declare namespace qconsole=\"http://marklogic.com/appservices/qconsole\";\n" +
"\n" +
"declare variable $user as xs:string external;\n" +
"declare variable $workspace as xs:string external;\n" +
"\n" +
"declare function local:do-eval($query as xs:string, $vars) {\n" +
" xdmp:eval($query, $vars, \n" +
" <options xmlns=\"xdmp:eval\">\n" +
" <database>{xdmp:database(\"App-Services\")}</database>\n" +
" </options>)\n" +
"};\n" +
"\n" +
"declare function local:get-ws-uri($user as xs:string, $workspace as xs:string) {\n" +
" let $ws-query := 'xquery version \"1.0-ml\";\n" +
" declare namespace qconsole = \"http://marklogic.com/appservices/qconsole\";\n" +
" declare variable $user as xs:string external;\n" +
" declare variable $workspace as xs:string external;\n" +
" cts:uris((), (), cts:and-query((\n" +
" cts:directory-query(\"/workspaces/\"),\n" +
" cts:element-value-query(xs:QName(\"qconsole:userid\"), xs:string(xdmp:user($user))),\n" +
" cts:element-value-query(xs:QName(\"qconsole:name\"), $workspace)\n" +
" ))\n" +
" )'\n" +
" return local:do-eval($ws-query, (xs:QName(\"user\"), $user, xs:QName(\"workspace\"), $workspace))\n" +
"};\n" +
"\n" +
"declare function local:get-workspace($ws-uri as xs:string) {\n" +
" let $query := \"declare variable $ws-uri as xs:string external; fn:doc($ws-uri)\"\n" +
" return local:do-eval($query, (xs:QName(\"ws-uri\"), $ws-uri))\n" +
"};\n" +
"\n" +
"let $user := ($user, xdmp:get-current-user())[1]\n" +
"\n" +
"let $ws-uri := local:get-ws-uri($user, $workspace)\n" +
"let $ws := local:get-workspace($ws-uri)\n" +
"let $queries := \n" +
" for $q in $ws/qconsole:workspace/qconsole:queries/qconsole:query\n" +
" return \n" +
" <query name=\"{string($q/qconsole:name)}\" focus=\"{string($q/qconsole:focus)}\" active=\"{string($q/qconsole:active)}\" mode=\"{string($q/qconsole:mode)}\">\n" +
" {local:do-eval(concat(\"fn:doc('/queries/\", xs:unsignedLong($q/qconsole:id), \".txt')\"), ())}\n" +
" </query>\n" +
"\n" +
"let $export := \n" +
" if ($queries) then (\n" +
" <export>\n" +
" <workspace name=\"{string($ws/qconsole:workspace/qconsole:name)}\">\n" +
" {$queries}\n" +
" </workspace>\n" +
" </export> )\n" +
" else (text{\"No workspace found with the name of \", $workspace, \".\"})\n" +
"\n" +
"return $export";
}