/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package util; import static com.emc.vipr.client.core.util.ResourceUtils.id; import static com.emc.vipr.client.core.util.ResourceUtils.mapById; import static util.BourneUtil.getViprClient; import java.net.URI; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.ObjectUtils; import com.emc.storageos.model.block.export.ExportGroupRestRep; import com.emc.storageos.model.block.export.ITLRestRep; import com.emc.storageos.model.host.HostRestRep; import com.emc.storageos.model.host.InitiatorRestRep; import com.emc.storageos.model.host.cluster.ClusterRestRep; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; public class ResourceUtils { public static List<HostExport> getHostExports(Collection<ITLRestRep> itls) { Map<URI, HostExport> hostExports = Maps.newLinkedHashMap(); Map<ITLRestRep, ExportGroupRestRep> exportMap = getExportMap(itls); for (Map.Entry<ITLRestRep, ExportGroupRestRep> entry : exportMap.entrySet()) { HostRestRep host = getHost(entry.getKey(), entry.getValue()); if (host == null) { continue; } HostExport hostExport = hostExports.get(host.getId()); if (hostExport == null) { hostExport = createHostExport(host); hostExports.put(host.getId(), hostExport); } hostExport.exportMap.put(entry.getKey(), entry.getValue()); } return Lists.newArrayList(hostExports.values()); } private static HostExport createHostExport(HostRestRep host) { HostExport hostMapping = new HostExport(); hostMapping.host = host; if (host.getCluster() != null) { ClusterRestRep cluster = getViprClient().clusters().get(host.getCluster().getId()); hostMapping.cluster = (cluster != null) ? cluster.getName() : null; } return hostMapping; } private static HostRestRep getHost(ITLRestRep itl, ExportGroupRestRep export) { if ((export.getInitiators() == null) || export.getInitiators().isEmpty()) { return null; } URI initiatorId = itl.getInitiator().getId(); for (InitiatorRestRep initiator : export.getInitiators()) { if (ObjectUtils.equals(initiatorId, initiator.getId())) { if (initiator.getHost() != null) { return getHost(export, initiator.getHost().getId()); } else { return null; } } } return null; } private static HostRestRep getHost(ExportGroupRestRep export, URI id) { if ((export.getHosts() == null) || export.getHosts().isEmpty()) { return null; } for (HostRestRep host : export.getHosts()) { if (ObjectUtils.equals(id, host.getId())) { return host; } } return null; } private static Map<ITLRestRep, ExportGroupRestRep> getExportMap(Collection<ITLRestRep> itls) { Map<URI, ExportGroupRestRep> blockExports = getBlockExports(itls); Map<ITLRestRep, ExportGroupRestRep> exports = Maps.newLinkedHashMap(); for (ITLRestRep itl : itls) { URI exportId = id(itl.getExport()); if (exportId != null) { exports.put(itl, blockExports.get(exportId)); } } return exports; } private static Map<URI, ExportGroupRestRep> getBlockExports(Collection<ITLRestRep> itls) { Set<URI> exportIds = Sets.newLinkedHashSet(); for (ITLRestRep itl : itls) { URI exportId = id(itl.getExport()); if (exportId != null) { exportIds.add(exportId); } } return mapById(getViprClient().blockExports().getByIds(exportIds)); } public static class HostExport { public HostRestRep host; public String cluster; public Map<ITLRestRep, ExportGroupRestRep> exportMap = Maps.newLinkedHashMap(); } }