VirtualBox

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

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

Main/Settings: Perform conversion in a loop to allow for multi-step version to version updates (e.g. v1.0->v1.1->v1.2) which saves from patching all previous transformation rules when on every version change but still makes it possible to update from too old versions to the most recent one.

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