/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.vnxe.requests;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.vnxe.VNXeConstants;
import com.emc.storageos.vnxe.VNXeException;
import com.emc.storageos.vnxe.models.LunSnapCreateParam;
import com.emc.storageos.vnxe.models.VNXeCommandJob;
import com.emc.storageos.vnxe.models.VNXeLunGroupSnap;
import com.emc.storageos.vnxe.models.VNXeSnapRestoreParam;
public class LunGroupSnapRequests extends KHRequests<VNXeLunGroupSnap> {
private static final Logger _logger = LoggerFactory.getLogger(LunGroupSnapRequests.class);
private static final String URL = "/api/types/lunGroupSnap/instances";
private static final String URL_INSTANCE = "/api/instances/lunGroupSnap/";
private static final String URL_RESTORE = "/action/restore";
private static final String URL_ATTACH = "action/attach";
private static final String URL_DETACH = "action/detach";
public LunGroupSnapRequests(KHClient client) {
super(client);
_url = URL;
}
/**
* create lun group snap in async mode
*
* @param param: LunSnapCreateParam
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob createLunGroupSnap(LunSnapCreateParam param) throws VNXeException {
return postRequestAsync(param);
}
/**
* Delete lun group snap
*
* @param snapId
* @return
* @throws VNXeException
*/
public VNXeCommandJob deleteLunGroupSnap(String snapId) throws VNXeException {
_url = URL_INSTANCE + snapId;
setQueryParameters(null);
if (getDataForOneObject(VNXeLunGroupSnap.class) != null) {
return deleteRequestAsync(null);
} else {
throw VNXeException.exceptions.vnxeCommandFailed(String.format("No lun group snap %s found",
snapId));
}
}
/**
* Restore lun group snapshot
*
* @param snapId snapshot VNXe Id
* @param restoreParam
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob restoreLunGroupSnap(String snapId, VNXeSnapRestoreParam restoreParam)
throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_RESTORE);
_url = urlBuilder.toString();
return postRequestAsync(restoreParam);
}
/**
* attach lun group snap
*
* @param snapId
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob attachLunGroupSnap(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_ATTACH);
_url = urlBuilder.toString();
return postRequestAsync(null);
}
/**
* detach lun group snap
*
* @param snapId
* @return VNXeCommandJob
* @throws VNXeException
*/
public VNXeCommandJob detachLunGroupSnap(String snapId) throws VNXeException {
StringBuilder urlBuilder = new StringBuilder(URL_INSTANCE);
urlBuilder.append(snapId);
urlBuilder.append(URL_DETACH);
_url = urlBuilder.toString();
return postRequestAsync(null);
}
/**
* Get a lun group's snaps by its storageResource id.
*
* @param resourceId lun group Id
* @return list of VNXeLunSnap
*/
public List<VNXeLunGroupSnap> getLunGroupSnaps(String resourceId) {
setFilter(VNXeConstants.STORAGE_RESOURCE_FILTER + resourceId);
return getDataForObjects(VNXeLunGroupSnap.class);
}
/**
* Get snapshot details by its name
*
* @param name
* @return
*/
public VNXeLunGroupSnap getLunGroupSnapByName(String name) {
setFilter(VNXeConstants.NAME_FILTER + name);
VNXeLunGroupSnap result = null;
List<VNXeLunGroupSnap> snapList = getDataForObjects(VNXeLunGroupSnap.class);
// it should just return 1
if (snapList != null && !snapList.isEmpty()) {
result = snapList.get(0);
} else {
_logger.info("No lun group snapshot found using the name: " + name);
}
return result;
}
/**
* Get lun group snapshot details by its id
*
* @param id
* @return
*/
public VNXeLunGroupSnap getLunGroupSnap(String snapId) {
_url = URL_INSTANCE + snapId;
return getDataForOneObject(VNXeLunGroupSnap.class);
}
}