From a9ad72ec42b150d9bf8bb5260da0a1c125cb7469 Mon Sep 17 00:00:00 2001 From: Victor Mocanu Date: Mon, 31 Oct 2016 12:26:07 +0100 Subject: [vm] add method for selecting device types user can now select/change the virtual device for sound, network, the hardware version and turn 3D-Acceleration on and off --- .../java/org/openslx/util/vm/VmwareMetaData.java | 204 ++++++++++++++++++++- 1 file changed, 199 insertions(+), 5 deletions(-) (limited to 'src/main/java/org/openslx/util/vm/VmwareMetaData.java') diff --git a/src/main/java/org/openslx/util/vm/VmwareMetaData.java b/src/main/java/org/openslx/util/vm/VmwareMetaData.java index 30b555c..8cf377a 100644 --- a/src/main/java/org/openslx/util/vm/VmwareMetaData.java +++ b/src/main/java/org/openslx/util/vm/VmwareMetaData.java @@ -31,9 +31,8 @@ public class VmwareMetaData extends VmMetaData // Init static members static { - String[] list = { "^guestos", "^uuid\\.bios", "^config\\.version", "^ehci\\.", "^mks\\.enable3d", "^virtualhw\\.", "^sound\\.", - "\\.pcislotnumber$", "^pcibridge", "\\.virtualdev$", "^tools\\.syncTime$", "^time\\.synchronize", "^bios\\.bootDelay", - "^rtc\\.", "^xhci\\." }; + String[] list = { "^guestos", "^uuid\\.bios", "^config\\.version", "^ehci\\.", "^mks\\.enable3d", "^virtualhw\\.", "^sound\\.", "\\.pcislotnumber$", "^pcibridge", + "\\.virtualdev$", "^tools\\.syncTime$", "^time\\.synchronize", "^bios\\.bootDelay", "^rtc\\.", "^xhci\\." }; whitelist = new Pattern[ list.length ]; for ( int i = 0; i < list.length; ++i ) { whitelist[i] = Pattern.compile( list[i].toLowerCase() ); @@ -62,7 +61,7 @@ public class VmwareMetaData extends VmMetaData handleLoadEntry( entry ); } // if we find this tag, we already went through the hdd's - so we're done. - if ( config.get("#SLX_HDD_BUS" ) != null) { + if ( config.get( "#SLX_HDD_BUS" ) != null ) { return; } // Now find the HDDs and add to list @@ -279,12 +278,17 @@ public class VmwareMetaData extends VmMetaData } return false; } - + private static String vmBoolean( boolean var ) { return Boolean.toString( var ).toUpperCase(); } + private static String vmInteger( int val ) + { + return Integer.toString( val ); + } + public boolean disableSuspend() { addFiltered( "suspend.disabled", "TRUE" ); @@ -379,4 +383,194 @@ public class VmwareMetaData extends VmMetaData addFiltered( "gui.applyHostDisplayScalingToGuest", "FALSE" ); } + public String getValue( String key ) + { + return config.get( key ); + } + + // SOUND + public static enum SoundCardType + { + NONE( false, null, "No card" ), + DEFAULT( true, null, "Default card" ), + SOUND_BLASTER( true, "sb16", "Sound Blaster 16" ), + ES( true, "es1371", "ES 1371" ), + HD_AUDIO( true, "hdaudio", "Intel Integrated HD Audio" ); + + public final boolean isPresent; + public final String value; + public final String displayName; + + private SoundCardType( boolean present, String value, String dName ) + { + this.isPresent = present; + this.value = value; + this.displayName = dName; + } + } + + public void setSoundCard( SoundCardType type ) + { + addFiltered( "sound.present", vmBoolean( type.isPresent ) ); + if ( type.value != null ) { + addFiltered( "sound.virtualDev", type.value ); + } else { + config.remove( "sound.virtualDev" ); + } + } + + public SoundCardType getSoundCard() + { + if ( isSetAndTrue( "sound.present" ) && isSetAndTrue( "sound.autodetect" ) && config.get( "sound.virtualDev" ) == null ) { + return SoundCardType.DEFAULT; + } else if ( isSetAndTrue( "sound.present" ) && isSetAndTrue( "sound.autodetect" ) && config.get( "sound.virtualDev" ).equals( "sb16" ) ) { + return SoundCardType.SOUND_BLASTER; + } else if ( isSetAndTrue( "sound.present" ) && isSetAndTrue( "sound.autodetect" ) && config.get( "sound.virtualDev" ).equals( "es1371" ) ) { + return SoundCardType.ES; + } else if ( isSetAndTrue( "sound.present" ) && isSetAndTrue( "sound.autodetect" ) && config.get( "sound.virtualDev" ).equals( "hdaudio" ) ) { + return SoundCardType.HD_AUDIO; + } else { + return SoundCardType.NONE; + } + } + + // 3DAcceleration + public static enum DDAcceleration + { + OFF( false, "Off" ), + ON( true, "On" ); + + public final boolean isPresent; + public final String displayName; + + private DDAcceleration( boolean present, String dName ) + { + this.isPresent = present; + this.displayName = dName; + } + } + + public void setDDAcceleration( DDAcceleration type ) + { + addFiltered( "mks.enable3d", vmBoolean( type.isPresent ) ); + } + + public DDAcceleration getDDAcceleration() + { + if ( isSetAndTrue( "mks.enable3d" ) ) { + return DDAcceleration.ON; + } else if ( !isSetAndTrue( "mks.enable3d" ) ) { + return DDAcceleration.OFF; + } else + return DDAcceleration.OFF; + } + + // Virtual hardware version + public static enum HWVersion + { + NONE( 0, "Bitte korrekter Eintrag wählen!" ), + THREE( 3, "3" ), + FOUR( 4, "4" ), + SIX( 6, "6" ), + SEVEN( 7, "7" ), + EIGHT( 8, "8" ), + NINE( 9, "9" ), + TEN( 10, "10" ), + ELEVEN( 11, "11" ), + TWELVE( 12, "12" ); + + public final int version; + public final String displayName; + + private HWVersion( int vers, String dName ) + { + this.version = vers; + this.displayName = dName; + } + } + + public void setHWVersion( HWVersion type ) + { + addFiltered( "virtualHW.version", vmInteger( type.version ) ); + } + + public HWVersion getHWVersion() + { + + String temp = config.get( "virtualHW.version" ); + if ( temp == null ) { + return HWVersion.NONE; + } + + switch ( config.get( "virtualHW.version" ) ) { + case "3": + return HWVersion.THREE; + case "4": + return HWVersion.FOUR; + case "6": + return HWVersion.SIX; + case "7": + return HWVersion.SEVEN; + case "8": + return HWVersion.EIGHT; + case "9": + return HWVersion.NINE; + case "10": + return HWVersion.TEN; + case "11": + return HWVersion.ELEVEN; + case "12": + return HWVersion.TWELVE; + default: + return HWVersion.NONE; + } + } + + // Virtual network adapter + public static enum E0VirtDev + { + AUTO( null, "auto detect" ), + AMD( "vlance", "AMD PCnet32" ), + INTEL( "e1000", "Intel E1000" ), + VMX( "vmxnet", "VMXnet" ); + + public final String value; + public final String displayName; + + private E0VirtDev( String value, String dName ) + { + this.value = value; + this.displayName = dName; + } + } + + public void setE0VirtDev( E0VirtDev type ) + { + if ( type.value != null ) { + addFiltered( "ethernet0.virtualDev", type.value ); + } else { + config.remove( "ethernet0.virtualDev" ); + } + } + + public E0VirtDev getE0VirtDev() + { + + String temp = config.get( "ethernet0.virtualDev" ); + if ( temp == null ) { + return E0VirtDev.AUTO; + } + + switch ( config.get( "ethernet0.virtualDev" ) ) { + case "vlance": + return E0VirtDev.AMD; + case "e1000": + return E0VirtDev.INTEL; + case "vmxnet": + return E0VirtDev.VMX; + default: + return E0VirtDev.AUTO; + + } + } } -- cgit v1.2.3-55-g7522