@@ -566,6 +566,67 @@ declare function setup:unique-attributes($attrs) {
566
566
return map:keys ($result) ! map:get ($result, .)
567
567
};
568
568
569
+ declare function setup:wrap-config-fragments ($fragments) {
570
+ if (fn:exists ($fragments)) then
571
+ <configuration>
572
+ <hosts xmlns = "http://marklogic.com/xdmp/hosts" >{
573
+ setup:unique-attributes ($fragments/self::ho:hosts/@*),
574
+ $fragments/self::ho:hosts/*,
575
+ $fragments/self::ho:host
576
+ }</hosts>
577
+ <assignments xmlns = "http://marklogic.com/xdmp/assignments" >{
578
+ setup:unique-attributes ($fragments/self::as:assignments/@*),
579
+ $fragments/self::as:assignments/*,
580
+ $fragments/self::as:assignment
581
+ }</assignments>
582
+ <databases xmlns = "http://marklogic.com/xdmp/database" >{
583
+ setup:unique-attributes ($fragments/self::db:databases/@*),
584
+ $fragments/self::db:databases/*,
585
+ $fragments/self::db:database
586
+ }</databases>
587
+ <certificates xmlns = "http://marklogic.com/xdmp/pki" >{
588
+ setup:unique-attributes ($fragments/self::pki:certificates/@*),
589
+ $fragments/self::pki:certificates/*,
590
+ $fragments/self::pki:certificate
591
+ }</certificates>
592
+ <roles xmlns = "http://marklogic.com/xdmp/security" >{
593
+ setup:unique-attributes ($fragments/self::sec:roles/@*),
594
+ $fragments/self::sec:roles/*,
595
+ $fragments/self::sec:role
596
+ }</roles>
597
+ <users xmlns = "http://marklogic.com/xdmp/security" >{
598
+ setup:unique-attributes ($fragments/self::sec:users/@*),
599
+ $fragments/self::sec:users/*,
600
+ $fragments/self::sec:user
601
+ }</users>
602
+ <amps xmlns = "http://marklogic.com/xdmp/security" >{
603
+ setup:unique-attributes ($fragments/self::sec:amps/@*),
604
+ $fragments/self::sec:amps/*,
605
+ $fragments/self::sec:amp
606
+ }</amps>
607
+ <privileges xmlns = "http://marklogic.com/xdmp/security" >{
608
+ setup:unique-attributes ($fragments/self::sec:privileges/@*),
609
+ $fragments/self::sec:privileges/*,
610
+ $fragments/self::sec:privilege
611
+ }</privileges>
612
+ <mimetypes xmlns = "http://marklogic.com/xdmp/mimetypes" >{
613
+ setup:unique-attributes ($fragments/self::mt:mimetypes/@*),
614
+ $fragments/self::mt:mimetypes/*,
615
+ $fragments/self::mt:mimetype
616
+ }</mimetypes>
617
+ <external-securities xmlns = "http://marklogic.com/xdmp/security" >{
618
+ setup:unique-attributes ($fragments/self::sec:external-securities/@*),
619
+ $fragments/self::sec:external-securities/*,
620
+ $fragments/self::sec:external-security
621
+ }</external-securities>
622
+ <credentials xmlns = "http://marklogic.com/xdmp/security" >{
623
+ setup:unique-attributes ($fragments/self::sec:credentials/@*),
624
+ $fragments/self::sec:credentials/*
625
+ }</credentials>
626
+ </configuration>/*
627
+ else ()
628
+ };
629
+
569
630
(: for backwards-compatibility :)
570
631
declare function setup:rewrite-config ($import-configs as node ()+, $properties as map:map) as element (configuration)
571
632
{
@@ -581,28 +642,43 @@ declare function setup:rewrite-config($import-configs as node()+, $properties as
581
642
{
582
643
let $import-configs := setup:process-conditionals ($import-configs, $properties)
583
644
let $config :=
584
- element { fn:node-name ($import-configs[ 1 ]) } {
585
- setup:unique-attributes ($import-configs/@*),
645
+ element configuration {
646
+ setup:unique-attributes ($import-configs/self::configuration/ @*),
586
647
587
648
(: capture comments before gr:groups, and its older counterparts :)
588
- $import-configs/(
649
+ $import-configs/self::configuration/ (
589
650
gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
590
651
)/preceding-sibling::node (),
591
652
592
653
<groups xmlns = "http://marklogic.com/xdmp/group" >{
593
654
setup:unique-attributes ($import-configs/gr:groups/@*),
594
655
595
- let $default-group := ($import-configs/@default-group , "Default" )[1 ]
596
- for $group in fn:distinct-values (
597
- ($import-configs/gr:groups/gr:group /gr:group-name, $import-configs/(gr:http-servers/gr:http-server, gr:xdbc-servers/gr:xdbc-server,
598
- gr:odbc-servers/gr:odbc-server, gr:task-server, db:databases/db:database)/@group , $default-group))
599
- let $http-servers := $import-configs/gr:http-servers/gr:http-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
600
- let $xdbc-servers := $import-configs/gr:xdbc-servers/gr:xdbc-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
601
- let $odbc-servers := $import-configs/gr:odbc-servers/gr:odbc-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
602
- let $task-server := $import-configs/gr:task-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
656
+ let $default-group := ($import-configs/self::*:configuration/@default-group , "Default" )[1 ]
657
+ for $group in fn:distinct-values ((
658
+ $import-configs/descendant-or-self::gr:group /gr:group-name,
659
+ $import-configs/descendant-or-self::*/(
660
+ self::gr:http-server, self::gr:xdbc-server,
661
+ self::gr:odbc-server, self::gr:task-server, self::db:database
662
+ )/@group ,
663
+ $default-group
664
+ ))
665
+ let $http-servers := $import-configs/descendant-or-self::gr:http-server[
666
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
667
+ ]
668
+ let $xdbc-servers := $import-configs/descendant-or-self::gr:xdbc-server[
669
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
670
+ ]
671
+ let $odbc-servers := $import-configs/descendant-or-self::gr:odbc-server[
672
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
673
+ ]
674
+ let $task-server := $import-configs/descendant-or-self::gr:task-server[
675
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
676
+ ]
603
677
let $servers := ($http-servers, $xdbc-servers, $odbc-servers, $task-server)
604
- let $databases := $import-configs/db:databases/db:database[@group = $group or ($group = $default-group and fn:empty (@group ))]
605
- let $group-config := $import-configs/gr:groups/gr:group [gr:group-name = $group]
678
+ let $databases := $import-configs/descendant-or-self::db:database[
679
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
680
+ ]
681
+ let $group-config := $import-configs/descendant-or-self::gr:group [gr:group-name = $group]
606
682
where fn:exists ($servers | $databases | $group-config)
607
683
return
608
684
<group>
@@ -627,14 +703,24 @@ declare function setup:rewrite-config($import-configs as node()+, $properties as
627
703
}</groups>,
628
704
629
705
(: capture anything following gr:groups, and its older counterparts :)
630
- $import-configs/(
706
+ $import-configs/self::*:configuration/ (
631
707
gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
632
708
)/following-sibling::node (),
633
709
634
- (: other fragments with configuration as root :)
635
- $import-configs[fn:empty ((
636
- gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
637
- ))]/node ()
710
+ (: in case of config fragments, merge and wrap them :)
711
+ setup:wrap-config-fragments ((
712
+ (: fragments with configuration as root :)
713
+ $import-configs/self::*:configuration[fn:empty ((
714
+ gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
715
+ ))]/node (),
716
+
717
+ (: other fragments :)
718
+ $import-configs[fn:not (self::*:configuration)]/(self::node () except (
719
+ self::gr:groups, self::gr:group , self::gr:http-servers, self::gr:http-server,
720
+ self::gr:xdbc-servers, self::gr:xdbc-server, self::gr:odbc-servers, self::gr:odbc-server,
721
+ self::gr:task-server
722
+ ))
723
+ ))
638
724
}
639
725
640
726
(: Check config on group consistency! :)
0 commit comments