Changeset 3208


Ignore:
Timestamp:
07/30/13 11:45:13 (11 years ago)
Author:
andmor
Message:

'NEW user' enpoint generating a dinamic query according to the parameters passed to it.

Location:
cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data
Files:
2 edited

Legend:

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

    r3164 r3208  
    2828                                        <identifier>active:sloot.generateUUID</identifier>
    2929                                </request>
    30                                 <!-- create the new user -->
     30                                <!-- compute the query string for creating a new user -->
     31                                <request assignment="new-user-query">
     32                                        <identifier>active:xslt2</identifier>
     33                                        <argument name="operand">
     34                                                <literal type="xml">
     35                                                        <dummy/>
     36                                                </literal>
     37                                        </argument>
     38                                        <argument name="operator">
     39                                                <literal type="xml">
     40                                                        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     41                                                                version="2.0" xmlns:rest="http://basex.org/rest">
     42                                                                <xsl:param name="vararg"/>
     43                                                                <xsl:template match="/">
     44                                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     45                                                                                <xsl:text>let $new-user := element user { attribute xml:id {$new-user-id}, element principal {$principal}, element displayName {$display-name}</xsl:text>
     46                                                                                <xsl:for-each
     47                                                                                        select="$vararg/arguments/*[name() eq 'email']">
     48                                                                                        <xsl:text>, element email {'</xsl:text>
     49                                                                                        <xsl:value-of select="unparsed-text(string(.))"/>
     50                                                                                        <xsl:text>'}</xsl:text>
     51                                                                                </xsl:for-each>
     52                                                                                <!-- trying to use various roles. This reads the right number of roles passed but all their values resolve to
     53                                                                                the first one passed!!!
     54                                                                                If this work same can be used for emails -->
     55                                                                                <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">
     56                                                                                        <xsl:text>, element role {'</xsl:text>
     57                                                                                        <xsl:value-of select="unparsed-text(string(.))"/>
     58                                                                                        <xsl:text>'}</xsl:text>
     59                                                                                </xsl:for-each>
     60                                                                                <xsl:text>} return insert node $new-user into /sc:users </xsl:text>
     61                                                                        </query>
     62                                                                </xsl:template>
     63                                                        </xsl:stylesheet>
     64                                                </literal>
     65                                        </argument>
     66                                        <argument name="vararg">arg:arguments</argument>
     67                                </request>
     68                                <sloot-debug>
     69                                        <request>
     70                                                <verb>SINK</verb>
     71                                                <identifier>res:/debug/org.isocat.schemacat.access.data.user.new.query.xml</identifier>
     72                                                <argument name="primary">arg:query</argument>
     73                                        </request>
     74                                </sloot-debug>
     75                                <!-- create the new user by running the query-->
    3176                                <request>
    3277                                        <identifier>active:org.basex.query</identifier>
    33                                         <argument name="operator">
    34                                                 <literal type="xml">
    35                                                         <query xmlns:sc="http://www.isocat.org/ns/schemacat"> let $new-user :=
    36                                                                 element user { attribute xml:id {$new-user-id}, element principal
    37                                                                 {$principal}, element displayName {$principal}, element role
    38                                                                 {'user'} } return insert node $new-user into /sc:users </query>
    39                                                 </literal>
    40                                         </argument>
     78                                        <argument name="operator">this:new-user-query</argument>
    4179                                        <argument name="principal">arg:principal</argument>
     80                                        <argument name="display-name">arg:display-name</argument>
    4281                                        <argument name="new-user-id">this:new-user-id</argument>
    4382                                </request>
     
    5291                        </sequence>
    5392                </then>
     93                <!-- This is the future code for the SINK verb to update a user info -->
     94                <!--<cond>
     95                        <request>
     96                                <identifier>active:sloot.xpath2</identifier>
     97                                <argument name="operand">arg:verb</argument>
     98                                <argument name="operator">
     99                                        <literal type="string">boolean(.='SINK')</literal>
     100                                </argument>
     101                        </request>
     102                </cond>
     103                <then>
     104                        <sequence>
     105                                <!-\- build the 'roles' element for the user -\->
     106                                <request assignment="roles">
     107                                        <identifier>active:xslt2</identifier>
     108                                        <argument name="operand">
     109                                                <literal type="xml">
     110                                                        <dummy></dummy>
     111                                                </literal>
     112                                        </argument>
     113                                        <argument name="operator">
     114                                                <literal type="xml">
     115                                                        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
     116                                                        xmlns:rest="http://basex.org/rest">
     117                                                                <xsl:template match='/'>
     118                                                                        <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">
     119                                                                                <xsl:text>element role {'</xsl:text>
     120                                                                                <xsl:value-of select="{unparsed-text(string(.))}"/>
     121                                                                                <xsl:text>'}</xsl:text>
     122                                                                                <xsl:if test='not(last(.))'>,</xsl:if>
     123                                                                        </xsl:for-each>
     124                                                                </xsl:template>
     125                                                        </xsl:stylesheet>
     126                                                </literal>
     127                                        </argument>
     128                                        <argument name="vararg">arg:arguments</argument>
     129                                </request>
     130                                <!-\- update the user info -\->
     131                                <request>
     132                                        <identifier>active:org.basex.query</identifier>
     133                                        <argument name="operator">
     134                                                <literal type="xml">
     135                                                        <query xmlns:sc="http://www.isocat.org/ns/schemacat">
     136                                                                let $user :=
     137                                                                element user { attribute xml:id {$user-id}, element principal
     138                                                                {$principal}, element displayName {$display-name}, $roles }
     139                                                                return replace node /sc:users/sc:user[@xml:id eq '$user-id'] with $user
     140                                                                </query>
     141                                                </literal>
     142                                        <!-\-   replace value of node /sc:users/sc:user[@xml:id eq '$user-id']/sc:$field with '$new-value' -\->
     143                                        </argument>
     144                                        <argument name="user-id">arg:user-id</argument>
     145                                        <argument name="principal">arg:principal</argument>
     146                                        <argument name="display-name">arg:display-name</argument>
     147                                        <argument name="roles">this:roles</argument>
     148                                </request>
     149                                <literal assignment="response" type="boolean">true</literal>
     150                                <log>
     151                                        <level>INFO</level>
     152                                        <message>
     153                                                <literal type="string">Updated user for principal: [%1]</literal>
     154                                        </message>
     155                                        <param>arg:principal</param>
     156                                </log>
     157                        </sequence>
     158                </then>-->
    54159                <cond>
    55160                        <request>
  • cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/module.xml

    r3118 r3208  
    2828                     <identifier>active:org.isocat.schemacat.access.data.user</identifier>
    2929                     <argument name="principal"/>
     30                     <argument name="user-id" min="0" max="1" />
     31                     <argument name="display-name" min="0" max="1" />
     32                     <argument name="email" min="0" />
     33                     <!-- AAM: trying to pass an arbritary number of roles (max 2 here). Not working1 -> cannot read the second role.
     34                     Ideally this would be used for 'roles' and 'emails'-->
     35                     <argument name="role" min="0" max="2"/>
    3036                  </active>
    3137               </grammar>
     
    3440                  <identifier>active:sloot.dpml</identifier>
    3541                  <argument name="operator">res:/access/user.dpml</argument>
    36                   <argument name="principal">arg:principal</argument>
     42                  <varargs/>
    3743               </request>
    3844            </endpoint>
Note: See TracChangeset for help on using the changeset viewer.