/*
* Copyright (c) 2013 Technische Universitat Wien (TUW), Distributed Systems Group. http://dsg.tuwien.ac.at
*
* This work was partially supported by the European Commission in terms of the CELAR FP7 project (FP7-ICT-2011-8 #317790), http://www.celarcloud.eu/
*
* Licensed 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 at.ac.tuwien.dsg.cloud.salsa.tosca.extension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import at.ac.tuwien.dsg.cloud.salsa.common.cloudservice.model.enums.SalsaEntityType;
import at.ac.tuwien.dsg.cloud.salsa.tosca.extension.SalsaMappingProperties.SalsaMappingProperty;
import java.util.Objects;
/**
*
* This class acts as a container for all the information of Salsa Virtual Machine instances
*
* @author Duc-Hung Le TODO: Unified instance type. Currently: use String.
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "SalsaInstanceDescription_VM")
public class SalsaInstanceDescription_VM {
@XmlElement(name = "provider")
protected String provider;
@XmlElement(name = "baseImage")
protected String baseImage;
@XmlElement(name = "instanceType")
protected String instanceType;
@XmlElement(name = "id")
protected String instanceId;
@XmlElement(name = "privateIp")
protected String privateIp;
@XmlElement(name = "publicIP")
protected String publicIp;
@XmlElement(name = "privateDNS")
protected String privateDNS;
@XmlElement(name = "publicDNS")
protected String publicDNS;
@XmlElement(name = "state")
protected String state;
@XmlElement(name = "quota")
protected int quota;
@XmlElement(name = "packages")
protected PackagesDependencies packagesDependencies;
public SalsaInstanceDescription_VM() {
}
public SalsaInstanceDescription_VM(String provider, String instanceId) {
this.provider = provider;
this.instanceId = instanceId;
}
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public int getQuota() {
return quota;
}
public void setQuota(int quota) {
this.quota = quota;
}
// public int getReplicaNumber() {
// return replicaNumber;
// }
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
}
public void setPrivateIp(String privateIp) {
this.privateIp = privateIp;
}
public void setPublicIp(String publicIp) {
this.publicIp = publicIp;
}
public void setPrivateDNS(String privateDNS) {
this.privateDNS = privateDNS;
}
public void setPublicDNS(String publicDNS) {
this.publicDNS = publicDNS;
}
// public void setReplicaNumber(int replicaNumber) {
// this.replicaNumber = replicaNumber;
// }
public String getInstanceId() {
return instanceId;
}
public String getPrivateIp() {
return privateIp;
}
public String getPublicIp() {
return publicIp;
}
public String getPrivateDNS() {
return privateDNS;
}
public String getPublicDNS() {
return publicDNS;
}
public String getProvider() {
return provider;
}
public void setProvider(String provider) {
this.provider = provider;
}
public String getBaseImage() {
return baseImage;
}
public void setBaseImage(String baseImage) {
this.baseImage = baseImage;
}
public String getInstanceType() {
return instanceType;
}
public void setInstanceType(String instanceType) {
this.instanceType = instanceType;
}
public PackagesDependencies getPackagesDependenciesList() {
if (this.packagesDependencies==null){
this.packagesDependencies = new PackagesDependencies();
}
return packagesDependencies;
}
public void setPackagesDependencies(PackagesDependencies packagesDependencies) {
this.packagesDependencies = packagesDependencies;
}
@Override
public String toString() {
return "SalsaInstanceDescription [provider=" + provider
+ ", baseImage=" + baseImage + ", instanceType=" + instanceType
+ ", instanceId=" + instanceId + ", privateIp=" + privateIp
+ ", publicIp=" + publicIp + ", privateDNS=" + privateDNS
+ ", publicDNS=" + publicDNS + ", state=" + state + "]";
}
@Override
public boolean equals(Object obj) {
if (obj instanceof SalsaInstanceDescription_VM) {
return instanceId.equals(((SalsaInstanceDescription_VM) obj)
.getInstanceId());
}
return false;
}
@Override
public int hashCode() {
int hash = 3;
hash = 29 * hash + Objects.hashCode(this.instanceId);
return hash;
}
public void updateFromMappingProperties(SalsaMappingProperties maps) {
for (SalsaMappingProperty map : maps.getProperties()) {
if (map.getType().equals(SalsaEntityType.OPERATING_SYSTEM.getEntityTypeString())) {
this.provider = map.get("provider");
this.baseImage = map.get("baseImage");
this.instanceType = map.get("instanceType");
String packageStr = map.get("packages");
if (packageStr != null) {
List<String> packagelist = new ArrayList<>(Arrays.asList(packageStr.split(",")));
this.packagesDependencies = new PackagesDependencies();
this.packagesDependencies.setPackageDependency(packagelist);
}
}
}
}
public Map<String, String> exportToMap() {
Map<String, String> resMap = new HashMap<String, String>();
Map<String, String> map = new HashMap<String, String>();
map.put("provider", this.provider);
map.put("baseImage", this.baseImage);
map.put("instanceType", this.instanceType);
map.put("instanceId", this.instanceId);
map.put("publicIp", this.publicIp);
map.put("privateIp", this.privateIp);
map.put("publicDNS", this.publicDNS);
Iterator iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> mapEntry = (Map.Entry<String, String>) iterator.next();
if (mapEntry.getValue() != null) {
resMap.put(mapEntry.getKey(), mapEntry.getValue());
}
}
return resMap;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Packages")
public static class PackagesDependencies {
@XmlElement(name = "Package")
List<String> packageDependency = new ArrayList<>();
public List<String> getPackageDependency() {
return packageDependency;
}
public void setPackageDependency(List<String> packageDependency) {
this.packageDependency = packageDependency;
}
@Override
public String toString() {
return "PackagesDependencies [packageDependency="
+ packageDependency + "]";
}
}
}