xquery/trunk/XQuery__XQuerySequenceItem.st
changeset 0 5057afe1ec87
child 6 d8454794d8de
equal deleted inserted replaced
-1:000000000000 0:5057afe1ec87
       
     1 "{ Package: 'stx:goodies/xmlsuite/xquery' }"
       
     2 
       
     3 "{ NameSpace: XQuery }"
       
     4 
       
     5 Object subclass:#XQuerySequenceItem
       
     6 	instanceVariableNames:'item'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'XQuery-Interpreter'
       
    10 !
       
    11 
       
    12 
       
    13 !XQuerySequenceItem class methodsFor:'instance creation'!
       
    14 
       
    15 with: item
       
    16 
       
    17     ^self new
       
    18         item: item;
       
    19         type: self typeNode
       
    20 
       
    21     "Created: / 20-09-2007 / 12:16:18 / janfrog"
       
    22 !
       
    23 
       
    24 withAttribute: node
       
    25 
       
    26     ^self new item: node
       
    27 
       
    28     "Created: / 21-03-2007 / 14:31:40 / janfrog"
       
    29     "Modified: / 05-12-2007 / 15:58:47 / janfrog"
       
    30 !
       
    31 
       
    32 withBoolean: boolean
       
    33 
       
    34     ^self new
       
    35         item: boolean
       
    36 
       
    37     "Created: / 21-03-2007 / 14:24:49 / janfrog"
       
    38     "Modified: / 05-12-2007 / 15:58:58 / janfrog"
       
    39 !
       
    40 
       
    41 withNode: node
       
    42 
       
    43     ^self new
       
    44         item: node
       
    45 
       
    46     "Created: / 21-03-2007 / 14:31:40 / janfrog"
       
    47     "Modified: / 05-12-2007 / 15:59:03 / janfrog"
       
    48 !
       
    49 
       
    50 withNumber: number
       
    51 
       
    52     ^self new item: number
       
    53 
       
    54     "Created: / 21-03-2007 / 14:24:29 / janfrog"
       
    55     "Modified: / 05-12-2007 / 15:21:08 / janfrog"
       
    56 !
       
    57 
       
    58 withString: string
       
    59 
       
    60     ^self new
       
    61         item: string
       
    62 
       
    63     "Created: / 21-03-2007 / 15:45:27 / janfrog"
       
    64     "Modified: / 05-12-2007 / 15:59:08 / janfrog"
       
    65 !
       
    66 
       
    67 withText: string
       
    68 
       
    69     ^self new
       
    70         item: (XQueryConstructedNode new
       
    71                         nodeType: XQueryConstructedNode nodeTypeText;
       
    72                         nodeValue: string)
       
    73 
       
    74     "Created: / 28-03-2007 / 22:50:10 / janfrog"
       
    75     "Modified: / 05-12-2007 / 15:59:13 / janfrog"
       
    76 ! !
       
    77 
       
    78 !XQuerySequenceItem class methodsFor:'accessing - type codes'!
       
    79 
       
    80 typeAttribute
       
    81 
       
    82     ^TypeItem attribute
       
    83 
       
    84     "Created: / 07-07-2006 / 16:16:21 / ked"
       
    85     "Modified: / 05-12-2007 / 15:18:13 / janfrog"
       
    86 !
       
    87 
       
    88 typeBoolean
       
    89     <resource: #obsolete>
       
    90     ^self typeXSBoolean
       
    91 
       
    92     "Created: / 07-07-2006 / 16:17:20 / ked"
       
    93     "Modified: / 05-12-2007 / 15:22:42 / janfrog"
       
    94 !
       
    95 
       
    96 typeElement
       
    97 
       
    98     ^TypeElement instance
       
    99 
       
   100     "Created: / 05-12-2007 / 15:55:13 / janfrog"
       
   101 !
       
   102 
       
   103 typeNode
       
   104     ^TypeItem node
       
   105 
       
   106     "Created: / 07-07-2006 / 16:15:39 / ked"
       
   107     "Modified: / 05-12-2007 / 15:20:09 / janfrog"
       
   108 !
       
   109 
       
   110 typeNumber
       
   111     ^#number.
       
   112 
       
   113     "Created: / 07-07-2006 / 20:40:38 / ked"
       
   114 !
       
   115 
       
   116 typeQName
       
   117 
       
   118     <resource: #obsolete>
       
   119     ^self typeXSQName
       
   120 
       
   121     "Created: / 03-09-2006 / 11:53:26 / ked"
       
   122     "Modified: / 05-12-2007 / 15:24:38 / janfrog"
       
   123 !
       
   124 
       
   125 typeString
       
   126     <resource: #obsolete>
       
   127     ^self typeXSString
       
   128 
       
   129     "Created: / 07-07-2006 / 16:17:06 / ked"
       
   130     "Modified: / 05-12-2007 / 15:23:24 / janfrog"
       
   131 !
       
   132 
       
   133 typeXSBoolean
       
   134     ^TypeItem xsBoolean
       
   135 
       
   136     "Created: / 05-12-2007 / 15:22:13 / janfrog"
       
   137 !
       
   138 
       
   139 typeXSDecimal
       
   140 
       
   141     ^TypeXSDecimal instance
       
   142 
       
   143     "Created: / 05-12-2007 / 15:43:52 / janfrog"
       
   144 !
       
   145 
       
   146 typeXSFloat
       
   147 
       
   148     ^TypeItem xsFloat
       
   149 
       
   150     "Created: / 05-12-2007 / 15:15:54 / janfrog"
       
   151 !
       
   152 
       
   153 typeXSInteger
       
   154 
       
   155     ^TypeItem xsInteger
       
   156 
       
   157     "Created: / 05-12-2007 / 15:29:06 / janfrog"
       
   158 !
       
   159 
       
   160 typeXSNCName
       
   161     ^TypeItem xsNCName
       
   162 
       
   163     "Created: / 05-12-2007 / 15:23:03 / janfrog"
       
   164 !
       
   165 
       
   166 typeXSQName
       
   167 
       
   168     ^TypeItem xsQName
       
   169 
       
   170     "Created: / 05-12-2007 / 15:24:38 / janfrog"
       
   171 !
       
   172 
       
   173 typeXSString
       
   174     ^TypeItem xsString
       
   175 
       
   176     "Created: / 07-07-2006 / 16:17:06 / ked"
       
   177     "Modified: / 05-12-2007 / 15:38:47 / janfrog"
       
   178 ! !
       
   179 
       
   180 !XQuerySequenceItem methodsFor:'accessing'!
       
   181 
       
   182 documentAdaptor
       
   183 
       
   184     ^self item documentAdaptor
       
   185 
       
   186     "Created: / 24-10-2007 / 16:08:30 / janfrog"
       
   187 !
       
   188 
       
   189 item
       
   190     ^ item
       
   191 
       
   192     "Created: / 07-07-2006 / 16:18:50 / ked"
       
   193 !
       
   194 
       
   195 item:something
       
   196 
       
   197     self assert: item isNil.
       
   198     item := something.
       
   199 
       
   200     "Created: / 07-07-2006 / 16:18:50 / ked"
       
   201     "Modified: / 07-10-2006 / 22:50:43 / ked"
       
   202 !
       
   203 
       
   204 nodeId
       
   205 
       
   206     ^self item nodeId
       
   207 
       
   208     "Created: / 24-10-2007 / 16:08:35 / janfrog"
       
   209 !
       
   210 
       
   211 stringValue
       
   212 
       
   213     ^self containsAtomicValue 
       
   214         ifTrue:[item printString]
       
   215         ifFalse:[item xpathValue]
       
   216 
       
   217     "Created: / 19-11-2007 / 14:20:59 / janfrog"
       
   218 !
       
   219 
       
   220 type
       
   221 
       
   222     ^"type"item xqueryType
       
   223 
       
   224     "Created: / 07-07-2006 / 16:18:51 / ked"
       
   225     "Modified: / 05-12-2007 / 15:12:13 / janfrog"
       
   226 ! !
       
   227 
       
   228 !XQuerySequenceItem methodsFor:'converting'!
       
   229 
       
   230 asDocumentFragment
       
   231 
       
   232     | domBuilder |
       
   233     domBuilder := XMLv2::DOM3Builder new.
       
   234     XQueryResultXMLReader new
       
   235             setDocumentAdaptor: XPathDocumentAdaptorProxy new;
       
   236             setContentHandler: domBuilder;
       
   237             visit: item.
       
   238     ^domBuilder document
       
   239 
       
   240     "Created: / 10-12-2006 / 20:30:57 / janfrog"
       
   241     "Modified: / 14-12-2006 / 14:59:20 / janfrog"
       
   242 !
       
   243 
       
   244 asString
       
   245 
       
   246     ^item asString
       
   247 
       
   248     "Created: / 12-10-2006 / 17:33:20 / ked"
       
   249 !
       
   250 
       
   251 asXQueryConstructedNode
       
   252 
       
   253     (self type isSubtypeOf: self class typeNode) ifTrue:[^item].
       
   254     (self type isSubtypeOf: self class typeAttribute) ifTrue:[^item].
       
   255 
       
   256     ^XQueryConstructedNode new
       
   257         nodeType: XQueryConstructedNode nodeTypeText;
       
   258         nodeValue: item asString
       
   259 
       
   260     "Created: / 29-03-2007 / 13:37:19 / janfrog"
       
   261     "Modified: / 05-12-2007 / 21:38:30 / janfrog"
       
   262 !
       
   263 
       
   264 value
       
   265 
       
   266     | children |
       
   267 
       
   268     (self type isSubtypeOf: XQuerySequenceItem typeNode) ifTrue:[
       
   269         item xpathIsText ifTrue:[
       
   270             "TODO - pokus o typovou 'heuristiku' na beztypovych datech"
       
   271             ^Object errorSignal
       
   272                 handle:[:ex | ex returnWith:(item xpathValue)]
       
   273                 do:[item xpathValue asNumber].
       
   274         ].
       
   275         item xpathIsAttribute ifTrue:[
       
   276             ^item xpathValue 
       
   277         ] ifFalse:[
       
   278             self assert: item xpathIsElement.
       
   279 
       
   280             children := item xpathChild.
       
   281 
       
   282             children size = 0 ifTrue:[
       
   283                 ^nil.
       
   284             ].
       
   285 
       
   286             self assert: children size = 1.
       
   287             self assert: children first xpathIsText.
       
   288 
       
   289             "TODO - pokus o typovou 'heuristiku' na beztypovych datech"
       
   290             ^Object errorSignal
       
   291                 handle:[:ex | ex returnWith:(children first xpathValue)]
       
   292                 do:[children first xpathValue asNumber].
       
   293         ]
       
   294     ] ifFalse:[
       
   295         ^item
       
   296     ].
       
   297 
       
   298     "Created: / 06-10-2006 / 16:17:20 / ked"
       
   299     "Modified: / 19-10-2006 / 23:11:01 / ked"
       
   300     "Modified: / 05-12-2007 / 16:03:57 / janfrog"
       
   301 ! !
       
   302 
       
   303 !XQuerySequenceItem methodsFor:'initialization & release'!
       
   304 
       
   305 releaseResources
       
   306 
       
   307     ^item releaseResources
       
   308 
       
   309     "Created: / 12-12-2006 / 10:44:07 / janfrog"
       
   310 ! !
       
   311 
       
   312 !XQuerySequenceItem methodsFor:'printing'!
       
   313 
       
   314 printOn: aStream
       
   315 
       
   316     item printOn: aStream.
       
   317     aStream 
       
   318         space;
       
   319         nextPut:$[;
       
   320         nextPutAll:self type printString;
       
   321         nextPut:$].
       
   322 
       
   323     "Created: / 21-03-2007 / 15:41:51 / janfrog"
       
   324     "Modified: / 05-12-2007 / 20:48:26 / janfrog"
       
   325 ! !
       
   326 
       
   327 !XQuerySequenceItem methodsFor:'testing'!
       
   328 
       
   329 containsAtomicValue
       
   330 
       
   331     ^self containsNode not
       
   332 
       
   333     "Created: / 18-11-2007 / 09:34:22 / janfrog"
       
   334 !
       
   335 
       
   336 containsCellStoreNode
       
   337 
       
   338     ^self containsNode and:[item isCellStoreNode]
       
   339 
       
   340     "Created: / 05-12-2007 / 10:06:30 / janfrog"
       
   341 !
       
   342 
       
   343 containsNode
       
   344 
       
   345     ^item isKindOf: XQueryAbstractNode
       
   346 
       
   347     "Created: / 18-11-2007 / 09:34:08 / janfrog"
       
   348 ! !
       
   349 
       
   350 !XQuerySequenceItem class methodsFor:'documentation'!
       
   351 
       
   352 version
       
   353     ^ '$Header: /opt/data/cvs/stx/goodies/xmlsuite/xquery/XQuery__XQuerySequenceItem.st,v 1.10 2007-12-05 21:11:49 vranyj1 Exp $'
       
   354 ! !