package org.ovirt.engine.api.restapi.types;
import java.util.ArrayList;
import java.util.List;
import org.ovirt.engine.api.model.DataCenter;
import org.ovirt.engine.api.model.Ip;
import org.ovirt.engine.api.model.Network;
import org.ovirt.engine.api.model.NetworkStatus;
import org.ovirt.engine.api.model.NetworkUsage;
import org.ovirt.engine.api.model.Qos;
import org.ovirt.engine.api.model.Vlan;
import org.ovirt.engine.api.restapi.utils.GuidUtils;
import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
import org.ovirt.engine.core.compat.Guid;
public class NetworkMapper {
@Mapping(from = Network.class, to = org.ovirt.engine.core.common.businessentities.network.Network.class)
public static org.ovirt.engine.core.common.businessentities.network.Network map(Network model, org.ovirt.engine.core.common.businessentities.network.Network template) {
org.ovirt.engine.core.common.businessentities.network.Network entity = template != null ? template : new org.ovirt.engine.core.common.businessentities.network.Network();
entity.setCluster(template != null && template.getCluster() != null ? template.getCluster() : new NetworkCluster());
if (model.isSetId()) {
entity.setId(GuidUtils.asGuid(model.getId()));
}
if (model.isSetName()) {
entity.setName(model.getName());
}
if (model.isSetDescription()) {
entity.setDescription(model.getDescription());
}
if (model.isSetComment()) {
entity.setComment(model.getComment());
}
if (model.isSetDataCenter() && model.getDataCenter().isSetId()) {
entity.setDataCenterId(GuidUtils.asGuid(model.getDataCenter().getId()));
}
if (model.isSetIp()) {
if (model.getIp().isSetAddress()) {
entity.setAddr(model.getIp().getAddress());
}
if (model.getIp().isSetNetmask()) {
entity.setSubnet(model.getIp().getNetmask());
}
if (model.getIp().isSetGateway()) {
entity.setGateway(model.getIp().getGateway());
}
}
if (model.isSetVlan()) {
entity.setVlanId(model.getVlan().getId());
}
if (model.isSetStp()) {
entity.setStp(model.isStp());
}
if (model.isSetDisplay()) { // for backward compatibility use display tag or usage tag
entity.getCluster().setDisplay(model.isDisplay());
}
if (model.isSetUsages()) {
List<NetworkUsage> networkUsages = new ArrayList<>();
for (NetworkUsage usage : model.getUsages().getUsages()) {
networkUsages.add(usage);
}
entity.getCluster().setDisplay(networkUsages.contains(NetworkUsage.DISPLAY));
entity.getCluster().setMigration(networkUsages.contains(NetworkUsage.MIGRATION));
entity.getCluster().setManagement(networkUsages.contains(NetworkUsage.MANAGEMENT));
entity.getCluster().setGluster(networkUsages.contains(NetworkUsage.GLUSTER));
entity.getCluster().setDefaultRoute(networkUsages.contains(NetworkUsage.DEFAULT_ROUTE));
entity.setVmNetwork(networkUsages.contains(NetworkUsage.VM));
}
if (model.isSetMtu()) {
entity.setMtu(model.getMtu());
}
if (model.isSetRequired()) {
entity.getCluster().setRequired(model.isRequired());
}
if (model.isSetQos()) {
entity.setQosId(Guid.createGuidFromString(model.getQos().getId()));
}
return entity;
}
@Mapping(from = org.ovirt.engine.core.common.businessentities.network.Network.class, to = Network.class)
public static Network map(org.ovirt.engine.core.common.businessentities.network.Network entity, Network template) {
Network model = template != null ? template : new Network();
model.setId(entity.getId().toString());
model.setName(entity.getName());
model.setDescription(entity.getDescription());
model.setComment(entity.getComment());
if (entity.getDataCenterId() != null) {
DataCenter dataCenter = new DataCenter();
dataCenter.setId(entity.getDataCenterId().toString());
model.setDataCenter(dataCenter);
}
if (entity.getAddr() != null ||
entity.getSubnet() != null ||
entity.getGateway() != null) {
model.setIp(new Ip());
model.getIp().setAddress(entity.getAddr());
model.getIp().setNetmask(entity.getSubnet());
model.getIp().setGateway(entity.getGateway());
}
if (entity.getVlanId() != null) {
model.setVlan(new Vlan());
model.getVlan().setId(entity.getVlanId());
}
model.setStp(entity.getStp());
model.setMtu(entity.getMtu());
model.setUsages(new Network.UsagesList());
if (entity.isVmNetwork()) {
model.getUsages().getUsages().add(NetworkUsage.VM);
}
if (entity.getCluster() != null) {
if (entity.getCluster().isDisplay()) {
model.getUsages().getUsages().add(NetworkUsage.DISPLAY);
}
if (entity.getCluster().isMigration()) {
model.getUsages().getUsages().add(NetworkUsage.MIGRATION);
}
if (entity.getCluster().isManagement()) {
model.getUsages().getUsages().add(NetworkUsage.MANAGEMENT);
}
if (entity.getCluster().isDefaultRoute()) {
model.getUsages().getUsages().add(NetworkUsage.DEFAULT_ROUTE);
}
if (entity.getCluster().isGluster()) {
model.getUsages().getUsages().add(NetworkUsage.GLUSTER);
}
if (entity.getCluster().getStatus() != null) {
model.setStatus(mapNetworkStatus(entity.getCluster().getStatus()));
}
model.setDisplay(entity.getCluster().isDisplay());
model.setRequired(entity.getCluster().isRequired());
}
Guid entityQosId = entity.getQosId();
if (entityQosId != null) {
Qos qos = new Qos();
qos.setId(entityQosId.toString());
model.setQos(qos);
}
return model;
}
private static NetworkStatus mapNetworkStatus(org.ovirt.engine.core.common.businessentities.network.NetworkStatus status) {
switch (status) {
case NON_OPERATIONAL:
return NetworkStatus.NON_OPERATIONAL;
case OPERATIONAL:
return NetworkStatus.OPERATIONAL;
default:
return null;
}
}
}