/* * 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.mapDiscoveredSystemObjectFields; import static com.emc.storageos.api.mapper.DbObjectMapper.toRelatedResource; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.api.service.impl.response.RestLinkFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.URIUtil; import com.emc.storageos.db.client.model.Cluster; import com.emc.storageos.db.client.model.ComputeElement; import com.emc.storageos.db.client.model.ComputeImage; import com.emc.storageos.db.client.model.ComputeImageServer; import com.emc.storageos.db.client.model.ComputeSystem; import com.emc.storageos.db.client.model.Host; import com.emc.storageos.imageservercontroller.impl.ImageServerControllerImpl; import com.emc.storageos.model.NamedRelatedResourceRep; import com.emc.storageos.model.ResourceTypeEnum; import com.emc.storageos.model.RestLinkRep; import com.emc.storageos.model.compute.ComputeElementRestRep; import com.emc.storageos.model.compute.ComputeImageRestRep; import com.emc.storageos.model.compute.ComputeImageServerRestRep; import com.emc.storageos.model.compute.ComputeSystemRestRep; public class ComputeMapper { private static final Logger LOG = LoggerFactory .getLogger(ComputeMapper.class); public static ComputeSystemRestRep map(ComputeSystem from) { if (from == null) { return null; } ComputeSystemRestRep to = new ComputeSystemRestRep(); mapDiscoveredSystemObjectFields(from, to); to.setIpAddress(from.getIpAddress()); to.setPortNumber(from.getPortNumber()); to.setUseSSL(from.getSecure()); to.setUsername(from.getUsername()); to.setVersion(from.getVersion()); to.setOsInstallNetwork(from.getOsInstallNetwork()); if (from.getComputeImageServer() != null) { to.setComputeImageServer(from.getComputeImageServer().toString()); } else { to.setComputeImageServer(""); } // sort vlans as numbers List<Integer> vlanIds = new ArrayList<Integer>(); if (from.getVlans() != null) { for (String vlan : from.getVlans()) { try { vlanIds.add(Integer.parseInt(vlan)); } catch (NumberFormatException e) { // skip } } } Collections.sort(vlanIds); StringBuilder vlanStr = null; for (int vlanId : vlanIds) { if (vlanStr == null) { vlanStr = new StringBuilder(); } else { vlanStr.append(","); } vlanStr.append(vlanId); } if (vlanStr != null) { // cannot set null to.setVlans(vlanStr.toString()); } return to; } public static ComputeElementRestRep map(ComputeElement from, Host host, Cluster cluster) { if (from == null) { return null; } ComputeElementRestRep to = new ComputeElementRestRep(); mapDiscoveredSystemObjectFields(from, to); to.setRam(from.getRam()); to.setNumOfCores(from.getNumOfCores()); to.setNumOfProcessors(from.getNumberOfProcessors()); to.setNumOfThreads(from.getNumberOfThreads()); to.setProcessorSpeed(from.getProcessorSpeed()); to.setUuid(from.getUuid()); to.setOriginalUuid(from.getOriginalUuid()); to.setAvailable(from.getAvailable()); to.setModel(from.getModel()); to.setComputeSystem(toRelatedResource(ResourceTypeEnum.COMPUTE_SYSTEM, from.getComputeSystem())); to.setRegistrationStatus(from.getRegistrationStatus()); if (host!=null) { StringBuffer hostName = new StringBuffer(); if (cluster!=null){ hostName.append(cluster.getLabel()+": "); } hostName.append(host.getLabel()); to.setHostName(hostName.toString()); } return to; } public static ComputeImageRestRep map(ComputeImage from) { if (from == null) { return null; } ComputeImageRestRep to = new ComputeImageRestRep(); mapDataObjectFields(from, to); to.setImageName(from.getImageName()); to.setImageUrl(ImageServerControllerImpl.maskImageURLPassword(from.getImageUrl())); to.setImageType(from.getImageType()); to.setComputeImageStatus(from.getComputeImageStatus()); to.setLastImportStatusMessage(from.getLastImportStatusMessage()); List<NamedRelatedResourceRep> availableServersList = new ArrayList<NamedRelatedResourceRep>(); List<NamedRelatedResourceRep> failedServersList = new ArrayList<NamedRelatedResourceRep>(); to.setAvailableImageServers(availableServersList); to.setFailedImageServers(failedServersList); return to; } public static ComputeImageRestRep map(ComputeImage from, List<ComputeImageServer> availableServers, List<ComputeImageServer> failedServers) { if (from == null) { return null; } ComputeImageRestRep to = new ComputeImageRestRep(); mapDataObjectFields(from, to); to.setImageName(from.getImageName()); to.setImageUrl(ImageServerControllerImpl.maskImageURLPassword(from.getImageUrl())); to.setImageType(from.getImageType()); to.setComputeImageStatus(from.getComputeImageStatus()); to.setLastImportStatusMessage(from.getLastImportStatusMessage()); List<NamedRelatedResourceRep> availableServersList = new ArrayList<NamedRelatedResourceRep>(); List<NamedRelatedResourceRep> failedServersList = new ArrayList<NamedRelatedResourceRep>(); for (ComputeImageServer server : availableServers) { NamedRelatedResourceRep serverRep = new NamedRelatedResourceRep(); serverRep.setId(server.getId()); serverRep.setName(server.getLabel()); availableServersList.add(serverRep); } for (ComputeImageServer server : failedServers) { NamedRelatedResourceRep serverRep = new NamedRelatedResourceRep(); serverRep.setId(server.getId()); serverRep.setName(server.getLabel()); failedServersList.add(serverRep); } to.setAvailableImageServers(availableServersList); to.setFailedImageServers(failedServersList); return to; } /** * Utility mapper method to map fields of {@link ComputeImageServer} columnFamily to {@link ComputeImageServerRestRep} rest * representation. * * @param dbclient * {@link DbClient} instance * @param from * {@link ComputeImageServer} instance that has to be mapped. * @return {@link ComputeImageServerRestRep} */ public static ComputeImageServerRestRep map(DbClient dbclient, ComputeImageServer from) { if (from == null) { return null; } ComputeImageServerRestRep to = new ComputeImageServerRestRep(); mapDataObjectFields(from, to); try { to.setLink(new RestLinkRep("self", RestLinkFactory .simpleServiceLink(ResourceTypeEnum.COMPUTE_IMAGESERVER, from.getId()))); } catch (URISyntaxException e) { LOG.warn("Error while creating self link URI.", e); } to.setImageServerIp(from.getImageServerIp()); to.setImageServerSecondIp(from.getImageServerSecondIp()); to.setTftpBootDir(from.getTftpBootDir()); to.setComputeImageServerStatus(from.getComputeImageServerStatus()); to.setImageServerUser(from.getImageServerUser()); to.setOsInstallTimeout(new Long(TimeUnit.MILLISECONDS.toSeconds(from .getOsInstallTimeoutMs())).intValue()); to.setSshTimeout(new Long(TimeUnit.MILLISECONDS.toSeconds(from .getSshTimeoutMs())).intValue()); to.setImageImportTimeout(new Long(TimeUnit.MILLISECONDS.toSeconds(from .getImageImportTimeoutMs())).intValue()); to.setComputeImages(new ArrayList<NamedRelatedResourceRep>()); to.setFailedImages(new ArrayList<NamedRelatedResourceRep>()); if (from.getComputeImages() != null) { for (String computeimage : from.getComputeImages()) { ComputeImage image = dbclient.queryObject(ComputeImage.class, URIUtil.uri(computeimage)); if (image == null) { LOG.warn("Could not find compute image in database with id '" + computeimage + "'"); continue; } to.getComputeImages().add( DbObjectMapper.toNamedRelatedResource( ResourceTypeEnum.COMPUTE_IMAGE, image.getId(), image.getLabel())); } } if (from.getFailedComputeImages() != null) { for (String failedImageID : from.getFailedComputeImages()) { ComputeImage failedImage = dbclient.queryObject( ComputeImage.class, URIUtil.uri(failedImageID)); if (failedImage == null) { LOG.warn("Could not find failed compute image in database with id '" + failedImageID + "'"); continue; } to.getFailedImages().add( DbObjectMapper.toNamedRelatedResource( ResourceTypeEnum.COMPUTE_IMAGE, failedImage.getId(), failedImage.getLabel())); } } return to; } }