diff --git a/modules/app/models/config-delete.xqy b/modules/app/models/config-delete.xqy new file mode 100644 index 0000000..eae72b1 --- /dev/null +++ b/modules/app/models/config-delete.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; + +declare variable $my:alert-name as xs:string external; + +alert:config-delete($my:alert-name) \ No newline at end of file diff --git a/modules/app/models/config-get.xqy b/modules/app/models/config-get.xqy new file mode 100644 index 0000000..5a9e0c1 --- /dev/null +++ b/modules/app/models/config-get.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; + +declare variable $my:alert-name as xs:string external; + +alert:config-get($my:alert-name) \ No newline at end of file diff --git a/modules/app/models/config-set-cpf-domain-names-insert.xqy b/modules/app/models/config-set-cpf-domain-names-insert.xqy new file mode 100644 index 0000000..5b8085d --- /dev/null +++ b/modules/app/models/config-set-cpf-domain-names-insert.xqy @@ -0,0 +1,11 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; + +declare variable $my:alert-name as xs:string external; + +alert:config-insert( + alert:config-set-cpf-domain-names(alert:config-get($my:alert-name),()) +) \ No newline at end of file diff --git a/modules/app/models/config-set-cpf-domain-names.xqy b/modules/app/models/config-set-cpf-domain-names.xqy new file mode 100644 index 0000000..5177284 --- /dev/null +++ b/modules/app/models/config-set-cpf-domain-names.xqy @@ -0,0 +1,10 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; +import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; + +declare variable $my:alert-name as xs:string external; + +alert:config-set-cpf-domain-names(alert:config-get($my:alert-name), ()) \ No newline at end of file diff --git a/modules/app/models/configure-domain.xqy b/modules/app/models/configure-domain.xqy new file mode 100644 index 0000000..309864e --- /dev/null +++ b/modules/app/models/configure-domain.xqy @@ -0,0 +1,25 @@ +xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts"; + +import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy"; +import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; + +declare variable $m:pname as xs:string external;declare variable $m:pnames as xs:string* external; +declare variable $m:mdb as xs:unsignedLong external; +declare variable $m:type as xs:string external; +declare variable $m:path as xs:string external; +declare variable $m:otherpipeline as xs:string external; +declare variable $m:depth as xs:string external; + +let $_ := xdmp:log("In eval") + +let $pids := +(xs:unsignedLong(p:pipelines()[p:pipeline-name = "Status Change Handling"]/p:pipeline-id),xs:unsignedLong(p:pipelines()[p:pipeline-name = $m:otherpipeline]/p:pipeline-id)) +let $_ := xdmp:log("second point") +let $ds := dom:domain-scope($m:type,$m:path,$m:depth) +let $_ := xdmp:log("third point") +let $ec := dom:evaluation-context($m:mdb,"/") +let $_ := xdmp:log("fourth point") +let $dc := dom:create($m:pname,"Domain for "||$m:pname, + $ds,$ec,$pids,()) +let $_ := xdmp:log("fifth point") +return $dc diff --git a/modules/app/models/cpf-enable.xqy b/modules/app/models/cpf-enable.xqy new file mode 100644 index 0000000..4e17e63 --- /dev/null +++ b/modules/app/models/cpf-enable.xqy @@ -0,0 +1,10 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:alert-name as xs:string external; +declare variable $my:cpf-domain as xs:string external; + +la:cpf-enable($my:alert-name,$my:cpf-domain) \ No newline at end of file diff --git a/modules/app/models/create-action.xqy b/modules/app/models/create-action.xqy new file mode 100644 index 0000000..63c6424 --- /dev/null +++ b/modules/app/models/create-action.xqy @@ -0,0 +1,12 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:alert-name as xs:string external; +declare variable $my:alert-module as xs:string external; +declare variable $my:db as xs:unsignedLong external; +declare variable $my:options as element()* external; + +la:create-action($my:alert-name,$my:alert-module,$my:db, $my:options) \ No newline at end of file diff --git a/modules/app/models/create-config.xqy b/modules/app/models/create-config.xqy new file mode 100644 index 0000000..e2c7d03 --- /dev/null +++ b/modules/app/models/create-config.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:shortname as xs:string external; + +la:create-config($my:shortname) \ No newline at end of file diff --git a/modules/app/models/create-rule-notify.xqy b/modules/app/models/create-rule-notify.xqy new file mode 100644 index 0000000..f25c454 --- /dev/null +++ b/modules/app/models/create-rule-notify.xqy @@ -0,0 +1,14 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:alert-name as xs:string external; +declare variable $my:alert-detail as xs:string external; +declare variable $my:content-type as xs:string external; +declare variable $my:notificationurl as xs:string external; +declare variable $my:searchname as xs:string external; +declare variable $my:searchdoc as cts:query external; + +la:create-rule-notify($my:alert-name,$my:alert-detail,$my:content-type,$my:notificationurl,$my:searchname,$my:searchdoc) \ No newline at end of file diff --git a/modules/app/models/create-rule.xqy b/modules/app/models/create-rule.xqy new file mode 100644 index 0000000..7196153 --- /dev/null +++ b/modules/app/models/create-rule.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:vars as map:map external; + +la:create-rule(map:get($my:vars,"alert-name"),map:get($my:vars,"query"),map:get($my:vars,"options")) \ No newline at end of file diff --git a/modules/app/models/get-domain.xqy b/modules/app/models/get-domain.xqy new file mode 100644 index 0000000..b648b35 --- /dev/null +++ b/modules/app/models/get-domain.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace m="http://marklogic.com/alerts"; + +import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; + +declare variable $m:processmodeluri as xs:string external; + +dom:get($m:processmodeluri) \ No newline at end of file diff --git a/modules/app/models/lib-alerting.xqy b/modules/app/models/lib-alerting.xqy new file mode 100644 index 0000000..a5948c0 --- /dev/null +++ b/modules/app/models/lib-alerting.xqy @@ -0,0 +1,325 @@ +xquery version "1.0-ml"; + +module namespace la = "http://marklogic.com/alerts/alerting"; + +import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; +import module namespace search = "http://marklogic.com/appservices/search" at "/MarkLogic/appservices/search/search.xqy"; + +declare namespace my="http://marklogic.com/alerts"; + +declare variable $SAVE-SEARCH-MODULE := "/app/models/save-search.xqy"; +declare variable $CREATE-ACTION-MODULE := "/app/models/create-action.xqy"; +declare variable $CREATE-RULE-NOTIFY-MODULE := "/app/models/create-rule-notify.xqy"; +declare variable $CREATE-RULE-MODULE := "/app/models/create-rule.xqy"; +declare variable $CREATE-CONFIG-MODULE := "/app/models/create-config.xqy"; +declare variable $CPF-ENABLE-MODULE := "/app/models/cpf-enable.xqy"; +declare variable $CONFIG-SET-CPF-DOMAIN-NAMES-MODULE := "/app/models/config-set-cpf-domain-names.xqy"; +declare variable $CONFIG-SET-CPF-DOMAIN-NAMES-INSERT-MODULE := "/app/models/config-set-cpf-domain-names-insert.xqy"; +declare variable $CONFIG-DELETE-MODULE := "/app/models/config-delete.xqy"; +declare variable $CONFIG-GET-MODULE := "/app/models/config-get.xqy"; +declare variable $GET-DOMAIN-MODULE := "/app/models/get-domain.xqy"; +declare variable $REMOVE-DOMAIN-MODULE := "/app/models/remove-domain.xqy"; +declare variable $CONFIGURE-DOMAIN-MODULE := "/app/models/configure-domain.xqy"; + +declare function la:create-collection-search($collection as xs:string) { + cts:collection-query($collection) +}; + +(: Default search grammar :) +declare function la:create-basic-search($query as xs:string) { + search:parse($query) +}; + +(: same as from lib-adhoc-alerts.xqy - lon/lat/radius :) +declare function la:create-geo-near-search($ns as xs:string,$elname as xs:string, $latattr as xs:string,$lonattr as xs:string, + $lat as xs:double,$lon as xs:double, $radiusmiles as xs:double) { + cts:element-geospatial-query(fn:QName($ns,$elname),cts:circle($radiusmiles, cts:point($lat, $lon))) +}; + +declare function la:save-search($searchdoc, $searchname as xs:string) as xs:string { + (: use current user on app server :) + let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml") + let $result := xdmp:document-insert($search-uri-user, + element la:saved-search { + attribute name {$searchname}, + attribute uri {$search-uri-user}, + $searchdoc + } + ,xdmp:default-permissions(), + (xdmp:default-collections(),"saved-search") + ) + return $search-uri-user +}; + +declare function la:save-shared-search($searchdoc, $searchname as xs:string) as xs:string { + let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml") + let $result := xdmp:document-insert($search-uri-shared, + element la:saved-search { + attribute name {$searchname}, + attribute uri {$search-uri-shared}, + $searchdoc + } + ,xdmp:default-permissions(), + (xdmp:default-collections(),"saved-search") + ) + return $search-uri-shared +}; + +declare function la:get-saved-searches() { + cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/la:saved-search +}; + +declare function la:get-shared-searches() { + cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/la:saved-search +}; + +declare function la:delete-search($searchname) { + let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml") + return xdmp:document-delete($search-uri-user) +}; + +declare function la:delete-shared-search($searchname) { + let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml") + return xdmp:document-delete($search-uri-shared) +}; + +declare function la:unsubscribe-and-delete-shared-search($searchname,$notificationurl) { + (la:unsubscribe($searchname,$notificationurl),la:delete-shared-search($searchname)) +}; + +declare function la:unsubscribe-and-delete-search($searchname,$notificationurl) { + (la:unsubscribe($searchname,$notificationurl),la:delete-search($searchname)) +}; + +declare function la:save-subscribe-search($searchdoc as cts:query,$searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) { + (: use current user on app server :) + (xdmp:invoke($SAVE-SEARCH-MODULE, + (xs:QName("my:searchdoc"),$searchdoc,xs:QName("my:searchname"),$searchname), + different-transaction + ) + ,la:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type) + ) +}; + +(: call the following from eval - different-transaction :) +declare function la:do-save($searchdoc as cts:query,$searchname as xs:string) { + xdmp:document-insert(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"), document {$searchdoc} (: why not just this search doc? :) + ,xdmp:default-permissions(), + (xdmp:default-collections(),"saved-search") ) +}; + +declare function la:subscribe($searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean { + la:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type) +}; + +declare function la:unsubscribe($searchname,$notificationurl) as xs:boolean { + (: NB supports multiple notification URLs. i.e. multiple UIs on same DB for same user :) + la:do-unsubscribe($notificationurl,$searchname) +}; + +(: This function intended to be called within a REST server - i.e. known DB + : Alert detail can be 'full' or 'snippet' which means either the full doc within the alert info container, or just the snippet information within the alert info container. + :) +declare function la:do-subscribe-check($notificationurl as xs:string,$searchname as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean { + la:do-subscribe($notificationurl,"/modules/alert-generic-messaging.xqy",($alert-detail,"full")[1],($content-type,"application/json")[1],$searchname,"generic-alert-domain","rest-sitaware-modules", + cts:query((fn:doc(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"))/element(),fn:doc(fn:concat("/config/search/shared/",$searchname,".xml"))/element())[1] ) + ) +}; + +declare function la:do-add-action-rule($alert-name as xs:string,$notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$db as xs:unsignedLong,$searchdoc as cts:query?) as xs:boolean { + + let $e2 := xdmp:invoke( + $CREATE-ACTION-MODULE, + (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),db,xs:QName("my:options"),()), + different-transaction + ) + let $e3 := xdmp:invoke( + $CREATE-RULE-NOTIFY-MODULE, + (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-detail"),$alert-detail,xs:QName("my:content-type"),$content-type,xs:QName("my:notificationurl"),$notificationurl, + xs:QName("my:searchname"),$searchname,xs:QName("my:searchdoc"),$searchdoc), + different-transaction + ) + return fn:true() +}; + +declare function la:do-subscribe($notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean { + let $alert-name := xdmp:invoke( + $CREATE-CONFIG-MODULE, + (xs:QName("my:shortname"),$searchname), + different-transaction + ) + let $e2 := la:do-add-action-rule($alert-name,$notificationurl ,$alert-module,$alert-detail,$content-type,$searchname,$cpf-domain,$dbname,$searchdoc) + let $e4 := xdmp:invoke( + $CPF-ENABLE-MODULE, + (xs:QName("my:alert-name"),$alert-name,xs:QName("my:cpf-domain"),$cpf-domain), + different-transaction + ) + let $log := xdmp:log(fn:concat("SUBSCRIBE LOGS: ",$alert-name,$e2,$e4)) + return fn:true() +}; + +declare function la:do-unsubscribe($notificationurl as xs:string,$searchname as xs:string) as xs:boolean { + let $alert-name := fn:concat("/config/alerts/",xdmp:get-current-user(),"/",$searchname,"/",$notificationurl) + + let $rr := + for $rule in alert:get-all-rules($alert-name,cts:collection-query($alert-name)) + return + alert:rule-remove($alert-name,$rule/@id) + + let $l := xdmp:invoke( + $CONFIG-SET-CPF-DOMAIN-NAMES-MODULE, + (xs:QName("my:alert-name"),$alert-name), + different-transaction + ) + return fn:true() +}; + +declare function la:create-rule-notify($alert-name as xs:string,$alert-detail as xs:string,$content-type as xs:string, + $notificationurl as xs:string,$searchname as xs:string,$searchdoc as cts:query) { + + la:create-rule($alert-name,(:)$notificationurl,:) $searchdoc,( + element notificationurl {$notificationurl}, + element searchname {$searchname}, + element detail {$alert-detail}, + element contenttype {$content-type} + )) +}; + +declare function la:get-alert($shortname as xs:string) as element(alert:config)? { + alert:config-get($shortname) +}; + + +declare function la:do-create-config($shortname as xs:string) as xs:string { + let $rem := la:check-remove-config($shortname) + return + xdmp:invoke( + $CREATE-CONFIG-MODULE, + (xs:QName("my:shortname"),$shortname), + different-transaction + ) +}; + +declare function la:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() { + let $vars := map:map() + let $_ := map:put($vars,"options",$options) + let $_ := map:put($vars,"alert-name",$alert-name) + let $_ := map:put($vars,"query",$query) + return xdmp:invoke( + $CREATE-RULE-MODULE, + (xs:QName("my:vars"),$vars), + different-transaction + ) +}; + +declare function la:do-create-action($alert-name as xs:string,$alert-module as xs:string,$moduledb as xs:unsignedLong,$options as element()*) { + xdmp:invoke( + $CREATE-ACTION-MODULE, + (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),$moduledb,xs:QName("my:options"),($options)), + different-transaction + ) +}; + +declare function la:check-remove-config($shortname as xs:string) { + let $alert-name := "/config/alerts/" || $shortname + let $config := xdmp:invoke($CONFIG-GET-MODULE, + (xs:QName("my:alert-name"),$alert-name), + different-transaction + ) + return + if (fn:not(fn:empty($config))) then + (: Check if config used in a cpf domain, if so remove it from that domain :) + let $unreg := xdmp:invoke($CONFIG-SET-CPF-DOMAIN-NAMES-INSERT-MODULE, + (xs:QName("my:alert-name"),$alert-name), + different-transaction + ) + (: Do this for each domain - NA all done in one hit:) + (: Now remove the alert config :) + return xdmp:invoke($CONFIG-DELETE-MODULE, + (xs:QName("my:alert-name"),$alert-name), + different-transaction + ) + else () +}; + +declare function la:create-config($shortname as xs:string) as xs:string { + (: add alert :) + let $alert-name := "/config/alerts/" || $shortname + let $config := alert:make-config( + $alert-name, + $alert-name || " configuration", + $alert-name || " configuration", + ) + let $config-out := alert:config-insert($config) + return $alert-name +}; + +declare function la:cpf-enable($alert-name as xs:string,$cpf-domain as xs:string) { + alert:config-insert( + alert:config-set-cpf-domain-names( + alert:config-get($alert-name), + ($cpf-domain))) +}; + +declare function la:create-domain($domainname as xs:string,$domaintype as xs:string,$domainpath as xs:string,$domaindepth as xs:string,$pipeline-names as xs:string*,$modulesdb as xs:string) as xs:unsignedLong { + + let $remove := + try { + xdmp:invoke($REMOVE-DOMAIN-MODULE, + (xs:QName("my:processmodeluri"),$domainname), + + {xdmp:triggers-database()} + different-transaction + + ) + } catch ($e) { ( xdmp:log("Error trying to remove domain: " || $domainname),xdmp:log($e) ) } (: catching domain throwing error if it doesn't exist. We can safely ignore this :) + + (: Configure domain :) + return + xdmp:invoke($CONFIGURE-DOMAIN-MODULE, + (xs:QName("my:otherpipeline"),($pipeline-names[2]),xs:QName("my:mdb"),xdmp:database($modulesdb),xs:QName("my:pname"),$domainname, + xs:QName("my:type"),$domaintype,xs:QName("my:path"),$domainpath,xs:QName("my:depth"),$domaindepth + ), + + {xdmp:triggers-database()} + different-transaction + + ) (: end eval :) +}; + +declare function la:add-alert($shortname as xs:string,$query as cts:query, + $ruleoptions as element()*,$module as xs:string,$moduledb as xs:unsignedLong,$actionoptions as element()*) as xs:string { + let $name := la:do-create-config($shortname) + return + ( + la:do-create-action($name,$module,$moduledb,$actionoptions), + la:do-create-rule($name,$query,$ruleoptions), + $name + ) +}; + +declare function la:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) { + let $rule := alert:make-rule( + fn:concat($alert-name,"-rule"), + $alert-name || " rule", + 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :) + $query, + fn:concat($alert-name,"-action"), + + { + $options + } + ) + return alert:rule-insert($alert-name, $rule) +}; + +declare function la:create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:unsignedLong,$options as element()*) { + let $action := alert:make-action( + fn:concat($alert-name,"-action"), + $alert-name || " action", + $db, + "/", + $alert-module, + {$options} ) + return alert:action-insert($alert-name, $action) +}; \ No newline at end of file diff --git a/modules/app/models/lib-alerts.xqy b/modules/app/models/lib-alerts.xqy deleted file mode 100644 index 3008b73..0000000 --- a/modules/app/models/lib-alerts.xqy +++ /dev/null @@ -1,101 +0,0 @@ -xquery version "1.0-ml"; - -module namespace ss = "http://marklogic.com/alerts/alerts"; - -import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; - -declare namespace my="http://marklogic.com/alerts"; - - -declare function ss:add-alert($shortname as xs:string,$query as schema-element(cts:query), - $ruleoptions as element()*,$module as xs:string,$moduledb as xs:unsignedLong,$actionoptions as element()*) as xs:string { - - let $name := ss:do-create-config($shortname) - return - ( - ss:do-create-rule($name,$query,$ruleoptions), - ss:do-create-action($name,$module,$moduledb,$actionoptions), - $name - ) -}; - - -declare function ss:do-create-config($shortname as xs:string) as xs:string { - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:shortname as xs:string external;' || - 'ah:create-config($my:shortname)', - (xs:QName("my:shortname"),$shortname), - different-transaction - ) -}; - -declare function ss:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) { - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'declare variable $my:query as cts:query external;' || - 'declare variable $my:options as element* external;' || - 'ah:create-rule($my:alert-name,$my:query,$my:options)', - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:query"),$query,xs:QName("my:options"),$options), - different-transaction - ) -}; - -declare function ss:do-create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:unsignedLong,$options as element()*) { - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'declare variable $my:alert-module as xs:string external;' || - 'declare variable $my:db as xs:unsignedLong external;' || - 'declare variable $my:options as element* external;' || - 'ah:create-action($my:alert-name,$my:alert-module,$my:db,$my:options)', - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:db"),$db,xs:QName("my:options"),$options), - different-transaction - ) -}; - -declare function ss:create-config($shortname as xs:string) as xs:string { - (: add alert :) - let $alert-name := "/config/alerts/" || $shortname - let $config := alert:make-config( - $alert-name, - $alert-name || " configuration", - $alert-name || " configuration", - ) - let $config-out := alert:config-insert($config) - return $alert-name -}; - -declare function ss:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) { - - let $rule := alert:make-rule( - fn:concat($alert-name,"-rule"), - $alert-name || " rule", - 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :) - $query, - fn:concat($alert-name,"-action"), - - { - $options - } - ) - return alert:rule-insert($alert-name, $rule) -}; - -declare function ss:create-action($alert-name as xs:string,$alert-module as xs:string,$db as xs:string,$options as element()*) { - let $action := alert:make-action( - fn:concat($alert-name,"-action"), - $alert-name || " action", - $db, - "/", - $alert-module, - {$options} ) - return alert:action-insert($alert-name, $action) -}; diff --git a/modules/app/models/lib-search-subscribe.xqy b/modules/app/models/lib-search-subscribe.xqy deleted file mode 100644 index 347c856..0000000 --- a/modules/app/models/lib-search-subscribe.xqy +++ /dev/null @@ -1,466 +0,0 @@ -xquery version "1.0-ml"; - -module namespace ss = "http://marklogic.com/search/subscribe"; - -import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy"; - -declare namespace my="http://marklogic.com/alerts"; - -import module namespace search = "http://marklogic.com/appservices/search" - at "/MarkLogic/appservices/search/search.xqy"; - - - - - -(: Specific example methods for creating the search object to be saved :) - -declare function ss:create-collection-search($collection as xs:string) { - cts:collection-query($collection) -}; - -(: Default search grammar :) -declare function ss:create-basic-search($query as xs:string) { - search:parse($query) -}; - -(: same as from lib-adhoc-alerts.xqy - lon/lat/radius :) -declare function ss:create-geo-near-search($ns as xs:string,$elname as xs:string, $latattr as xs:string,$lonattr as xs:string, - $lat as xs:double,$lon as xs:double, $radiusmiles as xs:double) { - cts:element-geospatial-query(fn:QName($ns,$elname),cts:circle($radiusmiles, cts:point($lat, $lon))) -}; - - - - - - - - -(: Search persisting functions :) - -declare function ss:save-search($searchdoc, $searchname as xs:string) as xs:string { - (: use current user on app server :) - let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml") - let $l := xdmp:log($search-uri-user) - let $result := xdmp:document-insert($search-uri-user, - element ss:saved-search { - attribute name {$searchname}, - attribute uri {$search-uri-user}, - $searchdoc - } - ,xdmp:default-permissions(), - (xdmp:default-collections(),"saved-search") - ) - return $search-uri-user -}; - -declare function ss:save-shared-search($searchdoc, $searchname as xs:string) as xs:string { - let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml") - let $result := xdmp:document-insert($search-uri-shared, - element ss:saved-search { - attribute name {$searchname}, - attribute uri {$search-uri-shared}, - $searchdoc - } - ,xdmp:default-permissions(), - (xdmp:default-collections(),"saved-search") - ) - return $search-uri-shared -}; - -declare function ss:get-saved-searches() { - cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/ss:saved-search -}; - -declare function ss:get-shared-searches() { - cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/ss:saved-search -}; - -declare function ss:delete-search($searchname) { - let $search-uri-user := fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml") - return xdmp:document-delete($search-uri-user) -}; - -declare function ss:delete-shared-search($searchname) { - let $search-uri-shared := fn:concat("/config/search/shared/",$searchname,".xml") - return xdmp:document-delete($search-uri-shared) -}; - - - - - -(: Utility functions :) - -declare function ss:unsubscribe-and-delete-shared-search($searchname,$notificationurl) { - (ss:unsubscribe($searchname,$notificationurl),ss:delete-shared-search($searchname)) -}; - -declare function ss:unsubscribe-and-delete-search($searchname,$notificationurl) { - (ss:unsubscribe($searchname,$notificationurl),ss:delete-search($searchname)) -}; - -declare function ss:save-subscribe-search($searchdoc as cts:query,$searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) { - (: use current user on app server :) - ( xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'declare variable $my:searchdoc as cts:query external;declare variable $my:searchname as xs:string external;', - 'ah:do-save($my:searchdoc,$my:searchname)'), - (xs:QName("my:searchdoc"),$searchdoc,xs:QName("my:searchname"),$searchname), - different-transaction - ) - ,ss:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type) - ) -}; - -(: call the following from eval - different-transaction :) -declare function ss:do-save($searchdoc as cts:query,$searchname as xs:string) { - xdmp:document-insert(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"), - (:element ss:saved-search { - attribute name {$searchname}, - (:attribute uri {$search-uri-user},:) - $searchdoc - }:) document {$searchdoc} (: why not just this search doc? :) - ,xdmp:default-permissions(), - (xdmp:default-collections(),"saved-search") ) -}; - - - - -(: subscription methods :) - -declare function ss:subscribe($searchname as xs:string,$notificationurl as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean { - ss:do-subscribe-check($notificationurl,$searchname,$alert-detail,$content-type) -}; - -declare function ss:unsubscribe($searchname,$notificationurl) as xs:boolean { - (: NB supports multiple notification URLs. i.e. multiple UIs on same DB for same user :) - ss:do-unsubscribe($notificationurl,$searchname) -}; - - - - - - - -(: internal functions - not to be called by anything outside of this module :) - -(: This function intended to be called within a REST server - i.e. known DB - : Alert detail can be 'full' or 'snippet' which means either the full doc within the alert info container, or just the snippet information within the alert info container. - :) -declare function ss:do-subscribe-check($notificationurl as xs:string,$searchname as xs:string,$alert-detail as xs:string?,$content-type as xs:string?) as xs:boolean { - ss:do-subscribe($notificationurl,"/modules/alert-generic-messaging.xqy",($alert-detail,"full")[1],($content-type,"application/json")[1],$searchname,"generic-alert-domain","rest-sitaware-modules", - cts:query((fn:doc(fn:concat("/config/search/",xdmp:get-current-user(),"/",$searchname,".xml"))/element(),fn:doc(fn:concat("/config/search/shared/",$searchname,".xml"))/element())[1] ) - ) -}; - -declare function ss:do-add-action-rule($alert-name as xs:string,$notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean { - - let $e2 := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'declare variable $my:alert-name as xs:string external;declare variable $my:alert-module as xs:string external;declare variable $my:dbname as xs:string external;', - 'ah:create-action($my:alert-name,$my:alert-module,$my:dbname,())'), - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:dbname"),$dbname), - different-transaction - ) - let $e3 := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'declare variable $my:alert-name as xs:string external;declare variable $my:alert-detail as xs:string external;declare variable $my:content-type as xs:string external;', - 'declare variable $my:notificationurl as xs:string external;declare variable $my:searchname as xs:string external;declare variable $my:searchdoc as cts:query external;', - 'ah:create-rule-notify($my:alert-name,$my:alert-detail,$my:content-type,$my:notificationurl,$my:searchname,$my:searchdoc)'), - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-detail"),$alert-detail,xs:QName("my:content-type"),$content-type,xs:QName("my:notificationurl"),$notificationurl, - xs:QName("my:searchname"),$searchname,xs:QName("my:searchdoc"),$searchdoc), - different-transaction - ) - return fn:true() -}; - -declare function ss:do-subscribe($notificationurl as xs:string,$alert-module as xs:string?,$alert-detail as xs:string,$content-type as xs:string,$searchname as xs:string,$cpf-domain as xs:string,$dbname as xs:string,$searchdoc as cts:query?) as xs:boolean { - let $alert-name := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'declare variable $my:notificationurl as xs:string external;declare variable $my:searchname as xs:string external;', - 'ah:create-config($my:notificationurl,$my:searchname)'), - (xs:QName("my:notificationurl"),$notificationurl,xs:QName("my:searchname"),$searchname), - different-transaction - ) - let $e2 := ss:do-add-action-rule($alert-name,$notificationurl ,$alert-module,$alert-detail,$content-type,$searchname,$cpf-domain,$dbname,$searchdoc) - let $e4 := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'declare variable $my:alert-name as xs:string external;declare variable $my:cpf-domain as xs:string external;', - 'ah:cpf-enable($my:alert-name,$my:cpf-domain)'), - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:cpf-domain"),$cpf-domain), - different-transaction - ) - let $log := xdmp:log(fn:concat("SUBSCRIBE LOGS: ",$alert-name,$e2,$e4)) - return fn:true() -}; - -declare function ss:do-unsubscribe($notificationurl as xs:string,$searchname as xs:string) as xs:boolean { - let $alert-name := fn:concat("/config/alerts/",xdmp:get-current-user(),"/",$searchname,"/",$notificationurl) - - let $rr := - for $rule in alert:get-all-rules($alert-name,cts:collection-query($alert-name)) - return - alert:rule-remove($alert-name,$rule/@id) - - let $l := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";', - 'declare variable $my:alert-name as xs:string external;', - 'alert:config-set-cpf-domain-names(alert:config-get($my:alert-name), ())'), - (xs:QName("my:alert-name"),$alert-name), - different-transaction - )(:) - let $e1 := xdmp:eval( - fn:concat('xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; import module namespace ah = "http://marklogic.com/search/subscribe" at "/modules/lib-search-subscribe.xqy";', - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";', - 'declare variable $my:alert-name as xs:string external;', - 'alert:config-delete($my:alert-name)'), - (xs:QName("my:alert-name"),$alert-name), - different-transaction - ) - :) - (:) - let $d := alert:config-delete($alert-name):) - return fn:true() -}; - -declare function ss:create-rule-notify($alert-name as xs:string,$alert-detail as xs:string,$content-type as xs:string, - $notificationurl as xs:string,$searchname as xs:string,$searchdoc as cts:query) { - (: - let $searchdoc := cts:search(fn:collection("saved-search"),cts:directory-query(fn:concat("/config/search/",xdmp:get-current-user(),"/"),"1"))/ss:saved-search - let $searchdoc := if ($searchdoc) then $searchdoc else cts:search(fn:collection("saved-search"),cts:directory-query("/config/search/shared/","1"))/ss:saved-search - :) - - ss:create-rule($alert-name,(:)$notificationurl,:) $searchdoc,( - element notificationurl {$notificationurl}, - element searchname {$searchname}, - element detail {$alert-detail}, - element contenttype {$content-type} - )) -}; - - - - -(: GENERIC ALERTING FUNCTIONS BELOW THIS POINT :) - - - - - -declare function ss:add-alert($shortname as xs:string,$query as cts:query, - $ruleoptions as element()*,$module as xs:string,$moduledbname as xs:string?,$actionoptions as element()*) as xs:string { - - let $name := ss:do-create-config($shortname) - let $_ := ( - ss:do-create-action($name,$module,$moduledbname,$actionoptions) - , - ss:do-create-rule($name,$query,$ruleoptions) - ) - return $name -}; - -declare function ss:get-alert($shortname as xs:string) as element(alert:config)? { - alert:config-get($shortname) -}; - - -declare function ss:do-create-config($shortname as xs:string) as xs:string { - let $rem := ss:check-remove-config($shortname) - return - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:shortname as xs:string external;' || - 'ah:create-config($my:shortname)', - (xs:QName("my:shortname"),$shortname), - different-transaction - ) -}; - -declare function ss:do-create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() { - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'declare variable $my:query as cts:query external;' || - (:)'declare variable $my:options as element()* external;' ||:) - 'ah:create-rule($my:alert-name,$my:query,())', - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:query"),$query (:,xs:QName("my:options"),($options) :) ), - different-transaction - ) -}; - -declare function ss:do-create-action($alert-name as xs:string,$alert-module as xs:string,$dbname as xs:string?,$options as element()*) { - xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace ah = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy";' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'declare variable $my:alert-module as xs:string external;' || - 'declare variable $my:dbname as xs:string external;' || - 'declare variable $my:options as element()* external;' || - 'ah:create-action($my:alert-name,$my:alert-module,$my:dbname,$my:options)', - (xs:QName("my:alert-name"),$alert-name,xs:QName("my:alert-module"),$alert-module,xs:QName("my:dbname"),$dbname,xs:QName("my:options"),($options)), - different-transaction - ) -}; - -declare function ss:check-remove-config($shortname as xs:string) { - let $alert-name := "/config/alerts/" || $shortname - let $config := alert:config-get($alert-name) - return - if (fn:not(fn:empty($config))) then - (: Check if config used in a cpf domain, if so remove it from that domain :) - let $unreg := xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'alert:config-insert(' || - ' alert:config-set-cpf-domain-names(alert:config-get($my:alert-name),())' || - ')', - (xs:QName("my:alert-name"),$alert-name), - different-transaction - ) - (: Do this for each domain - NA all done in one hit:) - (: Now remove the alert config :) - return xdmp:eval( - 'xquery version "1.0-ml"; declare namespace my="http://marklogic.com/alerts"; ' || - 'import module namespace alert="http://marklogic.com/xdmp/alert" at "/MarkLogic/alert.xqy";' || - 'declare variable $my:alert-name as xs:string external;' || - 'alert:config-delete($my:alert-name)', - (xs:QName("my:alert-name"),$alert-name), - different-transaction - ) - else () -}; - -declare function ss:create-config($shortname as xs:string) as xs:string { - (: add alert :) - let $alert-name := "/config/alerts/" || $shortname - let $config := alert:make-config( - $alert-name, - $alert-name || " configuration", - $alert-name || " configuration", - ) - let $config-out := alert:config-insert($config) - return $alert-name -}; - -declare function ss:create-rule($alert-name as xs:string,$query as cts:query,$options as element()*) as empty-sequence() { - - let $rule := alert:make-rule( - fn:concat($alert-name,"-rule"), - $alert-name || " rule", - 0, (: equivalent to xdmp:user(xdmp:get-current-user()) :) - $query, - fn:concat($alert-name,"-action"), - - { - $options - } - ) - return alert:rule-insert($alert-name, $rule) -}; - -declare function ss:create-action($alert-name as xs:string,$alert-module as xs:string,$dbname as xs:string?,$options as element()*) { - let $action := alert:make-action( - fn:concat($alert-name,"-action"), - $alert-name || " action", - (xdmp:database($dbname),xdmp:modules-database())[1], - "/", - $alert-module, - {$options} ) - return alert:action-insert($alert-name, $action) -}; - - - - - -declare function ss:cpf-enable($alert-name as xs:string,$cpf-domain as xs:string) { - alert:config-insert( - alert:config-set-cpf-domain-names( - alert:config-get($alert-name), - ($cpf-domain))) -}; - -declare function ss:create-domain($domainname as xs:string,$domaintype as xs:string,$domainpath as xs:string,$domaindepth as xs:string,$pipeline-names as xs:string*,$modulesdb as xs:string) as xs:unsignedLong { - - (: check if domain already exists and recreate :) - let $remove := - try { - if (fn:not(fn:empty( - xdmp:eval( - 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts"; import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";declare variable $m:processmodeluri as xs:string external; dom:get($m:processmodeluri)' - , - (xs:QName("my:processmodeluri"),$domainname), - - {xdmp:triggers-database()} - different-transaction - - ) - ))) then - let $_ := xdmp:log(" GOT DOMAIN TO REMOVE") - return - xdmp:eval( - 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts"; import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy";declare variable $m:processmodeluri as xs:string external;' - || - 'dom:remove($m:processmodeluri)' - , - (xs:QName("my:processmodeluri"),$domainname), - - {xdmp:triggers-database()} - different-transaction - - ) - else - () - } catch ($e) { ( xdmp:log("Error trying to remove domain: " || $domainname),xdmp:log($e) ) } (: catching domain throwing error if it doesn't exist. We can safely ignore this :) - - - (: Create domain :) - - (: Configure domain :) - return - xdmp:eval( - 'xquery version "1.0-ml";declare namespace m="http://marklogic.com/alerts";' || - 'import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy"; '|| - 'import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; ' || - 'declare variable $m:pname as xs:string external;declare variable $m:pnames as xs:string* external;' || - 'declare variable $m:mdb as xs:unsignedLong external;'|| - 'declare variable $m:type as xs:string external;' || - 'declare variable $m:path as xs:string external;' || - 'declare variable $m:otherpipeline as xs:string external;' || - 'declare variable $m:depth as xs:string external;' || - 'let $_ := xdmp:log("In eval") ' || - (:)'let $pids := for $pn in $m:pnames ' || - ' return xs:unsignedLong(p:pipelines()[p:pipeline-name = $pn]/p:pipeline-id) ' || :) - 'let $pids := ' || - '(xs:unsignedLong(p:pipelines()[p:pipeline-name = "Status Change Handling"]/p:pipeline-id),xs:unsignedLong(p:pipelines()[p:pipeline-name = $m:otherpipeline]/p:pipeline-id))' || - 'let $_ := xdmp:log("second point")' || - 'let $ds := dom:domain-scope($m:type,$m:path,$m:depth) ' || - 'let $_ := xdmp:log("third point")' || - 'let $ec := dom:evaluation-context($m:mdb,"/")' || - 'let $_ := xdmp:log("fourth point")' || - 'let $dc := dom:create($m:pname,"Domain for "||$m:pname,' || - ' $ds,$ec,$pids,())' || - 'let $_ := xdmp:log("fifth point")' || - 'return $dc' - , - (xs:QName("my:otherpipeline"),($pipeline-names[2]),xs:QName("my:mdb"),xdmp:database($modulesdb),xs:QName("my:pname"),$domainname, - xs:QName("my:type"),$domaintype,xs:QName("my:path"),$domainpath,xs:QName("my:depth"),$domaindepth - ), - - {xdmp:triggers-database()} - different-transaction - - ) (: end eval :) - -}; diff --git a/modules/app/models/remove-domain.xqy b/modules/app/models/remove-domain.xqy new file mode 100644 index 0000000..dea01dd --- /dev/null +++ b/modules/app/models/remove-domain.xqy @@ -0,0 +1,9 @@ +xquery version "1.0-ml"; + +declare namespace m="http://marklogic.com/alerts"; + +import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; + +declare variable $m:processmodeluri as xs:string external; + +dom:remove($m:processmodeluri) \ No newline at end of file diff --git a/modules/app/models/save-search.xqy b/modules/app/models/save-search.xqy new file mode 100644 index 0000000..f20d37b --- /dev/null +++ b/modules/app/models/save-search.xqy @@ -0,0 +1,10 @@ +xquery version "1.0-ml"; + +declare namespace my="http://marklogic.com/alerts"; + +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; + +declare variable $my:searchdoc as cts:query external; +declare variable $my:searchname as xs:string external; + +la:do-save($my:searchdoc,$my:searchname) \ No newline at end of file diff --git a/modules/app/models/workflow-import.xqy b/modules/app/models/workflow-import.xqy index 1b87962..64086a5 100644 --- a/modules/app/models/workflow-import.xqy +++ b/modules/app/models/workflow-import.xqy @@ -10,12 +10,10 @@ declare namespace b2="http://www.omg.org/spec/BPMN/20100524/MODEL"; import module namespace p="http://marklogic.com/cpf/pipelines" at "/MarkLogic/cpf/pipelines.xqy"; import module namespace dom = "http://marklogic.com/cpf/domains" at "/MarkLogic/cpf/domains.xqy"; +import module namespace la = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; import module namespace stack="http://marklogic.com/stack" at "/app/models/lib-stack.xqy"; - -import module namespace ss = "http://marklogic.com/alerts/alerts" at "/app/models/lib-alerts.xqy"; - (: TODO replace following outgoing routes with call to m:b2getNextSteps() :) (: REST API OR XQUERY PUBLIC API FUNCTIONS :) @@ -189,7 +187,7 @@ declare function m:convert-to-cpf($processmodeluri as xs:string,$major as xs:str declare function m:subscribe-process($subscriptionName as xs:string, $processuri as xs:string,$query as element(cts:query)) as xs:unsignedLong { (: TODO remove existing config with same subscription name, if it exists :) - ss:add-alert($subscriptionName,$query,(),"/app/models/action-process.xqy",xdmp:modules-database(), + la:add-alert($subscriptionName,$query,(),"/app/models/action-process.xqy",xdmp:modules-database(), {$processuri}) }; diff --git a/modules/app/models/workflow-util.xqy b/modules/app/models/workflow-util.xqy index 9ad6e3f..c079a50 100644 --- a/modules/app/models/workflow-util.xqy +++ b/modules/app/models/workflow-util.xqy @@ -6,7 +6,7 @@ import module namespace cpf = "http://marklogic.com/cpf" at "/MarkLogic/cpf/cpf. import module namespace sem = "http://marklogic.com/semantics" at "/MarkLogic/semantics.xqy"; -import module namespace ss = "http://marklogic.com/search/subscribe" at "/app/models/lib-search-subscribe.xqy"; +import module namespace ss = "http://marklogic.com/alerts/alerting" at "/app/models/lib-alerting.xqy"; declare namespace prop = "http://marklogic.com/xdmp/property"; declare namespace wf="http://marklogic.com/workflow"; @@ -57,7 +57,7 @@ declare function m:createAlertingDomain($name as xs:string,$type as xs:string,$p : Create a new process subscription :) declare function m:createSubscription($pipelineName as xs:string,$name as xs:string,$domainname as xs:string,$query as cts:query) as xs:string { - let $alert-uri := ss:add-alert($name,$query,(),"/app/models/alert-action-process.xqy",xdmp:database-name(xdmp:modules-database()), + let $alert-uri := ss:add-alert($name,$query,(),"/app/models/alert-action-process.xqy",xdmp:modules-database(), ({$pipelineName})) let $alert-enabled := ss:cpf-enable($alert-uri,$domainname) return $alert-uri