you can redistribute it
and/or modify it under the terms of the GNU
General Public License (GPL) as published by the Free Software
Foundation, in version 2 as it comes in the "COPYING" file of the
VirtualBox OSE distribution. VirtualBox OSE is distributed in the
hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
additional information or have any questions.
<xsl:variable name="G_setSuppressedInterfaces"
select="//interface[@wsmap='suppress']" />
<xsl:template name="emitOutParam">
<xsl:param name="type" />
<xsl:param name="value" />
<xsl:param name="safearray" />
<xsl:when test="$type='wstring' or $type='uuid'">
<xsl:call-template name="emitPrimitive">
<xsl:with-param name="type">string</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:when test="$type='boolean'">
<xsl:call-template name="emitPrimitive">
<xsl:with-param name="type">bool</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:when test="$type='long' or $type='unsigned long' or $type='long long' or $type='short' or $type='unsigned short' or $type='unsigned long long' or $type='result'">
<xsl:call-template name="emitPrimitive">
<xsl:with-param name="type">int</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:when test="$type='double' or $type='float'">
<xsl:call-template name="emitPrimitive">
<xsl:with-param name="type">float</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:when test="$type='octet'">
<xsl:call-template name="emitPrimitive">
<xsl:with-param name="type">octet</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:when test="$type='$unknown'">
<xsl:call-template name="emitObject">
<xsl:with-param name="type">VBox_ManagedObject</xsl:with-param>
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:call-template name="emitObject">
<xsl:with-param name="type" select="$type" />
<xsl:with-param name="value" select="$value" />
<xsl:with-param name="safearray" select="$safearray"/>
<xsl:template name="emitObject">
<xsl:param name="type" />
<xsl:param name="value" />
<xsl:param name="safearray" />
<xsl:when test="$safearray='yes'">
<xsl:text>new </xsl:text><xsl:value-of select="$type" />Collection ($this->connection, (array)<xsl:value-of select="$value"/><xsl:text>)</xsl:text>
<xsl:text>new </xsl:text><xsl:value-of select="$type" /> ($this->connection, <xsl:value-of select="$value"/><xsl:text>)</xsl:text>
<xsl:template name="emitPrimitive">
<xsl:param name="type" />
<xsl:param name="value" />
<xsl:param name="safearray" />
<xsl:when test="$safearray='yes'">
<xsl:text>(array)</xsl:text><xsl:value-of select="$value"/>
<xsl:text>(</xsl:text><xsl:value-of select="$type" /><xsl:text>)</xsl:text><xsl:value-of select="$value"/>
<xsl:template name="emitGetAttribute">
<xsl:param name="ifname" />
<xsl:param name="attrname" />
<xsl:param name="attrtype" />
<xsl:param name="attrsafearray" />
<xsl:variable name="fname"><xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="$attrname"/></xsl:call-template> </xsl:variable>
public function <xsl:value-of select="$fname"/>() {
$request = new stdClass();
$request->_this = $this->handle;
$response = $this->connection->__soapCall('<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>', array((array)$request));
<xsl:text>return </xsl:text>
<xsl:call-template name="emitOutParam">
<xsl:with-param name="type" select="$attrtype" />
<xsl:with-param name="value" select="concat('$response->','returnval')" />
<xsl:with-param name="safearray" select="@safearray"/>
</xsl:call-template><xsl:text>;</xsl:text>
<xsl:template name="emitSetAttribute">
<xsl:param name="ifname" />
<xsl:param name="attrname" />
<xsl:param name="attrtype" />
<xsl:param name="attrsafearray" />
<xsl:variable name="fname"><xsl:call-template name="makeSetterName"><xsl:with-param name="attrname" select="$attrname"/></xsl:call-template></xsl:variable>
public function <xsl:value-of select="$fname"/>($value) {
$request = new stdClass();
$request->_this = $this->handle;
if (is_int($value) || is_string($value) || is_bool($value)) {
$request-><xsl:value-of select="$attrname"/> = $value;
$request-><xsl:value-of select="$attrname"/> = $value->handle;
$this->connection->__soapCall('<xsl:value-of select="$ifname"/>_<xsl:value-of select="$fname"/>', array((array)$request));
<xsl:template name="interface">
<xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
<xsl:variable name="wsmap"><xsl:value-of select="@wsmap" /></xsl:variable>
<xsl:variable name="extends"><xsl:value-of select="@extends" /></xsl:variable>
* Generated VBoxWebService Interface Wrapper
<xsl:when test="($extends = '$unknown') or ($extends = '$dispatched') or ($extends = '$errorinfo')">
<xsl:value-of select="concat('class ', $ifname, ' extends VBox_ManagedObject { ')" />
<xsl:when test="//interface[@name=$extends]">
<xsl:value-of select="concat('class ', $ifname, ' extends ', $extends, ' { ')" />
<xsl:for-each select="method">
<xsl:if test="not((param[@type=($G_setSuppressedInterfaces/@name)])
or (param[@mod='ptr']))" >
<xsl:call-template name="method">
<xsl:with-param name="wsmap" select="$wsmap" />
<xsl:for-each select="attribute">
<xsl:variable name="attrname"><xsl:value-of select="@name" /></xsl:variable>
<xsl:variable name="attrtype"><xsl:value-of select="@type" /></xsl:variable>
<xsl:variable name="attrreadonly"><xsl:value-of select="@readonly" /></xsl:variable>
<!-- skip this attribute if it has parameters of a type that has wsmap="suppress" -->
<xsl:when test="( $attrtype=($G_setSuppressedInterfaces/@name) )">
<xsl:comment><xsl:value-of select="concat('skipping attribute ', $attrtype, ' for it is of a suppressed type')" /></xsl:comment>
<xsl:when test="@readonly='yes'">
<xsl:comment> readonly attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
<xsl:comment>
read/write attribute <xsl:copy-of select="$ifname" />::<xsl:copy-of select="$attrname" /> </xsl:comment>
<!-- aa) get method: emit request and result -->
<xsl:call-template name="emitGetAttribute">
<xsl:with-param name="ifname" select="$ifname" />
<xsl:with-param name="attrname" select="$attrname" />
<xsl:with-param name="attrtype" select="$attrtype" />
<!-- bb) emit a set method if the attribute is
read/write -->
<xsl:if test="not($attrreadonly='yes')">
<xsl:call-template name="emitSetAttribute">
<xsl:with-param name="ifname" select="$ifname" />
<xsl:with-param name="attrname" select="$attrname" />
<xsl:with-param name="attrtype" select="$attrtype" />
<xsl:template name="collection">
<xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
* Generated VBoxWebService Managed Object Collection
class <xsl:value-of select="$ifname"/>Collection extends VBox_ManagedObjectCollection {
protected $_interfaceName = "<xsl:value-of select="$ifname"/>";
<xsl:template name="interfacestruct">
<xsl:variable name="ifname"><xsl:value-of select="@name" /></xsl:variable>
* Generated VBoxWebService Struct
class <xsl:value-of select="$ifname"/> extends VBox_Struct {
<xsl:for-each select="attribute">
protected $<xsl:value-of select="@name"/>;
public function __construct($connection, $values) {
$this->connection = $connection;
<xsl:for-each select="attribute">
$this-><xsl:value-of select="@name"/> = $values-><xsl:value-of select="@name"/><xsl:text>;</xsl:text>
<xsl:for-each select="attribute">
public function <xsl:call-template name="makeGetterName"><xsl:with-param name="attrname" select="@name"/></xsl:call-template>() {
<xsl:text>return </xsl:text>
<xsl:call-template name="emitOutParam">
<xsl:with-param name="type" select="@type" />
<xsl:with-param name="value" select="concat('$this->',@name)" />
<xsl:with-param name="safearray" select="@safearray"/>
<xsl:template name="genreq">
<xsl:param name="wsmap" />
<xsl:text>$request = new stdClass()</xsl:text>;
<xsl:if test="$wsmap='managed'">
$request->_this = $this->handle;
<xsl:for-each select="param[@dir='in']">
$request-><xsl:value-of select="@name" /> = $arg_<xsl:value-of select="@name" /><xsl:text>;</xsl:text>
$response = $this->connection->__soapCall('<xsl:value-of select="../@name"/>_<xsl:value-of select="@name"/>', array((array)$request));
<!-- return needs to be the first one -->
return <xsl:if test="param[@dir='out']">
<xsl:text>array(</xsl:text>
<xsl:for-each select="param[@dir='return']">
<xsl:call-template name="emitOutParam">
<xsl:with-param name="type" select="@type" />
<xsl:with-param name="value" select="concat('$response->','returnval')" />
<xsl:with-param name="safearray" select="@safearray"/>
<xsl:if test="../param[@dir='out']">
<xsl:for-each select="param[@dir='out']">
<xsl:if test="not(position()=1)">
<xsl:call-template name="emitOutParam">
<xsl:with-param name="type" select="@type" />
<xsl:with-param name="value" select="concat('$response->',@name)" />
<xsl:with-param name="safearray" select="@safearray"/>
<xsl:if test="param[@dir='out']">
<xsl:text>; </xsl:text>
<xsl:template name="method" >
<xsl:param name="wsmap" />
public function <xsl:value-of select="@name"/><xsl:text>(</xsl:text>
<xsl:for-each select="param[@dir='in']">
<xsl:if test="not(position()=1)">
<xsl:value-of select="concat('$arg_',@name)"/>
</xsl:for-each><xsl:text>) { </xsl:text>
<xsl:call-template name="genreq"><xsl:with-param name="wsmap" select="$wsmap" /></xsl:call-template>
<xsl:text> } </xsl:text>
<xsl:template name="enum">
* Generated VBoxWebService ENUM
class <xsl:value-of select="@name"/> extends VBox_Enum {
public $NameMap = array(<xsl:for-each select="const"><xsl:if test="not(@wsmap='suppress')"><xsl:value-of select="@value"/> => '<xsl:value-of select="@name"/>'<xsl:if test="not(position()=last())">, </xsl:if></xsl:if></xsl:for-each>);
public $ValueMap = array(<xsl:for-each select="const"><xsl:if test="not(@wsmap='suppress')">'<xsl:value-of select="@name"/>' => <xsl:value-of select="@value"/><xsl:if test="not(position()=last())">, </xsl:if></xsl:if></xsl:for-each>);
* Copyright (C) 2009 Sun Microsystems, Inc.
* This file is part of VirtualBox Open Source Edition (OSE), as
* you can redistribute it
and/or modify it under the terms of the GNU
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* additional information or have any questions.
public function __construct($soap, $handle = null)
$this->connection = $soap;
public function __toString()
return (string)$this->handle;
public function __set($attr, $value)
$methodName = "set" . $attr;
if (method_exists($this, $methodName))
$this->$methodName($value);
throw new Exception("Attribute does not exist");
public function __get($attr)
$methodName = "get" . $attr;
if (method_exists($this, $methodName))
return $this->$methodName();
throw new Exception("Attribute does not exist");
public function getHandle()
public function cast($class)
if (is_subclass_of($class, 'VBox_ManagedObject'))
return new $class($this->connection, $this->handle);
throw new Exception('Cannot cast VBox_ManagedObject to non-child class VBox_ManagedObject');
public function releaseRemote()
$request = new stdClass();
$request->_this = $this->handle;
$this->connection->__soapCall('IManagedObjectRef_release', array((array)$request));
} catch (Exception $ex) {}
class VBox_ManagedObjectCollection implements Iterator, Countable {
protected $_interfaceName = null;
public function __construct($soap, array $handles = array())
$this->connection = $soap;
$this->handles = $handles;
public function rewind() {
public function current() {
$handle = current($this->handles);
if ($handle !== false && !$handle instanceof $this->_interfaceName) {
$handle = new $this->_interfaceName($this->connection, $handle);
$handle = key($this->handles);
$handle = next($this->handles);
public function valid() {
$handle = $this->current() !== false;
public function count() {
return count($this->handles);
abstract class VBox_Struct {
public function __get($attr)
$methodName = "get" . $attr;
if (method_exists($this, $methodName))
return $this->$methodName();
throw new Exception("Attribute does not exist");
abstract class VBox_Enum {
public function __construct($connection, $handle)
$this->handle = $this->ValueMap[$handle];
public function __toString()
return (string)$this->NameMap[$this->handle];
<xsl:for-each select="//interface[@wsmap='managed' or @wsmap='global']">
<xsl:call-template name="interface"/>
<xsl:call-template name="collection"/>
<xsl:for-each select="//interface[@wsmap='struct']">
<xsl:call-template name="interfacestruct"/>
<xsl:call-template name="collection"/>
<xsl:for-each select="//enum">
<xsl:call-template name="enum"/>
<xsl:call-template name="collection"/>