VirtualBox

source: vbox/trunk/src/VBox/Main/glue/glue-java.xsl@ 49868

Last change on this file since 49868 was 48005, checked in by vboxsync, 11 years ago

Main/glue/glue-java.xsl: fix the heavily broken "in enum safearray" conversion helper code, both the webservice one (got confused by mixing up the enum names generated by jax-ws and the ones by our wrappers) and the local API one (tried to invoke a private constructor with a totally wrong signature) were totally wrong and probably never worked

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 149.0 KB
Line 
1<xsl:stylesheet version = '1.0'
2 xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
3 xmlns:vbox="http://www.virtualbox.org/"
4 xmlns:exsl="http://exslt.org/common"
5 extension-element-prefixes="exsl">
6
7<!--
8
9 glue-java.xsl:
10 XSLT stylesheet that generates Java glue code for XPCOM, MSCOM and JAX-WS from
11 VirtualBox.xidl.
12
13 Copyright (C) 2010-2013 Oracle Corporation
14
15 This file is part of VirtualBox Open Source Edition (OSE), as
16 available from http://www.virtualbox.org. This file is free software;
17 you can redistribute it and/or modify it under the terms of the GNU
18 General Public License (GPL) as published by the Free Software
19 Foundation, in version 2 as it comes in the "COPYING" file of the
20 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
21 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
22-->
23
24<xsl:output
25 method="text"
26 version="1.0"
27 encoding="utf-8"
28 indent="no"/>
29
30<!-- - - - - - - - - - - - - - - - - - - - - - -
31 global XSLT variables
32 - - - - - - - - - - - - - - - - - - - - - - -->
33
34<xsl:variable name="G_xsltFilename" select="'glue-java.xsl'" />
35<xsl:variable name="G_virtualBoxPackage" select="concat('org.virtualbox', $G_vboxApiSuffix)" />
36<xsl:variable name="G_virtualBoxPackageCom" select="concat('org.virtualbox', $G_vboxApiSuffix, '.', $G_vboxGlueStyle)" />
37<xsl:variable name="G_virtualBoxWsdl" select="concat('&quot;vboxwebService', $G_vboxApiSuffix, '.wsdl&quot;')" />
38<!-- collect all interfaces with "wsmap='suppress'" in a global variable for quick lookup -->
39<xsl:variable name="G_setSuppressedInterfaces"
40 select="//interface[@wsmap='suppress']" />
41
42<xsl:include href="../idl/typemap-shared.inc.xsl" />
43
44<xsl:strip-space elements="*"/>
45
46<xsl:template name="fileheader">
47 <xsl:param name="name" />
48 <xsl:text>/*
49 * Copyright (C) 2010-2013 Oracle Corporation
50 *
51 * This file is part of the VirtualBox SDK, as available from
52 * http://www.virtualbox.org. This library is free software; you can
53 * redistribute it and/or modify it under the terms of the GNU Lesser General
54 * Public License as published by the Free Software Foundation, in version 2.1
55 * as it comes in the "COPYING.LIB" file of the VirtualBox SDK distribution.
56 * This library is distributed in the hope that it will be useful, but WITHOUT
57 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
58 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
59 * License for more details.
60 *
61</xsl:text>
62 <xsl:value-of select="concat(' * ', $name)"/>
63<xsl:text>
64 *
65 * DO NOT EDIT! This is a generated file.
66 * Generated from: src/VBox/Main/idl/VirtualBox.xidl (VirtualBox's interface definitions in XML)
67 * Generator: src/VBox/Main/glue/glue-java.xsl
68 */
69
70</xsl:text>
71</xsl:template>
72
73<xsl:template name="startFile">
74 <xsl:param name="file" />
75 <xsl:param name="package" />
76
77 <xsl:choose>
78 <xsl:when test="$filelistonly=''">
79 <xsl:value-of select="concat('&#10;// ##### BEGINFILE &quot;', $G_vboxDirPrefix, $file, '&quot;&#10;&#10;')" />
80 <xsl:call-template name="fileheader">
81 <xsl:with-param name="name" select="$file" />
82 </xsl:call-template>
83
84 <xsl:value-of select="concat('package ', $package, ';&#10;&#10;')" />
85 <xsl:value-of select="concat('import ', $G_virtualBoxPackageCom, '.*;&#10;')" />
86
87 <xsl:choose>
88 <xsl:when test="$G_vboxGlueStyle='xpcom'">
89 <xsl:text>import org.mozilla.interfaces.*;&#10;</xsl:text>
90 </xsl:when>
91
92 <xsl:when test="$G_vboxGlueStyle='mscom'">
93 <xsl:text>import com.jacob.com.*;&#10;</xsl:text>
94 <xsl:text>import com.jacob.activeX.ActiveXComponent;&#10;</xsl:text>
95 </xsl:when>
96
97 <xsl:when test="$G_vboxGlueStyle='jaxws'">
98 <xsl:text>import javax.xml.ws.*;&#10;</xsl:text>
99 </xsl:when>
100
101 <xsl:otherwise>
102 <xsl:call-template name="fatalError">
103 <xsl:with-param name="msg" select="'no header rule (startFile)'" />
104 </xsl:call-template>
105 </xsl:otherwise>
106 </xsl:choose>
107 </xsl:when>
108 <xsl:otherwise>
109 <xsl:value-of select="concat('&#9;', $G_vboxDirPrefix, $file, ' \&#10;')"/>
110 </xsl:otherwise>
111 </xsl:choose>
112</xsl:template>
113
114<xsl:template name="endFile">
115 <xsl:param name="file" />
116 <xsl:if test="$filelistonly=''">
117 <xsl:value-of select="concat('&#10;// ##### ENDFILE &quot;', $file, '&quot;&#10;&#10;')" />
118 </xsl:if>
119</xsl:template>
120
121
122<xsl:template name="string-replace">
123 <xsl:param name="haystack"/>
124 <xsl:param name="needle"/>
125 <xsl:param name="replacement"/>
126 <xsl:param name="onlyfirst" select="false"/>
127 <xsl:choose>
128 <xsl:when test="contains($haystack, $needle)">
129 <xsl:value-of select="substring-before($haystack, $needle)"/>
130 <xsl:value-of select="$replacement"/>
131 <xsl:choose>
132 <xsl:when test="$onlyfirst = 'true'">
133 <xsl:value-of select="substring-after($haystack, $needle)"/>
134 </xsl:when>
135 <xsl:otherwise>
136 <xsl:call-template name="string-replace">
137 <xsl:with-param name="haystack" select="substring-after($haystack, $needle)"/>
138 <xsl:with-param name="needle" select="$needle"/>
139 <xsl:with-param name="replacement" select="$replacement"/>
140 </xsl:call-template>
141 </xsl:otherwise>
142 </xsl:choose>
143 </xsl:when>
144 <xsl:otherwise>
145 <xsl:value-of select="$haystack"/>
146 </xsl:otherwise>
147 </xsl:choose>
148</xsl:template>
149
150<xsl:template name="string-trim">
151 <xsl:param name="text"/>
152
153 <xsl:variable name="begin" select="substring($text, 1, 1)"/>
154 <xsl:choose>
155 <xsl:when test="$begin = ' ' or $begin = '&#10;' or $begin = '&#13;'">
156 <xsl:call-template name="string-trim">
157 <xsl:with-param name="text" select="substring($text, 2)"/>
158 </xsl:call-template>
159 </xsl:when>
160 <xsl:otherwise>
161 <xsl:variable name="end" select="substring($text, string-length($text) - 1, 1)"/>
162 <xsl:choose>
163 <xsl:when test="$end = ' ' or $end = '&#10;' or $end = '&#13;'">
164 <xsl:call-template name="string-trim">
165 <xsl:with-param name="text" select="substring($text, 1, string-length($text) - 1)"/>
166 </xsl:call-template>
167 </xsl:when>
168 <xsl:otherwise>
169 <xsl:choose>
170 <xsl:when test="contains($text, '&#10; ')">
171 <xsl:variable name="tmptext">
172 <xsl:call-template name="string-replace">
173 <xsl:with-param name="haystack" select="$text"/>
174 <xsl:with-param name="needle" select="'&#10; '"/>
175 <xsl:with-param name="replacement" select="'&#10;'"/>
176 </xsl:call-template>
177 </xsl:variable>
178 <xsl:call-template name="string-trim">
179 <xsl:with-param name="text" select="$tmptext"/>
180 </xsl:call-template>
181 </xsl:when>
182 <xsl:otherwise>
183 <xsl:value-of select="$text"/>
184 </xsl:otherwise>
185 </xsl:choose>
186 </xsl:otherwise>
187 </xsl:choose>
188 </xsl:otherwise>
189 </xsl:choose>
190</xsl:template>
191
192<!-- descriptions -->
193
194<xsl:template match="*/text()">
195 <!-- TODO: strip out @c/@a for now. long term solution is changing that to a
196 tag in the xidl file, and translate it when generating doxygen etc. -->
197 <xsl:variable name="rep1">
198 <xsl:call-template name="string-replace">
199 <xsl:with-param name="haystack" select="."/>
200 <xsl:with-param name="needle" select="'@c'"/>
201 <xsl:with-param name="replacement" select="''"/>
202 </xsl:call-template>
203 </xsl:variable>
204
205 <xsl:variable name="rep2">
206 <xsl:call-template name="string-replace">
207 <xsl:with-param name="haystack" select="$rep1"/>
208 <xsl:with-param name="needle" select="'@a'"/>
209 <xsl:with-param name="replacement" select="''"/>
210 </xsl:call-template>
211 </xsl:variable>
212
213 <xsl:variable name="rep3">
214 <xsl:call-template name="string-replace">
215 <xsl:with-param name="haystack" select="$rep2"/>
216 <xsl:with-param name="needle" select="'@todo'"/>
217 <xsl:with-param name="replacement" select="'TODO'"/>
218 </xsl:call-template>
219 </xsl:variable>
220
221 <xsl:variable name="rep4">
222 <xsl:call-template name="string-trim">
223 <xsl:with-param name="text" select="$rep3"/>
224 </xsl:call-template>
225 </xsl:variable>
226
227 <xsl:value-of select="$rep4"/>
228</xsl:template>
229
230<!--
231 * all sub-elements that are not explicitly matched are considered to be
232 * html tags and copied w/o modifications
233-->
234<xsl:template match="desc//*">
235 <xsl:variable name="tagname" select="local-name()"/>
236 <xsl:value-of select="concat('&lt;', $tagname, '&gt;')"/>
237 <xsl:apply-templates/>
238 <xsl:value-of select="concat('&lt;/', $tagname, '&gt;')"/>
239</xsl:template>
240
241<xsl:template name="emit_refsig">
242 <xsl:param name="context"/>
243 <xsl:param name="identifier"/>
244
245 <xsl:choose>
246 <xsl:when test="//enum[@name=$context]/const[@name=$identifier]">
247 <xsl:value-of select="$identifier"/>
248 </xsl:when>
249 <xsl:when test="//interface[@name=$context]/method[@name=$identifier]">
250 <xsl:value-of select="$identifier"/>
251 <xsl:text>(</xsl:text>
252 <xsl:for-each select="//interface[@name=$context]/method[@name=$identifier]/param">
253 <xsl:if test="@dir!='return'">
254 <xsl:if test="position() > 1">
255 <xsl:text>,</xsl:text>
256 </xsl:if>
257 <xsl:choose>
258 <xsl:when test="@dir='out'">
259 <xsl:text>Holder</xsl:text>
260 </xsl:when>
261 <xsl:otherwise>
262 <xsl:call-template name="typeIdl2Glue">
263 <xsl:with-param name="type" select="@type"/>
264 <xsl:with-param name="safearray" select="@safearray"/>
265 <xsl:with-param name="skiplisttype" select="'yes'"/>
266 </xsl:call-template>
267 </xsl:otherwise>
268 </xsl:choose>
269 </xsl:if>
270 </xsl:for-each>
271 <xsl:text>)</xsl:text>
272 </xsl:when>
273 <xsl:when test="//interface[@name=$context]/attribute[@name=$identifier]">
274 <xsl:call-template name="makeGetterName">
275 <xsl:with-param name="attrname" select="$identifier" />
276 </xsl:call-template>
277 <xsl:text>()</xsl:text>
278 </xsl:when>
279 <xsl:otherwise>
280 <xsl:call-template name="fatalError">
281 <xsl:with-param name="msg" select="concat('unknown reference destination in @see/@link: context=', $context, ' identifier=', $identifier)" />
282 </xsl:call-template>
283 </xsl:otherwise>
284 </xsl:choose>
285</xsl:template>
286
287<!--
288 * link
289-->
290<xsl:template match="desc//link">
291 <xsl:text>{@link </xsl:text>
292 <xsl:apply-templates select="." mode="middle"/>
293 <xsl:text>}</xsl:text>
294</xsl:template>
295
296<xsl:template match="link" mode="middle">
297 <xsl:variable name="linktext">
298 <xsl:call-template name="string-replace">
299 <xsl:with-param name="haystack" select="@to"/>
300 <xsl:with-param name="needle" select="'_'"/>
301 <xsl:with-param name="replacement" select="'#'"/>
302 <xsl:with-param name="onlyfirst" select="'true'"/>
303 </xsl:call-template>
304 </xsl:variable>
305 <xsl:choose>
306 <xsl:when test="substring($linktext, 1, 1)='#'">
307 <xsl:variable name="context">
308 <xsl:choose>
309 <xsl:when test="local-name(../..)='interface' or local-name(../..)='enum'">
310 <xsl:value-of select="../../@name"/>
311 </xsl:when>
312 <xsl:when test="local-name(../../..)='interface' or local-name(../../..)='enum'">
313 <xsl:value-of select="../../../@name"/>
314 </xsl:when>
315 <xsl:when test="local-name(../../../..)='interface' or local-name(../../../..)='enum'">
316 <xsl:value-of select="../../../../@name"/>
317 </xsl:when>
318 <xsl:when test="local-name(../../../../..)='interface' or local-name(../../../../..)='enum'">
319 <xsl:value-of select="../../../../../@name"/>
320 </xsl:when>
321 <xsl:when test="local-name(../../../../../..)='interface' or local-name(../../../../../..)='enum'">
322 <xsl:value-of select="../../../../../../@name"/>
323 </xsl:when>
324 <xsl:otherwise>
325 <xsl:call-template name="fatalError">
326 <xsl:with-param name="msg" select="concat('cannot determine context for identifier ', $linktext)" />
327 </xsl:call-template>
328 </xsl:otherwise>
329 </xsl:choose>
330 </xsl:variable>
331 <xsl:variable name="linkname">
332 <xsl:value-of select="substring($linktext, 2)"/>
333 </xsl:variable>
334 <xsl:text>#</xsl:text>
335 <xsl:call-template name="emit_refsig">
336 <xsl:with-param name="context" select="$context"/>
337 <xsl:with-param name="identifier" select="$linkname"/>
338 </xsl:call-template>
339 </xsl:when>
340 <xsl:when test="contains($linktext, '::')">
341 <xsl:variable name="context">
342 <xsl:value-of select="substring-before($linktext, '::')"/>
343 </xsl:variable>
344 <xsl:variable name="linkname">
345 <xsl:value-of select="substring-after($linktext, '::')"/>
346 </xsl:variable>
347 <xsl:value-of select="concat($G_virtualBoxPackage, '.', $context, '#')"/>
348 <xsl:call-template name="emit_refsig">
349 <xsl:with-param name="context" select="$context"/>
350 <xsl:with-param name="identifier" select="$linkname"/>
351 </xsl:call-template>
352 </xsl:when>
353 <xsl:otherwise>
354 <xsl:value-of select="concat($G_virtualBoxPackage, '.', $linktext)"/>
355 </xsl:otherwise>
356 </xsl:choose>
357</xsl:template>
358<!--
359 * note
360-->
361<xsl:template match="desc/note">
362 <xsl:if test="not(@internal='yes')">
363 <xsl:text>&#10;NOTE: </xsl:text>
364 <xsl:apply-templates/>
365 <xsl:text>&#10;</xsl:text>
366 </xsl:if>
367</xsl:template>
368
369<!--
370 * see
371-->
372<xsl:template match="desc/see">
373 <!-- TODO: quirk in our xidl file: only one <see> tag with <link> nested
374 into it, translate this to multiple @see lines and strip the rest.
375 Should be replaced in the xidl by multiple <see> without nested tag -->
376 <xsl:text>&#10;</xsl:text>
377 <xsl:apply-templates match="link"/>
378</xsl:template>
379
380<xsl:template match="desc/see/text()"/>
381
382<xsl:template match="desc/see/link">
383 <xsl:text>@see </xsl:text>
384 <xsl:apply-templates select="." mode="middle"/>
385 <xsl:text>&#10;</xsl:text>
386</xsl:template>
387
388<!--
389 * common comment prologue (handles group IDs)
390-->
391<xsl:template match="desc" mode="begin">
392 <xsl:param name="id" select="@group | preceding::descGroup[1]/@id"/>
393 <xsl:text>&#10;/**&#10;</xsl:text>
394 <xsl:if test="$id">
395 <xsl:value-of select="concat(' @ingroup ', $id, '&#10;')"/>
396 </xsl:if>
397</xsl:template>
398
399<!--
400 * common middle part of the comment block
401-->
402<xsl:template match="desc" mode="middle">
403 <xsl:apply-templates select="text() | *[not(self::note or self::see)]"/>
404 <xsl:apply-templates select="note"/>
405 <xsl:apply-templates select="see"/>
406</xsl:template>
407
408<!--
409 * result part of the comment block
410-->
411<xsl:template match="desc" mode="results">
412 <xsl:if test="result">
413 <xsl:text>&#10;Expected result codes:&#10;</xsl:text>
414 <xsl:text>&lt;table&gt;&#10;</xsl:text>
415 <xsl:for-each select="result">
416 <xsl:text>&lt;tr&gt;</xsl:text>
417 <xsl:choose>
418 <xsl:when test="ancestor::library/result[@name=current()/@name]">
419 <xsl:value-of select="concat('&lt;td&gt;@link ::', @name, ' ', @name, '&lt;/td&gt;')"/>
420 </xsl:when>
421 <xsl:otherwise>
422 <xsl:value-of select="concat('&lt;td&gt;', @name, '&lt;/td&gt;')"/>
423 </xsl:otherwise>
424 </xsl:choose>
425 <xsl:text>&lt;td&gt;</xsl:text>
426 <xsl:apply-templates select="text() | *[not(self::note or self::see or
427 self::result)]"/>
428 <xsl:text>&lt;/td&gt;&lt;tr&gt;&#10;</xsl:text>
429 </xsl:for-each>
430 <xsl:text>&lt;/table&gt;&#10;</xsl:text>
431 </xsl:if>
432</xsl:template>
433
434<!--
435 * translates the string to uppercase
436-->
437<xsl:template name="uppercase">
438 <xsl:param name="str" select="."/>
439 <xsl:value-of select="translate($str, $G_lowerCase, $G_upperCase)"/>
440</xsl:template>
441
442<!--
443 * comment for interfaces
444-->
445<xsl:template match="desc" mode="interface">
446 <xsl:apply-templates select="." mode="begin"/>
447 <xsl:apply-templates select="." mode="middle"/>
448 <xsl:text>&#10;Interface ID: &lt;tt&gt;{</xsl:text>
449 <xsl:call-template name="uppercase">
450 <xsl:with-param name="str" select="../@uuid"/>
451 </xsl:call-template>
452 <xsl:text>}&lt;/tt&gt;&#10;*/&#10;</xsl:text>
453</xsl:template>
454
455<!--
456 * comment for attribute getters
457-->
458<xsl:template match="desc" mode="attribute_get">
459 <xsl:apply-templates select="." mode="begin"/>
460 <xsl:apply-templates select="text() | *[not(self::note or self::see or self::result)]"/>
461 <xsl:apply-templates select="." mode="results"/>
462 <xsl:apply-templates select="note"/>
463 <xsl:text>&#10;@return </xsl:text>
464 <xsl:call-template name="typeIdl2Glue">
465 <xsl:with-param name="type" select="../@type"/>
466 <xsl:with-param name="safearray" select="../@safearray"/>
467 </xsl:call-template>
468 <xsl:text>&#10;</xsl:text>
469 <xsl:apply-templates select="see"/>
470 <xsl:text>*/&#10;</xsl:text>
471</xsl:template>
472
473<!--
474 * comment for attribute setters
475-->
476<xsl:template match="desc" mode="attribute_set">
477 <xsl:apply-templates select="." mode="begin"/>
478 <xsl:apply-templates select="text() | *[not(self::note or self::see or self::result)]"/>
479 <xsl:apply-templates select="." mode="results"/>
480 <xsl:apply-templates select="note"/>
481 <xsl:text>&#10;@param value </xsl:text>
482 <xsl:call-template name="typeIdl2Glue">
483 <xsl:with-param name="type" select="../@type"/>
484 <xsl:with-param name="safearray" select="../@safearray"/>
485 </xsl:call-template>
486 <xsl:text>&#10;</xsl:text>
487 <xsl:apply-templates select="see"/>
488 <xsl:text>&#10;*/&#10;</xsl:text>
489</xsl:template>
490
491<!--
492 * comment for methods
493-->
494<xsl:template match="desc" mode="method">
495 <xsl:apply-templates select="." mode="begin"/>
496 <xsl:apply-templates select="text() | *[not(self::note or self::see or self::result)]"/>
497 <xsl:for-each select="../param">
498 <xsl:apply-templates select="desc"/>
499 </xsl:for-each>
500 <xsl:apply-templates select="." mode="results"/>
501 <xsl:apply-templates select="note"/>
502 <xsl:apply-templates select="../param/desc/note"/>
503 <xsl:apply-templates select="see"/>
504 <xsl:text>&#10;*/&#10;</xsl:text>
505</xsl:template>
506
507<!--
508 * comment for method parameters
509-->
510<xsl:template match="method/param/desc">
511 <xsl:if test="text() | *[not(self::note or self::see)]">
512 <xsl:choose>
513 <xsl:when test="../@dir='return'">
514 <xsl:text>&#10;@return </xsl:text>
515 </xsl:when>
516 <xsl:otherwise>
517 <xsl:text>&#10;@param </xsl:text>
518 <xsl:value-of select="../@name"/>
519 <xsl:text> </xsl:text>
520 </xsl:otherwise>
521 </xsl:choose>
522 <xsl:apply-templates select="text() | *[not(self::note or self::see)]"/>
523 <xsl:text>&#10;</xsl:text>
524 </xsl:if>
525</xsl:template>
526
527<!--
528 * comment for enums
529-->
530<xsl:template match="desc" mode="enum">
531 <xsl:apply-templates select="." mode="begin"/>
532 <xsl:apply-templates select="." mode="middle"/>
533 <xsl:text>&#10;Interface ID: &lt;tt&gt;{</xsl:text>
534 <xsl:call-template name="uppercase">
535 <xsl:with-param name="str" select="../@uuid"/>
536 </xsl:call-template>
537 <xsl:text>}&lt;/tt&gt;&#10;*/&#10;</xsl:text>
538</xsl:template>
539
540<!--
541 * comment for enum values
542-->
543<xsl:template match="desc" mode="enum_const">
544 <xsl:apply-templates select="." mode="begin"/>
545 <xsl:apply-templates select="." mode="middle"/>
546 <xsl:text>&#10;*/&#10;</xsl:text>
547</xsl:template>
548
549<!--
550 * ignore descGroups by default (processed in /idl)
551-->
552<xsl:template match="descGroup"/>
553
554
555
556<!-- actual code generation -->
557
558<xsl:template name="genEnum">
559 <xsl:param name="enumname" />
560 <xsl:param name="filename" />
561
562 <xsl:call-template name="startFile">
563 <xsl:with-param name="file" select="$filename" />
564 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
565 </xsl:call-template>
566
567 <xsl:if test="$filelistonly=''">
568 <xsl:apply-templates select="desc" mode="enum"/>
569 <xsl:value-of select="concat('public enum ', $enumname, '&#10;')" />
570 <xsl:text>{&#10;</xsl:text>
571 <xsl:for-each select="const">
572 <xsl:apply-templates select="desc" mode="enum_const"/>
573 <xsl:variable name="enumconst" select="@name" />
574 <xsl:value-of select="concat(' ', $enumconst, '(', @value, ')')" />
575 <xsl:choose>
576 <xsl:when test="not(position()=last())">
577 <xsl:text>,&#10;</xsl:text>
578 </xsl:when>
579 <xsl:otherwise>
580 <xsl:text>;&#10;</xsl:text>
581 </xsl:otherwise>
582 </xsl:choose>
583 </xsl:for-each>
584
585 <xsl:text>&#10;</xsl:text>
586 <xsl:text> private final int value;&#10;&#10;</xsl:text>
587
588 <xsl:value-of select="concat(' ', $enumname, '(int v)&#10;')" />
589 <xsl:text> {&#10;</xsl:text>
590 <xsl:text> value = v;&#10;</xsl:text>
591 <xsl:text> }&#10;&#10;</xsl:text>
592
593 <xsl:text> public int value()&#10;</xsl:text>
594 <xsl:text> {&#10;</xsl:text>
595 <xsl:text> return value;&#10;</xsl:text>
596 <xsl:text> }&#10;&#10;</xsl:text>
597
598 <xsl:value-of select="concat(' public static ', $enumname, ' fromValue(long v)&#10;')" />
599 <xsl:text> {&#10;</xsl:text>
600 <xsl:value-of select="concat(' for (', $enumname, ' c: ', $enumname, '.values())&#10;')" />
601 <xsl:text> {&#10;</xsl:text>
602 <xsl:text> if (c.value == (int)v)&#10;</xsl:text>
603 <xsl:text> {&#10;</xsl:text>
604 <xsl:text> return c;&#10;</xsl:text>
605 <xsl:text> }&#10;</xsl:text>
606 <xsl:text> }&#10;</xsl:text>
607 <xsl:text> throw new IllegalArgumentException(Long.toString(v));&#10;</xsl:text>
608 <xsl:text> }&#10;&#10;</xsl:text>
609
610 <xsl:value-of select="concat(' public static ', $enumname, ' fromValue(String v)&#10;')" />
611 <xsl:text> {&#10;</xsl:text>
612 <xsl:value-of select="concat(' return valueOf(', $enumname, '.class, v);&#10;')" />
613 <xsl:text> }&#10;</xsl:text>
614 <xsl:text>}&#10;&#10;</xsl:text>
615 </xsl:if>
616
617 <xsl:call-template name="endFile">
618 <xsl:with-param name="file" select="$filename" />
619 </xsl:call-template>
620
621</xsl:template>
622
623<xsl:template name="startExcWrapper">
624 <xsl:text> try&#10;</xsl:text>
625 <xsl:text> {&#10;</xsl:text>
626</xsl:template>
627
628<xsl:template name="endExcWrapper">
629
630 <xsl:choose>
631 <xsl:when test="$G_vboxGlueStyle='xpcom'">
632 <xsl:text> }&#10;</xsl:text>
633 <xsl:text> catch (org.mozilla.xpcom.XPCOMException e)&#10;</xsl:text>
634 <xsl:text> {&#10;</xsl:text>
635 <xsl:text> throw new VBoxException(e.getMessage(), e);&#10;</xsl:text>
636 <xsl:text> }&#10;</xsl:text>
637 </xsl:when>
638
639 <xsl:when test="$G_vboxGlueStyle='mscom'">
640 <xsl:text> }&#10;</xsl:text>
641 <xsl:text> catch (com.jacob.com.ComException e)&#10;</xsl:text>
642 <xsl:text> {&#10;</xsl:text>
643 <xsl:text> throw new VBoxException(e.getMessage(), e);&#10;</xsl:text>
644 <xsl:text> }&#10;</xsl:text>
645 </xsl:when>
646
647 <xsl:when test="$G_vboxGlueStyle='jaxws'">
648 <xsl:text> }&#10;</xsl:text>
649 <xsl:text> catch (InvalidObjectFaultMsg e)&#10;</xsl:text>
650 <xsl:text> {&#10;</xsl:text>
651 <xsl:text> throw new VBoxException(e.getMessage(), e, this.port);&#10;</xsl:text>
652 <xsl:text> }&#10;</xsl:text>
653 <xsl:text> catch (RuntimeFaultMsg e)&#10;</xsl:text>
654 <xsl:text> {&#10;</xsl:text>
655 <xsl:text> throw new VBoxException(e.getMessage(), e, this.port);&#10;</xsl:text>
656 <xsl:text> }&#10;</xsl:text>
657 </xsl:when>
658
659 <xsl:otherwise>
660 <xsl:call-template name="fatalError">
661 <xsl:with-param name="msg" select="'no header rule (startFile)'" />
662 </xsl:call-template>
663 </xsl:otherwise>
664 </xsl:choose>
665</xsl:template>
666
667<xsl:template name="wrappedName">
668 <xsl:param name="ifname" />
669
670 <xsl:choose>
671 <xsl:when test="$G_vboxGlueStyle='xpcom'">
672 <xsl:value-of select="concat('org.mozilla.interfaces.', $ifname)" />
673 </xsl:when>
674
675 <xsl:when test="$G_vboxGlueStyle='mscom'">
676 <xsl:text>com.jacob.com.Dispatch</xsl:text>
677 </xsl:when>
678
679 <xsl:when test="$G_vboxGlueStyle='jaxws'">
680 <xsl:text>String</xsl:text>
681 </xsl:when>
682
683 <xsl:otherwise>
684 <xsl:call-template name="fatalError">
685 <xsl:with-param name="msg" select="'no wrapper naming rule defined (wrappedName)'" />
686 </xsl:call-template>
687 </xsl:otherwise>
688
689 </xsl:choose>
690</xsl:template>
691
692<xsl:template name="fullClassName">
693 <xsl:param name="name" />
694 <xsl:param name="origname" />
695 <xsl:param name="collPrefix" />
696
697 <xsl:choose>
698 <xsl:when test="//enum[@name=$name] or //enum[@name=$origname]">
699 <xsl:value-of select="concat($G_virtualBoxPackage, concat('.', $name))" />
700 </xsl:when>
701 <xsl:when test="//interface[@name=$name]">
702 <xsl:value-of select="concat($G_virtualBoxPackage, concat('.', $name))" />
703 </xsl:when>
704 <xsl:otherwise>
705 <xsl:call-template name="fatalError">
706 <xsl:with-param name="msg" select="concat('fullClassName: Type &quot;', $name, '&quot; is not supported.')" />
707 </xsl:call-template>
708 </xsl:otherwise>
709 </xsl:choose>
710</xsl:template>
711
712<xsl:template name="typeIdl2Glue">
713 <xsl:param name="type" />
714 <xsl:param name="safearray" />
715 <xsl:param name="forceelem" />
716 <xsl:param name="skiplisttype" />
717
718 <xsl:variable name="needarray" select="($safearray='yes') and not($forceelem='yes')" />
719 <xsl:variable name="needlist" select="($needarray) and not($type='octet')" />
720
721 <xsl:if test="($needlist)">
722 <xsl:text>List</xsl:text>
723 <xsl:if test="not($skiplisttype='yes')">
724 <xsl:text>&lt;</xsl:text>
725 </xsl:if>
726 </xsl:if>
727
728 <xsl:if test="not($needlist) or not($skiplisttype='yes')">
729 <!-- look up Java type from IDL type from table array in typemap-shared.inc.xsl -->
730 <xsl:variable name="javatypefield" select="exsl:node-set($G_aSharedTypes)/type[@idlname=$type]/@javaname" />
731
732 <xsl:choose>
733 <xsl:when test="string-length($javatypefield)">
734 <xsl:value-of select="$javatypefield" />
735 </xsl:when>
736 <!-- not a standard type: then it better be one of the types defined in the XIDL -->
737 <xsl:when test="$type='$unknown'">IUnknown</xsl:when>
738 <xsl:otherwise>
739 <xsl:call-template name="fullClassName">
740 <xsl:with-param name="name" select="$type" />
741 <xsl:with-param name="collPrefix" select="''"/>
742 </xsl:call-template>
743 </xsl:otherwise>
744 </xsl:choose>
745 </xsl:if>
746
747 <xsl:choose>
748 <xsl:when test="($needlist)">
749 <xsl:if test="not($skiplisttype='yes')">
750 <xsl:text>&gt;</xsl:text>
751 </xsl:if>
752 </xsl:when>
753 <xsl:when test="($needarray)">
754 <xsl:text>[]</xsl:text>
755 </xsl:when>
756 </xsl:choose>
757</xsl:template>
758
759<!--
760 typeIdl2Back: converts $type into a type as used by the backend.
761 -->
762<xsl:template name="typeIdl2Back">
763 <xsl:param name="type" />
764 <xsl:param name="safearray" />
765 <xsl:param name="forceelem" />
766
767 <xsl:choose>
768 <xsl:when test="($G_vboxGlueStyle='xpcom')">
769 <xsl:variable name="needarray" select="($safearray='yes') and not($forceelem='yes')" />
770
771 <xsl:choose>
772 <xsl:when test="$type='long long'">
773 <xsl:text>long</xsl:text>
774 </xsl:when>
775
776 <xsl:when test="$type='unsigned long'">
777 <xsl:text>long</xsl:text>
778 </xsl:when>
779
780 <xsl:when test="$type='long'">
781 <xsl:text>int</xsl:text>
782 </xsl:when>
783
784 <xsl:when test="$type='unsigned short'">
785 <xsl:text>int</xsl:text>
786 </xsl:when>
787
788 <xsl:when test="$type='short'">
789 <xsl:text>short</xsl:text>
790 </xsl:when>
791
792 <xsl:when test="$type='octet'">
793 <xsl:text>byte</xsl:text>
794 </xsl:when>
795
796 <xsl:when test="$type='boolean'">
797 <xsl:text>boolean</xsl:text>
798 </xsl:when>
799
800 <xsl:when test="$type='$unknown'">
801 <xsl:text>nsISupports</xsl:text>
802 </xsl:when>
803
804 <xsl:when test="$type='wstring'">
805 <xsl:text>String</xsl:text>
806 </xsl:when>
807
808 <xsl:when test="$type='uuid'">
809 <xsl:text>String</xsl:text>
810 </xsl:when>
811
812 <xsl:when test="//interface[@name=$type]/@wsmap='struct'">
813 <xsl:call-template name="wrappedName">
814 <xsl:with-param name="ifname" select="$type" />
815 </xsl:call-template>
816 </xsl:when>
817
818 <xsl:when test="//interface[@name=$type]">
819 <xsl:call-template name="wrappedName">
820 <xsl:with-param name="ifname" select="$type" />
821 </xsl:call-template>
822 </xsl:when>
823
824 <xsl:when test="//enum[@name=$type]">
825 <xsl:text>long</xsl:text>
826 </xsl:when>
827
828 <xsl:otherwise>
829 <xsl:call-template name="fullClassName">
830 <xsl:with-param name="name" select="$type" />
831 </xsl:call-template>
832 </xsl:otherwise>
833
834 </xsl:choose>
835 <xsl:if test="$needarray">
836 <xsl:text>[]</xsl:text>
837 </xsl:if>
838 </xsl:when>
839
840 <xsl:when test="($G_vboxGlueStyle='mscom')">
841 <xsl:text>Variant</xsl:text>
842 </xsl:when>
843
844 <xsl:when test="($G_vboxGlueStyle='jaxws')">
845 <xsl:variable name="needarray" select="($safearray='yes' and not($type='octet')) and not($forceelem='yes')" />
846
847 <xsl:if test="$needarray">
848 <xsl:text>List&lt;</xsl:text>
849 </xsl:if>
850 <xsl:choose>
851 <xsl:when test="$type='$unknown'">
852 <xsl:text>String</xsl:text>
853 </xsl:when>
854
855 <xsl:when test="//interface[@name=$type]/@wsmap='managed'">
856 <xsl:text>String</xsl:text>
857 </xsl:when>
858
859 <xsl:when test="//interface[@name=$type]/@wsmap='struct'">
860 <xsl:value-of select="concat($G_virtualBoxPackageCom, '.', $type)" />
861 </xsl:when>
862
863 <xsl:when test="//enum[@name=$type]">
864 <xsl:value-of select="concat($G_virtualBoxPackageCom, '.', $type)" />
865 </xsl:when>
866
867 <!-- we encode byte arrays as Base64 strings. -->
868 <xsl:when test="$type='octet'">
869 <xsl:text>/*base64*/String</xsl:text>
870 </xsl:when>
871
872 <xsl:when test="$type='long long'">
873 <xsl:text>Long</xsl:text>
874 </xsl:when>
875
876 <xsl:when test="$type='unsigned long'">
877 <xsl:text>Long</xsl:text>
878 </xsl:when>
879
880 <xsl:when test="$type='long'">
881 <xsl:text>Integer</xsl:text>
882 </xsl:when>
883
884 <xsl:when test="$type='unsigned short'">
885 <xsl:text>Integer</xsl:text>
886 </xsl:when>
887
888 <xsl:when test="$type='short'">
889 <xsl:text>Short</xsl:text>
890 </xsl:when>
891
892 <xsl:when test="$type='boolean'">
893 <xsl:text>Boolean</xsl:text>
894 </xsl:when>
895
896 <xsl:when test="$type='wstring'">
897 <xsl:text>String</xsl:text>
898 </xsl:when>
899
900 <xsl:when test="$type='uuid'">
901 <xsl:text>String</xsl:text>
902 </xsl:when>
903
904 <xsl:otherwise>
905 <xsl:call-template name="fatalError">
906 <xsl:with-param name="msg" select="concat('Unhandled type ', $type, ' (typeIdl2Back)')" />
907 </xsl:call-template>
908 </xsl:otherwise>
909
910 </xsl:choose>
911
912 <xsl:if test="$needarray">
913 <xsl:text>&gt;</xsl:text>
914 </xsl:if>
915 </xsl:when>
916
917 <xsl:otherwise>
918 <xsl:call-template name="fatalError">
919 <xsl:with-param name="msg" select="'Write typeIdl2Back for this style (typeIdl2Back)'" />
920 </xsl:call-template>
921 </xsl:otherwise>
922
923 </xsl:choose>
924</xsl:template>
925
926<xsl:template name="cookOutParamXpcom">
927 <xsl:param name="value"/>
928 <xsl:param name="idltype"/>
929 <xsl:param name="safearray"/>
930 <xsl:variable name="isstruct"
931 select="//interface[@name=$idltype]/@wsmap='struct'" />
932
933 <xsl:variable name="gluetype">
934 <xsl:call-template name="typeIdl2Glue">
935 <xsl:with-param name="type" select="$idltype" />
936 <xsl:with-param name="safearray" select="$safearray" />
937 </xsl:call-template>
938 </xsl:variable>
939
940 <xsl:variable name="elemgluetype">
941 <xsl:if test="$safearray='yes'">
942 <xsl:call-template name="typeIdl2Glue">
943 <xsl:with-param name="type" select="$idltype" />
944 <xsl:with-param name="safearray" select="'no'" />
945 <xsl:with-param name="forceelem" select="'yes'" />
946 </xsl:call-template>
947 </xsl:if>
948 </xsl:variable>
949
950 <xsl:choose>
951 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
952 <xsl:choose>
953 <xsl:when test="$safearray='yes'">
954 <xsl:variable name="elembacktype">
955 <xsl:call-template name="typeIdl2Back">
956 <xsl:with-param name="type" select="$idltype" />
957 <xsl:with-param name="safearray" select="$safearray" />
958 <xsl:with-param name="forceelem" select="'yes'" />
959 </xsl:call-template>
960 </xsl:variable>
961 <xsl:value-of select="concat('Helper.wrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
962 </xsl:when>
963 <xsl:otherwise>
964 <xsl:value-of select="concat('(', $value, ' != null) ? new ', $gluetype, '(', $value, ') : null')" />
965 </xsl:otherwise>
966 </xsl:choose>
967 </xsl:when>
968
969 <xsl:when test="//enum[@name=$idltype]">
970 <xsl:choose>
971 <xsl:when test="$safearray='yes'">
972 <xsl:variable name="elembacktype">
973 <xsl:call-template name="typeIdl2Back">
974 <xsl:with-param name="type" select="$idltype" />
975 <xsl:with-param name="safearray" select="$safearray" />
976 <xsl:with-param name="forceelem" select="'yes'" />
977 </xsl:call-template>
978 </xsl:variable>
979 <xsl:value-of select="concat('Helper.wrapEnum(', $elemgluetype, '.class, ', $value, ')')"/>
980 </xsl:when>
981 <xsl:otherwise>
982 <xsl:value-of select="concat($gluetype, '.fromValue(', $value, ')')"/>
983 </xsl:otherwise>
984 </xsl:choose>
985 </xsl:when>
986
987 <xsl:otherwise>
988 <xsl:choose>
989 <xsl:when test="($safearray='yes') and ($idltype='octet')">
990 <xsl:value-of select="$value"/>
991 </xsl:when>
992 <xsl:when test="$safearray='yes'">
993 <xsl:value-of select="concat('Helper.wrap(', $value, ')')"/>
994 </xsl:when>
995 <xsl:otherwise>
996 <xsl:value-of select="$value"/>
997 </xsl:otherwise>
998 </xsl:choose>
999 </xsl:otherwise>
1000 </xsl:choose>
1001</xsl:template>
1002
1003<xsl:template name="cookOutParamMscom">
1004 <xsl:param name="value"/>
1005 <xsl:param name="idltype"/>
1006 <xsl:param name="safearray"/>
1007
1008 <xsl:variable name="gluetype">
1009 <xsl:call-template name="typeIdl2Glue">
1010 <xsl:with-param name="type" select="$idltype" />
1011 <xsl:with-param name="safearray" select="$safearray" />
1012 </xsl:call-template>
1013 </xsl:variable>
1014
1015 <xsl:choose>
1016 <xsl:when test="$safearray='yes'">
1017 <xsl:variable name="elemgluetype">
1018 <xsl:call-template name="typeIdl2Glue">
1019 <xsl:with-param name="type" select="$idltype" />
1020 <xsl:with-param name="safearray" select="'no'" />
1021 <xsl:with-param name="forceelem" select="'yes'" />
1022 </xsl:call-template>
1023 </xsl:variable>
1024 <xsl:choose>
1025 <xsl:when test="($idltype='octet')">
1026 <xsl:value-of select="concat('Helper.wrapBytes(', $value, '.toSafeArray())')"/>
1027 </xsl:when>
1028 <xsl:otherwise>
1029 <xsl:value-of select="concat('Helper.wrap(', $elemgluetype, '.class, ', $value, '.toSafeArray())')"/>
1030 </xsl:otherwise>
1031 </xsl:choose>
1032 </xsl:when>
1033
1034 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
1035 <xsl:value-of select="concat('Helper.wrapDispatch(', $gluetype, '.class, ', $value, '.getDispatch())')"/>
1036 </xsl:when>
1037
1038 <xsl:when test="//enum[@name=$idltype]">
1039 <xsl:value-of select="concat($gluetype, '.fromValue(', $value, '.getInt())')"/>
1040 </xsl:when>
1041
1042 <xsl:when test="$idltype='wstring'">
1043 <xsl:value-of select="concat($value, '.getString()')"/>
1044 </xsl:when>
1045
1046 <xsl:when test="$idltype='uuid'">
1047 <xsl:value-of select="concat($value, '.getString()')"/>
1048 </xsl:when>
1049
1050 <xsl:when test="$idltype='boolean'">
1051 <xsl:value-of select="concat($value, '.toBoolean()')"/>
1052 </xsl:when>
1053
1054 <xsl:when test="$idltype='unsigned short'">
1055 <xsl:value-of select="concat('(int)', $value, '.getShort()')"/>
1056 </xsl:when>
1057
1058 <xsl:when test="$idltype='short'">
1059 <xsl:value-of select="concat($value, '.getShort()')"/>
1060 </xsl:when>
1061
1062 <xsl:when test="$idltype='long'">
1063 <xsl:value-of select="concat($value, '.getInt()')"/>
1064 </xsl:when>
1065
1066
1067 <xsl:when test="$idltype='unsigned long'">
1068 <xsl:value-of select="concat('(long)', $value, '.getInt()')"/>
1069 </xsl:when>
1070
1071 <xsl:when test="$idltype='long'">
1072 <xsl:value-of select="concat($value, '.getInt()')"/>
1073 </xsl:when>
1074
1075 <xsl:when test="$idltype='long long'">
1076 <xsl:value-of select="concat($value, '.getLong()')"/>
1077 </xsl:when>
1078
1079 <xsl:otherwise>
1080 <xsl:call-template name="fatalError">
1081 <xsl:with-param name="msg" select="concat('Unhandled type' , $idltype, ' (cookOutParamMscom)')" />
1082 </xsl:call-template>
1083 </xsl:otherwise>
1084 </xsl:choose>
1085
1086</xsl:template>
1087
1088<xsl:template name="cookOutParamJaxws">
1089 <xsl:param name="value"/>
1090 <xsl:param name="idltype"/>
1091 <xsl:param name="safearray"/>
1092
1093 <xsl:variable name="isstruct"
1094 select="//interface[@name=$idltype]/@wsmap='struct'" />
1095
1096 <xsl:variable name="gluetype">
1097 <xsl:call-template name="typeIdl2Glue">
1098 <xsl:with-param name="type" select="$idltype" />
1099 <xsl:with-param name="safearray" select="$safearray" />
1100 </xsl:call-template>
1101 </xsl:variable>
1102
1103 <xsl:choose>
1104 <xsl:when test="$safearray='yes'">
1105 <xsl:variable name="elemgluetype">
1106 <xsl:call-template name="typeIdl2Glue">
1107 <xsl:with-param name="type" select="$idltype" />
1108 <xsl:with-param name="safearray" select="''" />
1109 <xsl:with-param name="forceelem" select="'yes'" />
1110 </xsl:call-template>
1111 </xsl:variable>
1112 <xsl:variable name="elembacktype">
1113 <xsl:call-template name="typeIdl2Back">
1114 <xsl:with-param name="type" select="$idltype" />
1115 <xsl:with-param name="safearray" select="''" />
1116 <xsl:with-param name="forceelem" select="'yes'" />
1117 </xsl:call-template>
1118 </xsl:variable>
1119 <xsl:choose>
1120 <xsl:when test="$isstruct">
1121 <xsl:value-of select="concat('Helper.wrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, port, ', $value, ')')"/>
1122 </xsl:when>
1123 <xsl:when test="//enum[@name=$idltype]">
1124 <xsl:value-of select="concat('Helper.convertEnums(', $elembacktype, '.class, ', $elemgluetype, '.class, ', $value, ')')"/>
1125 </xsl:when>
1126 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
1127 <xsl:value-of select="concat('Helper.wrap(', $elemgluetype, '.class, port, ', $value, ')')"/>
1128 </xsl:when>
1129 <xsl:when test="$idltype='octet'">
1130 <xsl:value-of select="concat('Helper.decodeBase64(', $value, ')')"/>
1131 </xsl:when>
1132 <xsl:otherwise>
1133 <xsl:value-of select="$value" />
1134 </xsl:otherwise>
1135 </xsl:choose>
1136 </xsl:when>
1137
1138 <xsl:otherwise>
1139 <xsl:choose>
1140 <xsl:when test="//enum[@name=$idltype]">
1141 <xsl:value-of select="concat($gluetype, '.fromValue(', $value, '.value())')"/>
1142 </xsl:when>
1143 <xsl:when test="$idltype='boolean'">
1144 <xsl:value-of select="$value"/>
1145 </xsl:when>
1146 <xsl:when test="$idltype='long long'">
1147 <xsl:value-of select="$value"/>
1148 </xsl:when>
1149 <xsl:when test="$idltype='unsigned long long'">
1150 <xsl:value-of select="$value"/>
1151 </xsl:when>
1152 <xsl:when test="$idltype='long'">
1153 <xsl:value-of select="$value"/>
1154 </xsl:when>
1155 <xsl:when test="$idltype='unsigned long'">
1156 <xsl:value-of select="$value"/>
1157 </xsl:when>
1158 <xsl:when test="$idltype='short'">
1159 <xsl:value-of select="$value"/>
1160 </xsl:when>
1161 <xsl:when test="$idltype='unsigned short'">
1162 <xsl:value-of select="$value"/>
1163 </xsl:when>
1164 <xsl:when test="$idltype='wstring'">
1165 <xsl:value-of select="$value"/>
1166 </xsl:when>
1167 <xsl:when test="$idltype='uuid'">
1168 <xsl:value-of select="$value"/>
1169 </xsl:when>
1170 <xsl:when test="$isstruct">
1171 <xsl:value-of select="concat('(', $value, ' != null) ? new ', $gluetype, '(', $value, ', port) : null')" />
1172 </xsl:when>
1173 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
1174 <!-- if the MOR string is empty, that means NULL, so return NULL instead of an object then -->
1175 <xsl:value-of select="concat('(', $value, '.length() > 0) ? new ', $gluetype, '(', $value, ', port) : null')" />
1176 </xsl:when>
1177 <xsl:otherwise>
1178 <xsl:call-template name="fatalError">
1179 <xsl:with-param name="msg" select="concat('Unhandled type ', $idltype, ' (cookOutParamJaxws)')" />
1180 </xsl:call-template>
1181 </xsl:otherwise>
1182 </xsl:choose>
1183 </xsl:otherwise>
1184 </xsl:choose>
1185
1186</xsl:template>
1187
1188<xsl:template name="cookOutParam">
1189 <xsl:param name="value"/>
1190 <xsl:param name="idltype"/>
1191 <xsl:param name="safearray"/>
1192 <xsl:choose>
1193 <xsl:when test="($G_vboxGlueStyle='xpcom')">
1194 <xsl:call-template name="cookOutParamXpcom">
1195 <xsl:with-param name="value" select="$value" />
1196 <xsl:with-param name="idltype" select="$idltype" />
1197 <xsl:with-param name="safearray" select="$safearray" />
1198 </xsl:call-template>
1199 </xsl:when>
1200 <xsl:when test="($G_vboxGlueStyle='mscom')">
1201 <xsl:call-template name="cookOutParamMscom">
1202 <xsl:with-param name="value" select="$value" />
1203 <xsl:with-param name="idltype" select="$idltype" />
1204 <xsl:with-param name="safearray" select="$safearray" />
1205 </xsl:call-template>
1206 </xsl:when>
1207 <xsl:when test="($G_vboxGlueStyle='jaxws')">
1208 <xsl:call-template name="cookOutParamJaxws">
1209 <xsl:with-param name="value" select="$value" />
1210 <xsl:with-param name="idltype" select="$idltype" />
1211 <xsl:with-param name="safearray" select="$safearray" />
1212 </xsl:call-template>
1213 </xsl:when>
1214 <xsl:otherwise>
1215 <xsl:call-template name="fatalError">
1216 <xsl:with-param name="msg" select="'Unhandled style(cookOutParam)'" />
1217 </xsl:call-template>
1218 </xsl:otherwise>
1219 </xsl:choose>
1220</xsl:template>
1221
1222<xsl:template name="cookInParamXpcom">
1223 <xsl:param name="value"/>
1224 <xsl:param name="idltype"/>
1225 <xsl:param name="safearray"/>
1226 <xsl:variable name="isstruct"
1227 select="//interface[@name=$idltype]/@wsmap='struct'" />
1228 <xsl:variable name="gluetype">
1229 <xsl:call-template name="typeIdl2Glue">
1230 <xsl:with-param name="type" select="$idltype" />
1231 <xsl:with-param name="safearray" select="$safearray" />
1232 </xsl:call-template>
1233 </xsl:variable>
1234
1235 <xsl:variable name="backtype">
1236 <xsl:call-template name="typeIdl2Back">
1237 <xsl:with-param name="type" select="$idltype" />
1238 <xsl:with-param name="safearray" select="$safearray" />
1239 </xsl:call-template>
1240 </xsl:variable>
1241
1242 <xsl:variable name="elemgluetype">
1243 <xsl:if test="$safearray='yes'">
1244 <xsl:call-template name="typeIdl2Glue">
1245 <xsl:with-param name="type" select="$idltype" />
1246 <xsl:with-param name="safearray" select="'no'" />
1247 <xsl:with-param name="forceelem" select="'yes'" />
1248 </xsl:call-template>
1249 </xsl:if>
1250 </xsl:variable>
1251
1252 <xsl:choose>
1253 <xsl:when test="//interface[@name=$idltype]">
1254 <xsl:choose>
1255 <xsl:when test="$safearray='yes'">
1256 <xsl:variable name="elembacktype">
1257 <xsl:call-template name="typeIdl2Back">
1258 <xsl:with-param name="type" select="$idltype" />
1259 <xsl:with-param name="safearray" select="$safearray" />
1260 <xsl:with-param name="forceelem" select="'yes'" />
1261 </xsl:call-template>
1262 </xsl:variable>
1263 <xsl:value-of select="concat('Helper.unwrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
1264 </xsl:when>
1265 <xsl:otherwise>
1266 <xsl:value-of select="concat('(', $value, ' != null) ? ', $value, '.getTypedWrapped() : null')" />
1267 </xsl:otherwise>
1268 </xsl:choose>
1269 </xsl:when>
1270
1271 <xsl:when test="$idltype='$unknown'">
1272 <xsl:choose>
1273 <xsl:when test="$safearray='yes'">
1274 <xsl:value-of select="concat('Helper.unwrap2(', $elemgluetype, '.class, nsISupports.class, ', $value, ')')"/>
1275 </xsl:when>
1276 <xsl:otherwise>
1277 <xsl:value-of select="concat('(', $value, ' != null) ? (nsISupports)', $value, '.getWrapped() : null')" />
1278 </xsl:otherwise>
1279 </xsl:choose>
1280 </xsl:when>
1281
1282 <xsl:when test="//enum[@name=$idltype]">
1283 <xsl:choose>
1284 <xsl:when test="$safearray='yes'">
1285 <xsl:value-of select="concat('Helper.unwrapEnum(', $elemgluetype, '.class, ', $value, ')')"/>
1286 </xsl:when>
1287 <xsl:otherwise>
1288 <xsl:value-of select="concat($value, '.value()')"/>
1289 </xsl:otherwise>
1290 </xsl:choose>
1291 </xsl:when>
1292
1293 <xsl:when test="($idltype='octet') and ($safearray='yes')">
1294 <xsl:value-of select="$value"/>
1295 </xsl:when>
1296
1297 <xsl:otherwise>
1298 <xsl:choose>
1299 <xsl:when test="$safearray='yes'">
1300 <xsl:choose>
1301 <xsl:when test="$idltype='boolean'">
1302 <xsl:value-of select="concat('Helper.unwrapBoolean(', $value, ')')"/>
1303 </xsl:when>
1304 <xsl:when test="($idltype='long') or ($idltype='unsigned long') or ($idltype='integer')">
1305 <xsl:value-of select="concat('Helper.unwrapInteger(', $value, ')')"/>
1306 </xsl:when>
1307 <xsl:when test="($idltype='short') or ($idltype='unsigned short')">
1308 <xsl:value-of select="concat('Helper.unwrapUShort(', $value, ')')"/>
1309 </xsl:when>
1310 <xsl:when test="($idltype='unsigned long long') or ($idltype='long long')">
1311 <xsl:value-of select="concat('Helper.unwrapULong(', $value, ')')"/>
1312 </xsl:when>
1313 <xsl:when test="($idltype='wstring') or ($idltype='uuid')">
1314 <xsl:value-of select="concat('Helper.unwrapStr(', $value, ')')"/>
1315 </xsl:when>
1316 <xsl:otherwise>
1317 <xsl:value-of select="$value"/>
1318 </xsl:otherwise>
1319 </xsl:choose>
1320 </xsl:when>
1321 <xsl:otherwise>
1322 <xsl:value-of select="$value"/>
1323 </xsl:otherwise>
1324 </xsl:choose>
1325 </xsl:otherwise>
1326 </xsl:choose>
1327</xsl:template>
1328
1329<xsl:template name="cookInParamMscom">
1330 <xsl:param name="value"/>
1331 <xsl:param name="idltype"/>
1332 <xsl:param name="safearray"/>
1333
1334 <xsl:variable name="gluetype">
1335 <xsl:call-template name="typeIdl2Glue">
1336 <xsl:with-param name="type" select="$idltype" />
1337 <xsl:with-param name="safearray" select="$safearray" />
1338 </xsl:call-template>
1339 </xsl:variable>
1340
1341 <xsl:variable name="backtype">
1342 <xsl:call-template name="typeIdl2Back">
1343 <xsl:with-param name="type" select="$idltype" />
1344 <xsl:with-param name="safearray" select="$safearray" />
1345 </xsl:call-template>
1346 </xsl:variable>
1347
1348 <xsl:variable name="elemgluetype">
1349 <xsl:if test="$safearray='yes'">
1350 <xsl:call-template name="typeIdl2Glue">
1351 <xsl:with-param name="type" select="$idltype" />
1352 <xsl:with-param name="safearray" select="'no'" />
1353 <xsl:with-param name="forceelem" select="'yes'" />
1354 </xsl:call-template>
1355 </xsl:if>
1356 </xsl:variable>
1357
1358 <xsl:choose>
1359 <xsl:when test="//interface[@name=$idltype]">
1360 <xsl:choose>
1361 <xsl:when test="$safearray='yes'">
1362 <xsl:variable name="elembacktype">
1363 <xsl:call-template name="typeIdl2Back">
1364 <xsl:with-param name="type" select="$idltype" />
1365 <xsl:with-param name="safearray" select="$safearray" />
1366 <xsl:with-param name="forceelem" select="'yes'" />
1367 </xsl:call-template>
1368 </xsl:variable>
1369 <xsl:value-of select="concat('Helper.unwrap2(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
1370 </xsl:when>
1371 <xsl:otherwise>
1372 <xsl:value-of select="concat('(', $value, ' != null) ? ', $value, '.getTypedWrapped() : null')" />
1373 </xsl:otherwise>
1374 </xsl:choose>
1375 </xsl:when>
1376
1377 <xsl:when test="$idltype='$unknown'">
1378 <xsl:choose>
1379 <xsl:when test="$safearray='yes'">
1380 <xsl:value-of select="concat('Helper.unwrap2(', $elemgluetype, '.class, Dispatch.class, ', $value, ')')"/>
1381 </xsl:when>
1382 <xsl:otherwise>
1383 <xsl:value-of select="concat('(', $value, ' != null) ? (Dispatch)', $value, '.getWrapped() : null')" />
1384 </xsl:otherwise>
1385 </xsl:choose>
1386 </xsl:when>
1387
1388 <xsl:when test="//enum[@name=$idltype]">
1389 <xsl:choose>
1390 <xsl:when test="$safearray='yes'">
1391 <xsl:value-of select="concat('Helper.unwrapEnum(', $elemgluetype, '.class, ', $value, ')')"/>
1392 </xsl:when>
1393 <xsl:otherwise>
1394 <xsl:value-of select="concat($value, '.value()')"/>
1395 </xsl:otherwise>
1396 </xsl:choose>
1397 </xsl:when>
1398
1399 <xsl:when test="$idltype='boolean'">
1400 <xsl:choose>
1401 <xsl:when test="$safearray='yes'">
1402 <xsl:value-of select="concat('Helper.unwrapBool(', $value, ')')"/>
1403 </xsl:when>
1404 <xsl:otherwise>
1405 <xsl:value-of select="concat('new Variant(', $value, ')')"/>
1406 </xsl:otherwise>
1407 </xsl:choose>
1408 </xsl:when>
1409
1410 <xsl:when test="($idltype='short') or ($idltype='unsigned short')">
1411 <xsl:choose>
1412 <xsl:when test="$safearray='yes'">
1413 <xsl:value-of select="concat('Helper.unwrapShort(', $value, ')')"/>
1414 </xsl:when>
1415 <xsl:otherwise>
1416 <xsl:value-of select="concat('new Variant(', $value, ')')"/>
1417 </xsl:otherwise>
1418 </xsl:choose>
1419 </xsl:when>
1420
1421
1422 <xsl:when test="($idltype='long') or ($idltype='unsigned long')">
1423 <xsl:choose>
1424 <xsl:when test="$safearray='yes'">
1425 <xsl:value-of select="concat('Helper.unwrapInt(', $value, ')')"/>
1426 </xsl:when>
1427 <xsl:otherwise>
1428 <xsl:value-of select="concat('new Variant(', $value, ')')"/>
1429 </xsl:otherwise>
1430 </xsl:choose>
1431 </xsl:when>
1432
1433 <xsl:when test="($idltype='wstring') or ($idltype='uuid')">
1434 <xsl:choose>
1435 <xsl:when test="$safearray='yes'">
1436 <xsl:value-of select="concat('Helper.unwrapString(', $value, ')')"/>
1437 </xsl:when>
1438 <xsl:otherwise>
1439 <xsl:value-of select="concat('new Variant(', $value, ')')"/>
1440 </xsl:otherwise>
1441 </xsl:choose>
1442 </xsl:when>
1443
1444 <xsl:when test="($idltype='unsigned long long') or ($idltype='long long')">
1445 <xsl:choose>
1446 <xsl:when test="$safearray='yes'">
1447 <xsl:value-of select="concat('Helper.unwrapLong(', $value, ')')"/>
1448 </xsl:when>
1449 <xsl:otherwise>
1450 <xsl:value-of select="concat('new Variant(', $value, '.longValue())')"/>
1451 </xsl:otherwise>
1452 </xsl:choose>
1453 </xsl:when>
1454
1455 <xsl:when test="($idltype='octet') and ($safearray='yes')">
1456 <xsl:value-of select="concat('Helper.encodeBase64(', $value, ')')"/>
1457 </xsl:when>
1458
1459 <xsl:otherwise>
1460 <xsl:call-template name="fatalError">
1461 <xsl:with-param name="msg" select="concat('Unhandled type: ', $idltype)" />
1462 </xsl:call-template>
1463 </xsl:otherwise>
1464 </xsl:choose>
1465
1466</xsl:template>
1467
1468<xsl:template name="cookInParamJaxws">
1469 <xsl:param name="value"/>
1470 <xsl:param name="idltype"/>
1471 <xsl:param name="safearray"/>
1472 <xsl:variable name="isstruct"
1473 select="//interface[@name=$idltype]/@wsmap='struct'" />
1474
1475 <xsl:variable name="gluetype">
1476 <xsl:call-template name="typeIdl2Glue">
1477 <xsl:with-param name="type" select="$idltype" />
1478 <xsl:with-param name="safearray" select="$safearray" />
1479 </xsl:call-template>
1480 </xsl:variable>
1481
1482 <xsl:variable name="elemgluetype">
1483 <xsl:if test="$safearray='yes'">
1484 <xsl:call-template name="typeIdl2Glue">
1485 <xsl:with-param name="type" select="$idltype" />
1486 <xsl:with-param name="safearray" select="'no'" />
1487 <xsl:with-param name="forceelem" select="'yes'" />
1488 </xsl:call-template>
1489 </xsl:if>
1490 </xsl:variable>
1491
1492 <xsl:choose>
1493 <xsl:when test="//interface[@name=$idltype] or $idltype='$unknown'">
1494 <xsl:choose>
1495 <xsl:when test="@safearray='yes'">
1496 <xsl:value-of select="concat('Helper.unwrap(', $value, ')')"/>
1497 </xsl:when>
1498 <xsl:otherwise>
1499 <xsl:value-of select="concat('((', $value, ' == null) ? null :', $value, '.getWrapped())')" />
1500 </xsl:otherwise>
1501 </xsl:choose>
1502 </xsl:when>
1503
1504 <xsl:when test="//enum[@name=$idltype]">
1505 <xsl:choose>
1506 <xsl:when test="$safearray='yes'">
1507 <xsl:variable name="elembacktype">
1508 <xsl:call-template name="typeIdl2Back">
1509 <xsl:with-param name="type" select="$idltype" />
1510 <xsl:with-param name="safearray" select="'no'" />
1511 <xsl:with-param name="forceelem" select="'yes'" />
1512 </xsl:call-template>
1513 </xsl:variable>
1514 <xsl:value-of select="concat('Helper.convertEnums(', $elemgluetype, '.class, ', $elembacktype, '.class, ', $value, ')')"/>
1515 </xsl:when>
1516 <xsl:otherwise>
1517 <xsl:variable name="backtype">
1518 <xsl:call-template name="typeIdl2Back">
1519 <xsl:with-param name="type" select="$idltype" />
1520 <xsl:with-param name="safearray" select="'no'" />
1521 <xsl:with-param name="forceelem" select="'yes'" />
1522 </xsl:call-template>
1523 </xsl:variable>
1524 <xsl:value-of select="concat($backtype, '.fromValue(', $value, '.name())')"/>
1525 </xsl:otherwise>
1526 </xsl:choose>
1527 </xsl:when>
1528
1529 <xsl:when test="($idltype='octet') and ($safearray='yes')">
1530 <xsl:value-of select="concat('Helper.encodeBase64(', $value, ')')"/>
1531 </xsl:when>
1532
1533 <xsl:otherwise>
1534 <xsl:value-of select="$value"/>
1535 </xsl:otherwise>
1536 </xsl:choose>
1537
1538</xsl:template>
1539
1540<xsl:template name="cookInParam">
1541 <xsl:param name="value"/>
1542 <xsl:param name="idltype"/>
1543 <xsl:param name="safearray"/>
1544 <xsl:choose>
1545 <xsl:when test="($G_vboxGlueStyle='xpcom')">
1546 <xsl:call-template name="cookInParamXpcom">
1547 <xsl:with-param name="value" select="$value" />
1548 <xsl:with-param name="idltype" select="$idltype" />
1549 <xsl:with-param name="safearray" select="$safearray" />
1550 </xsl:call-template>
1551 </xsl:when>
1552 <xsl:when test="($G_vboxGlueStyle='mscom')">
1553 <xsl:call-template name="cookInParamMscom">
1554 <xsl:with-param name="value" select="$value" />
1555 <xsl:with-param name="idltype" select="$idltype" />
1556 <xsl:with-param name="safearray" select="$safearray" />
1557 </xsl:call-template>
1558 </xsl:when>
1559 <xsl:when test="($G_vboxGlueStyle='jaxws')">
1560 <xsl:call-template name="cookInParamJaxws">
1561 <xsl:with-param name="value" select="$value" />
1562 <xsl:with-param name="idltype" select="$idltype" />
1563 <xsl:with-param name="safearray" select="$safearray" />
1564 </xsl:call-template>
1565 </xsl:when>
1566 <xsl:otherwise>
1567 <xsl:call-template name="fatalError">
1568 <xsl:with-param name="msg" select="'Unhandled style (cookInParam)'" />
1569 </xsl:call-template>
1570 </xsl:otherwise>
1571 </xsl:choose>
1572</xsl:template>
1573
1574<!-- Invoke backend method, including parameter conversion -->
1575<xsl:template name="genBackMethodCall">
1576 <xsl:param name="ifname"/>
1577 <xsl:param name="methodname"/>
1578 <xsl:param name="retval"/>
1579
1580 <xsl:choose>
1581 <xsl:when test="($G_vboxGlueStyle='xpcom')">
1582 <xsl:text> </xsl:text>
1583 <xsl:if test="param[@dir='return']">
1584 <xsl:value-of select="concat($retval, ' = ')" />
1585 </xsl:if>
1586 <xsl:value-of select="concat('getTypedWrapped().', $methodname, '(')"/>
1587 <xsl:for-each select="param">
1588 <xsl:choose>
1589 <xsl:when test="@dir='return'">
1590 <xsl:if test="@safearray='yes'">
1591 <xsl:text>null</xsl:text>
1592 </xsl:if>
1593 </xsl:when>
1594 <xsl:when test="@dir='out'">
1595 <xsl:if test="@safearray='yes'">
1596 <xsl:text>null, </xsl:text>
1597 </xsl:if>
1598 <xsl:value-of select="concat('tmp_', @name)" />
1599 </xsl:when>
1600 <xsl:when test="@dir='in'">
1601 <xsl:if test="(@safearray='yes') and not(@type = 'octet')">
1602 <xsl:value-of select="concat(@name, '.size(), ')" />
1603 </xsl:if>
1604 <xsl:variable name="unwrapped">
1605 <xsl:call-template name="cookInParam">
1606 <xsl:with-param name="value" select="@name" />
1607 <xsl:with-param name="idltype" select="@type" />
1608 <xsl:with-param name="safearray" select="@safearray" />
1609 </xsl:call-template>
1610 </xsl:variable>
1611 <xsl:value-of select="$unwrapped"/>
1612 </xsl:when>
1613 <xsl:otherwise>
1614 <xsl:call-template name="fatalError">
1615 <xsl:with-param name="msg" select="concat('Unsupported param dir: ', @dir, '&quot;.')" />
1616 </xsl:call-template>
1617 </xsl:otherwise>
1618 </xsl:choose>
1619 <xsl:if test="not(position()=last()) and not(following-sibling::param[1]/@dir='return' and not(following-sibling::param[1]/@safearray='yes'))">
1620 <xsl:text>, </xsl:text>
1621 </xsl:if>
1622 </xsl:for-each>
1623 <xsl:text>);&#10;</xsl:text>
1624 </xsl:when>
1625
1626 <xsl:when test="($G_vboxGlueStyle='mscom')">
1627 <xsl:text> </xsl:text>
1628 <xsl:if test="param[@dir='return']">
1629 <xsl:value-of select="concat($retval, ' = ')" />
1630 </xsl:if>
1631 <xsl:value-of select="concat('Helper.invoke(getTypedWrapped(), &quot;', $methodname, '&quot; ')"/>
1632 <xsl:for-each select="param[not(@dir='return')]">
1633 <xsl:text>, </xsl:text>
1634 <xsl:choose>
1635 <xsl:when test="@dir='out'">
1636 <xsl:value-of select="concat('tmp_', @name)" />
1637 </xsl:when>
1638 <xsl:when test="@dir='in'">
1639 <xsl:variable name="unwrapped">
1640 <xsl:call-template name="cookInParam">
1641 <xsl:with-param name="value" select="@name" />
1642 <xsl:with-param name="idltype" select="@type" />
1643 <xsl:with-param name="safearray" select="@safearray" />
1644 </xsl:call-template>
1645 </xsl:variable>
1646 <xsl:value-of select="$unwrapped"/>
1647 </xsl:when>
1648 </xsl:choose>
1649 </xsl:for-each>
1650 <xsl:text>);&#10;</xsl:text>
1651 </xsl:when>
1652
1653 <xsl:when test="($G_vboxGlueStyle='jaxws')">
1654 <xsl:variable name="jaxwsmethod">
1655 <xsl:call-template name="makeJaxwsMethod">
1656 <xsl:with-param name="ifname" select="$ifname" />
1657 <xsl:with-param name="methodname" select="$methodname" />
1658 </xsl:call-template>
1659 </xsl:variable>
1660 <xsl:variable name="portArg">
1661 <xsl:if test="not(//interface[@name=$ifname]/@wsmap='global')">
1662 <xsl:text>obj</xsl:text>
1663 </xsl:if>
1664 </xsl:variable>
1665 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
1666
1667 <xsl:text> </xsl:text>
1668 <xsl:if test="param[@dir='return'] and not(param[@dir='out'])">
1669 <xsl:value-of select="concat($retval, ' = ')" />
1670 </xsl:if>
1671 <xsl:value-of select="concat('port.', $jaxwsmethod, '(', $portArg)" />
1672 <xsl:if test="$paramsinout and not($portArg='')">
1673 <xsl:text>, </xsl:text>
1674 </xsl:if>
1675
1676 <!-- jax-ws has an oddity: if both out params and a return value exist,
1677 then the return value is moved to the function's argument list... -->
1678 <xsl:choose>
1679 <xsl:when test="param[@dir='out'] and param[@dir='return']">
1680 <xsl:for-each select="param">
1681 <xsl:choose>
1682 <xsl:when test="@dir='return'">
1683 <xsl:value-of select="$retval"/>
1684 </xsl:when>
1685 <xsl:when test="@dir='out'">
1686 <xsl:value-of select="concat('tmp_', @name)" />
1687 </xsl:when>
1688 <xsl:otherwise>
1689 <xsl:call-template name="cookInParam">
1690 <xsl:with-param name="value" select="@name" />
1691 <xsl:with-param name="idltype" select="@type" />
1692 <xsl:with-param name="safearray" select="@safearray" />
1693 </xsl:call-template>
1694 </xsl:otherwise>
1695 </xsl:choose>
1696 <xsl:if test="not(position()=last())">
1697 <xsl:text>, </xsl:text>
1698 </xsl:if>
1699 </xsl:for-each>
1700 </xsl:when>
1701 <xsl:otherwise>
1702 <xsl:for-each select="$paramsinout">
1703 <xsl:choose>
1704 <xsl:when test="@dir='return'">
1705 <xsl:value-of select="$retval"/>
1706 </xsl:when>
1707 <xsl:when test="@dir='out'">
1708 <xsl:value-of select="concat('tmp_', @name)" />
1709 </xsl:when>
1710 <xsl:otherwise>
1711 <xsl:call-template name="cookInParam">
1712 <xsl:with-param name="value" select="@name" />
1713 <xsl:with-param name="idltype" select="@type" />
1714 <xsl:with-param name="safearray" select="@safearray" />
1715 </xsl:call-template>
1716 </xsl:otherwise>
1717 </xsl:choose>
1718 <xsl:if test="not(position()=last())">
1719 <xsl:text>, </xsl:text>
1720 </xsl:if>
1721 </xsl:for-each>
1722 </xsl:otherwise>
1723 </xsl:choose>
1724 <xsl:text>);&#10;</xsl:text>
1725 </xsl:when>
1726
1727 <xsl:otherwise>
1728 <xsl:call-template name="fatalError">
1729 <xsl:with-param name="msg" select="'Style unknown (genBackMethodCall)'" />
1730 </xsl:call-template>
1731 </xsl:otherwise>
1732
1733 </xsl:choose>
1734</xsl:template>
1735
1736<xsl:template name="genGetterCall">
1737 <xsl:param name="ifname"/>
1738 <xsl:param name="gettername"/>
1739 <xsl:param name="backtype"/>
1740 <xsl:param name="retval"/>
1741
1742 <xsl:choose>
1743 <xsl:when test="$G_vboxGlueStyle='xpcom'">
1744 <xsl:value-of select="concat(' ', $backtype, ' ', $retval, ' = getTypedWrapped().', $gettername, '(')" />
1745 <xsl:if test="@safearray">
1746 <xsl:text>null</xsl:text>
1747 </xsl:if>
1748 <xsl:text>);&#10;</xsl:text>
1749 </xsl:when>
1750
1751 <xsl:when test="$G_vboxGlueStyle='mscom'">
1752 <xsl:value-of select="concat(' ', $backtype, ' ', $retval, ' = Dispatch.get(getTypedWrapped(), &quot;', @name, '&quot;);&#10;')" />
1753 </xsl:when>
1754
1755 <xsl:when test="$G_vboxGlueStyle='jaxws'">
1756 <xsl:variable name="jaxwsGetter">
1757 <xsl:call-template name="makeJaxwsMethod">
1758 <xsl:with-param name="ifname" select="$ifname" />
1759 <xsl:with-param name="methodname" select="$gettername" />
1760 </xsl:call-template>
1761 </xsl:variable>
1762 <xsl:value-of select="concat(' ', $backtype, ' ', $retval, ' = port.', $jaxwsGetter, '(obj);&#10;')" />
1763 </xsl:when>
1764
1765 <xsl:otherwise>
1766 <xsl:call-template name="fatalError">
1767 <xsl:with-param name="msg" select="'Style unknown (genGetterCall)'" />
1768 </xsl:call-template>
1769 </xsl:otherwise>
1770 </xsl:choose>
1771</xsl:template>
1772
1773<xsl:template name="genSetterCall">
1774 <xsl:param name="ifname"/>
1775 <xsl:param name="settername"/>
1776 <xsl:param name="value"/>
1777
1778 <xsl:choose>
1779 <xsl:when test="$G_vboxGlueStyle='xpcom'">
1780 <xsl:value-of select="concat(' getTypedWrapped().', $settername, '(', $value, ');&#10;')" />
1781 </xsl:when>
1782
1783 <xsl:when test="$G_vboxGlueStyle='mscom'">
1784 <xsl:value-of select="concat(' Dispatch.put(getTypedWrapped(), &quot;', @name, '&quot;, ', $value, ');&#10;')" />
1785 </xsl:when>
1786
1787 <xsl:when test="$G_vboxGlueStyle='jaxws'">
1788 <xsl:variable name="jaxwsSetter">
1789 <xsl:call-template name="makeJaxwsMethod">
1790 <xsl:with-param name="ifname" select="$ifname" />
1791 <xsl:with-param name="methodname" select="$settername" />
1792 </xsl:call-template>
1793 </xsl:variable>
1794 <xsl:value-of select="concat(' port.', $jaxwsSetter, '(obj, ', $value, ');&#10;')" />
1795 </xsl:when>
1796
1797 <xsl:otherwise>
1798 <xsl:call-template name="fatalError">
1799 <xsl:with-param name="msg" select="'Style unknown (genSetterCall)'" />
1800 </xsl:call-template>
1801 </xsl:otherwise>
1802 </xsl:choose>
1803</xsl:template>
1804
1805<xsl:template name="genStructWrapperJaxws">
1806 <xsl:param name="ifname"/>
1807
1808 <xsl:value-of select="concat(' private ', $G_virtualBoxPackageCom, '.', $ifname, ' real;&#10;')"/>
1809 <xsl:text> private VboxPortType port;&#10;&#10;</xsl:text>
1810
1811 <xsl:value-of select="concat(' public ', $ifname, '(', $G_virtualBoxPackageCom, '.', $ifname, ' real, VboxPortType port)&#10;')" />
1812 <xsl:text> {&#10;</xsl:text>
1813 <xsl:text> this.real = real;&#10;</xsl:text>
1814 <xsl:text> this.port = port;&#10;</xsl:text>
1815 <xsl:text> }&#10;&#10;</xsl:text>
1816
1817 <xsl:for-each select="attribute">
1818 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
1819 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
1820 <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
1821
1822 <xsl:if test="not(@wsmap = 'suppress')">
1823
1824 <xsl:if test="not(@readonly = 'yes')">
1825 <xsl:call-template name="fatalError">
1826 <xsl:with-param name="msg" select="concat('Non read-only struct (genStructWrapperJaxws) in interface ', $ifname, ', attribute ', $attrname)" />
1827 </xsl:call-template>
1828 </xsl:if>
1829
1830 <!-- Emit getter -->
1831 <xsl:variable name="backgettername">
1832 <xsl:choose>
1833 <!-- Stupid, but backend boolean getters called isFoo(), not getFoo() -->
1834 <xsl:when test="$attrtype = 'boolean'">
1835 <xsl:variable name="capsname">
1836 <xsl:call-template name="capitalize">
1837 <xsl:with-param name="str" select="$attrname" />
1838 </xsl:call-template>
1839 </xsl:variable>
1840 <xsl:value-of select="concat('is', $capsname)" />
1841 </xsl:when>
1842 <xsl:otherwise>
1843 <xsl:call-template name="makeGetterName">
1844 <xsl:with-param name="attrname" select="$attrname" />
1845 </xsl:call-template>
1846 </xsl:otherwise>
1847 </xsl:choose>
1848 </xsl:variable>
1849
1850 <xsl:variable name="gluegettername">
1851 <xsl:call-template name="makeGetterName">
1852 <xsl:with-param name="attrname" select="$attrname" />
1853 </xsl:call-template>
1854 </xsl:variable>
1855
1856 <xsl:variable name="gluegettertype">
1857 <xsl:call-template name="typeIdl2Glue">
1858 <xsl:with-param name="type" select="$attrtype" />
1859 <xsl:with-param name="safearray" select="@safearray" />
1860 </xsl:call-template>
1861 </xsl:variable>
1862
1863 <xsl:variable name="backgettertype">
1864 <xsl:call-template name="typeIdl2Back">
1865 <xsl:with-param name="type" select="$attrtype" />
1866 <xsl:with-param name="safearray" select="@safearray" />
1867 </xsl:call-template>
1868 </xsl:variable>
1869
1870 <xsl:apply-templates select="desc" mode="attribute_get"/>
1871 <xsl:value-of select="concat(' public ', $gluegettertype, ' ', $gluegettername, '()&#10;')" />
1872 <xsl:text> {&#10;</xsl:text>
1873 <xsl:value-of select="concat(' ', $backgettertype, ' retVal = real.', $backgettername, '();&#10;')" />
1874 <xsl:variable name="wrapped">
1875 <xsl:call-template name="cookOutParam">
1876 <xsl:with-param name="value" select="'retVal'" />
1877 <xsl:with-param name="idltype" select="$attrtype" />
1878 <xsl:with-param name="safearray" select="@safearray" />
1879 </xsl:call-template>
1880 </xsl:variable>
1881 <xsl:value-of select="concat(' return ', $wrapped, ';&#10;')" />
1882 <xsl:text> }&#10;</xsl:text>
1883 </xsl:if>
1884
1885 </xsl:for-each>
1886
1887</xsl:template>
1888
1889<!-- Interface method wrapper -->
1890<xsl:template name="genMethod">
1891 <xsl:param name="ifname"/>
1892 <xsl:param name="methodname"/>
1893
1894 <xsl:choose>
1895 <xsl:when test="(param[@mod='ptr']) or (($G_vboxGlueStyle='jaxws') and (param[@type=($G_setSuppressedInterfaces/@name)]))" >
1896 <xsl:value-of select="concat(' // Skipping method ', $methodname, ' for it has parameters with suppressed types&#10;')" />
1897 </xsl:when>
1898 <xsl:when test="($G_vboxGlueStyle='jaxws') and (@wsmap = 'suppress')" >
1899 <xsl:value-of select="concat(' // Skipping method ', $methodname, ' for it is suppressed&#10;')" />
1900 </xsl:when>
1901 <xsl:otherwise>
1902 <xsl:variable name="hasReturnParms" select="param[@dir='return']" />
1903 <xsl:variable name="hasOutParms" select="param[@dir='out']" />
1904 <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
1905 <xsl:variable name="returnidlsafearray" select="param[@dir='return']/@safearray" />
1906 <xsl:variable name="returngluetype">
1907 <xsl:choose>
1908 <xsl:when test="$returnidltype">
1909 <xsl:call-template name="typeIdl2Glue">
1910 <xsl:with-param name="type" select="$returnidltype" />
1911 <xsl:with-param name="safearray" select="$returnidlsafearray" />
1912 </xsl:call-template>
1913 </xsl:when>
1914 <xsl:otherwise>
1915 <xsl:text>void</xsl:text>
1916 </xsl:otherwise>
1917 </xsl:choose>
1918 </xsl:variable>
1919 <xsl:variable name="retValValue">
1920 <xsl:choose>
1921 <xsl:when test="(param[@dir='out']) and ($G_vboxGlueStyle='jaxws')">
1922 <xsl:text>retVal.value</xsl:text>
1923 </xsl:when>
1924 <xsl:otherwise>
1925 <xsl:text>retVal</xsl:text>
1926 </xsl:otherwise>
1927 </xsl:choose>
1928 </xsl:variable>
1929 <xsl:apply-templates select="desc" mode="method"/>
1930 <xsl:value-of select="concat(' public ', $returngluetype, ' ', $methodname, '(')" />
1931 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
1932 <xsl:for-each select="exsl:node-set($paramsinout)">
1933 <xsl:variable name="paramgluetype">
1934 <xsl:call-template name="typeIdl2Glue">
1935 <xsl:with-param name="type" select="@type" />
1936 <xsl:with-param name="safearray" select="@safearray" />
1937 </xsl:call-template>
1938 </xsl:variable>
1939 <xsl:choose>
1940 <xsl:when test="@dir='out'">
1941 <xsl:value-of select="concat('Holder&lt;', $paramgluetype, '&gt; ', @name)" />
1942 </xsl:when>
1943 <xsl:otherwise>
1944 <xsl:value-of select="concat($paramgluetype, ' ', @name)" />
1945 </xsl:otherwise>
1946 </xsl:choose>
1947 <xsl:if test="not(position()=last())">
1948 <xsl:text>, </xsl:text>
1949 </xsl:if>
1950 </xsl:for-each>
1951 <xsl:text>)&#10;</xsl:text>
1952 <xsl:text> {&#10;</xsl:text>
1953
1954 <xsl:call-template name="startExcWrapper"/>
1955
1956 <!-- declare temp out params -->
1957 <xsl:for-each select="param[@dir='out']">
1958 <xsl:variable name="backouttype">
1959 <xsl:call-template name="typeIdl2Back">
1960 <xsl:with-param name="type" select="@type" />
1961 <xsl:with-param name="safearray" select="@safearray" />
1962 </xsl:call-template>
1963 </xsl:variable>
1964 <xsl:choose>
1965 <xsl:when test="$G_vboxGlueStyle='xpcom'">
1966 <xsl:value-of select="concat(' ', $backouttype, '[] tmp_', @name, ' = (', $backouttype, '[])java.lang.reflect.Array.newInstance(', $backouttype, '.class, 1);&#10;')"/>
1967 </xsl:when>
1968 <xsl:when test="$G_vboxGlueStyle='mscom'">
1969 <xsl:value-of select="concat(' Variant tmp_', @name, ' = new Variant();&#10;')"/>
1970 </xsl:when>
1971 <xsl:when test="$G_vboxGlueStyle='jaxws'">
1972 <xsl:value-of select="concat(' javax.xml.ws.Holder&lt;', $backouttype, '&gt; tmp_', @name, ' = new javax.xml.ws.Holder&lt;', $backouttype, '&gt;();&#10;')"/>
1973 </xsl:when>
1974 <xsl:otherwise>
1975 <xsl:call-template name="fatalError">
1976 <xsl:with-param name="msg" select="'Handle out param (genMethod)'" />
1977 </xsl:call-template>
1978 </xsl:otherwise>
1979 </xsl:choose>
1980 </xsl:for-each>
1981
1982 <!-- declare return param, if any -->
1983 <xsl:if test="$hasReturnParms">
1984 <xsl:variable name="backrettype">
1985 <xsl:call-template name="typeIdl2Back">
1986 <xsl:with-param name="type" select="$returnidltype" />
1987 <xsl:with-param name="safearray" select="$returnidlsafearray" />
1988 </xsl:call-template>
1989 </xsl:variable>
1990 <xsl:choose>
1991 <xsl:when test="(param[@dir='out']) and ($G_vboxGlueStyle='jaxws')">
1992 <xsl:value-of select="concat(' javax.xml.ws.Holder&lt;', $backrettype, '&gt;',
1993 ' retVal = new javax.xml.ws.Holder&lt;', $backrettype,
1994 '&gt;();&#10;')"/>
1995 </xsl:when>
1996 <xsl:otherwise>
1997 <xsl:value-of select="concat(' ', $backrettype, ' retVal;&#10;')"/>
1998 </xsl:otherwise>
1999 </xsl:choose>
2000 </xsl:if>
2001
2002 <!-- Method call -->
2003 <xsl:call-template name="genBackMethodCall">
2004 <xsl:with-param name="ifname" select="$ifname" />
2005 <xsl:with-param name="methodname" select="$methodname" />
2006 <xsl:with-param name="retval" select="'retVal'" />
2007 </xsl:call-template>
2008
2009 <!-- return out params -->
2010 <xsl:for-each select="param[@dir='out']">
2011 <xsl:variable name="varval">
2012 <xsl:choose>
2013 <xsl:when test="$G_vboxGlueStyle='xpcom'">
2014 <xsl:value-of select="concat('tmp_', @name, '[0]')" />
2015 </xsl:when>
2016 <xsl:when test="$G_vboxGlueStyle='mscom'">
2017 <xsl:value-of select="concat('tmp_', @name)" />
2018 </xsl:when>
2019 <xsl:when test="$G_vboxGlueStyle='jaxws'">
2020 <xsl:value-of select="concat('tmp_', @name, '.value')" />
2021 </xsl:when>
2022 <xsl:otherwise>
2023 <xsl:call-template name="fatalError">
2024 <xsl:with-param name="msg" select="'Style unknown (genMethod, outparam)'" />
2025 </xsl:call-template>
2026 </xsl:otherwise>
2027 </xsl:choose>
2028 </xsl:variable>
2029 <xsl:variable name="wrapped">
2030 <xsl:call-template name="cookOutParam">
2031 <xsl:with-param name="value" select="$varval" />
2032 <xsl:with-param name="idltype" select="@type" />
2033 <xsl:with-param name="safearray" select="@safearray" />
2034 </xsl:call-template>
2035 </xsl:variable>
2036 <xsl:value-of select="concat(' ', @name, '.value = ', $wrapped, ';&#10;')"/>
2037 </xsl:for-each>
2038
2039 <xsl:if test="$hasReturnParms">
2040 <!-- actual 'return' statement -->
2041 <xsl:variable name="wrapped">
2042 <xsl:call-template name="cookOutParam">
2043 <xsl:with-param name="value" select="$retValValue" />
2044 <xsl:with-param name="idltype" select="$returnidltype" />
2045 <xsl:with-param name="safearray" select="$returnidlsafearray" />
2046 </xsl:call-template>
2047 </xsl:variable>
2048 <xsl:value-of select="concat(' return ', $wrapped, ';&#10;')" />
2049 </xsl:if>
2050 <xsl:call-template name="endExcWrapper"/>
2051
2052 <xsl:text> }&#10;</xsl:text>
2053 </xsl:otherwise>
2054 </xsl:choose>
2055
2056</xsl:template>
2057
2058<!-- Callback interface method -->
2059<xsl:template name="genCbMethodDecl">
2060 <xsl:param name="ifname"/>
2061 <xsl:param name="methodname"/>
2062
2063 <xsl:choose>
2064 <xsl:when test="(param[@mod='ptr'])" >
2065 <xsl:value-of select="concat(' // Skipping method ', $methodname, ' for it has parameters with suppressed types&#10;')" />
2066 </xsl:when>
2067 <xsl:otherwise>
2068 <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
2069 <xsl:variable name="returnidlsafearray" select="param[@dir='return']/@safearray" />
2070 <xsl:variable name="returngluetype">
2071 <xsl:choose>
2072 <xsl:when test="$returnidltype">
2073 <xsl:call-template name="typeIdl2Glue">
2074 <xsl:with-param name="type" select="$returnidltype" />
2075 <xsl:with-param name="safearray" select="$returnidlsafearray" />
2076 </xsl:call-template>
2077 </xsl:when>
2078 <xsl:otherwise>
2079 <xsl:text>void</xsl:text>
2080 </xsl:otherwise>
2081 </xsl:choose>
2082 </xsl:variable>
2083 <xsl:value-of select="concat(' public ', $returngluetype, ' ', $methodname, '(')" />
2084 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
2085 <xsl:for-each select="exsl:node-set($paramsinout)">
2086 <xsl:variable name="paramgluetype">
2087 <xsl:call-template name="typeIdl2Glue">
2088 <xsl:with-param name="type" select="@type" />
2089 <xsl:with-param name="safearray" select="@safearray" />
2090 </xsl:call-template>
2091 </xsl:variable>
2092 <xsl:choose>
2093 <xsl:when test="@dir='out'">
2094 <xsl:value-of select="concat('Holder&lt;', $paramgluetype, '&gt; ', @name)" />
2095 </xsl:when>
2096 <xsl:otherwise>
2097 <xsl:value-of select="concat($paramgluetype, ' ', @name)" />
2098 </xsl:otherwise>
2099 </xsl:choose>
2100 <xsl:if test="not(position()=last())">
2101 <xsl:text>, </xsl:text>
2102 </xsl:if>
2103 </xsl:for-each>
2104 <xsl:text>);&#10;</xsl:text>
2105 </xsl:otherwise>
2106 </xsl:choose>
2107</xsl:template>
2108
2109<!-- queryInterface wrapper -->
2110<xsl:template name="genQI">
2111 <xsl:param name="ifname"/>
2112 <xsl:param name="uuid" />
2113
2114 <xsl:value-of select="concat(' public static ', $ifname, ' queryInterface(IUnknown obj)&#10;')" />
2115 <xsl:text> {&#10;</xsl:text>
2116 <xsl:choose>
2117 <xsl:when test="$G_vboxGlueStyle='xpcom'">
2118 <xsl:variable name="backtype">
2119 <xsl:call-template name="typeIdl2Back">
2120 <xsl:with-param name="type" select="$ifname" />
2121 </xsl:call-template>
2122 </xsl:variable>
2123 <xsl:text> nsISupports nsobj = obj != null ? (nsISupports)obj.getWrapped() : null;&#10;</xsl:text>
2124 <xsl:text> if (nsobj == null) return null;&#10;</xsl:text>
2125 <xsl:value-of select="concat(' ', $backtype, ' qiobj = Helper.queryInterface(nsobj, &quot;{', $uuid, '}&quot;, ', $backtype, '.class);&#10;')" />
2126 <xsl:value-of select="concat(' return qiobj == null ? null : new ', $ifname, '(qiobj);&#10;')" />
2127 </xsl:when>
2128
2129 <xsl:when test="$G_vboxGlueStyle='mscom'">
2130 <xsl:value-of select="concat(' return', ' obj == null ? null : new ', $ifname, '((com.jacob.com.Dispatch)obj.getWrapped());&#10;')" />
2131 </xsl:when>
2132
2133 <xsl:when test="$G_vboxGlueStyle='jaxws'">
2134 <!-- bad, need to check that we really can be casted to this type -->
2135 <xsl:value-of select="concat(' return obj == null ? null : new ', $ifname, '(obj.getWrapped(), obj.getRemoteWSPort());&#10;')" />
2136 </xsl:when>
2137
2138 <xsl:otherwise>
2139 <xsl:call-template name="fatalError">
2140 <xsl:with-param name="msg" select="'Style unknown (genQI)'" />
2141 </xsl:call-template>
2142 </xsl:otherwise>
2143
2144 </xsl:choose>
2145 <xsl:text> }&#10;</xsl:text>
2146</xsl:template>
2147
2148
2149<xsl:template name="genCbMethodImpl">
2150 <xsl:param name="ifname"/>
2151 <xsl:param name="methodname"/>
2152
2153 <xsl:choose>
2154 <xsl:when test="(param[@mod='ptr'])" >
2155 <xsl:value-of select="concat(' // Skipping method ', $methodname, ' for it has parameters with suppressed types&#10;')" />
2156 </xsl:when>
2157 <xsl:otherwise>
2158 <xsl:variable name="hasReturnParms" select="param[@dir='return']" />
2159 <xsl:variable name="hasOutParms" select="param[@dir='out']" />
2160 <xsl:variable name="returnidltype" select="param[@dir='return']/@type" />
2161 <xsl:variable name="returnidlsafearray" select="param[@dir='return']/@safearray" />
2162 <xsl:variable name="returnbacktype">
2163 <xsl:choose>
2164 <xsl:when test="$returnidltype">
2165 <xsl:call-template name="typeIdl2Back">
2166 <xsl:with-param name="type" select="$returnidltype" />
2167 <xsl:with-param name="safearray" select="$returnidlsafearray" />
2168 </xsl:call-template>
2169 </xsl:when>
2170 <xsl:otherwise>
2171 <xsl:text>void</xsl:text>
2172 </xsl:otherwise>
2173 </xsl:choose>
2174 </xsl:variable>
2175 <xsl:variable name="paramsinout" select="param[@dir='in' or @dir='out']" />
2176 <xsl:choose>
2177 <xsl:when test="$G_vboxGlueStyle='xpcom'">
2178 <xsl:value-of select="concat(' public ', $returnbacktype, ' ', $methodname, '(')" />
2179 <xsl:for-each select="exsl:node-set($paramsinout)">
2180 <xsl:variable name="parambacktype">
2181 <xsl:call-template name="typeIdl2Back">
2182 <xsl:with-param name="type" select="@type" />
2183 <xsl:with-param name="safearray" select="@safearray" />
2184 </xsl:call-template>
2185 </xsl:variable>
2186 <xsl:choose>
2187 <xsl:when test="@dir='out'">
2188 <xsl:value-of select="concat($parambacktype, '[] ', @name)" />
2189 </xsl:when>
2190 <xsl:otherwise>
2191 <xsl:if test="@safearray">
2192 <xsl:value-of select="concat('long len_', @name, ', ')" />
2193 </xsl:if>
2194 <xsl:value-of select="concat($parambacktype, ' ', @name)" />
2195 </xsl:otherwise>
2196 </xsl:choose>
2197 <xsl:if test="not(position()=last())">
2198 <xsl:text>, </xsl:text>
2199 </xsl:if>
2200 </xsl:for-each>
2201 <xsl:text>)&#10;</xsl:text>
2202 <xsl:text> {&#10;</xsl:text>
2203 </xsl:when>
2204
2205 <xsl:when test="$G_vboxGlueStyle='mscom'">
2206 <xsl:variable name="capsname">
2207 <xsl:call-template name="capitalize">
2208 <xsl:with-param name="str" select="$methodname" />
2209 </xsl:call-template>
2210 </xsl:variable>
2211 <xsl:value-of select="concat(' public ', $returnbacktype, ' ', $capsname, '(')" />
2212 <xsl:text>Variant _args[])&#10;</xsl:text>
2213 <xsl:text> {&#10;</xsl:text>
2214 <xsl:for-each select="exsl:node-set($paramsinout)">
2215 <xsl:variable name="parambacktype">
2216 <xsl:call-template name="typeIdl2Back">
2217 <xsl:with-param name="type" select="@type" />
2218 <xsl:with-param name="safearray" select="@safearray" />
2219 </xsl:call-template>
2220 </xsl:variable>
2221 <xsl:value-of select="concat(' ', $parambacktype, ' ', @name, '=_args[', count(preceding-sibling::param), '];&#10;')" />
2222 </xsl:for-each>
2223 </xsl:when>
2224
2225 <xsl:otherwise>
2226 <xsl:call-template name="fatalError">
2227 <xsl:with-param name="msg" select="'Style unknown (genSetterCall)'" />
2228 </xsl:call-template>
2229 </xsl:otherwise>
2230 </xsl:choose>
2231
2232 <!-- declare temp out params -->
2233 <xsl:for-each select="param[@dir='out']">
2234 <xsl:variable name="glueouttype">
2235 <xsl:call-template name="typeIdl2Glue">
2236 <xsl:with-param name="type" select="@type" />
2237 <xsl:with-param name="safearray" select="@safearray" />
2238 </xsl:call-template>
2239 </xsl:variable>
2240 <xsl:value-of select="concat(' Holder&lt;', $glueouttype, '&gt; tmp_', @name, ' = new Holder&lt;', $glueouttype, '&gt;();&#10;')"/>
2241 </xsl:for-each>
2242
2243 <!-- declare return param, if any -->
2244 <xsl:if test="$hasReturnParms">
2245 <xsl:variable name="gluerettype">
2246 <xsl:call-template name="typeIdl2Glue">
2247 <xsl:with-param name="type" select="$returnidltype" />
2248 <xsl:with-param name="safearray" select="$returnidlsafearray" />
2249 </xsl:call-template>
2250 </xsl:variable>
2251 <xsl:value-of select="concat(' ', $gluerettype, ' retVal = &#10;')"/>
2252 </xsl:if>
2253
2254 <!-- Method call -->
2255 <xsl:value-of select="concat(' sink.', $methodname, '(')"/>
2256 <xsl:for-each select="param[not(@dir='return')]">
2257 <xsl:choose>
2258 <xsl:when test="@dir='out'">
2259 <xsl:value-of select="concat('tmp_', @name)" />
2260 </xsl:when>
2261 <xsl:when test="@dir='in'">
2262 <xsl:variable name="wrapped">
2263 <xsl:call-template name="cookOutParam">
2264 <xsl:with-param name="value" select="@name" />
2265 <xsl:with-param name="idltype" select="@type" />
2266 <xsl:with-param name="safearray" select="@safearray" />
2267 </xsl:call-template>
2268 </xsl:variable>
2269 <xsl:value-of select="$wrapped"/>
2270 </xsl:when>
2271 <xsl:otherwise>
2272 <xsl:call-template name="fatalError">
2273 <xsl:with-param name="msg" select="concat('Unsupported param dir: ', @dir, '&quot;.')" />
2274 </xsl:call-template>
2275 </xsl:otherwise>
2276 </xsl:choose>
2277 <xsl:if test="not(position()=last())">
2278 <xsl:text>, </xsl:text>
2279 </xsl:if>
2280 </xsl:for-each>
2281 <xsl:text>);&#10;</xsl:text>
2282
2283 <!-- return out params -->
2284 <xsl:for-each select="param[@dir='out']">
2285
2286 <xsl:variable name="unwrapped">
2287 <xsl:call-template name="cookInParam">
2288 <xsl:with-param name="value" select="concat('tmp_', @name, '.value')" />
2289 <xsl:with-param name="idltype" select="@type" />
2290 <xsl:with-param name="safearray" select="@safearray" />
2291 </xsl:call-template>
2292 </xsl:variable>
2293 <xsl:choose>
2294 <xsl:when test="$G_vboxGlueStyle='xpcom'">
2295 <xsl:value-of select="concat(' ', @name, '[0] = ', $unwrapped, ';&#10;')"/>
2296 </xsl:when>
2297 <xsl:when test="$G_vboxGlueStyle='mscom'">
2298 <xsl:value-of select="concat(' _args[', count(preceding-sibling::param), '] = ', $unwrapped, ';&#10;')"/>
2299 </xsl:when>
2300 </xsl:choose>
2301 </xsl:for-each>
2302
2303 <xsl:if test="$hasReturnParms">
2304 <!-- actual 'return' statement -->
2305 <xsl:variable name="unwrapped">
2306 <xsl:call-template name="cookInParam">
2307 <xsl:with-param name="value" select="'retVal'" />
2308 <xsl:with-param name="idltype" select="$returnidltype" />
2309 <xsl:with-param name="safearray" select="$returnidlsafearray" />
2310 </xsl:call-template>
2311 </xsl:variable>
2312 <xsl:value-of select="concat(' return ', $unwrapped, ';&#10;')" />
2313 </xsl:if>
2314 <xsl:text> }&#10;</xsl:text>
2315 </xsl:otherwise>
2316 </xsl:choose>
2317</xsl:template>
2318
2319<!-- Interface method -->
2320<xsl:template name="genIfaceWrapper">
2321 <xsl:param name="ifname"/>
2322
2323 <xsl:variable name="wrappedType">
2324 <xsl:call-template name="wrappedName">
2325 <xsl:with-param name="ifname" select="$ifname" />
2326 </xsl:call-template>
2327 </xsl:variable>
2328
2329 <!-- Constructor -->
2330 <xsl:choose>
2331 <xsl:when test="($G_vboxGlueStyle='jaxws')">
2332 <xsl:value-of select="concat(' public ', $ifname, '(String wrapped, VboxPortType port)&#10;')" />
2333 <xsl:text> {&#10;</xsl:text>
2334 <xsl:text> super(wrapped, port);&#10;</xsl:text>
2335 <xsl:text> }&#10;</xsl:text>
2336 </xsl:when>
2337
2338 <xsl:when test="($G_vboxGlueStyle='xpcom') or ($G_vboxGlueStyle='mscom')">
2339 <xsl:value-of select="concat(' public ', $ifname, '(', $wrappedType, ' wrapped)&#10;')" />
2340 <xsl:text> {&#10;</xsl:text>
2341 <xsl:text> super(wrapped);&#10;</xsl:text>
2342 <xsl:text> }&#10;</xsl:text>
2343
2344 <!-- Typed wrapped object accessor -->
2345 <xsl:value-of select="concat(' public ', $wrappedType, ' getTypedWrapped()&#10;')" />
2346 <xsl:text> {&#10;</xsl:text>
2347 <xsl:value-of select="concat(' return (', $wrappedType, ') getWrapped();&#10;')" />
2348 <xsl:text> }&#10;</xsl:text>
2349 </xsl:when>
2350
2351 <xsl:otherwise>
2352 <xsl:call-template name="fatalError">
2353 <xsl:with-param name="msg" select="'Style unknown (root, ctr)'" />
2354 </xsl:call-template>
2355 </xsl:otherwise>
2356 </xsl:choose>
2357 <!-- Attributes -->
2358 <xsl:for-each select="attribute[not(@mod='ptr')]">
2359 <xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
2360 <xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
2361 <xsl:variable name="attrsafearray"><xsl:value-of select="@safearray" /></xsl:variable>
2362
2363 <xsl:choose>
2364 <xsl:when test="($G_vboxGlueStyle='jaxws') and ($attrtype=($G_setSuppressedInterfaces/@name))">
2365 <xsl:value-of select="concat(' // Skipping attribute ', $attrname, ' of suppressed type ', $attrtype, '&#10;&#10;')" />
2366 </xsl:when>
2367 <xsl:when test="($G_vboxGlueStyle='jaxws') and (@wsmap = 'suppress')" >
2368 <xsl:value-of select="concat(' // Skipping attribute ', $attrname, ' for it is suppressed&#10;')" />
2369 </xsl:when>
2370
2371 <xsl:otherwise>
2372 <!-- emit getter method -->
2373 <xsl:apply-templates select="desc" mode="attribute_get"/>
2374 <xsl:variable name="gettername">
2375 <xsl:call-template name="makeGetterName">
2376 <xsl:with-param name="attrname" select="$attrname" />
2377 </xsl:call-template>
2378 </xsl:variable>
2379 <xsl:variable name="gluetype">
2380 <xsl:call-template name="typeIdl2Glue">
2381 <xsl:with-param name="type" select="$attrtype" />
2382 <xsl:with-param name="safearray" select="@safearray" />
2383 </xsl:call-template>
2384 </xsl:variable>
2385 <xsl:variable name="backtype">
2386 <xsl:call-template name="typeIdl2Back">
2387 <xsl:with-param name="type" select="$attrtype" />
2388 <xsl:with-param name="safearray" select="@safearray" />
2389 </xsl:call-template>
2390 </xsl:variable>
2391 <xsl:variable name="wrapped">
2392 <xsl:call-template name="cookOutParam">
2393 <xsl:with-param name="value" select="'retVal'" />
2394 <xsl:with-param name="idltype" select="$attrtype" />
2395 <xsl:with-param name="safearray" select="@safearray" />
2396 </xsl:call-template>
2397 </xsl:variable>
2398 <xsl:value-of select="concat(' public ', $gluetype, ' ', $gettername, '()&#10;')" />
2399 <xsl:text> {&#10;</xsl:text>
2400
2401 <xsl:call-template name="startExcWrapper"/>
2402
2403 <!-- Actual getter implementation -->
2404 <xsl:call-template name="genGetterCall">
2405 <xsl:with-param name="ifname" select="$ifname" />
2406 <xsl:with-param name="gettername" select="$gettername" />
2407 <xsl:with-param name="backtype" select="$backtype" />
2408 <xsl:with-param name="retval" select="'retVal'" />
2409 </xsl:call-template>
2410
2411 <xsl:value-of select="concat(' return ', $wrapped, ';&#10;')" />
2412 <xsl:call-template name="endExcWrapper"/>
2413
2414 <xsl:text> }&#10;</xsl:text>
2415 <xsl:if test="not(@readonly = 'yes')">
2416 <!-- emit setter method -->
2417 <xsl:apply-templates select="desc" mode="attribute_set"/>
2418 <xsl:variable name="settername"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname" /></xsl:call-template></xsl:variable>
2419 <xsl:variable name="unwrapped">
2420 <xsl:call-template name="cookInParam">
2421 <xsl:with-param name="ifname" select="$ifname" />
2422 <xsl:with-param name="value" select="'value'" />
2423 <xsl:with-param name="idltype" select="$attrtype" />
2424 <xsl:with-param name="safearray" select="@safearray" />
2425 </xsl:call-template>
2426 </xsl:variable>
2427 <xsl:value-of select="concat(' public void ', $settername, '(', $gluetype, ' value)&#10;')" />
2428 <xsl:text> {&#10;</xsl:text>
2429 <xsl:call-template name="startExcWrapper"/>
2430 <!-- Actual setter implementation -->
2431 <xsl:call-template name="genSetterCall">
2432 <xsl:with-param name="ifname" select="$ifname" />
2433 <xsl:with-param name="settername" select="$settername" />
2434 <xsl:with-param name="value" select="$unwrapped" />
2435 </xsl:call-template>
2436 <xsl:call-template name="endExcWrapper"/>
2437 <xsl:text> }&#10;</xsl:text>
2438 </xsl:if>
2439
2440 </xsl:otherwise>
2441 </xsl:choose>
2442
2443 </xsl:for-each>
2444
2445 <!-- emit queryInterface() *to* this class -->
2446 <xsl:call-template name="genQI">
2447 <xsl:with-param name="ifname" select="$ifname" />
2448 <xsl:with-param name="uuid" select="@uuid" />
2449 </xsl:call-template>
2450
2451 <!-- emit methods -->
2452 <xsl:for-each select="method">
2453 <xsl:call-template name="genMethod">
2454 <xsl:with-param name="ifname" select="$ifname" />
2455 <xsl:with-param name="methodname" select="@name" />
2456 </xsl:call-template>
2457 </xsl:for-each>
2458
2459</xsl:template>
2460
2461<xsl:template name="genIface">
2462 <xsl:param name="ifname" />
2463 <xsl:param name="filename" />
2464
2465 <xsl:variable name="wsmap" select="@wsmap" />
2466
2467 <xsl:call-template name="startFile">
2468 <xsl:with-param name="file" select="$filename" />
2469 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
2470 </xsl:call-template>
2471
2472 <xsl:if test="$filelistonly=''">
2473 <xsl:text>import java.util.List;&#10;&#10;</xsl:text>
2474
2475 <xsl:apply-templates select="desc" mode="interface"/>
2476
2477 <xsl:choose>
2478 <xsl:when test="($wsmap='struct') and ($G_vboxGlueStyle='jaxws')">
2479 <xsl:value-of select="concat('public class ', $ifname, '&#10;')" />
2480 <xsl:text>{&#10;&#10;</xsl:text>
2481 <xsl:call-template name="genStructWrapperJaxws">
2482 <xsl:with-param name="ifname" select="$ifname" />
2483 </xsl:call-template>
2484 </xsl:when>
2485
2486 <xsl:otherwise>
2487 <xsl:variable name="extends" select="//interface[@name=$ifname]/@extends" />
2488 <xsl:choose>
2489 <xsl:when test="($extends = '$unknown') or ($extends = '$dispatched') or ($extends = '$errorinfo')">
2490 <xsl:value-of select="concat('public class ', $ifname, ' extends IUnknown&#10;')" />
2491 <xsl:text>{&#10;&#10;</xsl:text>
2492 </xsl:when>
2493 <xsl:when test="//interface[@name=$extends]">
2494 <xsl:value-of select="concat('public class ', $ifname, ' extends ', $extends, '&#10;')" />
2495 <xsl:text>{&#10;&#10;</xsl:text>
2496 </xsl:when>
2497 <xsl:otherwise>
2498 <xsl:call-template name="fatalError">
2499 <xsl:with-param name="msg" select="concat('Interface generation: interface &quot;', $ifname, '&quot; has invalid &quot;extends&quot; value ', $extends, '.')" />
2500 </xsl:call-template>
2501 </xsl:otherwise>
2502 </xsl:choose>
2503 <xsl:call-template name="genIfaceWrapper">
2504 <xsl:with-param name="ifname" select="$ifname" />
2505 </xsl:call-template>
2506 </xsl:otherwise>
2507 </xsl:choose>
2508
2509 <!-- end of class -->
2510 <xsl:text>}&#10;</xsl:text>
2511 </xsl:if>
2512
2513 <xsl:call-template name="endFile">
2514 <xsl:with-param name="file" select="$filename" />
2515 </xsl:call-template>
2516
2517</xsl:template>
2518
2519<xsl:template name="genCb">
2520 <xsl:param name="ifname" />
2521 <xsl:param name="filename" />
2522 <xsl:param name="filenameimpl" />
2523
2524 <xsl:call-template name="startFile">
2525 <xsl:with-param name="file" select="$filename" />
2526 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
2527 </xsl:call-template>
2528
2529 <xsl:text>import java.util.List;&#10;</xsl:text>
2530
2531 <xsl:value-of select="concat('public interface ', $ifname, '&#10;')" />
2532 <xsl:text>{&#10;</xsl:text>
2533
2534 <!-- emit methods declarations-->
2535 <xsl:for-each select="method">
2536 <xsl:call-template name="genCbMethodDecl">
2537 <xsl:with-param name="ifname" select="$ifname" />
2538 <xsl:with-param name="methodname" select="@name" />
2539 </xsl:call-template>
2540 </xsl:for-each>
2541
2542 <xsl:text>}&#10;&#10;</xsl:text>
2543
2544 <xsl:call-template name="endFile">
2545 <xsl:with-param name="file" select="$filename" />
2546 </xsl:call-template>
2547
2548 <xsl:call-template name="startFile">
2549 <xsl:with-param name="file" select="$filenameimpl" />
2550 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
2551 </xsl:call-template>
2552
2553 <xsl:text>import java.util.List;&#10;</xsl:text>
2554
2555 <xsl:variable name="backtype">
2556 <xsl:call-template name="typeIdl2Back">
2557 <xsl:with-param name="type" select="$ifname" />
2558 </xsl:call-template>
2559 </xsl:variable>
2560
2561 <!-- emit glue methods body -->
2562 <xsl:choose>
2563 <xsl:when test="$G_vboxGlueStyle='xpcom'">
2564 <xsl:value-of select="concat('class ', $ifname, 'Impl extends nsISupportsBase implements ', $backtype, '&#10;')" />
2565 <xsl:text>{&#10;</xsl:text>
2566 </xsl:when>
2567
2568 <xsl:when test="$G_vboxGlueStyle='mscom'">
2569 <xsl:value-of select="concat('public class ', $ifname, 'Impl&#10;')" />
2570 <xsl:text>{&#10;</xsl:text>
2571 </xsl:when>
2572 </xsl:choose>
2573
2574 <xsl:value-of select="concat(' ', $ifname, ' sink;&#10;')" />
2575
2576 <xsl:value-of select="concat(' ', $ifname, 'Impl(', $ifname, ' sink)&#10;')" />
2577 <xsl:text> {&#10;</xsl:text>
2578 <xsl:text> this.sink = sink;&#10;</xsl:text>
2579 <xsl:text> }&#10;</xsl:text>
2580
2581 <!-- emit methods implementations -->
2582 <xsl:for-each select="method">
2583 <xsl:call-template name="genCbMethodImpl">
2584 <xsl:with-param name="ifname" select="$ifname" />
2585 <xsl:with-param name="methodname" select="@name" />
2586 </xsl:call-template>
2587 </xsl:for-each>
2588
2589 <xsl:text>}&#10;&#10;</xsl:text>
2590
2591 <xsl:call-template name="endFile">
2592 <xsl:with-param name="file" select="$filenameimpl" />
2593 </xsl:call-template>
2594</xsl:template>
2595
2596<xsl:template name="emitHandwritten">
2597
2598 <xsl:call-template name="startFile">
2599 <xsl:with-param name="file" select="'Holder.java'" />
2600 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
2601 </xsl:call-template>
2602
2603 <xsl:if test="$filelistonly=''">
2604 <xsl:text><![CDATA[
2605public class Holder<T>
2606{
2607 public T value;
2608
2609 public Holder()
2610 {
2611 }
2612 public Holder(T value)
2613 {
2614 this.value = value;
2615 }
2616}
2617]]></xsl:text>
2618 </xsl:if>
2619
2620 <xsl:call-template name="endFile">
2621 <xsl:with-param name="file" select="'Holder.java'" />
2622 </xsl:call-template>
2623</xsl:template>
2624
2625<xsl:template name="emitHandwrittenXpcom">
2626
2627 <xsl:call-template name="startFile">
2628 <xsl:with-param name="file" select="'IUnknown.java'" />
2629 <xsl:with-param name="package" select="$G_virtualBoxPackageCom" />
2630 </xsl:call-template>
2631
2632 <xsl:if test="$filelistonly=''">
2633 <xsl:text><![CDATA[
2634public class IUnknown
2635{
2636 private Object obj;
2637 public IUnknown(Object obj)
2638 {
2639 this.obj = obj;
2640 }
2641
2642 public Object getWrapped()
2643 {
2644 return this.obj;
2645 }
2646
2647 public void setWrapped(Object obj)
2648 {
2649 this.obj = obj;
2650 }
2651}
2652]]></xsl:text>
2653 </xsl:if>
2654
2655 <xsl:call-template name="endFile">
2656 <xsl:with-param name="file" select="'IUnknown.java'" />
2657 </xsl:call-template>
2658
2659 <xsl:call-template name="startFile">
2660 <xsl:with-param name="file" select="'Helper.java'" />
2661 <xsl:with-param name="package" select="$G_virtualBoxPackageCom" />
2662 </xsl:call-template>
2663
2664 <xsl:if test="$filelistonly=''">
2665 <xsl:text><![CDATA[
2666
2667import java.util.List;
2668import java.util.ArrayList;
2669import java.util.Collections;
2670import java.lang.reflect.Array;
2671import java.lang.reflect.Constructor;
2672import java.lang.reflect.Method;
2673import java.lang.reflect.InvocationTargetException;
2674
2675public class Helper
2676{
2677 public static List<Short> wrap(byte[] values)
2678 {
2679 if (values == null)
2680 return null;
2681
2682 List<Short> ret = new ArrayList<Short>(values.length);
2683 for (short v : values)
2684 {
2685 ret.add(v);
2686 }
2687 return ret;
2688 }
2689
2690 public static List<Short> wrap(short[] values)
2691 {
2692 if (values == null)
2693 return null;
2694
2695 List<Short> ret = new ArrayList<Short>(values.length);
2696 for (short v : values)
2697 {
2698 ret.add(v);
2699 }
2700 return ret;
2701 }
2702
2703 public static List<Integer> wrap(int[] values)
2704 {
2705 if (values == null)
2706 return null;
2707
2708 List<Integer> ret = new ArrayList<Integer>(values.length);
2709 for (int v : values)
2710 {
2711 ret.add(v);
2712 }
2713 return ret;
2714 }
2715
2716 public static List<Long> wrap(long[] values)
2717 {
2718 if (values == null)
2719 return null;
2720
2721 List<Long> ret = new ArrayList<Long>(values.length);
2722 for (long v : values)
2723 {
2724 ret.add(v);
2725 }
2726 return ret;
2727 }
2728
2729 public static List<Boolean> wrap(boolean[] values)
2730 {
2731 if (values == null)
2732 return null;
2733
2734 List<Boolean> ret = new ArrayList<Boolean>(values.length);
2735 for (boolean v: values)
2736 {
2737 ret.add(v);
2738 }
2739 return ret;
2740 }
2741
2742 public static List<String> wrap(String[] values)
2743 {
2744 if (values == null)
2745 return null;
2746
2747 List<String> ret = new ArrayList<String>(values.length);
2748 for (String v : values)
2749 {
2750 ret.add(v);
2751 }
2752 return ret;
2753 }
2754
2755 public static <T> List<T> wrap(Class<T> wrapperClass, T[] values)
2756 {
2757 if (values == null)
2758 return null;
2759
2760 List<T> ret = new ArrayList<T>(values.length);
2761 for (T v : values)
2762 {
2763 ret.add(v);
2764 }
2765 return ret;
2766 }
2767
2768 @SuppressWarnings( "unchecked")
2769 public static <T> List<T> wrapEnum(Class<T> wrapperClass, long values[])
2770 {
2771 try
2772 {
2773 if (values == null)
2774 return null;
2775 //// This code is questionable, as it invokes a private constructor
2776 //// (all enums only have default constructors), and we don't really
2777 //// know what to pass as the name, and the ordinal may or may not
2778 //// be sensible, especially if the long was abused as a bitset.
2779 //Constructor<T> c = wrapperClass.getDeclaredConstructor(String.class, int.class, int.class);
2780 //c.setAccessible(true); // make it callable
2781 //List<T> ret = new ArrayList<T>(values.length);
2782 //for (long v : values)
2783 //{
2784 // T convEnum = c.newInstance("unknown", (int)v, (int)v);
2785 // ret.add(convEnum);
2786 //}
2787
2788 // Alternative implementation: use the fromValue method, which is
2789 // what the code handling single enums will do. I see no reason to
2790 // use the above very ugly hack if there are better alternatives,
2791 // which as a bonus complain about unknown values. This variant is
2792 // slower, but also orders of magnitude safer.
2793 java.lang.reflect.Method fromValue = wrapperClass.getMethod("fromValue", long.class);
2794 List<T> ret = new ArrayList<T>(values.length);
2795 for (long v : values)
2796 {
2797 T convEnum = (T)fromValue.invoke(null, v);
2798 ret.add(convEnum);
2799 }
2800 return ret;
2801 }
2802 catch (NoSuchMethodException e)
2803 {
2804 throw new AssertionError(e);
2805 }
2806 //catch (InstantiationException e)
2807 //{
2808 // throw new AssertionError(e);
2809 //}
2810 catch (IllegalAccessException e)
2811 {
2812 throw new AssertionError(e);
2813 }
2814 catch (InvocationTargetException e)
2815 {
2816 throw new AssertionError(e);
2817 }
2818 }
2819 public static short[] unwrapUShort(List<Short> values)
2820 {
2821 if (values == null)
2822 return null;
2823
2824 short[] ret = new short[values.size()];
2825 int i = 0;
2826 for (short l : values)
2827 {
2828 ret[i++] = l;
2829 }
2830 return ret;
2831 }
2832
2833 public static int[] unwrapInteger(List<Integer> values)
2834 {
2835 if (values == null)
2836 return null;
2837
2838 int[] ret = new int[values.size()];
2839 int i = 0;
2840 for (int l : values)
2841 {
2842 ret[i++] = l;
2843 }
2844 return ret;
2845 }
2846
2847 public static long[] unwrapULong(List<Long> values)
2848 {
2849 if (values == null)
2850 return null;
2851
2852 long[] ret = new long[values.size()];
2853 int i = 0;
2854 for (long l : values)
2855 {
2856 ret[i++] = l;
2857 }
2858 return ret;
2859 }
2860
2861 public static boolean[] unwrapBoolean(List<Boolean> values)
2862 {
2863 if (values == null)
2864 return null;
2865
2866 boolean[] ret = new boolean[values.size()];
2867 int i = 0;
2868 for (boolean l : values)
2869 {
2870 ret[i++] = l;
2871 }
2872 return ret;
2873 }
2874
2875 public static String[] unwrapStr(List<String> values)
2876 {
2877 if (values == null)
2878 return null;
2879
2880 String[] ret = new String[values.size()];
2881 int i = 0;
2882 for (String l : values)
2883 {
2884 ret[i++] = l;
2885 }
2886 return ret;
2887 }
2888
2889 public static <T extends Enum <T>> long[] unwrapEnum(Class<T> enumClass, List<T> values)
2890 {
2891 if (values == null)
2892 return null;
2893
2894 long result[] = new long[values.size()];
2895 try
2896 {
2897 java.lang.reflect.Method valueM = enumClass.getMethod("value");
2898 int i = 0;
2899 for (T v : values)
2900 {
2901 result[i++] = (Integer)valueM.invoke(v);
2902 }
2903 return result;
2904 }
2905 catch (NoSuchMethodException e)
2906 {
2907 throw new AssertionError(e);
2908 }
2909 catch(SecurityException e)
2910 {
2911 throw new AssertionError(e);
2912 }
2913 catch (IllegalAccessException e)
2914 {
2915 throw new AssertionError(e);
2916 }
2917 catch (IllegalArgumentException e)
2918 {
2919 throw new AssertionError(e);
2920 }
2921 catch (InvocationTargetException e)
2922 {
2923 throw new AssertionError(e);
2924 }
2925 }
2926
2927 public static <T1, T2> List<T1> wrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, T2[] values)
2928 {
2929 try
2930 {
2931 if (values == null)
2932 return null;
2933
2934 Constructor<T1> c = wrapperClass1.getConstructor(wrapperClass2);
2935 List<T1> ret = new ArrayList<T1>(values.length);
2936 for (T2 v : values)
2937 {
2938 ret.add(c.newInstance(v));
2939 }
2940 return ret;
2941 }
2942 catch (NoSuchMethodException e)
2943 {
2944 throw new AssertionError(e);
2945 }
2946 catch (InstantiationException e)
2947 {
2948 throw new AssertionError(e);
2949 }
2950 catch (IllegalAccessException e)
2951 {
2952 throw new AssertionError(e);
2953 }
2954 catch (InvocationTargetException e)
2955 {
2956 throw new AssertionError(e);
2957 }
2958 }
2959
2960 @SuppressWarnings( "unchecked")
2961 public static <T> T[] unwrap(Class<T> wrapperClass, List<T> values)
2962 {
2963 if (values == null)
2964 return null;
2965 if (values.size() == 0)
2966 return null;
2967 return (T[])values.toArray((T[])Array.newInstance(wrapperClass, values.size()));
2968 }
2969
2970 @SuppressWarnings( "unchecked" )
2971 public static <T> T queryInterface(Object obj, String uuid, Class<T> iface)
2972 {
2973 return (T)queryInterface(obj, uuid);
2974 }
2975
2976 public static Object queryInterface(Object obj, String uuid)
2977 {
2978 try
2979 {
2980 /* Kind of ugly, but does the job of casting */
2981 org.mozilla.xpcom.Mozilla moz = org.mozilla.xpcom.Mozilla.getInstance();
2982 long xpobj = moz.wrapJavaObject(obj, uuid);
2983 return moz.wrapXPCOMObject(xpobj, uuid);
2984 }
2985 catch (Exception e)
2986 {
2987 return null;
2988 }
2989 }
2990
2991 @SuppressWarnings("unchecked")
2992 public static <T1 extends IUnknown, T2> T2[] unwrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, List<T1> values)
2993 {
2994 if (values == null)
2995 return null;
2996
2997 T2 ret[] = (T2[])Array.newInstance(wrapperClass2, values.size());
2998 int i = 0;
2999 for (T1 obj : values)
3000 {
3001 ret[i++] = (T2)obj.getWrapped();
3002 }
3003 return ret;
3004 }
3005}
3006]]></xsl:text>
3007 </xsl:if>
3008
3009 <xsl:call-template name="endFile">
3010 <xsl:with-param name="file" select="'Helper.java'" />
3011 </xsl:call-template>
3012
3013 <xsl:call-template name="startFile">
3014 <xsl:with-param name="file" select="'VBoxException.java'" />
3015 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3016 </xsl:call-template>
3017
3018 <xsl:if test="$filelistonly=''">
3019 <xsl:text>
3020import org.mozilla.xpcom.*;
3021
3022public class VBoxException extends RuntimeException
3023{
3024 private int resultCode;
3025 private IVirtualBoxErrorInfo errorInfo;
3026
3027 public VBoxException(String message)
3028 {
3029 super(message);
3030 resultCode = -1;
3031 errorInfo = null;
3032 }
3033
3034 public VBoxException(String message, Throwable cause)
3035 {
3036 super(message, cause);
3037 if (cause instanceof org.mozilla.xpcom.XPCOMException)
3038 {
3039 resultCode = (int)((org.mozilla.xpcom.XPCOMException)cause).errorcode;
3040 try
3041 {
3042 Mozilla mozilla = Mozilla.getInstance();
3043 nsIServiceManager sm = mozilla.getServiceManager();
3044 nsIExceptionService es = (nsIExceptionService)sm.getServiceByContractID("@mozilla.org/exceptionservice;1", nsIExceptionService.NS_IEXCEPTIONSERVICE_IID);
3045 nsIExceptionManager em = es.getCurrentExceptionManager();
3046 nsIException ex = em.getCurrentException();
3047 errorInfo = new IVirtualBoxErrorInfo((org.mozilla.interfaces.IVirtualBoxErrorInfo)ex.queryInterface(org.mozilla.interfaces.IVirtualBoxErrorInfo.IVIRTUALBOXERRORINFO_IID));
3048 }
3049 catch (NullPointerException e)
3050 {
3051 e.printStackTrace();
3052 // nothing we can do
3053 errorInfo = null;
3054 }
3055 }
3056 else
3057 resultCode = -1;
3058 }
3059
3060 public int getResultCode()
3061 {
3062 return resultCode;
3063 }
3064
3065 public IVirtualBoxErrorInfo getVirtualBoxErrorInfo()
3066 {
3067 return errorInfo;
3068 }
3069}
3070</xsl:text>
3071 </xsl:if>
3072
3073 <xsl:call-template name="endFile">
3074 <xsl:with-param name="file" select="'VBoxException.java'" />
3075 </xsl:call-template>
3076
3077 <xsl:call-template name="startFile">
3078 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
3079 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3080 </xsl:call-template>
3081
3082 <xsl:if test="$filelistonly=''">
3083 <xsl:text><![CDATA[
3084
3085import java.io.File;
3086
3087import org.mozilla.xpcom.*;
3088import org.mozilla.interfaces.*;
3089
3090public class VirtualBoxManager
3091{
3092 private Mozilla mozilla;
3093 private IVirtualBox vbox;
3094 private nsIComponentManager componentManager;
3095
3096 private VirtualBoxManager(Mozilla mozilla)
3097 {
3098 this.mozilla = mozilla;
3099 this.componentManager = mozilla.getComponentManager();
3100 this.vbox = new IVirtualBox((org.mozilla.interfaces.IVirtualBox) this.componentManager
3101 .createInstanceByContractID("@virtualbox.org/VirtualBox;1",
3102 null,
3103 org.mozilla.interfaces.IVirtualBox.IVIRTUALBOX_IID));
3104 }
3105
3106 public void connect(String url, String username, String passwd)
3107 {
3108 throw new VBoxException("Connect doesn't make sense for local bindings");
3109 }
3110
3111 public void disconnect()
3112 {
3113 throw new VBoxException("Disconnect doesn't make sense for local bindings");
3114 }
3115
3116 public static void initPerThread()
3117 {
3118 }
3119
3120 public static void deinitPerThread()
3121 {
3122 }
3123
3124 public IVirtualBox getVBox()
3125 {
3126 return this.vbox;
3127 }
3128
3129 public ISession getSessionObject()
3130 {
3131 return new ISession((org.mozilla.interfaces.ISession) componentManager
3132 .createInstanceByContractID("@virtualbox.org/Session;1", null,
3133 org.mozilla.interfaces.ISession.ISESSION_IID));
3134 }
3135
3136 public ISession openMachineSession(IMachine m) throws Exception
3137 {
3138 ISession s = getSessionObject();
3139 m.lockMachine(s, LockType.Shared);
3140 return s;
3141 }
3142
3143 public void closeMachineSession(ISession s)
3144 {
3145 if (s != null)
3146 s.unlockMachine();
3147 }
3148
3149 private static boolean hasInstance = false;
3150 private static boolean isMozillaInited = false;
3151
3152 public static synchronized VirtualBoxManager createInstance(String home)
3153 {
3154 if (hasInstance)
3155 throw new VBoxException("only one instance of VirtualBoxManager at a time allowed");
3156 if (home == null || home.equals(""))
3157 home = System.getProperty("vbox.home");
3158
3159 if (home == null)
3160 throw new VBoxException("vbox.home Java property must be defined to use XPCOM bridge");
3161
3162 File grePath = new File(home);
3163
3164 Mozilla mozilla = Mozilla.getInstance();
3165 if (!isMozillaInited)
3166 {
3167 mozilla.initialize(grePath);
3168 try
3169 {
3170 mozilla.initXPCOM(grePath, null);
3171 isMozillaInited = true;
3172 }
3173 catch (Exception e)
3174 {
3175 e.printStackTrace();
3176 return null;
3177 }
3178 }
3179
3180 hasInstance = true;
3181
3182 return new VirtualBoxManager(mozilla);
3183 }
3184
3185 public IEventListener createListener(Object sink)
3186 {
3187 return new IEventListener(new EventListenerImpl(sink));
3188 }
3189
3190 public void cleanup()
3191 {
3192 deinitPerThread();
3193 // cleanup, we don't do that, as XPCOM bridge doesn't cleanly
3194 // shuts down, so we prefer to avoid native shutdown
3195 // mozilla.shutdownXPCOM(null);
3196 mozilla = null;
3197 hasInstance = false;
3198 }
3199
3200 public void waitForEvents(long tmo)
3201 {
3202 mozilla.waitForEvents(tmo);
3203 }
3204}
3205]]></xsl:text>
3206 </xsl:if>
3207
3208 <xsl:call-template name="endFile">
3209 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
3210 </xsl:call-template>
3211
3212 <xsl:call-template name="startFile">
3213 <xsl:with-param name="file" select="'EventListenerImpl.java'" />
3214 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3215 </xsl:call-template>
3216
3217 <xsl:if test="$filelistonly=''">
3218 <xsl:text><![CDATA[
3219import org.mozilla.interfaces.*;
3220
3221public class EventListenerImpl extends nsISupportsBase implements org.mozilla.interfaces.IEventListener
3222{
3223 private Object obj;
3224 private java.lang.reflect.Method handleEvent;
3225 EventListenerImpl(Object obj)
3226 {
3227 this.obj = obj;
3228 try
3229 {
3230 this.handleEvent = obj.getClass().getMethod("handleEvent", IEvent.class);
3231 }
3232 catch (Exception e)
3233 {
3234 e.printStackTrace();
3235 }
3236 }
3237 public void handleEvent(org.mozilla.interfaces.IEvent ev)
3238 {
3239 try
3240 {
3241 if (obj != null && handleEvent != null)
3242 handleEvent.invoke(obj, ev != null ? new IEvent(ev) : null);
3243 }
3244 catch (Exception e)
3245 {
3246 e.printStackTrace();
3247 }
3248 }
3249}]]></xsl:text>
3250 </xsl:if>
3251
3252 <xsl:call-template name="endFile">
3253 <xsl:with-param name="file" select="'EventListenerImpl.java'" />
3254 </xsl:call-template>
3255
3256 <xsl:call-template name="startFile">
3257 <xsl:with-param name="file" select="'VBoxObjectBase.java'" />
3258 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3259 </xsl:call-template>
3260
3261 <xsl:if test="$filelistonly=''">
3262 <xsl:text><![CDATA[
3263abstract class nsISupportsBase implements org.mozilla.interfaces.nsISupports
3264{
3265 public org.mozilla.interfaces.nsISupports queryInterface(String iid)
3266 {
3267 return org.mozilla.xpcom.Mozilla.queryInterface(this, iid);
3268 }
3269}
3270
3271]]></xsl:text>
3272 </xsl:if>
3273
3274 <xsl:call-template name="endFile">
3275 <xsl:with-param name="file" select="'VBoxObjectBase.java'" />
3276 </xsl:call-template>
3277</xsl:template>
3278
3279
3280<xsl:template name="emitHandwrittenMscom">
3281
3282 <xsl:call-template name="startFile">
3283 <xsl:with-param name="file" select="'IUnknown.java'" />
3284 <xsl:with-param name="package" select="$G_virtualBoxPackageCom" />
3285 </xsl:call-template>
3286
3287 <xsl:if test="$filelistonly=''">
3288 <xsl:text><![CDATA[
3289public class IUnknown
3290{
3291 private Object obj;
3292 public IUnknown(Object obj)
3293 {
3294 this.obj = obj;
3295 }
3296
3297 public Object getWrapped()
3298 {
3299 return this.obj;
3300 }
3301
3302 public void setWrapped(Object obj)
3303 {
3304 this.obj = obj;
3305 }
3306}
3307]]></xsl:text>
3308 </xsl:if>
3309
3310 <xsl:call-template name="endFile">
3311 <xsl:with-param name="file" select="'IUnknown.java'" />
3312 </xsl:call-template>
3313
3314 <xsl:call-template name="startFile">
3315 <xsl:with-param name="file" select="'Helper.java'" />
3316 <xsl:with-param name="package" select="$G_virtualBoxPackageCom" />
3317 </xsl:call-template>
3318
3319 <xsl:if test="$filelistonly=''">
3320 <xsl:text><![CDATA[
3321
3322import java.util.List;
3323import java.util.ArrayList;
3324import java.util.Collections;
3325import java.lang.reflect.Array;
3326import java.lang.reflect.Constructor;
3327import java.lang.reflect.InvocationTargetException;
3328import com.jacob.com.*;
3329
3330public class Helper
3331{
3332 public static List<Short> wrap(short[] values)
3333 {
3334 if (values == null)
3335 return null;
3336 if (values.length == 0)
3337 return Collections.emptyList();
3338
3339 List<Short> ret = new ArrayList<Short>(values.length);
3340 for (short v : values)
3341 {
3342 ret.add(v);
3343 }
3344 return ret;
3345 }
3346
3347 public static List<Integer> wrap(int[] values)
3348 {
3349 if (values == null)
3350 return null;
3351 if (values.length == 0)
3352 return Collections.emptyList();
3353
3354 List<Integer> ret = new ArrayList<Integer>(values.length);
3355 for (int v : values)
3356 {
3357 ret.add(v);
3358 }
3359 return ret;
3360 }
3361
3362 public static List<Long> wrap(long[] values)
3363 {
3364 if (values == null)
3365 return null;
3366 if (values.length == 0)
3367 return Collections.emptyList();
3368
3369 List<Long> ret = new ArrayList<Long>(values.length);
3370 for (long v : values)
3371 {
3372 ret.add(v);
3373 }
3374 return ret;
3375 }
3376
3377 public static List<String> wrap(String[] values)
3378 {
3379 if (values == null)
3380 return null;
3381 if (values.length == 0)
3382 return Collections.emptyList();
3383
3384 List<String> ret = new ArrayList<String>(values.length);
3385 for (String v : values)
3386 {
3387 ret.add(v);
3388 }
3389 return ret;
3390 }
3391
3392 public static <T> T wrapDispatch(Class<T> wrapperClass, Dispatch d)
3393 {
3394 try
3395 {
3396 if (d == null || d.m_pDispatch == 0)
3397 return null;
3398 Constructor<T> c = wrapperClass.getConstructor(Dispatch.class);
3399 return (T)c.newInstance(d);
3400 }
3401 catch (NoSuchMethodException e)
3402 {
3403 throw new AssertionError(e);
3404 }
3405 catch (InstantiationException e)
3406 {
3407 throw new AssertionError(e);
3408 }
3409 catch (IllegalAccessException e)
3410 {
3411 throw new AssertionError(e);
3412 }
3413 catch (InvocationTargetException e)
3414 {
3415 throw new AssertionError(e);
3416 }
3417 }
3418
3419 @SuppressWarnings("unchecked")
3420 public static <T> Object wrapVariant(Class<T> wrapperClass, Variant v)
3421 {
3422 if (v == null)
3423 return null;
3424
3425 short vt = v.getvt();
3426 switch (vt)
3427 {
3428 case Variant.VariantNull:
3429 return null;
3430 case Variant.VariantBoolean:
3431 return v.getBoolean();
3432 case Variant.VariantByte:
3433 return v.getByte();
3434 case Variant.VariantShort:
3435 return v.getShort();
3436 case Variant.VariantInt:
3437 return v.getInt();
3438 case Variant.VariantLongInt:
3439 return v.getLong();
3440 case Variant.VariantString:
3441 return v.getString();
3442 case Variant.VariantDispatch:
3443 return wrapDispatch(wrapperClass, v.getDispatch());
3444 default:
3445 throw new VBoxException("unhandled variant type " + vt);
3446 }
3447 }
3448
3449 public static byte[] wrapBytes(SafeArray sa)
3450 {
3451 if (sa == null)
3452 return null;
3453
3454 int saLen = sa.getUBound() - sa.getLBound() + 1;
3455
3456 byte[] ret = new byte[saLen];
3457 int j = 0;
3458 for (int i = sa.getLBound(); i <= sa.getUBound(); i++)
3459 {
3460 Variant v = sa.getVariant(i);
3461 // come up with more effective approach!!!
3462 ret[j++] = v.getByte();
3463 }
3464 return ret;
3465 }
3466
3467 @SuppressWarnings("unchecked")
3468 public static <T> List<T> wrap(Class<T> wrapperClass, SafeArray sa)
3469 {
3470 if (sa == null)
3471 return null;
3472
3473 int saLen = sa.getUBound() - sa.getLBound() + 1;
3474 if (saLen == 0)
3475 return Collections.emptyList();
3476
3477 List<T> ret = new ArrayList<T>(saLen);
3478 for (int i = sa.getLBound(); i <= sa.getUBound(); i++)
3479 {
3480 Variant v = sa.getVariant(i);
3481 ret.add((T)wrapVariant(wrapperClass, v));
3482 }
3483 return ret;
3484 }
3485
3486 public static <T> List<T> wrapEnum(Class<T> wrapperClass, SafeArray sa)
3487 {
3488 try
3489 {
3490 if (sa == null)
3491 return null;
3492
3493 int saLen = sa.getUBound() - sa.getLBound() + 1;
3494 if (saLen == 0)
3495 return Collections.emptyList();
3496 List<T> ret = new ArrayList<T>(saLen);
3497 Constructor<T> c = wrapperClass.getConstructor(int.class);
3498 for (int i = sa.getLBound(); i <= sa.getUBound(); i++)
3499 {
3500 Variant v = sa.getVariant(i);
3501 ret.add(c.newInstance(v.getInt()));
3502 }
3503 return ret;
3504 }
3505 catch (NoSuchMethodException e)
3506 {
3507 throw new AssertionError(e);
3508 }
3509 catch (InstantiationException e)
3510 {
3511 throw new AssertionError(e);
3512 }
3513 catch (IllegalAccessException e)
3514 {
3515 throw new AssertionError(e);
3516 }
3517 catch (InvocationTargetException e)
3518 {
3519 throw new AssertionError(e);
3520 }
3521 }
3522
3523 public static SafeArray unwrapInt(List<Integer> values)
3524 {
3525 if (values == null)
3526 return null;
3527 SafeArray ret = new SafeArray(Variant.VariantInt, values.size());
3528 int i = 0;
3529 for (int l : values)
3530 {
3531 ret.setInt(i++, l);
3532 }
3533 return ret;
3534 }
3535
3536 public static SafeArray unwrapLong(List<Long> values)
3537 {
3538 if (values == null)
3539 return null;
3540 SafeArray ret = new SafeArray(Variant.VariantLongInt, values.size());
3541 int i = 0;
3542 for (long l : values)
3543 {
3544 ret.setLong(i++, l);
3545 }
3546 return ret;
3547 }
3548
3549 public static SafeArray unwrapBool(List<Boolean> values)
3550 {
3551 if (values == null)
3552 return null;
3553
3554 SafeArray result = new SafeArray(Variant.VariantBoolean, values.size());
3555 int i = 0;
3556 for (boolean l : values)
3557 {
3558 result.setBoolean(i++, l);
3559 }
3560 return result;
3561 }
3562
3563
3564 public static SafeArray unwrapBytes(byte[] values)
3565 {
3566 if (values == null)
3567 return null;
3568
3569 SafeArray result = new SafeArray(Variant.VariantByte, values.length);
3570 int i = 0;
3571 for (byte l : values)
3572 {
3573 result.setByte(i++, l);
3574 }
3575 return result;
3576 }
3577
3578
3579 public static <T extends Enum <T>> SafeArray unwrapEnum(Class<T> enumClass, List<T> values)
3580 {
3581 if (values == null)
3582 return null;
3583
3584 SafeArray result = new SafeArray(Variant.VariantInt, values.size());
3585 try
3586 {
3587 java.lang.reflect.Method valueM = enumClass.getMethod("value");
3588 int i = 0;
3589 for (T v : values)
3590 {
3591 result.setInt(i++, (Integer)valueM.invoke(v));
3592 }
3593 return result;
3594 }
3595 catch (NoSuchMethodException e)
3596 {
3597 throw new AssertionError(e);
3598 }
3599 catch(SecurityException e)
3600 {
3601 throw new AssertionError(e);
3602 }
3603 catch (IllegalAccessException e)
3604 {
3605 throw new AssertionError(e);
3606 }
3607 catch (IllegalArgumentException e)
3608 {
3609 throw new AssertionError(e);
3610 }
3611 catch (InvocationTargetException e)
3612 {
3613 throw new AssertionError(e);
3614 }
3615 }
3616 public static SafeArray unwrapString(List<String> values)
3617 {
3618 if (values == null)
3619 return null;
3620 SafeArray result = new SafeArray(Variant.VariantString, values.size());
3621 int i = 0;
3622 for (String l : values)
3623 {
3624 result.setString(i++, l);
3625 }
3626 return result;
3627 }
3628
3629 public static <T1, T2> List<T1> wrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, T2[] values)
3630 {
3631 try
3632 {
3633 if (values == null)
3634 return null;
3635 if (values.length == 0)
3636 return Collections.emptyList();
3637
3638 Constructor<T1> c = wrapperClass1.getConstructor(wrapperClass2);
3639 List<T1> ret = new ArrayList<T1>(values.length);
3640 for (T2 v : values)
3641 {
3642 ret.add(c.newInstance(v));
3643 }
3644 return ret;
3645 }
3646 catch (NoSuchMethodException e)
3647 {
3648 throw new AssertionError(e);
3649 }
3650 catch (InstantiationException e)
3651 {
3652 throw new AssertionError(e);
3653 }
3654 catch (IllegalAccessException e)
3655 {
3656 throw new AssertionError(e);
3657 }
3658 catch (InvocationTargetException e)
3659 {
3660 throw new AssertionError(e);
3661 }
3662 }
3663
3664 @SuppressWarnings("unchecked")
3665 public static <T> T[] unwrap(Class<T> wrapperClass, List<T> values)
3666 {
3667 if (values == null)
3668 return null;
3669 return (T[])values.toArray((T[])Array.newInstance(wrapperClass, values.size()));
3670 }
3671
3672 @SuppressWarnings("unchecked")
3673 public static <T1 extends IUnknown, T2> T2[] unwrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, List<T1> values)
3674 {
3675 if (values == null)
3676 return null;
3677
3678 T2 ret[] = (T2[])Array.newInstance(wrapperClass2, values.size());
3679 int i = 0;
3680 for (T1 obj : values)
3681 {
3682 ret[i++] = (T2)obj.getWrapped();
3683 }
3684 return ret;
3685 }
3686
3687 /* We have very long invoke lists sometimes */
3688 public static Variant invoke(Dispatch d, String method, Object ... args)
3689 {
3690 return Dispatch.callN(d, method, args);
3691 }
3692}
3693]]></xsl:text>
3694 </xsl:if>
3695
3696 <xsl:call-template name="endFile">
3697 <xsl:with-param name="file" select="'Helper.java'" />
3698 </xsl:call-template>
3699
3700 <xsl:call-template name="startFile">
3701 <xsl:with-param name="file" select="'VBoxException.java'" />
3702 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3703 </xsl:call-template>
3704
3705 <xsl:if test="$filelistonly=''">
3706 <xsl:text>
3707
3708public class VBoxException extends RuntimeException
3709{
3710 private int resultCode;
3711 private IVirtualBoxErrorInfo errorInfo;
3712
3713 public VBoxException(String message)
3714 {
3715 super(message);
3716 resultCode = -1;
3717 errorInfo = null;
3718 }
3719
3720 public VBoxException(String message, Throwable cause)
3721 {
3722 super(message, cause);
3723 if (cause instanceof com.jacob.com.ComException)
3724 {
3725 resultCode = ((com.jacob.com.ComException)cause).getHResult();
3726 // JACOB doesn't support calling GetErrorInfo, which
3727 // means there is no way of getting an IErrorInfo reference,
3728 // and that means no way of getting to IVirtualBoxErrorInfo.
3729 errorInfo = null;
3730 }
3731 else
3732 resultCode = -1;
3733 }
3734
3735 public int getResultCode()
3736 {
3737 return resultCode;
3738 }
3739
3740 public IVirtualBoxErrorInfo getVirtualBoxErrorInfo()
3741 {
3742 return errorInfo;
3743 }
3744}
3745</xsl:text>
3746 </xsl:if>
3747
3748 <xsl:call-template name="endFile">
3749 <xsl:with-param name="file" select="'VBoxException.java'" />
3750 </xsl:call-template>
3751
3752
3753 <xsl:call-template name="startFile">
3754 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
3755 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3756 </xsl:call-template>
3757
3758 <xsl:if test="$filelistonly=''">
3759 <xsl:text><![CDATA[
3760
3761import com.jacob.activeX.ActiveXComponent;
3762import com.jacob.com.ComThread;
3763import com.jacob.com.Dispatch;
3764import com.jacob.com.Variant;
3765import com.jacob.com.SafeArray;
3766import com.jacob.com.DispatchEvents;
3767
3768public class VirtualBoxManager
3769{
3770 private IVirtualBox vbox;
3771
3772 private VirtualBoxManager()
3773 {
3774 initPerThread();
3775 vbox = new IVirtualBox(new ActiveXComponent("VirtualBox.VirtualBox"));
3776 }
3777
3778 public static void initPerThread()
3779 {
3780 ComThread.InitMTA();
3781 }
3782
3783 public static void deinitPerThread()
3784 {
3785 ComThread.Release();
3786 }
3787
3788 public void connect(String url, String username, String passwd)
3789 {
3790 throw new VBoxException("Connect doesn't make sense for local bindings");
3791 }
3792
3793 public void disconnect()
3794 {
3795 throw new VBoxException("Disconnect doesn't make sense for local bindings");
3796 }
3797
3798 public IVirtualBox getVBox()
3799 {
3800 return this.vbox;
3801 }
3802
3803 public ISession getSessionObject()
3804 {
3805 return new ISession(new ActiveXComponent("VirtualBox.Session"));
3806 }
3807
3808 public ISession openMachineSession(IMachine m)
3809 {
3810 ISession s = getSessionObject();
3811 m.lockMachine(s, LockType.Shared);
3812 return s;
3813 }
3814
3815 public void closeMachineSession(ISession s)
3816 {
3817 if (s != null)
3818 s.unlockMachine();
3819 }
3820
3821 private static boolean hasInstance = false;
3822
3823 public static synchronized VirtualBoxManager createInstance(String home)
3824 {
3825 if (hasInstance)
3826 throw new VBoxException("only one instance of VirtualBoxManager at a time allowed");
3827
3828 hasInstance = true;
3829 return new VirtualBoxManager();
3830 }
3831
3832 public void cleanup()
3833 {
3834 deinitPerThread();
3835 hasInstance = false;
3836 }
3837
3838 public void waitForEvents(long tmo)
3839 {
3840 // what to do here?
3841 try
3842 {
3843 Thread.sleep(tmo);
3844 }
3845 catch (InterruptedException ie)
3846 {
3847 }
3848 }
3849}
3850]]></xsl:text>
3851 </xsl:if>
3852
3853 <xsl:call-template name="endFile">
3854 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
3855 </xsl:call-template>
3856</xsl:template>
3857
3858<xsl:template name="emitHandwrittenJaxws">
3859
3860 <xsl:call-template name="startFile">
3861 <xsl:with-param name="file" select="'IUnknown.java'" />
3862 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3863 </xsl:call-template>
3864
3865 <xsl:if test="$filelistonly=''">
3866 <xsl:text><![CDATA[
3867public class IUnknown
3868{
3869 protected String obj;
3870 protected final VboxPortType port;
3871
3872 public IUnknown(String obj, VboxPortType port)
3873 {
3874 this.obj = obj;
3875 this.port = port;
3876 }
3877
3878 public final String getWrapped()
3879 {
3880 return this.obj;
3881 }
3882
3883 public final VboxPortType getRemoteWSPort()
3884 {
3885 return this.port;
3886 }
3887
3888 public synchronized void releaseRemote() throws WebServiceException
3889 {
3890 if (obj == null)
3891 return;
3892
3893 try
3894 {
3895 this.port.iManagedObjectRefRelease(obj);
3896 this.obj = null;
3897 }
3898 catch (InvalidObjectFaultMsg e)
3899 {
3900 throw new WebServiceException(e);
3901 }
3902 catch (RuntimeFaultMsg e)
3903 {
3904 throw new WebServiceException(e);
3905 }
3906 }
3907}
3908]]></xsl:text>
3909 </xsl:if>
3910
3911 <xsl:call-template name="endFile">
3912 <xsl:with-param name="file" select="'IUnknown.java'" />
3913 </xsl:call-template>
3914
3915 <xsl:call-template name="startFile">
3916 <xsl:with-param name="file" select="'Helper.java'" />
3917 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
3918 </xsl:call-template>
3919
3920 <xsl:if test="$filelistonly=''">
3921 <xsl:text><![CDATA[
3922
3923import java.util.List;
3924import java.util.ArrayList;
3925import java.util.Collections;
3926import java.lang.reflect.Array;
3927import java.lang.reflect.Constructor;
3928import java.lang.reflect.InvocationTargetException;
3929import java.math.BigInteger;
3930
3931public class Helper
3932{
3933 public static <T> List<T> wrap(Class<T> wrapperClass, VboxPortType pt, List<String> values)
3934 {
3935 try
3936 {
3937 if (values == null)
3938 return null;
3939
3940 Constructor<T> c = wrapperClass.getConstructor(String.class, VboxPortType.class);
3941 List<T> ret = new ArrayList<T>(values.size());
3942 for (String v : values)
3943 {
3944 ret.add(c.newInstance(v, pt));
3945 }
3946 return ret;
3947 }
3948 catch (NoSuchMethodException e)
3949 {
3950 throw new AssertionError(e);
3951 }
3952 catch (InstantiationException e)
3953 {
3954 throw new AssertionError(e);
3955 }
3956 catch (IllegalAccessException e)
3957 {
3958 throw new AssertionError(e);
3959 }
3960 catch (InvocationTargetException e)
3961 {
3962 throw new AssertionError(e);
3963 }
3964 }
3965
3966 public static <T1, T2> List<T1> wrap2(Class<T1> wrapperClass1, Class<T2> wrapperClass2, VboxPortType pt, List<T2> values)
3967 {
3968 try
3969 {
3970 if (values == null)
3971 return null;
3972
3973 Constructor<T1> c = wrapperClass1.getConstructor(wrapperClass2, VboxPortType.class);
3974 List<T1> ret = new ArrayList<T1>(values.size());
3975 for (T2 v : values)
3976 {
3977 ret.add(c.newInstance(v, pt));
3978 }
3979 return ret;
3980 }
3981 catch (NoSuchMethodException e)
3982 {
3983 throw new AssertionError(e);
3984 }
3985 catch (InstantiationException e)
3986 {
3987 throw new AssertionError(e);
3988 }
3989 catch (IllegalAccessException e)
3990 {
3991 throw new AssertionError(e);
3992 }
3993 catch (InvocationTargetException e)
3994 {
3995 throw new AssertionError(e);
3996 }
3997 }
3998
3999 public static <T extends IUnknown> List<String> unwrap(List<T> values)
4000 {
4001 if (values == null)
4002 return null;
4003
4004 List<String> ret = new ArrayList<String>(values.size());
4005 for (T obj : values)
4006 {
4007 ret.add(obj.getWrapped());
4008 }
4009 return ret;
4010 }
4011
4012 @SuppressWarnings("unchecked" )
4013 public static <T1 extends Enum <T1>, T2 extends Enum <T2>> List<T2> convertEnums(Class<T1> fromClass,
4014 Class<T2> toClass,
4015 List<T1> values)
4016 {
4017 try
4018 {
4019 if (values == null)
4020 return null;
4021 List<T2> ret = new ArrayList<T2>(values.size());
4022 for (T1 v : values)
4023 {
4024 // Ordinal based enum conversion, as JAX-WS "invents" its own
4025 // enum names and has string values with the expected content.
4026 int enumOrdinal = v.ordinal();
4027 T2 convEnum = toClass.getEnumConstants()[enumOrdinal];
4028 ret.add(convEnum);
4029 }
4030 return ret;
4031 }
4032 catch (ArrayIndexOutOfBoundsException e)
4033 {
4034 throw new AssertionError(e);
4035 }
4036 }
4037
4038 /* Pretty naive Base64 encoder/decoder. */
4039 private static final char[] valToChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
4040 private static final int[] charToVal = new int[256];
4041
4042 /* Initialize recoding alphabet. */
4043 static
4044 {
4045 for (int i = 0; i < charToVal.length; i++)
4046 charToVal[i] = -1;
4047
4048 for (int i = 0; i < valToChar.length; i++)
4049 charToVal[valToChar[i]] = i;
4050
4051 charToVal['='] = 0;
4052 }
4053
4054 public static String encodeBase64(byte[] data)
4055 {
4056 if (data == null)
4057 return null;
4058
4059 if (data.length == 0)
4060 return "";
4061
4062 int fullTriplets = data.length / 3;
4063 int resultLen = ((data.length - 1) / 3 + 1) * 4;
4064 char[] result = new char[resultLen];
4065 int dataIndex = 0, stringIndex = 0;
4066
4067 for (int i = 0; i < fullTriplets; i++)
4068 {
4069 int ch1 = data[dataIndex++] & 0xff;
4070 result[stringIndex++] = valToChar[ch1 >> 2];
4071 int ch2 = data[dataIndex++] & 0xff;
4072 result[stringIndex++] = valToChar[((ch1 << 4) & 0x3f) | (ch2 >> 4)];
4073 int ch3 = data[dataIndex++] & 0xff;
4074 result[stringIndex++] = valToChar[((ch2 << 2) & 0x3f) | (ch3 >> 6)];
4075 result[stringIndex++] = valToChar[ch3 & 0x3f];
4076 }
4077
4078 switch (data.length - dataIndex)
4079 {
4080 case 0:
4081 // do nothing
4082 break;
4083 case 1:
4084 {
4085 int ch1 = data[dataIndex++] & 0xff;
4086 result[stringIndex++] = valToChar[ch1 >> 2];
4087 result[stringIndex++] = valToChar[(ch1 << 4) & 0x3f];
4088 result[stringIndex++] = '=';
4089 result[stringIndex++] = '=';
4090 break;
4091 }
4092 case 2:
4093 {
4094 int ch1 = data[dataIndex++] & 0xff;
4095 result[stringIndex++] = valToChar[ch1 >> 2];
4096 int ch2 = data[dataIndex++] & 0xff;
4097 result[stringIndex++] = valToChar[((ch1 << 4) & 0x3f) | (ch2 >> 4)];
4098 result[stringIndex++] = valToChar[(ch2 << 2) & 0x3f];
4099 result[stringIndex++] = '=';
4100 break;
4101 }
4102 default:
4103 throw new VBoxException("bug!");
4104 }
4105
4106 return new String(result);
4107 }
4108
4109 private static int skipInvalid(String str, int stringIndex)
4110 {
4111 while (charToVal[str.charAt(stringIndex)] < 0)
4112 stringIndex++;
4113
4114 return stringIndex;
4115 }
4116
4117 public static byte[] decodeBase64(String str)
4118 {
4119 if (str == null)
4120 return null;
4121
4122 int stringLength = str.length();
4123 if (stringLength == 0)
4124 return new byte[0];
4125
4126 int validChars = 0, padChars = 0;
4127 for (int i = 0; i < str.length(); i++)
4128 {
4129 char ch = str.charAt(i);
4130
4131 if (charToVal[ch] >= 0)
4132 validChars++;
4133
4134 if (ch == '=')
4135 padChars++;
4136 }
4137
4138 if ((validChars * 3 % 4) != 0)
4139 throw new VBoxException("invalid base64 encoded string " + str);
4140
4141 int resultLength = validChars * 3 / 4 - padChars;
4142 byte[] result = new byte[resultLength];
4143
4144 int dataIndex = 0, stringIndex = 0;
4145 int quadraplets = validChars / 4;
4146
4147 for (int i = 0; i < quadraplets; i++)
4148 {
4149 stringIndex = skipInvalid(str, stringIndex);
4150 int ch1 = str.charAt(stringIndex++);
4151 stringIndex = skipInvalid(str, stringIndex);
4152 int ch2 = str.charAt(stringIndex++);
4153 stringIndex = skipInvalid(str, stringIndex);
4154 int ch3 = str.charAt(stringIndex++);
4155 stringIndex = skipInvalid(str, stringIndex);
4156 int ch4 = str.charAt(stringIndex++);
4157
4158 result[dataIndex++] = (byte)(((charToVal[ch1] << 2) | charToVal[ch2] >> 4) & 0xff);
4159 /* we check this to ensure that we don't override data with '=' padding. */
4160 if (dataIndex < result.length)
4161 result[dataIndex++] = (byte)(((charToVal[ch2] << 4) | charToVal[ch3] >> 2) & 0xff);
4162 if (dataIndex < result.length)
4163 result[dataIndex++] = (byte)(((charToVal[ch3] << 6) | charToVal[ch4]) & 0xff);
4164 }
4165
4166 return result;
4167 }
4168}
4169]]></xsl:text>
4170 </xsl:if>
4171
4172 <xsl:call-template name="endFile">
4173 <xsl:with-param name="file" select="'Helper.java'" />
4174 </xsl:call-template>
4175
4176 <xsl:call-template name="startFile">
4177 <xsl:with-param name="file" select="'VBoxException.java'" />
4178 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
4179 </xsl:call-template>
4180
4181 <xsl:if test="$filelistonly=''">
4182 <xsl:text>
4183public class VBoxException extends RuntimeException
4184{
4185 private int resultCode;
4186 private IVirtualBoxErrorInfo errorInfo;
4187
4188 public VBoxException(String message)
4189 {
4190 super(message);
4191 resultCode = -1;
4192 errorInfo = null;
4193 }
4194
4195 public VBoxException(String message, Throwable cause)
4196 {
4197 super(message, cause);
4198 resultCode = -1;
4199 errorInfo = null;
4200 }
4201
4202 public VBoxException(String message, Throwable cause, VboxPortType port)
4203 {
4204 super(message, cause);
4205 if (cause instanceof RuntimeFaultMsg)
4206 {
4207 RuntimeFaultMsg m = (RuntimeFaultMsg)cause;
4208 RuntimeFault f = m.getFaultInfo();
4209 resultCode = f.getResultCode();
4210 String retVal = f.getReturnval();
4211 errorInfo = (retVal.length() > 0) ? new IVirtualBoxErrorInfo(retVal, port) : null;
4212 }
4213 else
4214 resultCode = -1;
4215 }
4216
4217 public int getResultCode()
4218 {
4219 return resultCode;
4220 }
4221
4222 public IVirtualBoxErrorInfo getVirtualBoxErrorInfo()
4223 {
4224 return errorInfo;
4225 }
4226}
4227</xsl:text>
4228 </xsl:if>
4229
4230 <xsl:call-template name="endFile">
4231 <xsl:with-param name="file" select="'VBoxException.java'" />
4232 </xsl:call-template>
4233
4234 <xsl:call-template name="startFile">
4235 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
4236 <xsl:with-param name="package" select="$G_virtualBoxPackage" />
4237 </xsl:call-template>
4238
4239 <xsl:if test="$filelistonly=''">
4240 <xsl:text>import java.net.URL;
4241import java.math.BigInteger;
4242import java.util.List;
4243import java.util.Map;
4244import java.util.HashMap;
4245import javax.xml.namespace.QName;
4246import javax.xml.ws.BindingProvider;
4247import javax.xml.ws.Holder;
4248import javax.xml.ws.WebServiceException;
4249
4250class PortPool
4251{
4252 private final static String wsdlFile = </xsl:text>
4253 <xsl:value-of select="$G_virtualBoxWsdl" />
4254 <xsl:text><![CDATA[;
4255 private Map<VboxPortType, Integer> known;
4256 private boolean initStarted;
4257 private VboxService svc;
4258
4259 PortPool(boolean usePreinit)
4260 {
4261 known = new HashMap<VboxPortType, Integer>();
4262
4263 if (usePreinit)
4264 {
4265 new Thread(new Runnable()
4266 {
4267 public void run()
4268 {
4269 // need to sync on something else but 'this'
4270 synchronized (known)
4271 {
4272 initStarted = true;
4273 known.notify();
4274 }
4275
4276 preinit();
4277 }
4278 }).start();
4279
4280 synchronized (known)
4281 {
4282 while (!initStarted)
4283 {
4284 try
4285 {
4286 known.wait();
4287 }
4288 catch (InterruptedException e)
4289 {
4290 break;
4291 }
4292 }
4293 }
4294 }
4295 }
4296
4297 private synchronized void preinit()
4298 {
4299 VboxPortType port = getPort();
4300 releasePort(port);
4301 }
4302
4303 synchronized VboxPortType getPort()
4304 {
4305 VboxPortType port = null;
4306 int ttl = 0;
4307
4308 for (VboxPortType cur: known.keySet())
4309 {
4310 int value = known.get(cur);
4311 if ((value & 0x10000) == 0)
4312 {
4313 port = cur;
4314 ttl = value & 0xffff;
4315 break;
4316 }
4317 }
4318
4319 if (port == null)
4320 {
4321 if (svc == null)
4322 {
4323 URL wsdl = PortPool.class.getClassLoader().getResource(wsdlFile);
4324 if (wsdl == null)
4325 throw new LinkageError(wsdlFile + " not found, but it should have been in the jar");
4326 svc = new VboxService(wsdl,
4327 new QName("http://www.virtualbox.org/Service",
4328 "vboxService"));
4329 }
4330 port = svc.getVboxServicePort();
4331 // reuse this object 0x10 times
4332 ttl = 0x10;
4333 }
4334 // mark as used
4335 known.put(port, new Integer(0x10000 | ttl));
4336 return port;
4337 }
4338
4339 synchronized void releasePort(VboxPortType port)
4340 {
4341 Integer val = known.get(port);
4342 if (val == null || val == 0)
4343 {
4344 // know you not
4345 return;
4346 }
4347
4348 int v = val;
4349 int ttl = v & 0xffff;
4350 // decrement TTL, and throw away port if used too much times
4351 if (--ttl <= 0)
4352 {
4353 known.remove(port);
4354 }
4355 else
4356 {
4357 v = ttl; // set new TTL and clear busy bit
4358 known.put(port, v);
4359 }
4360 }
4361}
4362
4363
4364public class VirtualBoxManager
4365{
4366 private static PortPool pool = new PortPool(true);
4367 protected VboxPortType port;
4368
4369 private IVirtualBox vbox;
4370
4371 private VirtualBoxManager()
4372 {
4373 }
4374
4375 public static void initPerThread()
4376 {
4377 }
4378
4379 public static void deinitPerThread()
4380 {
4381 }
4382
4383 public void connect(String url, String username, String passwd)
4384 {
4385 this.port = pool.getPort();
4386 try
4387 {
4388 ((BindingProvider)port).getRequestContext().
4389 put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
4390 String handle = port.iWebsessionManagerLogon(username, passwd);
4391 this.vbox = new IVirtualBox(handle, port);
4392 }
4393 catch (Throwable t)
4394 {
4395 if (this.port != null && pool != null)
4396 {
4397 pool.releasePort(this.port);
4398 this.port = null;
4399 }
4400 // we have to throw smth derived from RuntimeException
4401 throw new VBoxException(t.getMessage(), t, this.port);
4402 }
4403 }
4404
4405 public void connect(String url, String username, String passwd,
4406 Map<String, Object> requestContext, Map<String, Object> responseContext)
4407 {
4408 this.port = pool.getPort();
4409
4410 try
4411 {
4412 ((BindingProvider)port).getRequestContext();
4413 if (requestContext != null)
4414 ((BindingProvider)port).getRequestContext().putAll(requestContext);
4415
4416 if (responseContext != null)
4417 ((BindingProvider)port).getResponseContext().putAll(responseContext);
4418
4419 ((BindingProvider)port).getRequestContext().
4420 put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, url);
4421 String handle = port.iWebsessionManagerLogon(username, passwd);
4422 this.vbox = new IVirtualBox(handle, port);
4423 }
4424 catch (Throwable t)
4425 {
4426 if (this.port != null && pool != null)
4427 {
4428 pool.releasePort(this.port);
4429 this.port = null;
4430 }
4431 // we have to throw smth derived from RuntimeException
4432 throw new VBoxException(t.getMessage(), t, this.port);
4433 }
4434 }
4435
4436 public void disconnect()
4437 {
4438 if (this.port == null)
4439 return;
4440
4441 try
4442 {
4443 if (this.vbox != null && port != null)
4444 port.iWebsessionManagerLogoff(this.vbox.getWrapped());
4445 }
4446 catch (InvalidObjectFaultMsg e)
4447 {
4448 throw new VBoxException(e.getMessage(), e, this.port);
4449 }
4450 catch (RuntimeFaultMsg e)
4451 {
4452 throw new VBoxException(e.getMessage(), e, this.port);
4453 }
4454 finally
4455 {
4456 if (this.port != null)
4457 {
4458 pool.releasePort(this.port);
4459 this.port = null;
4460 }
4461 }
4462 }
4463
4464 public IVirtualBox getVBox()
4465 {
4466 return this.vbox;
4467 }
4468
4469 public ISession getSessionObject()
4470 {
4471 if (this.vbox == null)
4472 throw new VBoxException("connect first");
4473 try
4474 {
4475 String handle = port.iWebsessionManagerGetSessionObject(this.vbox.getWrapped());
4476 return new ISession(handle, port);
4477 }
4478 catch (InvalidObjectFaultMsg e)
4479 {
4480 throw new VBoxException(e.getMessage(), e, this.port);
4481 }
4482 catch (RuntimeFaultMsg e)
4483 {
4484 throw new VBoxException(e.getMessage(), e, this.port);
4485 }
4486 }
4487
4488 public ISession openMachineSession(IMachine m) throws Exception
4489 {
4490 ISession s = getSessionObject();
4491 m.lockMachine(s, LockType.Shared);
4492 return s;
4493 }
4494
4495 public void closeMachineSession(ISession s)
4496 {
4497 if (s != null)
4498 s.unlockMachine();
4499 }
4500
4501 public static synchronized VirtualBoxManager createInstance(String home)
4502 {
4503 return new VirtualBoxManager();
4504 }
4505
4506 public IEventListener createListener(Object sink)
4507 {
4508 throw new VBoxException("no active listeners here");
4509 }
4510
4511 public void cleanup()
4512 {
4513 disconnect();
4514 deinitPerThread();
4515 }
4516
4517 public void waitForEvents(long tmo)
4518 {
4519 }
4520
4521 protected void finalize() throws Throwable
4522 {
4523 try
4524 {
4525 cleanup();
4526 }
4527 catch(Exception e)
4528 {
4529 }
4530 finally
4531 {
4532 super.finalize();
4533 }
4534 }
4535}
4536]]></xsl:text>
4537 </xsl:if>
4538
4539 <xsl:call-template name="endFile">
4540 <xsl:with-param name="file" select="'VirtualBoxManager.java'" />
4541 </xsl:call-template>
4542</xsl:template>
4543
4544
4545<xsl:template match="/">
4546
4547 <xsl:if test="not($G_vboxApiSuffix)">
4548 <xsl:call-template name="fatalError">
4549 <xsl:with-param name="msg" select="'G_vboxApiSuffix must be given'" />
4550 </xsl:call-template>
4551 </xsl:if>
4552
4553 <xsl:if test="not($filelistonly='')">
4554 <xsl:value-of select="concat($filelistonly, ' := \&#10;')"/>
4555 </xsl:if>
4556
4557 <!-- Handwritten files -->
4558 <xsl:call-template name="emitHandwritten"/>
4559
4560 <xsl:choose>
4561 <xsl:when test="$G_vboxGlueStyle='xpcom'">
4562 <xsl:call-template name="emitHandwrittenXpcom"/>
4563 </xsl:when>
4564
4565 <xsl:when test="$G_vboxGlueStyle='mscom'">
4566 <xsl:call-template name="emitHandwrittenMscom"/>
4567 </xsl:when>
4568
4569 <xsl:when test="$G_vboxGlueStyle='jaxws'">
4570 <xsl:call-template name="emitHandwrittenJaxws"/>
4571 </xsl:when>
4572
4573 <xsl:otherwise>
4574 <xsl:call-template name="fatalError">
4575 <xsl:with-param name="msg" select="'Style unknown (root)'" />
4576 </xsl:call-template>
4577 </xsl:otherwise>
4578 </xsl:choose>
4579
4580 <!-- Enums -->
4581 <xsl:for-each select="//enum">
4582 <xsl:call-template name="genEnum">
4583 <xsl:with-param name="enumname" select="@name" />
4584 <xsl:with-param name="filename" select="concat(@name, '.java')" />
4585 </xsl:call-template>
4586 </xsl:for-each>
4587
4588 <!-- Interfaces -->
4589 <xsl:for-each select="//interface">
4590 <xsl:variable name="self_target" select="current()/ancestor::if/@target"/>
4591 <xsl:variable name="module" select="current()/ancestor::module/@name"/>
4592
4593 <xsl:choose>
4594 <xsl:when test="$G_vboxGlueStyle='jaxws'">
4595 <xsl:if test="not($module) and not(@wsmap='suppress')">
4596 <xsl:call-template name="genIface">
4597 <xsl:with-param name="ifname" select="@name" />
4598 <xsl:with-param name="filename" select="concat(@name, '.java')" />
4599 </xsl:call-template>
4600 </xsl:if>
4601 </xsl:when>
4602
4603 <xsl:otherwise>
4604 <!-- We don't need WSDL-specific interfaces here -->
4605 <xsl:if test="not($self_target='wsdl') and not($module)">
4606 <xsl:call-template name="genIface">
4607 <xsl:with-param name="ifname" select="@name" />
4608 <xsl:with-param name="filename" select="concat(@name, '.java')" />
4609 </xsl:call-template>
4610 </xsl:if>
4611 </xsl:otherwise>
4612
4613 </xsl:choose>
4614 </xsl:for-each>
4615
4616 <xsl:if test="not($filelistonly='')">
4617 <xsl:value-of select="'&#10;'"/>
4618 </xsl:if>
4619
4620</xsl:template>
4621</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette