summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/ControllerPci.java
blob: feb8b1adb5547627abcd9fdd65e080dba2c46068 (plain) (tree)
















































































































































                                                                                                              
package org.openslx.libvirt.domain.device;

import org.openslx.libvirt.xml.LibvirtXmlNode;

/**
 * A PCI controller device node in a Libvirt domain XML document.
 * 
 * @author Manuel Bentele
 * @version 1.0
 */
public class ControllerPci extends Controller
{
	/**
	 * Creates an empty PCI controller device.
	 */
	public ControllerPci()
	{
		super();
	}

	/**
	 * Creates a PCI controller device representing an existing Libvirt XML PCI controller device
	 * element.
	 * 
	 * @param xmlNode existing Libvirt XML PCI controller device element.
	 */
	public ControllerPci( LibvirtXmlNode xmlNode )
	{
		super( xmlNode );
	}

	/**
	 * Returns model of the PCI controller.
	 * 
	 * @return model of the PCI controller.
	 */
	public Model getModel()
	{
		String model = this.getXmlElementAttributeValue( "model" );
		return Model.fromString( model );
	}

	/**
	 * Sets model for the PCI controller.
	 * 
	 * @param model model for the PCI controller.
	 */
	public void setModel( Model model )
	{
		this.setXmlElementAttributeValue( "model", model.toString() );
	}

	/**
	 * Returns emulated hardware model of the PCI controller.
	 * 
	 * @return emulated hardware model of the PCI controller.
	 */
	public String getModelEmulated()
	{
		return this.getXmlElementAttributeValue( "model", "name" );
	}

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

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

	/**
	 * Model of PCI controller device.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	enum Model
	{
		// @formatter:off
		PCI_ROOT                   ( "pci-root" ),
		PCI_BRDIGE                 ( "pci-bridge" ),
		PCIE_ROOT                  ( "pcie-root" ),
		PCI_DMI2BRIDGE             ( "dmi-to-pci-bridge" ),
		PCIE_ROOT_PORT             ( "pcie-root-port" ),
		PCIE_SWITCH_UPSTREAM_PORT  ( "pcie-switch-upstream-port" ),
		PCIE_SWITCH_DOWNSTREAM_PORT( "pcie-switch-downstream-port" ),
		PCI_EXPANDER_BUS           ( "pci-expander-bus" ),
		PCIE_EXPANDER_BUS          ( "pcie-expander-bus" ),
		PCIE2PCI_BRIDGE            ( "pcie-to-pci-bridge" );
		// @formatter:on

		/**
		 * Name of the PCI controller device model.
		 */
		private String model = null;

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

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

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

			return null;
		}
	}
}