Changeset 3955
- Timestamp:
- 11/06/13 17:44:28 (11 years ago)
- Location:
- cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/access
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/access/user.dpml
r3873 r3955 25 25 </message> 26 26 <param>arg:verb</param> 27 <param>this:arguments</param> 27 <param> 28 <request> 29 <identifier>log-args-string</identifier> 30 <verb>TRANSREPT</verb> 31 <representation>java.lang.String</representation> 32 <argument name="primary"> 33 <request> 34 <identifier>active:saxonSerialize</identifier> 35 <argument name="operand">this:arguments</argument> 36 <argument name="operator"> 37 <literal type="xml"> 38 <serialize> 39 <indent>yes</indent> 40 <encoding>UTF-8</encoding> 41 <omit-declaration>yes</omit-declaration> 42 <method>xml</method> 43 </serialize> 44 </literal> 45 </argument> 46 </request> 47 <!-- it is possible to use a direct transrept of "this:arguments" instead. However, "active:saxonSerialize" 48 allows us to indent the serialization and to omit the xml declaration --> 49 <!--<request> 50 <identifier>log-args-binary-stream</identifier> 51 <verb>TRANSREPT</verb> 52 <representation>org.netkernel.layer0.representation.IReadableBinaryStreamRepresentation</representation> 53 <argument name="primary">this:arguments</argument> 54 </request>--> 55 </argument> 56 </request> 57 </param> 28 58 </log> 29 59 </sloot-debug> … … 44 74 <identifier>active:sloot.generateUUID</identifier> 45 75 </request> 46 <!-- compute the query string for creating a new user --> 47 <request assignment="new-user-query"> 48 <identifier>active:xslt2</identifier> 49 <argument name="operand"> 50 <literal type="xml"> 51 <dummy/> 52 </literal> 53 </argument> 76 <!-- create the new user by running the query--> 77 <request assignment="response"> 78 <identifier>active:org.basex.query</identifier> 54 79 <argument name="operator"> 55 80 <literal type="xml"> 56 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 57 version="2.0" xmlns:rest="http://basex.org/rest" xmlns:sloot="http://www.isocat.org/ns/sloot"> 58 <xsl:import href="active:sloot.xquery.escape"/> 59 <xsl:param name="vararg"/> 60 <xsl:template match="/"> 61 <query xmlns:sc="http://www.isocat.org/ns/schemacat"> 62 <xsl:text>let $old-user := /sc:users/*:user[@xml:id = $new-user-id or *:principal = '</xsl:text> 63 <xsl:value-of select="sloot:escape-xquery($vararg/arguments/principal)"/> 64 <xsl:text>'], $new-user := element sc:user { attribute xml:id {$new-user-id}, element sc:principal {'</xsl:text> 65 <xsl:value-of select="sloot:escape-xquery($vararg/arguments/principal)"/> 66 <xsl:text>'}, element sc:displayName {'</xsl:text> 67 <xsl:value-of select="sloot:escape-xquery($vararg/arguments/display-name)"/> 68 <xsl:text>'}</xsl:text> 69 <xsl:for-each 70 select="$vararg/arguments/*[name() eq 'email']"> 71 <xsl:text>, element sc:email {'</xsl:text> 72 <xsl:value-of select="sloot:escape-xquery(.)"/> 73 <xsl:text>'}</xsl:text> 74 </xsl:for-each> 75 <!-- trying to use various roles. This reads the right number of roles passed but all their values resolve to 76 the first one passed!!! 77 If this work same can be used for emails --> 78 <xsl:for-each select="$vararg/arguments/*[name() eq 'role']"> 79 <xsl:text>, element sc:role {'</xsl:text> 80 <xsl:value-of select="sloot:escape-xquery(.)"/> 81 <xsl:text>'}</xsl:text> 82 </xsl:for-each> 83 <xsl:text>} return 84 if (empty($old-user)) 85 then (insert node $new-user into /sc:users) 86 else (error(xs:QName('sc:uniqueUser'),'There exists already an user with this id or principal!'))</xsl:text> 87 </query> 88 </xsl:template> 89 </xsl:stylesheet> 81 <query xmlns:sc="http://www.isocat.org/ns/schemacat"> 82 let $old-user := /sc:users/*:user[@xml:id = $new-user-id or *:principal = $args/principal/text()], 83 $new-user := element sc:user { attribute xml:id {$new-user-id}, element sc:principal {$args/principal/text()}, 84 if(exists($args/display-name/text())) then 85 element sc:displayName {$args/display-name/text()} 86 else (), 87 for $email in $args/email return 88 element sc:email {$email/text()}, 89 for $role in $args/role return 90 element sc:role {$role/text()}} 91 return 92 if (empty($old-user)) then 93 (db:output($new-user), insert node $new-user into /sc:users) 94 else 95 (error(xs:QName('sc:uniqueUser'),'There exists already an user with this id or principal!')) 96 </query> 90 97 </literal> 91 98 </argument> 92 <argument name="vararg">this:arguments</argument> 93 </request> 94 <sloot-debug> 95 <request> 96 <verb>SINK</verb> 97 <identifier>res:/debug/org.isocat.schemacat.access.data.user.new.query.xml</identifier> 98 <argument name="primary">this:new-user-query</argument> 99 </request> 100 </sloot-debug> 101 <!-- create the new user by running the query--> 102 <request> 103 <identifier>active:org.basex.query</identifier> 104 <argument name="operator">this:new-user-query</argument> 99 <argument name="args">this:arguments</argument> 105 100 <argument name="new-user-id">this:new-user-id</argument> 101 </request> 102 <!-- Cut the golden threads of the updated resources--> 103 <request> 104 <identifier>active:cutGoldenThread</identifier> 105 <argument name="id">userCache</argument> 106 </request> 107 <request> 108 <identifier>active:cutGoldenThread</identifier> 109 <argument name="id">usersCache</argument> 106 110 </request> 107 111 <log> … … 113 117 <param>arg:principal</param> 114 118 </log> 115 <request assignment="response">116 <identifier>this:new-user-id</identifier>117 </request>118 119 </sequence> 119 120 </then> … … 129 130 <then> 130 131 <sequence> 131 <!-- build the 'roles' element for the user -->132 <request assignment="roles">133 <identifier>active:xslt2</identifier>134 <argument name="operand">135 <literal type="xml">136 <dummy></dummy>137 </literal>138 </argument>139 <argument name="operator">140 <literal type="xml">141 <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"142 xmlns:rest="http://basex.org/rest">143 <xsl:param name="vararg"/>144 <xsl:template match='/'>145 <xsl:for-each select="$vararg/arguments/*[name() eq 'role']">146 <xsl:text>element role {'</xsl:text>147 <xsl:value-of select="."/>148 <xsl:text>'}</xsl:text>149 <xsl:if test='position()!=last()'>,</xsl:if>150 </xsl:for-each>151 </xsl:template>152 </xsl:stylesheet>153 </literal>154 </argument>155 <argument name="vararg">this:arguments</argument>156 </request>157 132 <!-- update the user info --> 158 <request >133 <request assignment="response"> 159 134 <identifier>active:org.basex.query</identifier> 160 135 <argument name="operator"> 161 136 <literal type="xml"> 162 137 <query xmlns:sc="http://www.isocat.org/ns/schemacat"> 163 let $user := 164 element user { attribute xml:id {$args//id}, element principal 165 {$args//principal}, element displayName {$args//display-name}, $roles } 166 return replace node /sc:users/sc:user[(@xml:id eq '$args//id') or (sc:principal eq '$args//principal')] with $user 138 let $oldUser := /sc:users/sc:user[(@xml:id eq $args/id) or (sc:principal eq $args/principal)], 139 $newUser := 140 element sc:user { 141 if(exists($args/id)) then 142 attribute xml:id {$args/id} 143 else 144 attribute xml:id {$oldUser/@xml:id}, 145 if(exists($args/principal/text())) then 146 element sc:principal {$args/principal/text()} 147 else 148 $oldUser/sc:principal, 149 if(exists($args/display-name/text())) then 150 element sc:displayName {$args/display-name/text()} 151 else 152 $oldUser/sc:displayName, 153 if(exists($args/email/text())) then 154 for $email in $args/email return 155 element sc:email {$email/text()} 156 else 157 $oldUser/sc:email, 158 if(exists($args/role/text())) then 159 for $role in $args/role return 160 element sc:role {$role/text()} 161 else 162 $oldUser/sc:role 163 } 164 return 165 if (empty($oldUser)) then 166 (error(xs:QName('sc:nonExistingUser'),'User matching id or principal not found!')) 167 else 168 (db:output($newUser), replace node /sc:users/sc:user[(@xml:id eq $args/id) or (sc:principal eq $args/principal)] with $newUser) 167 169 </query> 168 170 </literal> 169 <!-- replace value of node /sc:users/sc:user[@xml:id eq '$user-id']/sc:$field with '$new-value' -->170 171 </argument> 171 172 <argument name="args">this:arguments</argument> 172 <argument name="roles">this:roles</argument> 173 </request> 174 <literal assignment="response" type="boolean">true</literal> 173 </request> 174 <!-- Cut the golden threads of the updated resources--> 175 <request> 176 <identifier>active:cutGoldenThread</identifier> 177 <argument name="id">userCache</argument> 178 </request> 179 <request> 180 <identifier>active:cutGoldenThread</identifier> 181 <argument name="id">usersCache</argument> 182 </request> 175 183 <log> 176 184 <level>INFO</level> 177 185 <message> 178 <literal type="string">[access.data] Updated user for principal: [%1]</literal>186 <literal type="string">[access.data] Updated user account for id: [%1]</literal> 179 187 </message> 180 <param>arg: principal</param>188 <param>arg:id</param> 181 189 </log> 182 190 </sequence> … … 287 295 </otherwise> 288 296 </switch> 297 <request> 298 <identifier>active:attachGoldenThread</identifier> 299 <argument name="id">userCache</argument> 300 </request> 289 301 <sloot-debug> 290 302 <log> … … 294 306 </message> 295 307 <param> 296 < !-- pass the response trough sloot.toString so the actual297 user document is logged instead of the value of its pointer!-->298 <request>299 < identifier>active:sloot.toString</identifier>300 <argument name=" operand">this:response</argument>308 <request> 309 <identifier>response-string</identifier> 310 <verb>TRANSREPT</verb> 311 <representation>java.lang.String</representation> 312 <argument name="primary">this:response</argument> 301 313 </request> 302 314 </param> -
cats/SCHEMAcat/trunk/urn.org.isocat.schemacat.access.data/access/users.dpml
r3873 r3955 36 36 </argument> 37 37 </request> 38 <request> 39 <identifier>active:attachGoldenThread</identifier> 40 <argument name="id">usersCache</argument> 41 </request> 38 42 <sloot-debug> 39 43 <request>
Note: See TracChangeset
for help on using the changeset viewer.