package com.sequenceiq.cloudbreak.cloud.model; import java.util.HashMap; import java.util.Map; public class VmTypeMeta { public static final String CPU = "Cpu"; public static final String MEMORY = "Memory"; public static final String MAXIMUM_PERSISTENT_DISKS_SIZE_GB = "maximumPersistentDisksSizeGb"; public static final String PRICE = "Price"; private VolumeParameterConfig magneticConfig; private VolumeParameterConfig autoAttachedConfig; private VolumeParameterConfig ssdConfig; private VolumeParameterConfig ephemeralConfig; private VolumeParameterConfig st1Config; private Map<String, String> properties = new HashMap<>(); public VmTypeMeta() { } public VolumeParameterConfig getMagneticConfig() { return magneticConfig; } public void setMagneticConfig(VolumeParameterConfig magneticConfig) { this.magneticConfig = magneticConfig; } public VolumeParameterConfig getAutoAttachedConfig() { return autoAttachedConfig; } public void setAutoAttachedConfig(VolumeParameterConfig autoAttachedConfig) { this.autoAttachedConfig = autoAttachedConfig; } public VolumeParameterConfig getSsdConfig() { return ssdConfig; } public void setSsdConfig(VolumeParameterConfig ssdConfig) { this.ssdConfig = ssdConfig; } public VolumeParameterConfig getEphemeralConfig() { return ephemeralConfig; } public void setEphemeralConfig(VolumeParameterConfig ephemeralConfig) { this.ephemeralConfig = ephemeralConfig; } public VolumeParameterConfig getSt1Config() { return st1Config; } public void setSt1Config(VolumeParameterConfig st1Config) { this.st1Config = st1Config; } public Map<String, String> getProperties() { return properties; } public void setProperties(Map<String, String> properties) { this.properties = properties; } public static class VmTypeMetaBuilder { private VolumeParameterConfig magneticConfig; private VolumeParameterConfig autoAttachedConfig; private VolumeParameterConfig ssdConfig; private VolumeParameterConfig ephemeralConfig; private VolumeParameterConfig st1Config; private Map<String, String> properties = new HashMap<>(); private VmTypeMetaBuilder() { } public static VmTypeMetaBuilder builder() { return new VmTypeMetaBuilder(); } public VmTypeMetaBuilder withMagneticConfig(Integer minimumSize, Integer maximumSize, Integer minimumNumber, Integer maximumNumber) { this.magneticConfig = new VolumeParameterConfig(VolumeParameterType.MAGNETIC, minimumSize, maximumSize, minimumNumber, maximumNumber); return this; } public VmTypeMetaBuilder withMagneticConfig(VolumeParameterConfig volumeParameterConfig) { this.magneticConfig = volumeParameterConfig; return this; } public VmTypeMetaBuilder withAutoAttachedConfig(Integer minimumSize, Integer maximumSize, Integer minimumNumber, Integer maximumNumber) { this.autoAttachedConfig = new VolumeParameterConfig(VolumeParameterType.AUTO_ATTACHED, minimumSize, maximumSize, minimumNumber, maximumNumber); return this; } public VmTypeMetaBuilder withAutoAttachedConfig(VolumeParameterConfig volumeParameterConfig) { this.autoAttachedConfig = volumeParameterConfig; return this; } public VmTypeMetaBuilder withSsdConfig(Integer minimumSize, Integer maximumSize, Integer minimumNumber, Integer maximumNumber) { this.ssdConfig = new VolumeParameterConfig(VolumeParameterType.SSD, minimumSize, maximumSize, minimumNumber, maximumNumber); return this; } public VmTypeMetaBuilder withSsdConfig(VolumeParameterConfig volumeParameterConfig) { this.ssdConfig = volumeParameterConfig; return this; } public VmTypeMetaBuilder withEphemeralConfig(Integer minimumSize, Integer maximumSize, Integer minimumNumber, Integer maximumNumber) { this.ephemeralConfig = new VolumeParameterConfig(VolumeParameterType.EPHEMERAL, minimumSize, maximumSize, minimumNumber, maximumNumber); return this; } public VmTypeMetaBuilder withEphemeralConfig(VolumeParameterConfig volumeParameterConfig) { this.ephemeralConfig = volumeParameterConfig; return this; } public VmTypeMetaBuilder withSt1Config(Integer minimumSize, Integer maximumSize, Integer minimumNumber, Integer maximumNumber) { this.st1Config = new VolumeParameterConfig(VolumeParameterType.ST1, minimumSize, maximumSize, minimumNumber, maximumNumber); return this; } public VmTypeMetaBuilder withSt1Config(VolumeParameterConfig volumeParameterConfig) { this.st1Config = volumeParameterConfig; return this; } public VmTypeMetaBuilder withProperty(String name, String value) { this.properties.put(name, value); return this; } public VmTypeMetaBuilder withCpuAndMemory(Integer cpu, Float memory) { this.properties.put(CPU, cpu.toString()); this.properties.put(MEMORY, memory.toString()); return this; } public VmTypeMetaBuilder withCpuAndMemory(String cpu, String memory) { this.properties.put(CPU, cpu); this.properties.put(MEMORY, memory); return this; } public VmTypeMetaBuilder withMaximumPersistentDisksSizeGb(Float maximumPersistentDisksSizeGb) { this.properties.put(MAXIMUM_PERSISTENT_DISKS_SIZE_GB, maximumPersistentDisksSizeGb.toString()); return this; } public VmTypeMetaBuilder withMaximumPersistentDisksSizeGb(String maximumPersistentDisksSizeGb) { this.properties.put(MAXIMUM_PERSISTENT_DISKS_SIZE_GB, maximumPersistentDisksSizeGb); return this; } public VmTypeMetaBuilder withPrice(Double price) { this.properties.put(PRICE, price.toString()); return this; } public VmTypeMeta create() { VmTypeMeta vmTypeMeta = new VmTypeMeta(); vmTypeMeta.setAutoAttachedConfig(this.autoAttachedConfig); vmTypeMeta.setEphemeralConfig(this.ephemeralConfig); vmTypeMeta.setMagneticConfig(this.magneticConfig); vmTypeMeta.setSsdConfig(this.ssdConfig); vmTypeMeta.setSt1Config(this.st1Config); vmTypeMeta.setProperties(this.properties); return vmTypeMeta; } } }