xquery/trunk/XQuery__XQuerySequenceItem.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Tue, 08 Apr 2008 19:47:42 +0000
changeset 0 5057afe1ec87
child 6 d8454794d8de
permissions -rw-r--r--
Initial import from CVS

"{ Package: 'stx:goodies/xmlsuite/xquery' }"

"{ NameSpace: XQuery }"

Object subclass:#XQuerySequenceItem
	instanceVariableNames:'item'
	classVariableNames:''
	poolDictionaries:''
	category:'XQuery-Interpreter'
!


!XQuerySequenceItem class methodsFor:'instance creation'!

with: item

    ^self new
        item: item;
        type: self typeNode

    "Created: / 20-09-2007 / 12:16:18 / janfrog"
!

withAttribute: node

    ^self new item: node

    "Created: / 21-03-2007 / 14:31:40 / janfrog"
    "Modified: / 05-12-2007 / 15:58:47 / janfrog"
!

withBoolean: boolean

    ^self new
        item: boolean

    "Created: / 21-03-2007 / 14:24:49 / janfrog"
    "Modified: / 05-12-2007 / 15:58:58 / janfrog"
!

withNode: node

    ^self new
        item: node

    "Created: / 21-03-2007 / 14:31:40 / janfrog"
    "Modified: / 05-12-2007 / 15:59:03 / janfrog"
!

withNumber: number

    ^self new item: number

    "Created: / 21-03-2007 / 14:24:29 / janfrog"
    "Modified: / 05-12-2007 / 15:21:08 / janfrog"
!

withString: string

    ^self new
        item: string

    "Created: / 21-03-2007 / 15:45:27 / janfrog"
    "Modified: / 05-12-2007 / 15:59:08 / janfrog"
!

withText: string

    ^self new
        item: (XQueryConstructedNode new
                        nodeType: XQueryConstructedNode nodeTypeText;
                        nodeValue: string)

    "Created: / 28-03-2007 / 22:50:10 / janfrog"
    "Modified: / 05-12-2007 / 15:59:13 / janfrog"
! !

!XQuerySequenceItem class methodsFor:'accessing - type codes'!

typeAttribute

    ^TypeItem attribute

    "Created: / 07-07-2006 / 16:16:21 / ked"
    "Modified: / 05-12-2007 / 15:18:13 / janfrog"
!

typeBoolean
    <resource: #obsolete>
    ^self typeXSBoolean

    "Created: / 07-07-2006 / 16:17:20 / ked"
    "Modified: / 05-12-2007 / 15:22:42 / janfrog"
!

typeElement

    ^TypeElement instance

    "Created: / 05-12-2007 / 15:55:13 / janfrog"
!

typeNode
    ^TypeItem node

    "Created: / 07-07-2006 / 16:15:39 / ked"
    "Modified: / 05-12-2007 / 15:20:09 / janfrog"
!

typeNumber
    ^#number.

    "Created: / 07-07-2006 / 20:40:38 / ked"
!

typeQName

    <resource: #obsolete>
    ^self typeXSQName

    "Created: / 03-09-2006 / 11:53:26 / ked"
    "Modified: / 05-12-2007 / 15:24:38 / janfrog"
!

typeString
    <resource: #obsolete>
    ^self typeXSString

    "Created: / 07-07-2006 / 16:17:06 / ked"
    "Modified: / 05-12-2007 / 15:23:24 / janfrog"
!

typeXSBoolean
    ^TypeItem xsBoolean

    "Created: / 05-12-2007 / 15:22:13 / janfrog"
!

typeXSDecimal

    ^TypeXSDecimal instance

    "Created: / 05-12-2007 / 15:43:52 / janfrog"
!

typeXSFloat

    ^TypeItem xsFloat

    "Created: / 05-12-2007 / 15:15:54 / janfrog"
!

typeXSInteger

    ^TypeItem xsInteger

    "Created: / 05-12-2007 / 15:29:06 / janfrog"
!

typeXSNCName
    ^TypeItem xsNCName

    "Created: / 05-12-2007 / 15:23:03 / janfrog"
!

typeXSQName

    ^TypeItem xsQName

    "Created: / 05-12-2007 / 15:24:38 / janfrog"
!

typeXSString
    ^TypeItem xsString

    "Created: / 07-07-2006 / 16:17:06 / ked"
    "Modified: / 05-12-2007 / 15:38:47 / janfrog"
! !

!XQuerySequenceItem methodsFor:'accessing'!

documentAdaptor

    ^self item documentAdaptor

    "Created: / 24-10-2007 / 16:08:30 / janfrog"
!

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

nodeId

    ^self item nodeId

    "Created: / 24-10-2007 / 16:08:35 / janfrog"
!

stringValue

    ^self containsAtomicValue 
        ifTrue:[item printString]
        ifFalse:[item xpathValue]

    "Created: / 19-11-2007 / 14:20:59 / janfrog"
!

type

    ^"type"item xqueryType

    "Created: / 07-07-2006 / 16:18:51 / ked"
    "Modified: / 05-12-2007 / 15:12:13 / janfrog"
! !

!XQuerySequenceItem 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-12-2006 / 14:59:20 / janfrog"
!

asString

    ^item asString

    "Created: / 12-10-2006 / 17:33:20 / ked"
!

asXQueryConstructedNode

    (self type isSubtypeOf: self class typeNode) ifTrue:[^item].
    (self type isSubtypeOf: self class typeAttribute) ifTrue:[^item].

    ^XQueryConstructedNode new
        nodeType: XQueryConstructedNode nodeTypeText;
        nodeValue: item asString

    "Created: / 29-03-2007 / 13:37:19 / janfrog"
    "Modified: / 05-12-2007 / 21:38:30 / janfrog"
!

value

    | children |

    (self type isSubtypeOf: XQuerySequenceItem 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 xpathIsText.

            "TODO - pokus o typovou 'heuristiku' na beztypovych datech"
            ^Object errorSignal
                handle:[:ex | ex returnWith:(children first xpathValue)]
                do:[children first xpathValue asNumber].
        ]
    ] ifFalse:[
        ^item
    ].

    "Created: / 06-10-2006 / 16:17:20 / ked"
    "Modified: / 19-10-2006 / 23:11:01 / ked"
    "Modified: / 05-12-2007 / 16:03:57 / janfrog"
! !

!XQuerySequenceItem methodsFor:'initialization & release'!

releaseResources

    ^item releaseResources

    "Created: / 12-12-2006 / 10:44:07 / janfrog"
! !

!XQuerySequenceItem methodsFor:'printing'!

printOn: aStream

    item printOn: aStream.
    aStream 
        space;
        nextPut:$[;
        nextPutAll:self type printString;
        nextPut:$].

    "Created: / 21-03-2007 / 15:41:51 / janfrog"
    "Modified: / 05-12-2007 / 20:48:26 / janfrog"
! !

!XQuerySequenceItem methodsFor:'testing'!

containsAtomicValue

    ^self containsNode not

    "Created: / 18-11-2007 / 09:34:22 / janfrog"
!

containsCellStoreNode

    ^self containsNode and:[item isCellStoreNode]

    "Created: / 05-12-2007 / 10:06:30 / janfrog"
!

containsNode

    ^item isKindOf: XQueryAbstractNode

    "Created: / 18-11-2007 / 09:34:08 / janfrog"
! !

!XQuerySequenceItem class methodsFor:'documentation'!

version
    ^ '$Header: /opt/data/cvs/stx/goodies/xmlsuite/xquery/XQuery__XQuerySequenceItem.st,v 1.10 2007-12-05 21:11:49 vranyj1 Exp $'
! !