VirtualBox

source: vbox/trunk/src/VBox/Main/xml/SettingsConverter.xsl@ 13538

Last change on this file since 13538 was 9702, checked in by vboxsync, 16 years ago

Main/Settings: Don't add a wrong lastStateChange attribute value.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 15.4 KB
Line 
1<?xml version="1.0"?>
2
3<!--
4 * :tabSize=2:indentSize=2:noTabs=true:
5 * :folding=explicit:collapseFolds=1:
6 *
7 * Template to convert old VirtualBox settings files to the most recent format.
8
9 Copyright (C) 2006-2008 Sun Microsystems, Inc.
10
11 This file is part of VirtualBox Open Source Edition (OSE), as
12 available from http://www.virtualbox.org. This file is free software;
13 you can redistribute it and/or modify it under the terms of the GNU
14 General Public License (GPL) as published by the Free Software
15 Foundation, in version 2 as it comes in the "COPYING" file of the
16 VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18
19 Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 Clara, CA 95054 USA or visit http://www.sun.com if you need
21 additional information or have any questions.
22-->
23
24<xsl:stylesheet version="1.0"
25 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
26 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
27 xmlns:vb="http://www.innotek.de/VirtualBox-settings"
28 xmlns="http://www.innotek.de/VirtualBox-settings"
29 exclude-result-prefixes="#default vb xsl xsd"
30>
31
32<xsl:output method = "xml" indent = "yes"/>
33
34<xsl:variable name="curVer" select="substring-before(/vb:VirtualBox/@version, '-')"/>
35<xsl:variable name="curVerPlat" select="substring-after(/vb:VirtualBox/@version, '-')"/>
36<xsl:variable name="curVerFull" select="/vb:VirtualBox/@version"/>
37
38<xsl:template match="/">
39 <xsl:comment> Automatically converted from version '<xsl:value-of select="$curVerFull"/>' </xsl:comment>
40 <xsl:copy>
41 <xsl:apply-templates select="@*|node()"/>
42 </xsl:copy>
43</xsl:template>
44
45<!--
46 * comments outside the root node are gathered to a single line, fix this
47-->
48<xsl:template match="/comment()">
49 <xsl:copy-of select="."/>
50</xsl:template>
51
52<!--
53 * Forbid non-VirtualBox root nodes
54-->
55<xsl:template match="/*">
56 <xsl:message terminate="yes">
57Cannot convert an unknown XML file with the root node '<xsl:value-of select="name()"/>'!
58 </xsl:message>
59</xsl:template>
60
61<!--
62 * Forbid all unsupported VirtualBox settings versions
63-->
64<xsl:template match="/vb:VirtualBox">
65 <xsl:message terminate="yes">
66Cannot convert settings from version '<xsl:value-of select="@version"/>'.
67The source version is not supported.
68 </xsl:message>
69</xsl:template>
70
71<!--
72 * Accept supported settings versions (source setting files we can convert)
73 *
74 * Note that in order to simplify conversion from versions prior to the previous
75 * one, we support multi-step conversion like this: step 1: 1.0 => 1.1,
76 * step 2: 1.1 => 1.2, where 1.2 is the most recent version. If you want to use
77 * such multi-step mode, you need to ensure that only 1.0 => 1.1 is possible, by
78 * using the 'mode=1.1' attribute on both 'apply-templates' within the starting
79 * '/vb:VirtualBox[1.0]' template and within all templates that this
80 * 'apply-templates' should apply.
81 *
82 * If no 'mode' attribute is used as described above, then a direct conversion
83 * (1.0 => 1.2 in the above example) will happen when version 1.0 of the settings
84 * files is detected. Note that the direct conversion from pre-previous versions
85 * will require to patch their conversion templates so that they include all
86 * modifications from all newer versions, which is error-prone. It's better to
87 * use the milt-step mode.
88-->
89
90<!-- 1.1 => 1.2 -->
91<xsl:template match="/vb:VirtualBox[substring-before(@version,'-')='1.1']">
92 <xsl:copy>
93 <xsl:attribute name="version"><xsl:value-of select="concat('1.2','-',$curVerPlat)"/></xsl:attribute>
94 <xsl:apply-templates select="node()" mode="v1.2"/>
95 </xsl:copy>
96</xsl:template>
97
98<!-- 1.2 => 1.3.pre -->
99<xsl:template match="/vb:VirtualBox[substring-before(@version,'-')='1.2']">
100 <xsl:copy>
101 <xsl:attribute name="version"><xsl:value-of select="concat('1.3.pre','-',$curVerPlat)"/></xsl:attribute>
102 <xsl:apply-templates select="node()" mode="v1.3.pre"/>
103 </xsl:copy>
104</xsl:template>
105
106<!-- 1.3.pre => 1.3 -->
107<xsl:template match="/vb:VirtualBox[substring-before(@version,'-')='1.3.pre']">
108 <xsl:copy>
109 <xsl:attribute name="version"><xsl:value-of select="concat('1.3','-',$curVerPlat)"/></xsl:attribute>
110 <xsl:apply-templates select="node()" mode="v1.3"/>
111 </xsl:copy>
112</xsl:template>
113
114<!--
115 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
116 * 1.1 => 1.2
117 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
118-->
119
120<!--
121 * all non-root elements that are not explicitly matched are copied as is
122-->
123<xsl:template match="@*|node()[../..]" mode="v1.2">
124 <xsl:copy>
125 <xsl:apply-templates select="@*|node()[../..]" mode="v1.2"/>
126 </xsl:copy>
127</xsl:template>
128
129<!--
130 * Global settings
131-->
132
133<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
134 vb:Global/vb:DiskImageRegistry/vb:HardDiskImages//
135 vb:Image"
136 mode="v1.2">
137 <DiffHardDisk>
138 <xsl:attribute name="uuid"><xsl:value-of select="@uuid"/></xsl:attribute>
139 <VirtualDiskImage>
140 <xsl:attribute name="filePath"><xsl:value-of select="@src"/></xsl:attribute>
141 </VirtualDiskImage>
142 <xsl:apply-templates select="vb:Image"/>
143 </DiffHardDisk>
144</xsl:template>
145
146<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
147 vb:Global/vb:DiskImageRegistry"
148 mode="v1.2">
149<DiskRegistry>
150 <HardDisks>
151 <xsl:for-each select="vb:HardDiskImages/vb:Image">
152 <HardDisk>
153 <xsl:attribute name="uuid"><xsl:value-of select="@uuid"/></xsl:attribute>
154 <xsl:attribute name="type">
155 <xsl:choose>
156 <xsl:when test="@independent='immutable'">immutable</xsl:when>
157 <xsl:when test="@independent='mutable'">immutable</xsl:when>
158 <xsl:otherwise>normal</xsl:otherwise>
159 </xsl:choose>
160 </xsl:attribute>
161 <VirtualDiskImage>
162 <xsl:attribute name="filePath"><xsl:value-of select="@src"/></xsl:attribute>
163 </VirtualDiskImage>
164 <xsl:apply-templates select="vb:Image"/>
165 </HardDisk>
166 </xsl:for-each>
167 </HardDisks>
168 <xsl:copy-of select="vb:DVDImages"/>
169 <xsl:copy-of select="vb:FloppyImages"/>
170</DiskRegistry>
171</xsl:template>
172
173<!--
174 * Machine settings
175-->
176
177<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
178 vb:Machine//vb:HardDisks"
179 mode="v1.2">
180 <HardDiskAttachments>
181 <xsl:for-each select="vb:HardDisk">
182 <HardDiskAttachment>
183 <xsl:attribute name="hardDisk"><xsl:value-of select="vb:Image/@uuid"/></xsl:attribute>
184 <xsl:apply-templates select="@*"/>
185 </HardDiskAttachment>
186 </xsl:for-each>
187 </HardDiskAttachments>
188</xsl:template>
189
190<!--
191 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
192 * 1.2 => 1.3.pre
193 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
194-->
195
196<!--
197 * all non-root elements that are not explicitly matched are copied as is
198-->
199<xsl:template match="@*|node()[../..]" mode="v1.3.pre">
200 <xsl:copy>
201 <xsl:apply-templates select="@*|node()[../..]" mode="v1.3.pre"/>
202 </xsl:copy>
203</xsl:template>
204
205<!--
206 * Global settings
207-->
208
209<!--
210 * Machine settings
211-->
212
213<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.2']/
214 vb:Machine//vb:USBController"
215 mode="v1.3.pre">
216 <xsl:copy>
217 <xsl:apply-templates select="@*|node()" mode="v1.3.pre"/>
218 </xsl:copy>
219 <SATAController enabled="false"/>
220</xsl:template>
221
222<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.2']/
223 vb:Machine//vb:HardDiskAttachments/vb:HardDiskAttachment"
224 mode="v1.3.pre">
225 <HardDiskAttachment>
226 <xsl:attribute name="hardDisk"><xsl:value-of select="@hardDisk"/></xsl:attribute>
227 <xsl:attribute name="bus">
228 <xsl:choose>
229 <xsl:when test="@bus='ide0'">
230 <xsl:text>IDE</xsl:text>
231 </xsl:when>
232 <xsl:when test="@bus='ide1'">
233 <xsl:text>IDE</xsl:text>
234 </xsl:when>
235 <xsl:otherwise>
236 <xsl:message terminate="yes">
237Value '<xsl:value-of select="@bus"/>' of 'HardDiskAttachment::bus' attribute is invalid.
238 </xsl:message>
239 </xsl:otherwise>
240 </xsl:choose>
241 </xsl:attribute>
242 <xsl:attribute name="channel">0</xsl:attribute>
243 <xsl:attribute name="device">
244 <xsl:choose>
245 <xsl:when test="@device='master'">
246 <xsl:text>0</xsl:text>
247 </xsl:when>
248 <xsl:when test="@device='slave'">
249 <xsl:text>1</xsl:text>
250 </xsl:when>
251 <xsl:otherwise>
252 <xsl:message terminate="yes">
253Value '<xsl:value-of select="@device"/>' of 'HardDiskAttachment::device' attribute is invalid.
254 </xsl:message>
255 </xsl:otherwise>
256 </xsl:choose>
257 </xsl:attribute>
258 </HardDiskAttachment>
259</xsl:template>
260
261<!--
262 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
263 * 1.3.pre => 1.3
264 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
265-->
266
267<!--
268 * all non-root elements that are not explicitly matched are copied as is
269-->
270<xsl:template match="@*|node()[../..]" mode="v1.3">
271 <xsl:copy>
272 <xsl:apply-templates select="@*|node()[../..]" mode="v1.3"/>
273 </xsl:copy>
274</xsl:template>
275
276<!--
277 * Global settings
278-->
279
280<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
281 vb:Global//vb:SystemProperties"
282 mode="v1.3">
283 <xsl:copy>
284 <xsl:apply-templates select="@*[not(name()='defaultSavedStateFolder')]|node()" mode="v1.3"/>
285 </xsl:copy>
286</xsl:template>
287
288<!--
289 * Machine settings
290-->
291
292<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
293 vb:Machine//vb:AudioAdapter"
294 mode="v1.3">
295 <xsl:if test="not(../vb:Uart)">
296 <UART/>
297 </xsl:if>
298 <xsl:if test="not(../vb:Lpt)">
299 <LPT/>
300 </xsl:if>
301 <xsl:copy>
302 <xsl:apply-templates select="@*[not(name()='driver')]|node()" mode="v1.3"/>
303 <xsl:attribute name="driver">
304 <xsl:choose>
305 <xsl:when test="@driver='null'">Null</xsl:when>
306 <xsl:when test="@driver='oss'">OSS</xsl:when>
307 <xsl:when test="@driver='alsa'">ALSA</xsl:when>
308 <xsl:when test="@driver='pulse'">Pulse</xsl:when>
309 <xsl:when test="@driver='coreaudio'">CoreAudio</xsl:when>
310 <xsl:when test="@driver='winmm'">WinMM</xsl:when>
311 <xsl:when test="@driver='dsound'">DirectSound</xsl:when>
312 <xsl:when test="@driver='solaudio'">SolAudio</xsl:when>
313 <xsl:when test="@driver='mmpm'">MMPM</xsl:when>
314 <xsl:otherwise>
315 <xsl:message terminate="yes">
316Value '<xsl:value-of select="@driver"/>' of 'AudioAdapter::driver' attribute is invalid.
317 </xsl:message>
318 </xsl:otherwise>
319 </xsl:choose>
320 </xsl:attribute>
321 </xsl:copy>
322 <xsl:if test="not(../vb:SharedFolders)">
323 <SharedFolders/>
324 </xsl:if>
325 <xsl:if test="not(../vb:Clipboard)">
326 <Clipboard mode="Disabled"/>
327 </xsl:if>
328 <xsl:if test="not(../vb:Guest)">
329 <Guest/>
330 </xsl:if>
331</xsl:template>
332
333<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
334 vb:Machine//vb:RemoteDisplay"
335 mode="v1.3">
336 <xsl:copy>
337 <xsl:apply-templates select="@*[not(name()='authType')]|node()" mode="v1.3"/>
338 <xsl:attribute name="authType">
339 <xsl:choose>
340 <xsl:when test="@authType='null'">Null</xsl:when>
341 <xsl:when test="@authType='guest'">Guest</xsl:when>
342 <xsl:when test="@authType='external'">External</xsl:when>
343 <xsl:otherwise>
344 <xsl:message terminate="yes">
345Value '<xsl:value-of select="@authType"/>' of 'RemoteDisplay::authType' attribute is invalid.
346 </xsl:message>
347 </xsl:otherwise>
348 </xsl:choose>
349 </xsl:attribute>
350 </xsl:copy>
351</xsl:template>
352
353<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
354 vb:Machine//vb:BIOS/vb:BootMenu"
355 mode="v1.3">
356 <xsl:copy>
357 <xsl:apply-templates select="@*[not(name()='mode')]|node()" mode="v1.3"/>
358 <xsl:attribute name="mode">
359 <xsl:choose>
360 <xsl:when test="@mode='disabled'">Disabled</xsl:when>
361 <xsl:when test="@mode='menuonly'">MenuOnly</xsl:when>
362 <xsl:when test="@mode='messageandmenu'">MessageAndMenu</xsl:when>
363 <xsl:otherwise>
364 <xsl:message terminate="yes">
365Value '<xsl:value-of select="@mode"/>' of 'BootMenu::mode' attribute is invalid.
366 </xsl:message>
367 </xsl:otherwise>
368 </xsl:choose>
369 </xsl:attribute>
370 </xsl:copy>
371</xsl:template>
372
373<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
374 vb:Machine//vb:USBController/vb:DeviceFilter |
375 vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
376 vb:Global/vb:USBDeviceFilters/vb:DeviceFilter"
377 mode="v1.3">
378 <xsl:copy>
379 <xsl:apply-templates select="node()" mode="v1.3"/>
380 <xsl:for-each select="@*">
381 <xsl:choose>
382 <xsl:when test="name()='vendorid'">
383 <xsl:attribute name="vendorId"><xsl:value-of select="."/></xsl:attribute>
384 </xsl:when>
385 <xsl:when test="name()='productid'">
386 <xsl:attribute name="productId"><xsl:value-of select="."/></xsl:attribute>
387 </xsl:when>
388 <xsl:when test="name()='serialnumber'">
389 <xsl:attribute name="serialNumber"><xsl:value-of select="."/></xsl:attribute>
390 </xsl:when>
391 <xsl:otherwise>
392 <xsl:apply-templates select="." mode="v1.3"/>
393 </xsl:otherwise>
394 </xsl:choose>
395 </xsl:for-each>
396 </xsl:copy>
397</xsl:template>
398
399<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
400 vb:Machine//vb:Guest"
401 mode="v1.3">
402 <xsl:copy>
403 <xsl:apply-templates select="node()" mode="v1.3"/>
404 <xsl:for-each select="@*">
405 <xsl:choose>
406 <xsl:when test="name()='MemoryBalloonSize'">
407 <xsl:attribute name="memoryBalloonSize"><xsl:value-of select="."/></xsl:attribute>
408 </xsl:when>
409 <xsl:when test="name()='StatisticsUpdateInterval'">
410 <xsl:attribute name="statisticsUpdateInterval"><xsl:value-of select="."/></xsl:attribute>
411 </xsl:when>
412 <xsl:otherwise>
413 <xsl:apply-templates select="node()" mode="v1.3"/>
414 </xsl:otherwise>
415 </xsl:choose>
416 </xsl:for-each>
417 </xsl:copy>
418</xsl:template>
419
420<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
421 vb:Machine//vb:Uart"
422 mode="v1.3">
423 <UART>
424 <xsl:apply-templates select="@*|node()" mode="v1.3"/>
425 </UART>
426</xsl:template>
427
428<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
429 vb:Machine//vb:Lpt"
430 mode="v1.3">
431 <LPT>
432 <xsl:apply-templates select="@*|node()" mode="v1.3"/>
433 </LPT>
434</xsl:template>
435
436<!-- @todo add lastStateChange with the current timestamp if missing.
437 * current-dateTime() is available only in XPath 2.0 so we will need to pass
438 * the current time as a parameter to the XSLT processor. -->
439<!--
440<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.3.pre']/
441 vb:Machine"
442 mode="v1.3">
443 <xsl:copy>
444 <xsl:if test="not(@lastStateChange)">
445 <xsl:attribute name="lastStateChange">
446 <xsl:value-of select="current-dateTime()"/>
447 </xsl:attribute>
448 </xsl:if>
449 <xsl:apply-templates select="@*|node()" mode="v1.3"/>
450 </xsl:copy>
451</xsl:template>
452-->
453
454</xsl:stylesheet>
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use