/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package models.datatable;
import static util.BourneUtil.getViprClient;
import java.net.URI;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import util.AppSupportUtil;
import util.BourneUtil;
import util.datatable.DataTable;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.RelatedResourceRep;
import com.emc.storageos.model.block.VolumeRestRep;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.util.ResourceUtils;
import com.google.common.collect.Lists;
import controllers.resources.BlockVolumes;
public class BlockVolumesDataTable extends DataTable {
public BlockVolumesDataTable() {
addColumn("name").setRenderFunction("renderLink");
addColumn("capacity").setRenderFunction("render.sizeInGb");
addColumn("varray");
addColumn("vpool");
addColumn("protocols");
addColumn("wwn");
sortAll();
setDefaultSort("name", "asc");
}
public static List<Volume> fetch(URI projectId, URI applicationId) {
if (projectId == null && applicationId ==null) {
return Collections.EMPTY_LIST;
}
ViPRCoreClient client = getViprClient();
List<VolumeRestRep> volumes = Lists.newArrayList();
List<Volume> results = Lists.newArrayList();
Map<URI, String> virtualArrays = ResourceUtils.mapNames(client.varrays().list());
Map<URI, String> virtualPools = ResourceUtils.mapNames(client.blockVpools().list());
if (projectId != null) {
volumes = client.blockVolumes().findByProject(projectId);
for (VolumeRestRep volume : volumes) {
results.add(new Volume(volume, virtualArrays, virtualPools));
}
}
else if(applicationId!=null) {
List<VolumeRestRep> result = Lists.newArrayList();
List<NamedRelatedResourceRep> groups = AppSupportUtil.getVolumesByApplication(applicationId.toString());
List<NamedRelatedResourceRep> clones = AppSupportUtil.getFullCopiesByApplication(applicationId.toString());
for (NamedRelatedResourceRep volume : groups) {
result.add(BourneUtil.getViprClient().blockVolumes().get((volume.getId())));
}
for (NamedRelatedResourceRep clone:clones) {
result.add(BourneUtil.getViprClient().blockVolumes().get((clone.getId())));
}
for (VolumeRestRep volumeApplication : result) {
results.add(new Volume(volumeApplication, virtualArrays, virtualPools));
}
}
return results;
}
public static class Volume {
public URI id;
public String name;
public String capacity;
public String varray;
public String vpool;
public Set<String> protocols;
public boolean srdfTarget;
public String wwn = "";
public Volume(VolumeRestRep volume, Map<URI, String> varrayMap, Map<URI, String> vpoolMap) {
id = volume.getId();
name = volume.getName();
wwn = volume.getWwn();
srdfTarget = volume.getProtection() != null && volume.getProtection().getSrdfRep() != null
&& volume.getProtection().getSrdfRep().getAssociatedSourceVolume() != null;
capacity = volume.getProvisionedCapacity();
if (volume.getVirtualArray() != null) {
varray = varrayMap.get(volume.getVirtualArray().getId());
}
if (volume.getVirtualPool() != null) {
vpool = vpoolMap.get(volume.getVirtualPool().getId());
}
protocols = volume.getProtocols();
}
}
}