Changeset 3392


Ignore:
Timestamp:
08/15/13 15:37:26 (11 years ago)
Author:
andmor
Message:

Added support for default user parameters when using the 'NEW' verb .

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/access/user.dpml

    r3379 r3392  
    11<?xml version="1.0" encoding="UTF-8"?>
    22<sequence debug="false">
     3        <sloot-debug>
     4                <request>
     5                        <verb>SINK</verb>
     6                        <identifier>res:/debug/org.isocat.schemacat.access.data.user.unresolved-arguments.xml</identifier>
     7                        <argument name="primary">arg:arguments</argument>
     8                </request>
     9        </sloot-debug>
    310        <!-- resolve the references in arg:arguments -->
    411        <request assignment="arguments">
     
    916                                <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    1017                                        version="2.0">
     18                                        <xsl:param name="debug"/>
    1119                                        <xsl:template match="@*|node()">
    1220                                                <xsl:copy>
     
    2028                                                        <xsl:apply-templates select="@*"/>
    2129                                                        <xsl:variable name="val" select="unparsed-text(.)"/>
    22                                                         <xsl:message>DBG: <xsl:value-of select="name()"/>[<xsl:value-of select="."/>][<xsl:value-of select="$val"/>]</xsl:message>
     30                                                        <xsl:if test="$debug">
     31                                                                <xsl:message>DBG: <xsl:value-of select="name()"/>[<xsl:value-of select="."/>][<xsl:value-of select="$val"/>]</xsl:message>
     32                                                        </xsl:if>
    2333                                                        <xsl:choose>
    2434                                                                <!-- snif if the value is XML -->
     
    3545                        </literal>
    3646                </argument>
    37         </request>
    38         <request>
    39                 <verb>SINK</verb>
    40                 <identifier>res:/debug/org.isocat.schemacat.access.data.user.arguments.xml</identifier>
    41                 <argument name="primary">arg:arguments</argument>
    42         </request>
    43         <request>
    44                 <verb>SINK</verb>
    45                 <identifier>res:/debug/org.isocat.schemacat.access.data.user.args.xml</identifier>
    46                 <argument name="primary">this:arguments</argument>
     47                <argument name="debug">this:sloot-debug</argument>
    4748        </request>
    4849        <sloot-debug>
     50                <request>
     51                        <verb>SINK</verb>
     52                        <identifier>res:/debug/org.isocat.schemacat.access.data.user.resolved-arguments.xml</identifier>
     53                        <argument name="primary">this:arguments</argument>
     54                </request>
    4955                <log>
    5056                        <level>INFO</level>
    5157                        <message>
    52                                 <literal type="string">user accessor verb: %1 with arguments: %2</literal>
     58                                <literal type="string">user accessor verb: %1 with arguments:&#10;%2</literal>
    5359                        </message>
    5460                        <param>arg:verb</param>
     
    7379                                        <identifier>active:sloot.generateUUID</identifier>
    7480                                </request>
     81                                <!-- compute the query string for creating a new user -->
     82                                <request assignment="new-user-query">
     83                                        <identifier>active:xslt2</identifier>
     84                                        <argument name="operand">
     85                                                <literal type="xml">
     86                                                        <dummy/>
     87                                                </literal>
     88                                        </argument>
     89                                        <argument name="operator">
     90                                                <literal type="xml">
     91                                                        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     92                                                                version="2.0" xmlns:rest="http://basex.org/rest">
     93                                                                <xsl:param name="vararg"/>
     94                                                                <xsl:template match="/">
     95                                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     96                                                                                <xsl:text>let $old-user := /sc:users/*:user[@xml:id = $new-user-id or *:principal = '</xsl:text>
     97                                                                                <xsl:value-of select="$vararg/arguments/principal"/>
     98                                                                                <xsl:text>'], $new-user := element sc:user { attribute xml:id {$new-user-id}, element sc:principal {'</xsl:text>
     99                                                                                <xsl:value-of select="$vararg/arguments/principal"/>
     100                                                                                <xsl:text>'}, element sc:displayName {'</xsl:text>
     101                                                                                <xsl:value-of select="$vararg/arguments/display-name"/>
     102                                                                                <xsl:text>'}</xsl:text>
     103                                                                                <xsl:for-each
     104                                                                                        select="$vararg/arguments/*[name() eq 'email']">
     105                                                                                        <xsl:text>, element sc:email {'</xsl:text>
     106                                                                                        <xsl:value-of select="."/>
     107                                                                                        <xsl:text>'}</xsl:text>
     108                                                                                </xsl:for-each>
     109                                                                                <!-- trying to use various roles. This reads the right number of roles passed but all their values resolve to
     110                                                                                the first one passed!!!
     111                                                                                If this work same can be used for emails -->
     112                                                                                <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">
     113                                                                                        <xsl:text>, element sc:role {'</xsl:text>
     114                                                                                        <xsl:value-of select="."/>
     115                                                                                        <xsl:text>'}</xsl:text>
     116                                                                                </xsl:for-each>
     117                                                                                <xsl:text>} return
     118                                                                                        if (empty($old-user))
     119                                                        then (insert node $new-user into /sc:users)
     120                                                        else (error(xs:QName('sc:uniqueUser'),'There exists already an user with this id or principal!'))</xsl:text>
     121                                                                        </query>
     122                                                                </xsl:template>
     123                                                        </xsl:stylesheet>
     124                                                </literal>
     125                                        </argument>
     126                                        <argument name="vararg">this:arguments</argument>
     127                                </request>
     128                                <sloot-debug>
     129                                        <request>
     130                                                <verb>SINK</verb>
     131                                                <identifier>res:/debug/org.isocat.schemacat.access.data.user.new.query.xml</identifier>
     132                                                <argument name="primary">this:new-user-query</argument>
     133                                        </request>
     134                                </sloot-debug>
    75135                                <!-- create the new user by running the query-->
    76                                 <!-- we will only know the principal -->
    77136                                <request>
    78137                                        <identifier>active:org.basex.query</identifier>
    79                                         <argument name="operator">
    80                                                 <literal type="xml">
    81                                                         <query xmlns:sc="http://www.isocat.org/ns/schemacat">
    82                                                                 let $old-user := /sc:users/*:user[@xml:id = $new-user-id or *:principal = $principal],
    83                                                                         $new-user := element sc:user {
    84                                                                                 attribute xml:id {$new-user-id},
    85                                                                                 element sc:principal {$principal},
    86                                                                                 element sc:role{'user'}
    87                                                                         }
    88                                                                 return
    89                                                                         if (empty($old-user))
    90                                                                         then (insert node $new-user into /sc:users)
    91                                                                         else (error(xs:QName('sc:uniqueUser'),'There exists already an user with this id or principal!'))
    92                                                         </query>
    93                                                 </literal>
    94                                         </argument>
     138                                        <argument name="operator">this:new-user-query</argument>
    95139                                        <argument name="new-user-id">this:new-user-id</argument>
    96                                         <argument name="principal">arg:principal</argument>
    97140                                </request>
    98141                                <log>
     
    262305                                </id>
    263306                                <message>
    264                                         <literal type="string">org.isocat.schemacat.data.user: unsupported
    265                                                 verb!</literal>
     307                                        <literal type="string">org.isocat.schemacat.data.user: unsupported verb!</literal>
    266308                                </message>
    267309                        </throw>
Note: See TracChangeset for help on using the changeset viewer.