summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/vm/disk/DiskImage.java
diff options
context:
space:
mode:
authorManuel Bentele2021-05-19 09:48:37 +0200
committerManuel Bentele2021-05-19 09:48:37 +0200
commit2cdee4f4023ec003fe65cfa85ebb654f1446ff59 (patch)
tree39c025839c6fa2b1e58e12cd9dc29df71dec5cc5 /src/main/java/org/openslx/vm/disk/DiskImage.java
parentMerge branch 'feature/qemu-integration' (diff)
downloadmaster-sync-shared-2cdee4f4023ec003fe65cfa85ebb654f1446ff59.tar.gz
master-sync-shared-2cdee4f4023ec003fe65cfa85ebb654f1446ff59.tar.xz
master-sync-shared-2cdee4f4023ec003fe65cfa85ebb654f1446ff59.zip
Rename 'vm.disk' package to 'virtualization.disk'
Diffstat (limited to 'src/main/java/org/openslx/vm/disk/DiskImage.java')
-rw-r--r--src/main/java/org/openslx/vm/disk/DiskImage.java253
1 files changed, 0 insertions, 253 deletions
diff --git a/src/main/java/org/openslx/vm/disk/DiskImage.java b/src/main/java/org/openslx/vm/disk/DiskImage.java
deleted file mode 100644
index cf7df83..0000000
--- a/src/main/java/org/openslx/vm/disk/DiskImage.java
+++ /dev/null
@@ -1,253 +0,0 @@
-package org.openslx.vm.disk;
-
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.RandomAccessFile;
-import java.util.List;
-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.
- *
- * @implNote This class is the abstract base class to implement various specific disk images (like
- * QCOW2 or VMDK).
- *
- * @author Manuel Bentele
- * @version 1.0
- */
-public abstract class DiskImage implements Closeable
-{
- /**
- * Stores the image file of the disk.
- */
- private RandomAccessFile diskImage = null;
-
- /**
- * Creates a new disk image from an existing image file with a known disk image format.
- *
- * @param diskImage file to a disk storing the image content.
- *
- * @implNote Do not use this constructor to create a new disk image from an image file with
- * unknown disk image format. Instead, use the factory method
- * {@link #newInstance(File)} to probe unknown disk image files before creation.
- */
- protected DiskImage( RandomAccessFile diskImage )
- {
- this.diskImage = diskImage;
- }
-
- /**
- * Returns the disk image file.
- *
- * @return the disk image file.
- */
- protected RandomAccessFile getDiskImage()
- {
- return this.diskImage;
- }
-
- /**
- * Checks whether disk image is standalone and do not depend on other files (e.g. snapshot
- * files).
- *
- * @return state whether disk image is standalone or not.
- *
- * @throws DiskImageException unable to check if disk image is standalone.
- */
- public abstract boolean isStandalone() throws DiskImageException;
-
- /**
- * Checks whether disk image is compressed.
- *
- * @return state whether disk image is compressed or not.
- *
- * @throws DiskImageException unable to check whether disk image is compressed.
- */
- public abstract boolean isCompressed() throws DiskImageException;
-
- /**
- * Checks whether disk image is a snapshot.
- *
- * @return state whether disk image is a snapshot or not.
- *
- * @throws DiskImageException unable to check whether disk image is a snapshot.
- */
- public abstract boolean isSnapshot() throws DiskImageException;
-
- /**
- * Returns the version of the disk image format.
- *
- * @return version of the disk image format.
- *
- * @throws DiskImageException unable to obtain version of the disk image format.
- */
- public abstract Version getVersion() throws DiskImageException;
-
- /**
- * Returns the disk image description.
- *
- * @return description of the disk image.
- *
- * @throws DiskImageException unable to obtain description of the disk image.
- */
- public abstract String getDescription() throws DiskImageException;
-
- /**
- * Returns the format of the disk image.
- *
- * @return format of the disk image.
- */
- public abstract ImageFormat getFormat();
-
- /**
- * Creates a new disk image from an existing image file with an unknown disk image format.
- *
- * @param diskImagePath file to a disk storing the image content.
- * @return concrete disk image instance.
- *
- * @throws FileNotFoundException cannot find specified disk image file.
- * @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
- {
- // 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)
- final RandomAccessFile fileHandle = new RandomAccessFile( diskImagePath, "r" );
-
- try {
- if ( DiskImageQcow2.probe( fileHandle ) ) {
- return new DiskImageQcow2( fileHandle );
- } else if ( DiskImageVdi.probe( fileHandle ) ) {
- return new DiskImageVdi( fileHandle );
- } else if ( DiskImageVmdk.probe( fileHandle ) ) {
- return new DiskImageVmdk( fileHandle );
- }
- } catch ( Exception e ) {
- Util.safeClose( fileHandle );
- throw e;
- }
- Util.safeClose( fileHandle );
- final String errorMsg = new String( "File '" + diskImagePath.getAbsolutePath() + "' is not a valid disk image!" );
- throw new DiskImageException( errorMsg );
- }
-
- @Override
- public void close() throws IOException
- {
- Util.safeClose( diskImage );
- }
-
- @Override
- protected void finalize() throws Throwable
- {
- close();
- }
-
- /**
- * Format of a disk image.
- *
- * @author Manuel Bentele
- * @version 1.0
- */
- public enum ImageFormat
- {
- // @formatter:off
- NONE ( "none" ),
- QCOW2( "qcow2" ),
- VDI ( "vdi" ),
- VMDK ( "vmdk" );
- // @formatter:on
-
- /**
- * Stores filename extension of the disk image format.
- */
- public final String extension;
-
- /**
- * Create new disk image format.
- *
- * @param extension filename extension of the disk image format.
- */
- ImageFormat( String extension )
- {
- this.extension = extension;
- }
-
- /**
- * Returns filename extension of the disk image.
- *
- * @return filename extension of the disk image.
- */
- public String getExtension()
- {
- return this.extension;
- }
-
- /**
- * Checks if the disk image format is supported by 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>.
- */
- public boolean isSupportedbyVirtualizer( List<ImageFormat> supportedImageFormats )
- {
- Predicate<ImageFormat> matchDiskFormat = supportedImageFormat -> supportedImageFormat.toString()
- .equalsIgnoreCase( this.toString() );
- return supportedImageFormats.stream().anyMatch( matchDiskFormat );
- }
-
- /**
- * Returns default (preferred) disk image format for the specified virtualizer.
- *
- * @param virt virtualizer for that the default disk image should be determined.
- * @return default (preferred) disk image format.
- */
- public static ImageFormat defaultForVirtualizer( Virtualizer virt )
- {
- if ( virt == null ) {
- return null;
- } else {
- return ImageFormat.defaultForVirtualizer( virt.virtId );
- }
- }
-
- /**
- * Returns default (preferred) disk image format for the specified virtualizer.
- *
- * @param virtId ID of a virtualizer for that the default disk image should be determined.
- * @return default (preferred) disk image format.
- */
- public static ImageFormat defaultForVirtualizer( String virtId )
- {
- ImageFormat imgFormat = null;
-
- if ( TConst.VIRT_DOCKER.equals( virtId ) ) {
- imgFormat = NONE;
- } else if ( TConst.VIRT_QEMU.equals( virtId ) ) {
- imgFormat = QCOW2;
- } else if ( TConst.VIRT_VIRTUALBOX.equals( virtId ) ) {
- imgFormat = VDI;
- } else if ( TConst.VIRT_VMWARE.equals( virtId ) ) {
- imgFormat = VMDK;
- }
-
- return imgFormat;
- }
-
- @Override
- public String toString()
- {
- return this.getExtension();
- }
- }
-}