| // Licensed to the Apache Software Foundation (ASF) under one | |
| // or more contributor license agreements. See the NOTICE file | |
| // distributed with this work for additional information | |
| // regarding copyright ownership. The ASF licenses this file | |
| // to you under the Apache License, Version 2.0 (the | |
| // "License"); you may not use this file except in compliance | |
| // with the License. You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, | |
| // software distributed under the License is distributed on an | |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| // KIND, either express or implied. See the License for the | |
| // specific language governing permissions and limitations | |
| // under the License. | |
| package com.cloud.service; | |
| import java.util.Map; | |
| import javax.persistence.Column; | |
| import javax.persistence.DiscriminatorValue; | |
| import javax.persistence.Entity; | |
| import javax.persistence.PrimaryKeyJoinColumn; | |
| import javax.persistence.Table; | |
| import javax.persistence.Transient; | |
| import com.cloud.offering.ServiceOffering; | |
| import com.cloud.storage.DiskOfferingVO; | |
| import com.cloud.vm.VirtualMachine; | |
| @Entity | |
| @Table(name = "service_offering") | |
| @DiscriminatorValue(value = "Service") | |
| @PrimaryKeyJoinColumn(name = "id") | |
| public class ServiceOfferingVO extends DiskOfferingVO implements ServiceOffering { | |
| @Column(name = "cpu") | |
| private Integer cpu; | |
| @Column(name = "speed") | |
| private Integer speed; | |
| @Column(name = "ram_size") | |
| private Integer ramSize; | |
| @Column(name = "nw_rate") | |
| private Integer rateMbps; | |
| @Column(name = "mc_rate") | |
| private Integer multicastRateMbps; | |
| @Column(name = "ha_enabled") | |
| private boolean offerHA; | |
| @Column(name = "limit_cpu_use") | |
| private boolean limitCpuUse; | |
| @Column(name = "is_volatile") | |
| private boolean volatileVm; | |
| @Column(name = "host_tag") | |
| private String hostTag; | |
| @Column(name = "default_use") | |
| private boolean defaultUse; | |
| @Column(name = "vm_type") | |
| private String vmType; | |
| @Column(name = "sort_key") | |
| int sortKey; | |
| @Column(name = "deployment_planner") | |
| private String deploymentPlanner = null; | |
| // This is a delayed load value. If the value is null, | |
| // then this field has not been loaded yet. | |
| // Call service offering dao to load it. | |
| @Transient | |
| Map<String, String> details; | |
| // This flag is required to tell if the offering is dynamic once the cpu, memory and speed are set. | |
| // In some cases cpu, memory and speed are set to non-null values even if the offering is dynamic. | |
| @Transient | |
| boolean isDynamic; | |
| protected ServiceOfferingVO() { | |
| super(); | |
| } | |
| public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, String displayText, | |
| boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, boolean defaultUse) { | |
| super(name, displayText, false, tags, recreatable, useLocalStorage, systemUse, true); | |
| this.cpu = cpu; | |
| this.ramSize = ramSize; | |
| this.speed = speed; | |
| this.rateMbps = rateMbps; | |
| this.multicastRateMbps = multicastRateMbps; | |
| this.offerHA = offerHA; | |
| limitCpuUse = false; | |
| volatileVm = false; | |
| this.defaultUse = defaultUse; | |
| this.vmType = vmType == null ? null : vmType.toString().toLowerCase(); | |
| } | |
| public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, boolean limitCpuUse, | |
| boolean volatileVm, String displayText, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, VirtualMachine.Type vmType, | |
| Long domainId) { | |
| super(name, displayText, false, tags, recreatable, useLocalStorage, systemUse, true, domainId); | |
| this.cpu = cpu; | |
| this.ramSize = ramSize; | |
| this.speed = speed; | |
| this.rateMbps = rateMbps; | |
| this.multicastRateMbps = multicastRateMbps; | |
| this.offerHA = offerHA; | |
| this.limitCpuUse = limitCpuUse; | |
| this.volatileVm = volatileVm; | |
| this.vmType = vmType == null ? null : vmType.toString().toLowerCase(); | |
| } | |
| public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, | |
| boolean limitResourceUse, boolean volatileVm, String displayText, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, | |
| VirtualMachine.Type vmType, Long domainId, String hostTag) { | |
| this(name, | |
| cpu, | |
| ramSize, | |
| speed, | |
| rateMbps, | |
| multicastRateMbps, | |
| offerHA, | |
| limitResourceUse, | |
| volatileVm, | |
| displayText, | |
| useLocalStorage, | |
| recreatable, | |
| tags, | |
| systemUse, | |
| vmType, | |
| domainId); | |
| this.hostTag = hostTag; | |
| } | |
| public ServiceOfferingVO(String name, Integer cpu, Integer ramSize, Integer speed, Integer rateMbps, Integer multicastRateMbps, boolean offerHA, | |
| boolean limitResourceUse, boolean volatileVm, String displayText, boolean useLocalStorage, boolean recreatable, String tags, boolean systemUse, | |
| VirtualMachine.Type vmType, Long domainId, String hostTag, String deploymentPlanner) { | |
| this(name, | |
| cpu, | |
| ramSize, | |
| speed, | |
| rateMbps, | |
| multicastRateMbps, | |
| offerHA, | |
| limitResourceUse, | |
| volatileVm, | |
| displayText, | |
| useLocalStorage, | |
| recreatable, | |
| tags, | |
| systemUse, | |
| vmType, | |
| domainId, | |
| hostTag); | |
| this.deploymentPlanner = deploymentPlanner; | |
| } | |
| public ServiceOfferingVO(ServiceOfferingVO offering) { | |
| super(offering.getId(), | |
| offering.getName(), | |
| offering.getDisplayText(), | |
| false, | |
| offering.getTags(), | |
| offering.isRecreatable(), | |
| offering.getUseLocalStorage(), | |
| offering.getSystemUse(), | |
| true, | |
| offering.getDomainId()); | |
| cpu = offering.getCpu(); | |
| ramSize = offering.getRamSize(); | |
| speed = offering.getSpeed(); | |
| rateMbps = offering.getRateMbps(); | |
| multicastRateMbps = offering.getMulticastRateMbps(); | |
| offerHA = offering.getOfferHA(); | |
| limitCpuUse = offering.getLimitCpuUse(); | |
| volatileVm = offering.getVolatileVm(); | |
| hostTag = offering.getHostTag(); | |
| vmType = offering.getSystemVmType(); | |
| } | |
| @Override | |
| public boolean getOfferHA() { | |
| return offerHA; | |
| } | |
| public void setOfferHA(boolean offerHA) { | |
| this.offerHA = offerHA; | |
| } | |
| @Override | |
| public boolean getLimitCpuUse() { | |
| return limitCpuUse; | |
| } | |
| public void setLimitResourceUse(boolean limitCpuUse) { | |
| this.limitCpuUse = limitCpuUse; | |
| } | |
| @Override | |
| public boolean getDefaultUse() { | |
| return defaultUse; | |
| } | |
| @Override | |
| @Transient | |
| public String[] getTagsArray() { | |
| String tags = getTags(); | |
| if (tags == null || tags.length() == 0) { | |
| return new String[0]; | |
| } | |
| return tags.split(","); | |
| } | |
| @Override | |
| public Integer getCpu() { | |
| return cpu; | |
| } | |
| public void setCpu(int cpu) { | |
| this.cpu = cpu; | |
| } | |
| public void setSpeed(int speed) { | |
| this.speed = speed; | |
| } | |
| public void setRamSize(int ramSize) { | |
| this.ramSize = ramSize; | |
| } | |
| @Override | |
| public Integer getSpeed() { | |
| return speed; | |
| } | |
| @Override | |
| public Integer getRamSize() { | |
| return ramSize; | |
| } | |
| public void setRateMbps(Integer rateMbps) { | |
| this.rateMbps = rateMbps; | |
| } | |
| @Override | |
| public Integer getRateMbps() { | |
| return rateMbps; | |
| } | |
| public void setMulticastRateMbps(Integer multicastRateMbps) { | |
| this.multicastRateMbps = multicastRateMbps; | |
| } | |
| @Override | |
| public Integer getMulticastRateMbps() { | |
| return multicastRateMbps; | |
| } | |
| public void setHostTag(String hostTag) { | |
| this.hostTag = hostTag; | |
| } | |
| @Override | |
| public String getHostTag() { | |
| return hostTag; | |
| } | |
| @Override | |
| public String getSystemVmType() { | |
| return vmType; | |
| } | |
| @Override | |
| public void setSortKey(int key) { | |
| sortKey = key; | |
| } | |
| @Override | |
| public int getSortKey() { | |
| return sortKey; | |
| } | |
| @Override | |
| public boolean getVolatileVm() { | |
| return volatileVm; | |
| } | |
| @Override | |
| public String getDeploymentPlanner() { | |
| return deploymentPlanner; | |
| } | |
| public Map<String, String> getDetails() { | |
| return details; | |
| } | |
| public String getDetail(String name) { | |
| assert (details != null) : "Did you forget to load the details?"; | |
| return details != null ? details.get(name) : null; | |
| } | |
| public void setDetail(String name, String value) { | |
| assert (details != null) : "Did you forget to load the details?"; | |
| details.put(name, value); | |
| } | |
| public void setDetails(Map<String, String> details) { | |
| this.details = details; | |
| } | |
| @Override | |
| public boolean isDynamic() { | |
| return cpu == null || speed == null || ramSize == null || isDynamic; | |
| } | |
| public void setDynamicFlag(boolean isdynamic) { | |
| isDynamic = isdynamic; | |
| } | |
| } |