xquery/trunk/XQuery__XQueryDataContextItem.st
changeset 0 5057afe1ec87
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xquery/trunk/XQuery__XQueryDataContextItem.st	Tue Apr 08 19:47:42 2008 +0000
@@ -0,0 +1,158 @@
+"{ Package: 'stx:goodies/xmlsuite/xquery' }"
+
+"{ NameSpace: XQuery }"
+
+Object subclass:#XQueryDataContextItem
+	instanceVariableNames:'item type'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'XQuery-DataNodes'
+!
+
+
+!XQueryDataContextItem class methodsFor:'accessing - type codes'!
+
+typeBoolean
+    ^#boolean.
+
+    "Created: / 07-07-2006 / 16:17:20 / ked"
+!
+
+typeNCName
+    ^#ncname.
+
+    "Created: / 18-11-2006 / 16:26:37 / ked"
+!
+
+typeNode
+    ^#node.
+
+    "Created: / 07-07-2006 / 16:15:39 / ked"
+!
+
+typeNumber
+    ^#number.
+
+    "Created: / 07-07-2006 / 20:40:38 / ked"
+!
+
+typeQName
+    ^#qname.
+
+    "Created: / 03-09-2006 / 11:53:26 / ked"
+!
+
+typeString
+    ^#string.
+
+    "Created: / 07-07-2006 / 16:17:06 / ked"
+! !
+
+!XQueryDataContextItem methodsFor:'accessing'!
+
+item
+    ^ item
+
+    "Created: / 07-07-2006 / 16:18:50 / ked"
+!
+
+item:something
+
+    self assert: item isNil.
+    item := something.
+
+    "Created: / 07-07-2006 / 16:18:50 / ked"
+    "Modified: / 07-10-2006 / 22:50:43 / ked"
+!
+
+type
+    ^ type
+
+    "Created: / 07-07-2006 / 16:18:51 / ked"
+!
+
+type:something
+
+    self assert: type isNil.
+    type := something.
+
+    "Created: / 07-07-2006 / 16:18:51 / ked"
+    "Modified: / 07-10-2006 / 22:51:03 / ked"
+! !
+
+!XQueryDataContextItem methodsFor:'converting'!
+
+asDocumentFragment
+
+    | domBuilder |
+    domBuilder := XMLv2::DOM3Builder new.
+    XQueryResultXMLReader new
+            setDocumentAdaptor: XPathDocumentAdaptorProxy new;
+            setContentHandler: domBuilder;
+            visit: item.
+    ^domBuilder document
+
+    "Created: / 10-12-2006 / 20:30:57 / janfrog"
+    "Modified: / 14-11-2007 / 14:35:31 / janfrog"
+!
+
+asString
+
+    ^item asString
+
+    "Created: / 12-10-2006 / 17:33:20 / ked"
+!
+
+value
+
+    | children |
+
+    type = XQueryDataContextItem typeNode ifTrue:[
+        item xpathIsText ifTrue:[
+            "TODO - pokus o typovou 'heuristiku' na beztypovych datech"
+            ^Object errorSignal
+                handle:[:ex | ex returnWith:(item xpathValue)]
+                do:[item xpathValue asNumber].
+        ].
+        item xpathIsAttribute ifTrue:[
+            ^item xpathValue 
+        ] ifFalse:[
+            self assert: item xpathIsElement.
+
+            children := item xpathChild.
+
+            children size = 0 ifTrue:[
+                ^nil.
+            ].
+
+            self assert: children size = 1.
+            self assert: children first item xpathIsText.
+
+            "TODO - pokus o typovou 'heuristiku' na beztypovych datech"
+            ^Object errorSignal
+                handle:[:ex | ex returnWith:(children first item xpathValue)]
+                do:[children first item xpathValue asNumber].
+        ]
+    ] ifFalse:[
+        ^item
+    ].
+
+    "Created: / 06-10-2006 / 16:17:20 / ked"
+    "Modified: / 19-10-2006 / 23:11:01 / ked"
+    "Modified: / 12-12-2006 / 13:16:12 / janfrog"
+! !
+
+!XQueryDataContextItem methodsFor:'initialization & release'!
+
+releaseResources
+
+    ^item releaseResources
+
+    "Created: / 12-12-2006 / 10:44:07 / janfrog"
+! !
+
+!XQueryDataContextItem class methodsFor:'documentation'!
+
+version
+    ^ '$Header: /opt/data/cvs/stx/goodies/xmlsuite/xquery/XQuery__XQueryDataContextItem.st,v 1.6 2007-11-15 19:01:49 vranyj1 Exp $'
+! !