summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/libvirt/capabilities/Capabilities.java
blob: 798737158897bd22ffdf7366924fd0897ca6cb99 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
package org.openslx.libvirt.capabilities;

import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.openslx.libvirt.capabilities.cpu.Cpu;
import org.openslx.libvirt.capabilities.guest.Guest;
import org.openslx.libvirt.xml.LibvirtXmlDocument;
import org.openslx.libvirt.xml.LibvirtXmlDocumentException;
import org.openslx.libvirt.xml.LibvirtXmlNode;
import org.openslx.libvirt.xml.LibvirtXmlResources;
import org.openslx.libvirt.xml.LibvirtXmlSerializationException;
import org.openslx.libvirt.xml.LibvirtXmlValidationException;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

/**
 * Implementation of the Libvirt capabilities XML document.
 * 
 * The Libvirt capabilities XML document is used to describe the configuration and capabilities of
 * the hypervisor's host.
 * 
 * @author Manuel Bentele
 * @version 1.0
 */
public class Capabilities extends LibvirtXmlDocument
{
	/**
	 * Creates Libvirt capabilities XML document from {@link String} providing Libvirt capabilities
	 * XML content.
	 * 
	 * @param xml {@link String} with Libvirt capabilities XML content.
	 * 
	 * @throws LibvirtXmlDocumentException creation of XML context failed.
	 * @throws LibvirtXmlSerializationException serialization of the capabilities XML content failed.
	 * @throws LibvirtXmlValidationException XML content is not a valid capabilities XML document.
	 */
	public Capabilities( String xml )
			throws LibvirtXmlDocumentException, LibvirtXmlSerializationException, LibvirtXmlValidationException
	{
		super( xml, LibvirtXmlResources.getLibvirtRng( "capabilities.rng" ) );
	}

	/**
	 * Creates Libvirt capabilities XML document from {@link File} containing Libvirt capabilities
	 * XML content.
	 * 
	 * @param xml existing {@link File} containing Libvirt capabilities XML content.
	 * 
	 * @throws LibvirtXmlDocumentException creation of XML context failed.
	 * @throws LibvirtXmlSerializationException serialization of the capabilities XML content failed.
	 * @throws LibvirtXmlValidationException XML content is not a valid capabilities XML document.
	 */
	public Capabilities( File xml )
			throws LibvirtXmlDocumentException, LibvirtXmlSerializationException, LibvirtXmlValidationException
	{
		super( xml, LibvirtXmlResources.getLibvirtRng( "capabilities.rng" ) );
	}

	/**
	 * Creates Libvirt capabilities XML document from {@link InputStream} providing Libvirt
	 * capabilities XML content.
	 * 
	 * @param xml {@link InputStream} providing Libvirt capabilities XML content.
	 * 
	 * @throws LibvirtXmlDocumentException creation of XML context failed.
	 * @throws LibvirtXmlSerializationException serialization of the capabilities XML content failed.
	 * @throws LibvirtXmlValidationException XML content is not a valid capabilities XML document.
	 */
	public Capabilities( InputStream xml )
			throws LibvirtXmlDocumentException, LibvirtXmlSerializationException, LibvirtXmlValidationException
	{
		super( xml, LibvirtXmlResources.getLibvirtRng( "capabilities.rng" ) );
	}

	/**
	 * Creates Libvirt capabilities XML document from {@link InputSource} providing Libvirt
	 * capabilities XML content.
	 * 
	 * @param xml {@link InputSource} providing Libvirt capabilities XML content.
	 * 
	 * @throws LibvirtXmlDocumentException creation of XML context failed.
	 * @throws LibvirtXmlSerializationException serialization of the capabilities XML content failed.
	 * @throws LibvirtXmlValidationException XML content is not a valid capabilities XML document.
	 */
	public Capabilities( InputSource xml )
			throws LibvirtXmlDocumentException, LibvirtXmlSerializationException, LibvirtXmlValidationException
	{
		super( xml, LibvirtXmlResources.getLibvirtRng( "capabilities.rng" ) );
	}

	/**
	 * Returns UUID of the Libvirt host machine.
	 * 
	 * @return UUID of the host machine.
	 */
	public String getHostUuid()
	{
		return this.getRootXmlNode().getXmlElementValue( "host/uuid" );
	}

	/**
	 * Returns CPU capabilities of the host machine.
	 * 
	 * @return CPU capabilities of the host machine.
	 */
	public Cpu getHostCpu()
	{
		final Node hostCpuNode = this.getRootXmlNode().getXmlElement( "host/cpu" );

		if ( hostCpuNode == null ) {
			return null;
		} else {
			final LibvirtXmlNode hostCpuXmlNode = new LibvirtXmlNode( this.getRootXmlNode().getXmlDocument(),
					hostCpuNode );
			return Cpu.newInstance( hostCpuXmlNode );
		}
	}

	/**
	 * Checks whether the Libvirt host machine has IOMMU support.
	 * 
	 * @return State of the IOMMU support.
	 */
	public boolean hasHostIommuSupport()
	{
		return this.getRootXmlNode().getXmlElementAttributeValueAsBool( "host/iommu", "support" );
	}

	/**
	 * Returns capabilities of all possible guest machines.
	 * 
	 * @return capabilities of all possible guest machines.
	 */
	public List<Guest> getGuests()
	{
		final List<Guest> guestList = new ArrayList<Guest>();
		final NodeList guestNodes = this.getRootXmlNode().getXmlNodes( "guest" );

		for ( int i = 0; i < guestNodes.getLength(); i++ ) {
			final LibvirtXmlNode guestNode = new LibvirtXmlNode( this.getRootXmlNode().getXmlDocument(),
					guestNodes.item( i ) );
			final Guest guest = Guest.newInstance( guestNode );

			if ( guest != null ) {
				guestList.add( guest );
			}
		}

		return guestList;
	}
}