/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package controllers.resources;
import static com.emc.vipr.client.core.util.ResourceUtils.uri;
import static com.emc.vipr.client.core.util.ResourceUtils.uris;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import models.datatable.BlockVolumesDataTable.Volume;
import models.datatable.ConsistencyGroupsDataTable;
import org.apache.commons.lang.StringUtils;
import play.data.binding.As;
import play.mvc.With;
import util.BourneUtil;
import util.MessagesUtils;
import util.datatable.DataTablesSupport;
import com.emc.storageos.model.block.BlockConsistencyGroupRestRep;
import com.emc.storageos.model.block.BlockConsistencyGroupUpdate;
import com.emc.storageos.model.block.BlockConsistencyGroupUpdate.BlockConsistencyGroupVolumeList;
import com.emc.storageos.model.block.VolumeRestRep;
import com.emc.vipr.client.Tasks;
import com.emc.vipr.client.Task;
import com.emc.vipr.client.ViPRCoreClient;
import com.emc.vipr.client.core.util.ResourceUtils;
import com.google.common.collect.Lists;
import controllers.Common;
import controllers.util.FlashException;
@With(Common.class)
public class BlockConsistencyGroups extends ResourceController {
private static final String UNKNOWN = "resources.consistencygroup.unknown";
private static ConsistencyGroupsDataTable consistencyGroupsDataTable = new ConsistencyGroupsDataTable();
public static void consistencyGroups(String projectId) {
setActiveProjectId(projectId);
renderArgs.put("dataTable", consistencyGroupsDataTable);
addReferenceData();
render();
}
public static void consistencyGroupsJson(String projectId) {
if (StringUtils.isNotBlank(projectId)) {
setActiveProjectId(projectId);
}
else {
projectId = getActiveProjectId();
}
List<ConsistencyGroupsDataTable.ConsistencyGroup> consistencyGroups = ConsistencyGroupsDataTable.fetch(uri(projectId));
renderJSON(DataTablesSupport.createJSON(consistencyGroups, params));
}
public static void consistencyGroupDetails(String consistencyGroupId) {
ViPRCoreClient client = BourneUtil.getViprClient();
AffectedResources.BlockConsistencyGroupDetails blockConsistencyGroup =
new AffectedResources.BlockConsistencyGroupDetails(uri(consistencyGroupId));
if (blockConsistencyGroup.blockConsistencyGroup == null) {
flash.error(MessagesUtils.get(UNKNOWN, consistencyGroupId));
ConsistencyGroups.list();
}
Tasks<BlockConsistencyGroupRestRep> tasksResponse = client.blockConsistencyGroups().getTasks(
blockConsistencyGroup.blockConsistencyGroup.getId());
List<Task<BlockConsistencyGroupRestRep>> tasks = tasksResponse.getTasks();
renderArgs.put("tasks", tasks);
List<VolumeRestRep> volumes = blockConsistencyGroup.volumes;
Map<URI, String> virtualArrays = ResourceUtils.mapNames(client.varrays().list());
Map<URI, String> virtualPools = ResourceUtils.mapNames(client.blockVpools().list());
List<Volume> volumeDetails = Lists.newArrayList();
for (VolumeRestRep volume : volumes) {
volumeDetails.add(new Volume(volume, virtualArrays, virtualPools));
}
render(blockConsistencyGroup, volumeDetails);
}
@FlashException(value = "consistencyGroups")
public static void delete(@As(",") String[] ids) {
delete(uris(ids));
}
private static void delete(List<URI> ids) {
if (ids != null) {
ViPRCoreClient client = BourneUtil.getViprClient();
for (URI id : ids) {
Task<BlockConsistencyGroupRestRep> task = client.blockConsistencyGroups().deactivate(id);
}
flash.put("info", MessagesUtils.get("resources.consistencygroups.deactivate", ids.size()));
}
consistencyGroups(null);
}
@FlashException(referrer = { "consistencyGroupDetails" })
public static void removeVolume(String consistencyGroupId, String volumeId) {
ViPRCoreClient client = BourneUtil.getViprClient();
List<URI> uris = new ArrayList<URI>();
uris.add(uri(volumeId));
BlockConsistencyGroupUpdate blockConsistencyGroupUpdate = new BlockConsistencyGroupUpdate();
BlockConsistencyGroupVolumeList volumeList = new BlockConsistencyGroupVolumeList();
volumeList.setVolumes(uris);
blockConsistencyGroupUpdate.setRemoveVolumesList(volumeList);
Task<BlockConsistencyGroupRestRep> task =
client.blockConsistencyGroups().update(uri(consistencyGroupId), blockConsistencyGroupUpdate);
flash.put("info", MessagesUtils.get("resources.consistencygroup.volume.removed", task.getOpId()));
consistencyGroupDetails(consistencyGroupId);
}
@FlashException(referrer = { "consistencyGroupDetails" })
public static void deleteConsistencyGroup(String consistencyGroupId) {
if (StringUtils.isNotBlank(consistencyGroupId)) {
ViPRCoreClient client = BourneUtil.getViprClient();
Task<BlockConsistencyGroupRestRep> task = client.blockConsistencyGroups().deactivate(uri(consistencyGroupId));
flash.put("info", MessagesUtils.get("resources.consistencygroup.deactivate"));
}
consistencyGroupDetails(consistencyGroupId);
}
}