--- 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'!