/*
* Copyright (c) 2014 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.vnxe.requests;
import javax.ws.rs.core.MultivaluedMap;
import java.util.List;
import com.sun.jersey.core.util.MultivaluedMapImpl;
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.VNXeUtils;
import com.emc.storageos.vnxe.models.NfsShareCreateForSnapParam;
import com.emc.storageos.vnxe.models.NfsShareModifyForShareParam;
import com.emc.storageos.vnxe.models.VNXeCommandJob;
import com.emc.storageos.vnxe.models.VNXeNfsShare;
public class NfsShareRequests extends KHRequests<VNXeNfsShare> {
private static final Logger _logger = LoggerFactory.getLogger(FileSystemListRequest.class);
private static final String URL = "/api/types/nfsShare/instances";
private static final String URL_NFS = "/api/instances/nfsShare/";
private static final String URL_MODIFY = "/action/modify";
private static final String FIELDS = "name,path,filesystem,readOnlyHosts,readWriteHosts,rootAccessHosts,noAccessHosts,defaultAccess";
public NfsShareRequests(KHClient client) {
super(client);
_url = URL;
_fields = FIELDS;
}
/**
* get list of VNXeNfsShare in the array
*
*/
public List<VNXeNfsShare> get() {
_queryParams = null;
return getDataForObjects(VNXeNfsShare.class);
}
/**
* find nfsShare using fileSystem id and share name
*
* @param fsId fileSystem Id
* @param shareName
* @return
*/
public VNXeNfsShare findNfsShare(String fsId, String shareName, String softwareVersion) {
VNXeNfsShare result = null;
StringBuilder queryFilter = new StringBuilder(VNXeConstants.NAME_FILTER);
if (!VNXeUtils.isHigherVersion(softwareVersion, VNXeConstants.VNXE_BASE_SOFT_VER)) {
queryFilter.append(shareName);
queryFilter.append(VNXeConstants.AND);
queryFilter.append(VNXeConstants.FILE_SYSTEM_FILTER);
queryFilter.append(fsId);
} else {
queryFilter.append("\"" + shareName + "\"");
queryFilter.append(VNXeConstants.AND);
queryFilter.append(VNXeConstants.FILE_SYSTEM_FILTER_V31);
queryFilter.append("\"" + fsId + "\"");
}
setFilter(queryFilter.toString());
List<VNXeNfsShare> shareList = getDataForObjects(VNXeNfsShare.class);
if (shareList != null && !shareList.isEmpty()) {
result = shareList.get(0);
_logger.info("File system : {} NFS share named : {} found", fsId, shareName);
} else {
_logger.info("No file system share found using the fs id: {}, nfsShare name: {} ", fsId, shareName);
}
return result;
}
/**
* find Snapshot nfsShare using snapshot id and share name
*
* @param snapId
* @param shareName
* @return VNXeNfsShare
*/
public VNXeNfsShare findSnapNfsShare(String snapId, String shareName, String softwareVersion) {
StringBuilder queryFilter = new StringBuilder(VNXeConstants.NAME_FILTER);
if (!VNXeUtils.isHigherVersion(softwareVersion, VNXeConstants.VNXE_BASE_SOFT_VER)) {
queryFilter.append(shareName);
queryFilter.append(VNXeConstants.AND);
queryFilter.append(VNXeConstants.SNAP_FILTER);
queryFilter.append(snapId);
} else {
queryFilter.append("\"" + shareName + "\"");
queryFilter.append(VNXeConstants.AND);
queryFilter.append(VNXeConstants.SNAP_FILTER_V31);
queryFilter.append("\"" + snapId + "\"");
}
setFilter(queryFilter.toString());
VNXeNfsShare result = null;
List<VNXeNfsShare> shareList = getDataForObjects(VNXeNfsShare.class);// it should just return 1
if (shareList != null && !shareList.isEmpty()) {
result = shareList.get(0);
_logger.info("Snapshot : {} NFS share named : {} found", snapId, shareName);
} else {
_logger.info("No snapshot share found using the snapId : {}, nfsShare name: {} ", snapId, shareName);
}
return result;
}
/**
* Create NfsShare for snapshot
*
* @param createParam create nfs param
* @return
*/
public VNXeCommandJob createShareForSnapshot(NfsShareCreateForSnapParam createParam) {
return postRequestAsync(createParam);
}
/**
* Modify nfsShare for snapshot
*
* @param shareId
* @param param
* @return
*/
public VNXeCommandJob modifyShareForSnapshot(String shareId, NfsShareModifyForShareParam param) {
StringBuilder urlBuilder = new StringBuilder(URL_NFS);
urlBuilder.append(shareId);
urlBuilder.append(URL_MODIFY);
_url = urlBuilder.toString();
return postRequestAsync(param);
}
/**
* Delete NfsShare for snapshot
*
* @param shareId
* @return
*/
public VNXeCommandJob deleteShareForSnapshot(String shareId) {
_url = URL_NFS + shareId;
if (getShareById(shareId) != null) {
unsetQueryParameters();
return deleteRequestAsync(null);
}
throw VNXeException.exceptions.vnxeCommandFailed("The shareId is not found: " + shareId);
}
/**
* Get the specific NFS share's details
*
* @return
*/
public VNXeNfsShare getShareById(String shareId) throws VNXeException {
_url = URL_NFS + shareId;
setQueryParameters(null);
return getDataForOneObject(VNXeNfsShare.class);
}
/**
* Get the NFS shares for a file system
*
* @param fileSystemId
* @return
*/
public List<VNXeNfsShare> getSharesForFileSystem(String fileSystemId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.FILE_SYSTEM_FILTER_V31 + "\"" + fileSystemId + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeNfsShare.class);
}
/**
* Get the NFS shares for a file system snap
*
* @param snapId
* @return
*/
public List<VNXeNfsShare> getSharesForFileSystemSnap(String snapId) {
MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
queryParams.add(VNXeConstants.FILTER, VNXeConstants.SNAP_FILTER_V31 + "\"" + snapId + "\"");
setQueryParameters(queryParams);
return getDataForObjects(VNXeNfsShare.class);
}
}