summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/util/vm/VmMetaData.java
blob: ff5092020356146bd4f5b00656c97697543b4e2c (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
package org.openslx.util.vm;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map.Entry;

import org.openslx.bwlp.thrift.iface.OperatingSystem;

/**
 * Describes a configured virtual machine. This class is parsed from a machine description, like a
 * *.vmx for VMware machines.
 */
public abstract class VmMetaData
{

	/*
	 * Helper types
	 */

	public static enum DriveBusType
	{
		SCSI,
		IDE,
		SATA;
	}

	public static class HardDisk
	{
		public final String chipsetDriver;
		public final DriveBusType bus;
		public final String diskImage;

		public HardDisk( String chipsetDriver, DriveBusType bus, String diskImage )
		{
			this.chipsetDriver = chipsetDriver;
			this.bus = bus;
			this.diskImage = diskImage;
		}
	}

	/*
	 * Members
	 */

	protected final List<HardDisk> hdds = new ArrayList<>();

	private final List<OperatingSystem> osList;

	private OperatingSystem os = null;

	protected String displayName = null;

	/*
	 * Guettas
	 */

	/**
	 * Get operating system of this VM.
	 */
	public OperatingSystem getOs()
	{
		return os;
	}

	/**
	 * Get all hard disks of this VM.
	 */
	public List<HardDisk> getHdds()
	{
		return Collections.unmodifiableList( hdds );
	}

	/**
	 * Get display name of VM.
	 */
	public String getDisplayName()
	{
		return displayName;
	}

	/**
	 * This method should return a minimal representation of the input meta data. The representation
	 * is platform dependent, and should be stripped of all non-essential configuration, such as
	 * CD/DVD/FLoppy drives, serial or parallel ports, shared folders, or anything else that could be
	 * considered sensible information (absolute paths containing the local user's name).
	 */
	public abstract String getFilteredDefinition();

	/*
	 * Methods
	 */

	public VmMetaData( List<OperatingSystem> osList )
	{
		this.osList = osList;
	}

	/**
	 * Called from subclass to set the OS. If the OS cannot be determined from the given parameters,
	 * it will not be set.
	 * 
	 * @param virtId virtualizer, eg "vmware" for VMware
	 * @param virtOsId the os identifier used by the virtualizer, eg. windows7-64 for 64bit Windows 7
	 *           on VMware
	 */
	protected final void setOs( String virtId, String virtOsId )
	{
		OperatingSystem lazyMatch = null;
		for ( OperatingSystem os : osList ) {
			for ( Entry<String, String> entry : os.getVirtualizerOsId().entrySet() ) {
				if ( !entry.getValue().equals( virtOsId ) )
					continue;
				if ( entry.getKey().equals( virtId ) ) {
					this.os = os;
					return;
				} else {
					lazyMatch = os;
				}
			}
		}
		this.os = lazyMatch;
	}

}