xquery/trunk/XQuery__XDMAdaptor.st
changeset 274 28ac00b069d2
parent 273 21355039610d
child 276 1b30d9e1e8cd
--- a/xquery/trunk/XQuery__XDMAdaptor.st	Mon Feb 13 20:37:49 2012 +0000
+++ b/xquery/trunk/XQuery__XDMAdaptor.st	Mon Feb 13 20:57:23 2012 +0000
@@ -84,6 +84,15 @@
     "Modified: / 07-02-2012 / 21:41:06 / Adam Senk <senkadam@gmail.com>"
 !
 
+ensureIsValidElementOrAttributeId: nodeId 
+
+    ((nodeId isAttr) or:[nodeId isElement])
+        ifFalse:[self invalidNodeIdError: 'Not an attribute']
+
+    "Created: / 31-10-2007 / 10:22:12 / janfrog"
+    "Modified: / 07-02-2012 / 19:37:49 / Adam Senk <senkadam@gmail.com>"
+!
+
 ensureIsValidElementOrDocumentId: nodeId 
 
 
@@ -175,6 +184,21 @@
 
 !XDMAdaptor methodsFor:'node importing'!
 
+importForeignNode:foreignNodeId "adaptor:foreignXPathDocumentAdaptor" 
+    |builder|
+
+    builder := self importingBuilder.
+    (XQuery::XQueryResultXMLReader new)
+        "setDocumentAdaptor:foreignXPathDocumentAdaptor;"
+        setContentHandler:builder;
+        visit:foreignNodeId.
+    ^ builder document
+
+    "Created: / 05-12-2007 / 14:26:29 / janfrog"
+    "Modified: / 06-02-2012 / 23:48:05 / Adam Senk <senkadam@gmail.com>"
+    "Created: / 07-02-2012 / 18:44:08 / Adam Senk <senkadam@gmail.com>"
+!
+
 importForeignNode:foreignNodeId adaptor:foreignXPathDocumentAdaptor 
     |builder|
 
@@ -225,6 +249,20 @@
 
 !XDMAdaptor methodsFor:'update primitives'!
 
+updDelete: nodeId
+   |type|
+    self ensureNotReleased ; ensureIsValidNodeId: nodeId.
+
+   type:=self dmNodeKind: nodeId.
+     type='attribute'
+        ifTrue:[self primUpdDeleteAttribute: nodeId]
+        ifFalse:[self primUpdDeleteNode: nodeId]
+
+    "Created: / 24-10-2007 / 16:09:53 / janfrog"
+    "Modified: / 31-10-2007 / 10:17:25 / janfrog"
+    "Modified: / 30-01-2012 / 19:11:43 / Adam Senk <senkadam@gmail.com>"
+!
+
 updInsert:sourceNodeId after:targetNodeId 
     "String"
     
@@ -348,6 +386,24 @@
     "Created: / 14-11-2007 / 14:17:16 / janfrog"
     "Modified: / 21-11-2007 / 13:59:39 / janfrog"
     "Modified: / 07-02-2012 / 00:03:46 / Adam Senk <senkadam@gmail.com>"
+!
+
+updReplaceValueOf:nodeId with:newValue 
+    self
+        ensureNotReleased;
+        ensureIsValidNodeId:nodeId nodeId.
+
+    (nodeId isElementNode) 
+        ifTrue:
+            ["delete all child nodes"            
+            (nodeId xpathChild) do:[:node|self updDelete: node nodeId ].
+            "insert new node"
+            self updInsert: newValue into: nodeId]
+        ifFalse:
+            [self primUpdReplaceValueOf:nodeId with:newValue]
+
+    "Modified: / 21-11-2007 / 12:48:36 / janfrog"
+    "Modified: / 07-02-2012 / 19:00:45 / Adam Senk <senkadam@gmail.com>"
 ! !
 
 !XDMAdaptor methodsFor:'update primitives - primitives'!