summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/Shmem.java
blob: 3c48c95847f0123ea5d25f6553524555f82b01bd (plain) (tree)

















































































































































































                                                                                                             
package org.openslx.libvirt.domain.device;

import java.math.BigInteger;

import org.openslx.libvirt.domain.DomainUtils;
import org.openslx.libvirt.xml.LibvirtXmlNode;

/**
 * A shared memory device node in a Libvirt domain XML document.
 * 
 * @author Manuel Bentele
 * @version 1.0
 */
public class Shmem extends Device
{
	/**
	 * Creates an empty sound device.
	 */
	public Shmem()
	{
		super();
	}

	/**
	 * Creates a shared memory device representing an existing Libvirt XML shared memory device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML shared memory device element.
	 */
	public Shmem( LibvirtXmlNode xmlNode )
	{
		super( xmlNode );
	}

	/**
	 * Returns the model of the shared memory device.
	 * 
	 * @return model of the shared memory device.
	 */
	public Model getModel()
	{
		String model = this.getXmlElementAttributeValue( "model", "type" );
		return Model.fromString( model );
	}

	/**
	 * Sets the model for the shared memory device.
	 * 
	 * @param model model for the shared memory device.
	 */
	public void setModel( Model model )
	{
		this.setXmlElementAttributeValue( "model", "type", model.toString() );
	}

	/**
	 * Returns the name of the shared memory device.
	 * 
	 * @return name of the shared memory device.
	 */
	public String getName()
	{
		return this.getXmlElementAttributeValue( "name" );
	}

	/**
	 * Sets the name for the shared memory device.
	 * 
	 * @param name name for the shared memory device.
	 */
	public void setName( String name )
	{
		this.setXmlElementAttributeValue( "name", name );
	}

	/**
	 * Returns the memory size of the shared memory device.
	 * 
	 * @return memory size of the shared memory device in bytes.
	 */
	public BigInteger getSize()
	{
		final String unit = this.getXmlElementAttributeValue( "size", "unit" );
		final String size = this.getXmlElementValue( "size" );

		return DomainUtils.decodeMemory( size, unit );
	}

	/**
	 * Sets the memory size for the shared memory device.
	 * 
	 * @param size memory size for the shared memory device in bytes.
	 */
	public void setSize( BigInteger memory )
	{
		final String unit = "M";
		final String size = DomainUtils.encodeMemory( memory, unit );

		this.setXmlElementAttributeValue( "size", "unit", unit );
		this.setXmlElementValue( "size", size );
	}

	/**
	 * Creates a non-existent shared memory device as Libvirt XML device element.
	 * 
	 * @param xmlNode Libvirt XML node of the Libvirt XML device that is created.
	 * @return created shared memory device instance.
	 */
	public static Shmem createInstance( LibvirtXmlNode xmlNode )
	{
		return Shmem.newInstance( xmlNode );
	}

	/**
	 * Creates a shared memory device representing an existing Libvirt XML shared memory device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML shared memory device element.
	 * @return shared memory device instance.
	 */
	public static Shmem newInstance( LibvirtXmlNode xmlNode )
	{
		return new Shmem( xmlNode );
	}

	/**
	 * Model of shared memory device.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	public enum Model
	{
		// @formatter:off
		IVSHMEM         ( "ivshmem" ),
		IVSHMEM_PLAIN   ( "ivshmem-plain" ),
		IVSHMEM_DOORBELL( "ivshmem-doorbell" );
		// @formatter:on

		/**
		 * Name of the shared memory device model.
		 */
		private String model;

		/**
		 * Creates shared memory device model.
		 * 
		 * @param type valid name of the shared memory device model in a Libvirt domain XML document.
		 */
		Model( String model )
		{
			this.model = model;
		}

		@Override
		public String toString()
		{
			return this.model;
		}

		/**
		 * Creates shared memory device model from its name with error check.
		 * 
		 * @param model name of the shared memory device model in a Libvirt domain XML document.
		 * @return valid shared memory device model.
		 */
		public static Model fromString( String model )
		{
			for ( Model m : Model.values() ) {
				if ( m.model.equalsIgnoreCase( model ) ) {
					return m;
				}
			}

			return null;
		}
	}
}