/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.api.mapper;
import static com.emc.storageos.api.mapper.DbObjectMapper.mapDataObjectFields;
import static com.emc.storageos.api.mapper.DbObjectMapper.toRelatedResource;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.emc.storageos.api.service.impl.resource.ArgValidator;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.ComputeElement;
import com.emc.storageos.db.client.model.ComputeVirtualPool;
import com.emc.storageos.db.client.model.StringSet;
import com.emc.storageos.db.client.model.UCSServiceProfileTemplate;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.RelatedResourceRep;
import com.emc.storageos.model.ResourceTypeEnum;
import com.emc.storageos.model.vpool.ComputeVirtualPoolRestRep;
import com.emc.storageos.svcs.errorhandling.resources.APIException;
public class ComputeVirtualPoolMapper {
public static ComputeVirtualPoolRestRep toComputeVirtualPool(ComputeVirtualPool from, boolean inUse) {
return toComputeVirtualPool(null, from, inUse);
}
private static Integer translateDbValueToClientValue(Integer param) {
return (param == null || param.equals(0) || param.equals(-1)) ? null : param; // Cannot null attribute on update so use 0 as null
}
public static ComputeVirtualPoolRestRep toComputeVirtualPool(DbClient dbClient, ComputeVirtualPool from, boolean inUse) {
if (from == null) {
return null;
}
ComputeVirtualPoolRestRep to = new ComputeVirtualPoolRestRep();
to.setDescription(from.getDescription());
to.setSystemType(from.getSystemType());
to.setMinProcessors(translateDbValueToClientValue(from.getMinProcessors()));
to.setMaxProcessors(translateDbValueToClientValue(from.getMaxProcessors()));
to.setMinTotalCores(translateDbValueToClientValue(from.getMinTotalCores()));
to.setMaxTotalCores(translateDbValueToClientValue(from.getMaxTotalCores()));
to.setMinTotalThreads(translateDbValueToClientValue(from.getMinTotalThreads()));
to.setMaxTotalThreads(translateDbValueToClientValue(from.getMaxTotalThreads()));
to.setMinCpuSpeed(translateDbValueToClientValue(from.getMinCpuSpeed()));
to.setMaxCpuSpeed(translateDbValueToClientValue(from.getMaxCpuSpeed()));
to.setMinMemory(translateDbValueToClientValue(from.getMinMemory()));
to.setMaxMemory(translateDbValueToClientValue(from.getMaxMemory()));
to.setMinNics(translateDbValueToClientValue(from.getMinNics()));
to.setMaxNics(translateDbValueToClientValue(from.getMaxNics()));
to.setMinHbas(translateDbValueToClientValue(from.getMinHbas()));
to.setMaxHbas(translateDbValueToClientValue(from.getMaxHbas()));
if (from.getVirtualArrays() != null) {
for (String varray : from.getVirtualArrays()) {
to.getVirtualArrays().add(toRelatedResource(ResourceTypeEnum.VARRAY, URI.create(varray)));
}
}
to.setUseMatchedElements(from.getUseMatchedElements());
to.setInUse(inUse);
if (from.getMatchedComputeElements() != null) {
for (String ce : from.getMatchedComputeElements()) {
to.getMatchedComputeElements().add(toRelatedResource(ResourceTypeEnum.COMPUTE_ELEMENT, URI.create(ce)));
}
}
if (dbClient != null) {
if (from.getServiceProfileTemplates() != null) {
for (String spt : from.getServiceProfileTemplates()) {
URI sptURI = URI.create(spt);
UCSServiceProfileTemplate template = dbClient.queryObject(UCSServiceProfileTemplate.class, sptURI);
NamedRelatedResourceRep sptNamedRelatedResource = new NamedRelatedResourceRep();
sptNamedRelatedResource.setId(template.getId());
sptNamedRelatedResource.setName(template.getLabel());
to.getServiceProfileTemplates().add(sptNamedRelatedResource);
}
}
if (from.getMatchedComputeElements() != null) {
to.getAvailableMatchedComputeElements().addAll(getAvailableComputeElements(dbClient, from.getMatchedComputeElements()));
}
}
mapDataObjectFields(from, to);
return to;
}
private static Set<RelatedResourceRep> getAvailableComputeElements(DbClient dbClient, StringSet matchedComputeElements) {
Set<RelatedResourceRep> returnSet = new HashSet<RelatedResourceRep>();
Collection<ComputeElement> computeElements = dbClient.queryObject(ComputeElement.class, toUriList(matchedComputeElements));
for (ComputeElement computeElement : computeElements) {
if (computeElement.getAvailable()) {
returnSet.add(toRelatedResource(ResourceTypeEnum.COMPUTE_ELEMENT, computeElement.getId()));
}
}
return returnSet;
}
public static List<URI> toUriList(Collection<String> uris) throws APIException {
List<URI> uriList = new ArrayList<URI>();
if (uris == null || uris.isEmpty()) {
return uriList;
}
for (String uriString : uris) {
URI uri = URI.create(uriString);
ArgValidator.checkUri(uri);
uriList.add(uri);
}
return uriList;
}
}