diff options
Diffstat (limited to 'src/main/java/org/openslx/vm/disk')
5 files changed, 40 insertions, 42 deletions
diff --git a/src/main/java/org/openslx/vm/disk/DiskImage.java b/src/main/java/org/openslx/vm/disk/DiskImage.java index 5706db3..cf7df83 100644 --- a/src/main/java/org/openslx/vm/disk/DiskImage.java +++ b/src/main/java/org/openslx/vm/disk/DiskImage.java @@ -11,6 +11,7 @@ import java.util.function.Predicate; import org.openslx.bwlp.thrift.iface.Virtualizer; import org.openslx.thrifthelper.TConst; import org.openslx.util.Util; +import org.openslx.virtualization.Version; /** * Disk image for virtual machines. @@ -87,7 +88,7 @@ public abstract class DiskImage implements Closeable * * @throws DiskImageException unable to obtain version of the disk image format. */ - public abstract int getVersion() throws DiskImageException; + public abstract Version getVersion() throws DiskImageException; /** * Returns the disk image description. @@ -115,7 +116,8 @@ public abstract class DiskImage implements Closeable * @throws IOException cannot access the content of the disk image file. * @throws DiskImageException disk image file has an invalid and unknown disk image format. */ - public static DiskImage newInstance( File diskImagePath ) throws FileNotFoundException, IOException, DiskImageException + public static DiskImage newInstance( File diskImagePath ) + throws FileNotFoundException, IOException, DiskImageException { // Make sure this doesn't escape the scope, in case instantiation fails - we can't know when the GC // would come along and close this file, which is problematic on Windows (blocking rename/delete) @@ -193,7 +195,7 @@ public abstract class DiskImage implements Closeable /** * Checks if the disk image format is supported by a virtualizer. * - * @param supportedImageTypes list of supported disk image formats of a virtualizer. + * @param supportedImageFormats list of supported disk image formats of a virtualizer. * @return <code>true</code> if image type is supported by the virtualizer; otherwise * <code>false</code>. */ diff --git a/src/main/java/org/openslx/vm/disk/DiskImageQcow2.java b/src/main/java/org/openslx/vm/disk/DiskImageQcow2.java index a9826e4..e569708 100644 --- a/src/main/java/org/openslx/vm/disk/DiskImageQcow2.java +++ b/src/main/java/org/openslx/vm/disk/DiskImageQcow2.java @@ -2,6 +2,8 @@ package org.openslx.vm.disk; import java.io.RandomAccessFile; +import org.openslx.virtualization.Version; + /** * QCOW2 disk image for virtual machines. * @@ -48,9 +50,9 @@ public class DiskImageQcow2 extends DiskImage * * @param diskImage file to a QCOW2 disk storing the image content. */ - DiskImageQcow2( RandomAccessFile disk ) + DiskImageQcow2( RandomAccessFile diskImage ) { - super( disk ); + super( diskImage ); } /** @@ -104,7 +106,7 @@ public class DiskImageQcow2 extends DiskImage // check if QCOW2 image uses extended L2 tables // extended L2 tables are only possible in QCOW2 version 3 header format - if ( this.getVersion() >= 3 ) { + if ( this.getVersion().getMajor() >= Short.valueOf( "3" ) ) { // read incompatible feature bits final long qcowIncompatibleFeatures = DiskImageUtils.readLong( diskFile, 72 ); @@ -200,7 +202,7 @@ public class DiskImageQcow2 extends DiskImage } @Override - public int getVersion() throws DiskImageException + public Version getVersion() throws DiskImageException { final RandomAccessFile diskFile = this.getDiskImage(); final int qcowVersion = DiskImageUtils.readInt( diskFile, 4 ); @@ -212,7 +214,7 @@ public class DiskImageQcow2 extends DiskImage throw new DiskImageException( errorMsg ); } - return DiskImageUtils.versionFromMajor( Integer.valueOf( qcowVersion ).shortValue() ); + return new Version( Integer.valueOf( qcowVersion ).shortValue() ); } @Override diff --git a/src/main/java/org/openslx/vm/disk/DiskImageUtils.java b/src/main/java/org/openslx/vm/disk/DiskImageUtils.java index fbed6f9..ccb053f 100644 --- a/src/main/java/org/openslx/vm/disk/DiskImageUtils.java +++ b/src/main/java/org/openslx/vm/disk/DiskImageUtils.java @@ -114,12 +114,12 @@ public class DiskImageUtils } /** - * Reads two bytes ({@link Short}) at a given <code>offset</code> from the specified disk image - * file. + * Reads a variable number of bytes (<code>numBytes</code>) at a given <code>offset</code> from the specified disk image file. * * @param diskImage file to a disk storing the image content. - * @param offset offset in bytes for reading the two bytes. - * @return value of the two bytes from the disk image file as {@link Short}. + * @param offset offset in bytes for reading <code>numBytes</code> bytes. + * @param numBytes number of bytes to read at <code>offset</code>. + * @return read bytes from the disk image file as {@link String}. * * @throws DiskImageException unable to read two bytes from the disk image file. */ @@ -141,14 +141,4 @@ public class DiskImageUtils return new String( values ); } - - public static int versionFromMajorMinor( final short major, final short minor ) - { - return ( ( Integer.valueOf( major ) << 16 ) | minor ); - } - - public static int versionFromMajor( final short major ) - { - return DiskImageUtils.versionFromMajorMinor( major, Short.valueOf( "0" ) ); - } } diff --git a/src/main/java/org/openslx/vm/disk/DiskImageVdi.java b/src/main/java/org/openslx/vm/disk/DiskImageVdi.java index 9be49d8..37e45c1 100644 --- a/src/main/java/org/openslx/vm/disk/DiskImageVdi.java +++ b/src/main/java/org/openslx/vm/disk/DiskImageVdi.java @@ -2,6 +2,8 @@ package org.openslx.vm.disk; import java.io.RandomAccessFile; +import org.openslx.virtualization.Version; + /** * VDI disk image for virtual machines. * @@ -78,14 +80,14 @@ public class DiskImageVdi extends DiskImage } @Override - public int getVersion() throws DiskImageException + public Version getVersion() throws DiskImageException { final RandomAccessFile diskFile = this.getDiskImage(); final short vdiVersionMajor = Short.reverseBytes( DiskImageUtils.readShort( diskFile, 68 ) ); final short vdiVersionMinor = Short.reverseBytes( DiskImageUtils.readShort( diskFile, 70 ) ); - return DiskImageUtils.versionFromMajorMinor( vdiVersionMajor, vdiVersionMinor ); + return new Version( vdiVersionMajor, vdiVersionMinor ); } @Override diff --git a/src/main/java/org/openslx/vm/disk/DiskImageVmdk.java b/src/main/java/org/openslx/vm/disk/DiskImageVmdk.java index 58314fc..75a2bac 100644 --- a/src/main/java/org/openslx/vm/disk/DiskImageVmdk.java +++ b/src/main/java/org/openslx/vm/disk/DiskImageVmdk.java @@ -3,8 +3,9 @@ package org.openslx.vm.disk; import java.io.RandomAccessFile; import org.openslx.util.Util; -import org.openslx.vm.UnsupportedVirtualizerFormatException; -import org.openslx.vm.VmwareConfig; +import org.openslx.virtualization.configuration.VirtualizationConfigurationVmwareFileFormat; +import org.openslx.virtualization.Version; +import org.openslx.virtualization.configuration.VirtualizationConfigurationException; /** * VMDK (sparse extent) disk image for virtual machines. @@ -32,7 +33,7 @@ public class DiskImageVmdk extends DiskImage /** * Stores disk configuration if VMDK disk image contains an embedded descriptor file. */ - private final VmwareConfig vmdkConfig; + private final VirtualizationConfigurationVmwareFileFormat vmdkConfig; /** * Creates a new VMDK disk image from an existing VMDK image file. @@ -80,7 +81,7 @@ public class DiskImageVmdk extends DiskImage */ private String getCreationType() { - final VmwareConfig vmdkConfig = this.getVmdkConfig(); + final VirtualizationConfigurationVmwareFileFormat vmdkConfig = this.getVmdkConfig(); final String vmdkCreationType; if ( vmdkConfig == null ) { @@ -103,10 +104,10 @@ public class DiskImageVmdk extends DiskImage * * @throws DiskImageException parsing of the VMDK's embedded descriptor file failed. */ - protected VmwareConfig parseVmdkConfig() throws DiskImageException + protected VirtualizationConfigurationVmwareFileFormat parseVmdkConfig() throws DiskImageException { final RandomAccessFile diskFile = this.getDiskImage(); - final VmwareConfig vmdkConfig; + final VirtualizationConfigurationVmwareFileFormat vmdkConfig; // get offset and size of descriptor file embedded into the VMDK disk image final long vmdkDescriptorSectorOffset = Long.reverseBytes( DiskImageUtils.readLong( diskFile, 28 ) ); @@ -133,8 +134,8 @@ public class DiskImageVmdk extends DiskImage // create configuration instance from content of the descriptor file try { - vmdkConfig = new VmwareConfig( configStr.getBytes(), vmdkDescriptorSize ); - } catch ( UnsupportedVirtualizerFormatException e ) { + vmdkConfig = new VirtualizationConfigurationVmwareFileFormat( configStr.getBytes(), vmdkDescriptorSize ); + } catch ( VirtualizationConfigurationException e ) { throw new DiskImageException( e.getLocalizedMessage() ); } } else { @@ -150,7 +151,7 @@ public class DiskImageVmdk extends DiskImage * * @return parsed configuration of the VMDK's embedded descriptor file. */ - protected VmwareConfig getVmdkConfig() + protected VirtualizationConfigurationVmwareFileFormat getVmdkConfig() { return this.vmdkConfig; } @@ -163,12 +164,13 @@ public class DiskImageVmdk extends DiskImage * * @return hardware version from the VMDK's embedded descriptor file. * - * @throws DiskImageException + * @throws DiskImageException unable to obtain the VMDK's hardware version of the disk image + * format. */ - public int getHwVersion() throws DiskImageException + public Version getHwVersion() throws DiskImageException { - final VmwareConfig vmdkConfig = this.getVmdkConfig(); - final int hwVersion; + final VirtualizationConfigurationVmwareFileFormat vmdkConfig = this.getVmdkConfig(); + final Version hwVersion; if ( vmdkConfig != null ) { // VMDK image contains a hardware version, so return parsed hardware version @@ -176,11 +178,11 @@ public class DiskImageVmdk extends DiskImage final String hwVersionStr = vmdkConfig.get( "ddb.virtualHWVersion" ); final int hwVersionMajor = Util.parseInt( hwVersionStr, DiskImageVmdk.VMDK_DEFAULT_HW_VERSION ); - hwVersion = DiskImageUtils.versionFromMajor( Integer.valueOf( hwVersionMajor ).shortValue() ); + hwVersion = new Version( Integer.valueOf( hwVersionMajor ).shortValue() ); } else { // VMDK image does not contain any hardware version, so return default hardware version final int hwVersionMajor = DiskImageVmdk.VMDK_DEFAULT_HW_VERSION; - hwVersion = DiskImageUtils.versionFromMajor( Integer.valueOf( hwVersionMajor ).shortValue() ); + hwVersion = new Version( Integer.valueOf( hwVersionMajor ).shortValue() ); } return hwVersion; @@ -233,7 +235,7 @@ public class DiskImageVmdk extends DiskImage @Override public boolean isSnapshot() throws DiskImageException { - final VmwareConfig vmdkConfig = this.getVmdkConfig(); + final VirtualizationConfigurationVmwareFileFormat vmdkConfig = this.getVmdkConfig(); final boolean vmdkSnapshot; if ( vmdkConfig == null ) { @@ -257,12 +259,12 @@ public class DiskImageVmdk extends DiskImage } @Override - public int getVersion() throws DiskImageException + public Version getVersion() throws DiskImageException { final RandomAccessFile diskFile = this.getDiskImage(); final int vmdkVersion = Integer.reverseBytes( DiskImageUtils.readInt( diskFile, 4 ) ); - return DiskImageUtils.versionFromMajor( Integer.valueOf( vmdkVersion ).shortValue() ); + return new Version( Integer.valueOf( vmdkVersion ).shortValue() ); } @Override |