/*
* Copyright (c) 2015 EMC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.application.tasks;
import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import com.emc.sa.service.vipr.block.BlockStorageUtils;
import com.emc.sa.service.vipr.tasks.WaitForTasks;
import com.emc.storageos.model.NamedRelatedResourceRep;
import com.emc.storageos.model.TaskList;
import com.emc.storageos.model.TaskResourceRep;
import com.emc.storageos.model.application.VolumeGroupFullCopyDetachParam;
import com.emc.storageos.model.block.NamedVolumesList;
import com.emc.storageos.model.block.VolumeDeleteTypeEnum;
import com.emc.vipr.client.Tasks;
public class RemoveApplicationFullCopy extends WaitForTasks<TaskResourceRep> {
private final URI applicationId;
private final URI volumeId;
public RemoveApplicationFullCopy(URI applicationId, URI volumeId, String name) {
this.applicationId = applicationId;
this.volumeId = volumeId;
provideDetailArgs(applicationId, name);
}
@Override
protected Tasks<TaskResourceRep> doExecute() throws Exception {
NamedVolumesList allFullCopies = getClient().application().getFullCopiesByApplication(applicationId);
Set<URI> fullCopyIds = new HashSet<URI>();
for (NamedRelatedResourceRep fullCopy : allFullCopies.getVolumes()) {
fullCopyIds.add(fullCopy.getId());
}
List<URI> volList = Collections.singletonList(volumeId);
VolumeGroupFullCopyDetachParam input = new VolumeGroupFullCopyDetachParam(true, volList);
TaskList taskList = getClient().application().detachApplicationFullCopy(applicationId, input);
BlockStorageUtils.removeBlockResources(fullCopyIds, VolumeDeleteTypeEnum.FULL);
return new Tasks<TaskResourceRep>(getClient().auth().getClient(), taskList.getTaskList(),
TaskResourceRep.class);
}
}