/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.vipr.block.tasks;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.emc.sa.service.vipr.block.ExportVMwareBlockVolumeHelper;
import com.emc.sa.service.vipr.tasks.WaitForTask;
import com.emc.storageos.model.block.export.ExportGroupRestRep;
import com.emc.storageos.model.block.export.ExportPathParameters;
import com.emc.storageos.model.block.export.ExportUpdateParam;
import com.emc.storageos.model.block.export.VolumeParam;
import com.emc.storageos.model.block.export.VolumeUpdateParam;
import com.emc.vipr.client.Task;
public class AddVolumesToExport extends WaitForTask<ExportGroupRestRep> {
private final URI exportId;
private final Collection<URI> volumeIds;
private final Integer hlu;
private final Map<URI, Integer> volumeHlus;
private final Integer minPaths;
private final Integer maxPaths;
private final Integer pathsPerInitiator;
public AddVolumesToExport(URI exportId, Collection<URI> volumeIds, Integer hlu, Map<URI, Integer> volumeHlus, Integer minPaths,
Integer maxPaths, Integer pathsPerInitiator) {
super();
this.exportId = exportId;
this.volumeIds = volumeIds;
this.hlu = hlu;
this.volumeHlus = volumeHlus;
this.minPaths = minPaths;
this.maxPaths = maxPaths;
this.pathsPerInitiator = pathsPerInitiator;
provideDetailArgs(exportId, volumeIds, hlu);
}
@Override
protected Task<ExportGroupRestRep> doExecute() throws Exception {
ExportUpdateParam export = new ExportUpdateParam();
List<VolumeParam> volumes = new ArrayList<VolumeParam>();
Integer currentHlu = hlu;
for (URI volumeId : volumeIds) {
VolumeParam volume = new VolumeParam(volumeId);
if (currentHlu != null) {
if (currentHlu.equals(ExportVMwareBlockVolumeHelper.USE_EXISTING_HLU) && volumeHlus != null) {
Integer volumeHlu = volumeHlus.get(volume.getId());
if (volumeHlu == null) {
volume.setLun(-1);
} else {
volume.setLun(volumeHlu);
}
} else {
volume.setLun(currentHlu);
}
}
if ((currentHlu != null) && (currentHlu > -1)) {
currentHlu++;
}
volumes.add(volume);
}
export.setVolumes(new VolumeUpdateParam(volumes, new ArrayList<URI>()));
if (minPaths != null && maxPaths != null && pathsPerInitiator != null) {
ExportPathParameters exportPathParameters = new ExportPathParameters();
exportPathParameters.setMinPaths(minPaths);
exportPathParameters.setMaxPaths(maxPaths);
exportPathParameters.setPathsPerInitiator(pathsPerInitiator);
export.setExportPathParameters(exportPathParameters);
}
return getClient().blockExports().update(exportId, export);
}
}