summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/domain/device/FileSystem.java
blob: 9ec8cafa0c96082d9f95dc0c63b3f9eca1759328 (plain) (tree)



































































































































































































































































































                                                                                                           
package org.openslx.libvirt.domain.device;

import org.openslx.libvirt.xml.LibvirtXmlNode;

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

	/**
	 * Creates a file system device representing an existing Libvirt XML file system device element.
	 * 
	 * @param xmlNode existing Libvirt XML file system device element.
	 */
	public FileSystem( LibvirtXmlNode xmlNode )
	{
		super( xmlNode );
	}

	/**
	 * Returns access mode of the file system device.
	 * 
	 * @return access mode of the file system device.
	 */
	public AccessMode getAccessMode()
	{
		final String mode = this.getXmlElementAttributeValue( "accessmode" );
		return AccessMode.fromString( mode );
	}

	/**
	 * Sets access mode for the file system device.
	 * 
	 * @param mode access mode for the file system device.
	 */
	public void setAccessMode( AccessMode mode )
	{
		this.setXmlElementAttributeValue( "accessmode", mode.toString() );
	}

	/**
	 * Returns type of the file system device.
	 * 
	 * @return type of the file system device.
	 */
	public Type getType()
	{
		final String type = this.getXmlElementAttributeValue( "type" );
		return Type.fromString( type );
	}

	/**
	 * Sets type for the file system device.
	 * 
	 * @param type type for the file system device.
	 */
	public void setType( Type type )
	{
		this.setXmlElementAttributeValue( "type", type.toString() );
	}

	/**
	 * Returns source of the file system device.
	 * 
	 * @return source of the file system device.
	 */
	public String getSource()
	{
		final Type type = this.getType();
		String source = null;

		switch ( type ) {
		case BIND:
			source = this.getXmlElementAttributeValue( "source", "dir" );
			break;
		case BLOCK:
			source = this.getXmlElementAttributeValue( "source", "dev" );
			break;
		case FILE:
			source = this.getXmlElementAttributeValue( "source", "file" );
			break;
		case MOUNT:
			source = this.getXmlElementAttributeValue( "source", "dir" );
			break;
		case RAM:
			source = this.getXmlElementAttributeValue( "source", "usage" );
			break;
		case TEMPLATE:
			source = this.getXmlElementAttributeValue( "source", "name" );
			break;
		}

		return source;
	}

	/**
	 * Sets source for the file system device.
	 * 
	 * @param source source for the file system device.
	 */
	public void setSource( String source )
	{
		Type type = this.getType();

		// remove all attributes from sub-element 'source'
		this.removeXmlElementAttributes( "source" );

		switch ( type ) {
		case BIND:
			this.setXmlElementAttributeValue( "source", "dir", source );
			break;
		case BLOCK:
			this.setXmlElementAttributeValue( "source", "dev", source );
			break;
		case FILE:
			this.setXmlElementAttributeValue( "source", "file", source );
			break;
		case MOUNT:
			this.setXmlElementAttributeValue( "source", "dir", source );
			break;
		case RAM:
			this.setXmlElementAttributeValue( "source", "usage", source );
			break;
		case TEMPLATE:
			this.setXmlElementAttributeValue( "source", "name", source );
			break;
		}
	}

	/**
	 * Returns target of the file system device.
	 * 
	 * @return target of the file system device.
	 */
	public String getTarget()
	{
		return this.getXmlElementAttributeValue( "target", "dir" );
	}

	/**
	 * Sets target for the file system device.
	 * 
	 * @param target target for the file system device.
	 */
	public void setTarget( String target )
	{
		this.setXmlElementAttributeValue( "target", "dir", target );
	}

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

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

	/**
	 * Access mode for the file system device.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	public enum AccessMode
	{
		// @formatter:off
		PASSTHROUGH( "passthrough" ),
		MAPPED     ( "mapped" ),
		SQUASH     ( "squash" );
		// @formatter:on

		/**
		 * Name of the file system device access mode.
		 */
		private String mode;

		/**
		 * Creates file system device access mode.
		 * 
		 * @param mode valid name of the file system device access mode in a Libvirt domain XML
		 *           document.
		 */
		AccessMode( String mode )
		{
			this.mode = mode;
		}

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

		/**
		 * Creates file system device access mode from its name with error check.
		 * 
		 * @param mode name of the file system device access mode in a Libvirt domain XML document.
		 * @return valid file system device access mode.
		 */
		public static AccessMode fromString( String mode )
		{
			for ( AccessMode a : AccessMode.values() ) {
				if ( a.mode.equalsIgnoreCase( mode ) ) {
					return a;
				}
			}

			return null;
		}
	}

	/**
	 * Type of file system device.
	 * 
	 * @author Manuel Bentele
	 * @version 1.0
	 */
	public enum Type
	{
		// @formatter:off
		MOUNT   ( "mount" ),
		TEMPLATE( "template" ),
		FILE    ( "file" ),
		BLOCK   ( "block" ),
		RAM     ( "ram" ),
		BIND    ( "bind" );
		// @formatter:on

		/**
		 * Name of the file system device type.
		 */
		private String type;

		/**
		 * Creates file system device type.
		 * 
		 * @param type valid name of the file system device type in a Libvirt domain XML document.
		 */
		Type( String type )
		{
			this.type = type;
		}

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

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

			return null;
		}
	}
}