VirtualBox

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

Last change on this file since 7449 was 7441, checked in by vboxsync, 17 years ago

Main/Settings: Added version 1.2=>1.3.pre conversion templates.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.3 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 innotek GmbH
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
20<xsl:stylesheet version="1.0"
21 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
22 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
23 xmlns:vb="http://www.innotek.de/VirtualBox-settings"
24 xmlns="http://www.innotek.de/VirtualBox-settings"
25 exclude-result-prefixes="#default vb xsl xsd"
26>
27
28<xsl:output method = "xml" indent = "yes"/>
29
30<xsl:variable name="curVer" select="substring-before(/vb:VirtualBox/@version, '-')"/>
31<xsl:variable name="curVerPlat" select="substring-after(/vb:VirtualBox/@version, '-')"/>
32<xsl:variable name="curVerFull" select="/vb:VirtualBox/@version"/>
33
34<xsl:template match="/">
35 <xsl:comment> Automatically converted from version '<xsl:value-of select="$curVerFull"/>' </xsl:comment>
36 <xsl:copy>
37 <xsl:apply-templates select="@*|node()"/>
38 </xsl:copy>
39</xsl:template>
40
41<!--
42 * comments outside the root node are gathered to a single line, fix this
43-->
44<xsl:template match="/comment()">
45 <xsl:copy-of select="."/>
46</xsl:template>
47
48<!--
49 * Forbid non-VirtualBox root nodes
50-->
51<xsl:template match="/*">
52 <xsl:message terminate="yes">
53Cannot convert an unknown XML file with the root node '<xsl:value-of select="name()"/>'!
54 </xsl:message>
55</xsl:template>
56
57<!--
58 * Forbid all unsupported VirtualBox settings versions
59-->
60<xsl:template match="/vb:VirtualBox">
61 <xsl:message terminate="yes">
62Cannot convert settings from version '<xsl:value-of select="@version"/>'.
63The source version is not supported.
64 </xsl:message>
65</xsl:template>
66
67<!--
68 * Accept supported settings versions (source setting files we can convert)
69 *
70 * Note that in order to simplify conversion from versions prior to the previous
71 * one, we support multi-step conversion like this: step 1: 1.0 => 1.1,
72 * step 2: 1.1 => 1.2, where 1.2 is the most recent version. If you want to use
73 * such multi-step mode, you need to ensure that only 1.0 => 1.1 is possible, by
74 * using the 'mode=1.1' attribute on both 'apply-templates' within the starting
75 * '/vb:VirtualBox[1.0]' template and within all templates that this
76 * 'apply-templates' should apply.
77 *
78 * If no 'mode' attribute is used as described above, then a direct conversion
79 * (1.0 => 1.2 in the above example) will happen when version 1.0 of the settings
80 * files is detected. Note that the direct conversion from pre-previous versions
81 * will require to patch their conversion templates so that they include all
82 * modifications from all newer versions, which is error-prone. It's better to
83 * use the milt-step mode.
84-->
85
86<!-- 1.1 => 1.2 -->
87<xsl:template match="/vb:VirtualBox[substring-before(@version,'-')='1.1']">
88 <xsl:copy>
89 <xsl:attribute name="version"><xsl:value-of select="concat('1.2','-',$curVerPlat)"/></xsl:attribute>
90 <xsl:apply-templates select="node()" mode="v1.2"/>
91 </xsl:copy>
92</xsl:template>
93
94<!-- 1.2 => 1.3.pre -->
95<xsl:template match="/vb:VirtualBox[substring-before(@version,'-')='1.2']">
96 <xsl:copy>
97 <xsl:attribute name="version"><xsl:value-of select="concat('1.3.pre','-',$curVerPlat)"/></xsl:attribute>
98 <xsl:apply-templates select="node()" mode="v1.3.pre"/>
99 </xsl:copy>
100</xsl:template>
101
102<!--
103 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
104 * 1.1 => 1.2
105 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
106-->
107
108<!--
109 * all non-root elements that are not explicitly matched are copied as is
110-->
111<xsl:template match="@*|node()[../..]" mode="v1.2">
112 <xsl:copy>
113 <xsl:apply-templates select="@*|node()[../..]" mode="v1.2"/>
114 </xsl:copy>
115</xsl:template>
116
117<!--
118 * Global settings
119-->
120
121<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
122 vb:Global/vb:DiskImageRegistry/vb:HardDiskImages//
123 vb:Image"
124 mode="v1.2">
125 <DiffHardDisk>
126 <xsl:attribute name="uuid"><xsl:value-of select="@uuid"/></xsl:attribute>
127 <VirtualDiskImage>
128 <xsl:attribute name="filePath"><xsl:value-of select="@src"/></xsl:attribute>
129 </VirtualDiskImage>
130 <xsl:apply-templates select="vb:Image"/>
131 </DiffHardDisk>
132</xsl:template>
133
134<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
135 vb:Global/vb:DiskImageRegistry"
136 mode="v1.2">
137<DiskRegistry>
138 <HardDisks>
139 <xsl:for-each select="vb:HardDiskImages/vb:Image">
140 <HardDisk>
141 <xsl:attribute name="uuid"><xsl:value-of select="@uuid"/></xsl:attribute>
142 <xsl:attribute name="type">
143 <xsl:choose>
144 <xsl:when test="@independent='immutable'">immutable</xsl:when>
145 <xsl:when test="@independent='mutable'">immutable</xsl:when>
146 <xsl:otherwise>normal</xsl:otherwise>
147 </xsl:choose>
148 </xsl:attribute>
149 <VirtualDiskImage>
150 <xsl:attribute name="filePath"><xsl:value-of select="@src"/></xsl:attribute>
151 </VirtualDiskImage>
152 <xsl:apply-templates select="vb:Image"/>
153 </HardDisk>
154 </xsl:for-each>
155 </HardDisks>
156 <xsl:copy-of select="vb:DVDImages"/>
157 <xsl:copy-of select="vb:FloppyImages"/>
158</DiskRegistry>
159</xsl:template>
160
161<!--
162 * Machine settings
163-->
164
165<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.1']/
166 vb:Machine//vb:HardDisks"
167 mode="v1.2">
168 <HardDiskAttachments>
169 <xsl:for-each select="vb:HardDisk">
170 <HardDiskAttachment>
171 <xsl:attribute name="hardDisk"><xsl:value-of select="vb:Image/@uuid"/></xsl:attribute>
172 <xsl:apply-templates select="@*"/>
173 </HardDiskAttachment>
174 </xsl:for-each>
175 </HardDiskAttachments>
176</xsl:template>
177
178<!--
179 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
180 * 1.2 => 1.3.pre
181 * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
182-->
183
184<!--
185 * all non-root elements that are not explicitly matched are copied as is
186-->
187<xsl:template match="@*|node()[../..]" mode="v1.3.pre">
188 <xsl:copy>
189 <xsl:apply-templates select="@*|node()[../..]" mode="v1.3.pre"/>
190 </xsl:copy>
191</xsl:template>
192
193<!--
194 * Global settings
195-->
196
197<!--
198 * Machine settings
199-->
200
201<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.2']/
202 vb:Machine//vb:USBController"
203 mode="v1.3.pre">
204 <xsl:copy>
205 <xsl:apply-templates select="@*|node()" mode="v1.3.pre"/>
206 </xsl:copy>
207 <SATAController enabled="false"/>
208</xsl:template>
209
210<xsl:template match="vb:VirtualBox[substring-before(@version,'-')='1.2']/
211 vb:Machine//vb:HardDiskAttachments/vb:HardDiskAttachment"
212 mode="v1.3.pre">
213 <HardDiskAttachment>
214 <xsl:attribute name="hardDisk"><xsl:value-of select="@hardDisk"/></xsl:attribute>
215 <xsl:attribute name="bus">
216 <xsl:choose>
217 <xsl:when test="@bus='ide0'">
218 <xsl:text>IDE</xsl:text>
219 </xsl:when>
220 <xsl:when test="@bus='ide1'">
221 <xsl:text>IDE</xsl:text>
222 </xsl:when>
223 <xsl:otherwise>
224 <xsl:message terminate="yes">
225Value '<xsl:value-of select="@bus"/>' of 'HardDiskAttachment::bus' attribute is invalid.
226 </xsl:message>
227 </xsl:otherwise>
228 </xsl:choose>
229 </xsl:attribute>
230 <xsl:attribute name="channel">0</xsl:attribute>
231 <xsl:attribute name="device">
232 <xsl:choose>
233 <xsl:when test="@device='master'">
234 <xsl:text>0</xsl:text>
235 </xsl:when>
236 <xsl:when test="@device='slave'">
237 <xsl:text>1</xsl:text>
238 </xsl:when>
239 <xsl:otherwise>
240 <xsl:message terminate="yes">
241Value '<xsl:value-of select="@device"/>' of 'HardDiskAttachment::device' attribute is invalid.
242 </xsl:message>
243 </xsl:otherwise>
244 </xsl:choose>
245 </xsl:attribute>
246 </HardDiskAttachment>
247</xsl:template>
248
249</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