/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.vnxe.requests;
import java.util.List;
import javax.ws.rs.core.MultivaluedMap;
import com.emc.storageos.vnxe.VNXeConstants;
import com.emc.storageos.vnxe.VNXeException;
import com.emc.storageos.vnxe.models.CifsShareCreateForSnapParam;
import com.emc.storageos.vnxe.models.VNXeCifsShare;
import com.emc.storageos.vnxe.models.VNXeCommandJob;
import com.emc.storageos.vnxe.models.VNXeCommandResult;
import com.sun.jersey.core.util.MultivaluedMapImpl;
public class CifsShareRequests extends KHRequests<VNXeCifsShare> {
private static final String URL = "/api/types/cifsShare/instances";
private static final String URL_SHARE = "/api/instances/cifsShare/";
private static final String FIELDS = "filesystem,name,path";
public CifsShareRequests(KHClient client) {
super(client);
_url = URL;
_fields = FIELDS;
}
/**
* Get all cifsShares in the array
*
* @return
*/
public List<VNXeCifsShare> get() {
_queryParams = null;
return getDataForObjects(VNXeCifsShare.class);
}
/**
* Get cifs share per its name.
*
* @param shareName
* cifsShare name
* @return list of cifsShare
*/
public List<VNXeCifsShare> getCifsShareByName(String shareName) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.NAME_FILTER + "\"" + shareName + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeCifsShare.class);
}
/**
* Get cifs share per its name.
*
* @param fsId
* Filesystem Id
* @param shareName
* cifsShare name
* @return list of cifsShare
*/
public VNXeCifsShare getCifsShareByNameAndFS(String fsId, String shareName) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.NAME_FILTER + "\"" + shareName + "\"" + " and "
+ VNXeConstants.FILE_SYSTEM_FILTER_V31 + "\"" + fsId + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeCifsShare.class).get(0);
}
/**
* Create CIFS share for snapshot
*
* @param createParam
* @return
*/
public VNXeCommandJob createShareForSnapshot(CifsShareCreateForSnapParam createParam) {
return postRequestAsync(createParam);
}
/**
* Delete CIFS share
*
* @param shareId
* cifsShare id
* @return VNXeCommandJob
*/
public VNXeCommandJob deleteShareForSnapshot(String shareId) {
_url = URL_SHARE + shareId;
if (getShare(shareId) != null) {
unsetQueryParameters();
return deleteRequestAsync(null);
} else {
throw VNXeException.exceptions.vnxeCommandFailed("The shareId is not found: " + shareId);
}
}
/**
* Delete CIFS share sync
*
* @param shareId
* cifsShare id
* @return VNXeCommandResult
*/
public VNXeCommandResult deleteShareForSnapshotSync(String shareId) {
VNXeCommandResult result = new VNXeCommandResult();
_url = URL_SHARE + shareId;
if (getShare(shareId) != null) {
unsetQueryParameters();
deleteRequest(null);
result.setSuccess(true);
return result;
} else {
throw VNXeException.exceptions.vnxeCommandFailed("The shareId is not found: " + shareId);
}
}
/**
* Get the specific CIFS share
*
* @param shareId
* @return
*/
public VNXeCifsShare getShare(String shareId) {
_url = URL_SHARE + shareId;
return getDataForOneObject(VNXeCifsShare.class);
}
/**
* Get the CIFS shares for a file system
*
* @param fileSystemId
* @return
*/
public List<VNXeCifsShare> getSharesForFileSystem(String fileSystemId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.FILE_SYSTEM_FILTER_V31 + "\"" + fileSystemId + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeCifsShare.class);
}
/**
* Get the CIFS shares for a file system snap
*
* @param snapId
* @return
*/
public List<VNXeCifsShare> getSharesForFileSystemSnap(String snapId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.SNAP_FILTER_V31 + "\"" + snapId + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeCifsShare.class);
}
}