/*
* Copyright (c) 2008-2012 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import com.emc.storageos.db.client.model.FSExportMap;
import com.emc.storageos.db.client.model.FileObject;
import com.emc.storageos.db.client.model.FilePolicy;
import com.emc.storageos.db.client.model.FileShare;
import com.emc.storageos.db.client.model.PolicyStorageResource;
import com.emc.storageos.db.client.model.Project;
import com.emc.storageos.db.client.model.QuotaDirectory;
import com.emc.storageos.db.client.model.SMBShareMap;
import com.emc.storageos.db.client.model.SchedulePolicy;
import com.emc.storageos.db.client.model.Snapshot;
import com.emc.storageos.db.client.model.StoragePool;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.db.client.model.StringMap;
import com.emc.storageos.db.client.model.TenantOrg;
import com.emc.storageos.db.client.model.VirtualArray;
import com.emc.storageos.db.client.model.VirtualNAS;
import com.emc.storageos.db.client.model.VirtualPool;
import com.emc.storageos.model.file.CifsShareACLUpdateParams;
import com.emc.storageos.model.file.ExportRule;
import com.emc.storageos.model.file.FileExportUpdateParams;
import com.emc.storageos.model.file.NfsACE;
import com.emc.storageos.model.file.NfsACLUpdateParams;
import com.emc.storageos.model.file.ShareACL;
import com.emc.storageos.model.file.policy.FilePolicyUpdateParam;
/**
* Class defining input/output from File storage device interface
* to expose only the fields that are needed/can be modified by storage device implementations
*/
/**
* @author root
*
*/
public class FileDeviceInputOutput {
private StoragePool pool;
private FileObject fObj;
private FileShare fs;
private Snapshot snapshot;
private SchedulePolicy fp;
private Project project;
private TenantOrg tenantOrg;
private QuotaDirectory quotaDirectory;
private String nativeDeviceFsId;
private String _opType;
private boolean isFile;
private boolean _forceDelete;
private boolean bypassDnsCheck;
private long newFSSize;
private VirtualPool vPool;
private String opId;
// New Additions as part of Export Redesign
private String subDirectory;
private boolean isAllDir;
private String exportPath;
private String objIdOnDevice;
private FileExportUpdateParams FileExportUpdateParams;
private List<ExportRule> exportRulesToAdd = new ArrayList<>();
private List<ExportRule> exportRulesToModify = new ArrayList<>();
private List<ExportRule> exportRulesToDelete = new ArrayList<>();
private List<ExportRule> existingDBExportRules = new ArrayList<>();
private String comments = "";
// New additions for Cifs ACL work
private String shareName;
private String sharePathOnDevice;
private CifsShareACLUpdateParams cifsShareACLUpdateParams;
private List<ShareACL> shareAclsToAdd = new ArrayList<>();
private List<ShareACL> shareAclsToModify = new ArrayList<>();
private List<ShareACL> shareAclsToDelete = new ArrayList<>();
private List<ShareACL> existingShareAcls = new ArrayList<>();
// New additions for vNAS
private VirtualNAS vNAS;
// New additions for NFS ACL work
private String fileSystemPath;
private NfsACLUpdateParams nfsACLUpdateParams;
private List<NfsACE> nfsAclsToAdd = new ArrayList<>();
private List<NfsACE> nfsAclsToModify = new ArrayList<>();
private List<NfsACE> nfsAclsToDelete = new ArrayList<>();
// New Addition for File Policy Work
private FilePolicy fileProtectionPolicy;
private PolicyStorageResource policyStorageResource;
private FilePolicyUpdateParam fileProtectionPolicyUpdateParam;
// New additions for vNAS
private StorageSystem sourceSystem;
private VirtualNAS sourceVNAS;
private boolean isTarget = false;
private VirtualArray varray;
public String getFileSystemPath() {
return fileSystemPath;
}
public void setFileSystemPath(String fileSystemPath) {
this.fileSystemPath = fileSystemPath;
}
public NfsACLUpdateParams getNfsACLUpdateParams() {
return nfsACLUpdateParams;
}
public void setNfsACLUpdateParams(NfsACLUpdateParams nfsACLUpdateParams) {
this.nfsACLUpdateParams = nfsACLUpdateParams;
}
public List<NfsACE> getNfsAclsToAdd() {
return nfsAclsToAdd;
}
public void setNfsAclsToAdd(List<NfsACE> nfsAclsToAdd) {
this.nfsAclsToAdd = nfsAclsToAdd;
}
public List<NfsACE> getNfsAclsToModify() {
return nfsAclsToModify;
}
public void setNfsAclsToModify(List<NfsACE> nfsAclsToModify) {
this.nfsAclsToModify = nfsAclsToModify;
}
public List<NfsACE> getNfsAclsToDelete() {
return nfsAclsToDelete;
}
public void setNfsAclsToDelete(List<NfsACE> nfsAclsToDelete) {
this.nfsAclsToDelete = nfsAclsToDelete;
}
public String getComments() {
return comments;
}
public void setComments(String comments) {
this.comments = comments;
}
public void setAllExportRules(FileExportUpdateParams param) {
FileExportUpdateParams = param;
if (param.getExportRulesToAdd() != null
&& param.getExportRulesToAdd().getExportRules() != null) {
this.exportRulesToAdd = param.getExportRulesToAdd()
.getExportRules();
}
if (param.getExportRulesToModify() != null
&& param.getExportRulesToModify().getExportRules() != null) {
this.exportRulesToModify = param.getExportRulesToModify()
.getExportRules();
}
if (param.getExportRulesToDelete() != null
&& param.getExportRulesToDelete().getExportRules() != null) {
this.exportRulesToDelete = param.getExportRulesToDelete()
.getExportRules();
}
}
public void setAllShareAcls(CifsShareACLUpdateParams param) {
cifsShareACLUpdateParams = param;
if (param.getAclsToAdd() != null
&& param.getAclsToAdd().getShareACLs() != null) {
this.shareAclsToAdd = param.getAclsToAdd().getShareACLs();
}
if (param.getAclsToModify() != null
&& param.getAclsToModify().getShareACLs() != null) {
this.shareAclsToModify = param.getAclsToModify().getShareACLs();
}
if (param.getAclsToDelete() != null
&& param.getAclsToDelete().getShareACLs() != null) {
this.shareAclsToDelete = param.getAclsToDelete().getShareACLs();
}
}
public void setAllNfsAcls(NfsACLUpdateParams param) {
nfsACLUpdateParams = param;
if (param.getAcesToAdd() != null && !param.getAcesToAdd().isEmpty()) {
this.nfsAclsToAdd = param.getAcesToAdd();
}
if (param.getAcesToModify() != null && !param.getAcesToModify().isEmpty()) {
this.nfsAclsToModify = param.getAcesToModify();
}
if (param.getAcesToDelete() != null && !param.getAcesToDelete().isEmpty()) {
this.nfsAclsToDelete = param.getAcesToDelete();
}
}
public void setShareName(String shareName) {
this.shareName = shareName;
}
public String getSubDirectory() {
return subDirectory;
}
public void setSubDirectory(String subDirectory) {
this.subDirectory = subDirectory;
}
public boolean isAllDir() {
return isAllDir;
}
public void setAllDir(boolean isAllDir) {
this.isAllDir = isAllDir;
}
public List<ExportRule> getExistingDBExportRules() {
return existingDBExportRules;
}
public void setExistingDBExportRules(List<ExportRule> existingDBExportRules) {
this.existingDBExportRules = existingDBExportRules;
}
public FileExportUpdateParams getFsExportUpdateParams() {
return FileExportUpdateParams;
}
public String getExportPath() {
return exportPath;
}
/**
* Sets the Export Path :
* It can be a FS Path, SubDir Path, Snapshot Export Path.
*
* @param exportPath
*/
public void setExportPath(String exportPath) {
this.exportPath = exportPath;
}
public String getObjIdOnDevice() {
return objIdOnDevice;
}
/**
* Used to save native ID of exports on device
*
* @param objIdOnDevice
*/
public void setObjIdOnDevice(String objIdOnDevice) {
this.objIdOnDevice = objIdOnDevice;
}
public List<ExportRule> getExportRulesToAdd() {
return exportRulesToAdd;
}
public List<ExportRule> getExportRulesToModify() {
return exportRulesToModify;
}
public List<ExportRule> getExportRulesToDelete() {
return exportRulesToDelete;
}
/**
* add storage pool
*
* @param pool
* StoragePool object
*/
public void addStoragePool(StoragePool pool) {
this.pool = pool;
}
public StoragePool getStoragePool() {
return pool;
}
/**
* add fileshare
*
* @param fs
* FileShare object
*/
public void addFileShare(FileShare fs) {
this.fs = fs;
}
/**
* add Snapshot
*
* @param snap
* Snapshot object
*/
public void addSnapshot(Snapshot snap) {
this.snapshot = snap;
}
/**
* add filepolicy
*
* @param fp
* FilePolicy object
*/
public void addFilePolicy(SchedulePolicy fp) {
this.fp = fp;
}
/**
* add FileShare as a FileObject and FileShare
*
* @param obj
* FileShare
*/
public void addFSFileObject(FileShare obj) {
fObj = obj;
fs = obj;
}
/**
* add Snapshot as the FileObject and Snapshot
*
* @param snap
*/
public void addSnapshotFileObject(Snapshot snap) {
fObj = snap;
snapshot = snap;
}
/**
* Get FS thinProvision
*
* @return Boolean
*/
public Boolean getThinProvision() {
return fs.getThinlyProvisioned();
}
/**
* Get FS capacity
*
* @return Long
*/
public Long getFsCapacity() {
return fs.getCapacity();
}
public Long getFsSoftLimit() {
return fs.getSoftLimit();
}
public Long getFsNotificationLimit() {
return fs.getNotificationLimit();
}
public Integer getFsSoftGracePeriod() {
return fs.getSoftGracePeriod();
}
/**
* Get VirtualPool
*
* @return Long
*/
public VirtualPool getVPool() {
return vPool;
}
/**
* Set VirtualPool
*
* @param size
*/
public void setVPool(VirtualPool vpoolObj) {
vPool = vpoolObj;
}
/**
* Get Port Name
*
* @return String
*/
public String getPortName() {
return fs.getPortName();
}
/**
* Set FS capacity
*
* @param size
*/
public void setFsCapacity(Long size) {
fs.setCapacity(size);
}
/**
*
*/
public URI getFsId() {
return fs.getId();
}
/**
* Get FS Label
*
* @return String
*/
public String getFsLabel() {
return fs.getLabel();
}
/**
* Get FS extensions map
*
* @return StringMap of FS extensions
*/
public StringMap getFsExtensions() {
return fs.getExtensions();
}
/**
* Get FS exports map
*
* @return FSExportMap
*/
public FSExportMap getFsExports() {
return fs.getFsExports();
}
/**
* Get FS shares map
*
* @return SMBShareMap
*/
public SMBShareMap getFsShares() {
return fs.getSMBFileShares();
}
/**
* Init FS exports
*
* @return
*/
public void initFsExports() {
fs.setFsExports(new FSExportMap());
}
/**
* Get FS mount path
*
* @return
*/
public String getFsMountPath() {
return fs.getMountPath();
}
/**
* Get FS path
*
* @return
*/
public String getFsPath() {
return fs.getPath();
}
/**
* Get pool URI
*
* @return
*/
public URI getPoolId() {
return pool.getId();
}
/**
* Get pool nativeId
*
* @return
*/
public String getPoolNativeId() {
return pool.getNativeId();
}
/**
* Get pool name
*
* @return
*/
public String getPoolName() {
return pool.getPoolName();
}
/**
* Get Pool extensions map
*
* @return StringMap of Pool extensions
*/
public StringMap getPoolExtensions() {
StringMap extensions = null;
if (pool != null) {
extensions = pool.getControllerParams();
}
if (extensions == null) {
// do not return a null set
pool.setControllerParams(new StringMap());
} else {
return extensions;
}
return pool.getControllerParams();
}
/**
* Get snapshot id
*
* @return
*/
public URI getSnapshotId() {
return snapshot.getId();
}
/**
* Initialize Snapshot exports
*/
public void initSnapshotExports() {
if (getSnapshotExports() == null) {
snapshot.setFsExports(new FSExportMap());
}
}
/**
* Get snapshot exports map
*
* @return FSExportMap
*/
public FSExportMap getSnapshotExports() {
return snapshot.getFsExports();
}
/**
* Get snapshot shares map
*
* @return SMBShareMap
*/
public SMBShareMap getSnapshotShares() {
return snapshot.getSMBFileShares();
}
/**
* Get Snapshot extensions map
*
* @return StringMap of Snapshot extensions
*/
public StringMap getSnapshotExtensions() {
return snapshot.getExtensions();
}
/**
* Get quota dir extensions map
*
* @return StringMap of quota dir extensions
*/
public StringMap getQuotaDirExtensions() {
return quotaDirectory.getExtensions();
}
/**
* Get quota id
*
* @return
*/
public URI getQuotaDirectoryId() {
return quotaDirectory.getId();
}
/**
* Get FileObject id
*
* @return URI
*/
public URI getFileObjId() {
return fObj.getId();
}
/**
* Get FileObject
*
* @return FileObject
*/
public FileObject getFileObj() {
return fObj;
}
/**
* Get FileObject mountPath
*
* @return String mount path
*/
public String getFileObjMountPath() {
return fObj.getMountPath();
}
/**
* Get FileObject exports
*
* @return FSExportMap - current exports map
*/
public FSExportMap getFileObjExports() {
return fObj.getFsExports();
}
/**
* Get FileObject shares map
*
* @return SMBShareMap
*/
public SMBShareMap getFileObjShares() {
return fObj.getSMBFileShares();
}
/* All sets below */
/**
* Initialize FileObject exports
*/
public void initFileObjExports() {
fObj.setFsExports(new FSExportMap());
}
/**
* Initialize FileObject shares
*/
public void initFileObjShares() {
fObj.setSMBFileShares(new SMBShareMap());
}
/**
* Initialize FS extensions
*/
public void initFsExtensions() {
fs.setExtensions(new StringMap());
}
/**
* Initialize Snapshot extensions
*/
public void initSnapshotExtensions() {
snapshot.setExtensions(new StringMap());
}
/**
* Initialize quota dir extensions
*/
public void initQuotaDirExtensions() {
quotaDirectory.setExtensions(new StringMap());
}
/**
* Set FS thinProvision
*
* @param thinProvision
*/
public void setThinProvision(boolean thinProvision) {
fs.setThinlyProvisioned(thinProvision);
}
/**
* Set FS mount path
*
* @param path
*/
public void setFsMountPath(String path) {
fs.setMountPath(path);
}
/**
* Set FS path
*
* @param path
*/
public void setFsPath(String path) {
fs.setPath(path);
}
/**
* Set FS native ID
*
* @param id
*/
public void setFsNativeId(String id) {
fs.setNativeId(id);
}
/**
* Get FS native ID
*/
public String getFsNativeId() {
return fs.getNativeId();
}
/**
* Set FS native GUID
*
* @param id
*/
public void setFsNativeGuid(String id) {
fs.setNativeGuid(id);
}
/**
* Set FS name
*
* @param fsName
*/
public void setFsName(String fsName) {
fs.setName(fsName);
}
/**
* Get Snapshot name
*
* @return String
*/
public String getSnapshotName() {
return snapshot.getName();
}
/**
* Set Snapshot name
*
* @param snapshotName
*/
public void setSnapshotName(String snapshotName) {
snapshot.setName(snapshotName);
}
/**
* Get QuotaDirectory name
*
* @return String
*/
public String getQuotaDirectoryName() {
return quotaDirectory.getName();
}
/**
* Set QuotaDirectory name
*
* @param qDirName
*/
public void setQuotaDirectoryName(String qDirName) {
quotaDirectory.setName(qDirName);
}
/**
* Get QuotaDirectory name
*
* @return String
*/
public String getQuotaDirectoryNativeId() {
return quotaDirectory.getNativeId();
}
/**
* Set QuotaDirectory name
*
* @param qDirName
*/
public void setQuotaDirectoryNativeId(String nativeId) {
quotaDirectory.setNativeId(nativeId);
}
/**
* Get FS name
*
* @return String
*/
public String getFsName() {
return fs.getName();
}
/**
* Set SnapShot native ID
*
* @param id
*/
public void setSnapNativeId(String id) {
snapshot.setNativeId(id);
}
/**
* Get SnapShot native ID
*/
public String getSnapNativeId() {
return snapshot.getNativeId();
}
/**
* Set snapshot mount path
*
* @param path
*/
public void setSnapshotMountPath(String path) {
snapshot.setMountPath(path);
}
/**
* Set snapshot mount path
*
* @param path
*/
public void setSnapshotPath(String path) {
snapshot.setPath(path);
}
/**
* get snapshot mount path
*/
public String getSnapshotMountPath() {
return snapshot.getMountPath();
}
/**
* get snapshot mount path
*/
public String getSnapshotPath() {
return snapshot.getPath();
}
public void setSnapshotLabel(String snapShotName) {
snapshot.setLabel(snapShotName);
}
public String getSnapshotLabel() {
return snapshot.getLabel();
}
public void setSnaphotCheckPointBaseline(String checkPointBaseline) {
snapshot.setCheckpointBaseline(checkPointBaseline);
}
public String getSnapshotCheckPointBaseline() {
return snapshot.getCheckpointBaseline();
}
public String getFsUUID() {
// urn:storageos:%1$s:%2$s
String fsId = fs.getId().toString();
fsId = fsId.substring(0, fsId.length() - 1);
return fsId.substring(fsId.lastIndexOf(":") + 1);
}
public void setFileOperation(boolean isFile) {
this.isFile = isFile;
}
public boolean getFileOperation() {
return this.isFile;
}
public void setForceDelete(boolean forceDelete) {
_forceDelete = forceDelete;
}
public boolean getForceDelete() {
return _forceDelete;
}
public void setOperationType(String OpType) {
_opType = OpType;
}
public String getOperationType() {
return _opType;
}
public void setNewFSCapacity(long size) {
newFSSize = size;
}
public long getNewFSCapacity() {
return newFSSize;
}
public FileShare getFs() {
return fs;
}
public Snapshot getFileSnapshot() {
return snapshot;
}
public SchedulePolicy getFilePolicy() {
return fp;
}
public String getVPoolName() {
return vPool.getLabel();
}
// replace all Special Characters ; /-+!@#$%^&())";:[]{}\ |
public String getVPoolNameWithNoSpecialCharacters() {
return stripSpecialCharacters(vPool.getLabel());
}
// replace all Special Characters ; /-+!@#$%^&())";:[]{}\ |
public String getProjectNameWithNoSpecialCharacters() {
return stripSpecialCharacters(project.getLabel());
}
// replace all Special Characters ; /-+!@#$%^&())";:[]{}\ |
public String getTenantNameWithNoSpecialCharacters() {
return stripSpecialCharacters(tenantOrg.getLabel());
}
public String getVNASNameWithNoSpecialCharacters() {
return stripSpecialCharacters(vNAS.getNasName());
}
public String getFSNameWithNoSpecialCharacters() {
return stripSpecialCharacters(getFsLabel());
}
private String stripSpecialCharacters(String label) {
return label.replaceAll("[^\\dA-Za-z ]", "").replaceAll("\\s+", "_");
}
// replace all special characters except forward slash; -+!@#$%^&())";:[]{}\ |
public String getPathWithoutSpecialCharacters(String path) {
return path.replaceAll("[^/\\dA-Za-z ]", "").replaceAll("\\s+", "_");
}
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
public TenantOrg getTenantOrg() {
return tenantOrg;
}
public void setTenantOrg(TenantOrg tenantOrg) {
this.tenantOrg = tenantOrg;
}
public boolean isFileShareMounted() {
FSExportMap exports = getFs().getFsExports();
SMBShareMap shares = getFs().getSMBFileShares();
boolean isMounted = true;
if ((exports == null || (exports != null && exports.isEmpty())) &&
(shares == null || (shares != null && shares.isEmpty()))) {
isMounted = false;
}
return isMounted;
}
public String getOpId() {
return opId;
}
public void setOpId(String opId) {
this.opId = opId;
}
/**
* add FileSystemQuotaDirectory object
*
* @param quotaDir
* FileSystemQuotaDirectory object
*/
public void addQuotaDirectory(QuotaDirectory quotaDir) {
this.quotaDirectory = quotaDir;
}
/**
* get FileSystemQuotaDirectory object
*
*/
public QuotaDirectory getQuotaDirectory() {
return this.quotaDirectory;
}
public void setNativeDeviceFsId(String nativeDeviceFsId) {
this.nativeDeviceFsId = nativeDeviceFsId;
}
/**
* get NativeDeviceId
*
* @return
*/
public String getNativeDeviceFsId() {
return nativeDeviceFsId;
}
public FileExportUpdateParams getFileExportUpdateParams() {
return FileExportUpdateParams;
}
public String getShareName() {
return shareName;
}
public String getSharePathOnDevice() {
return sharePathOnDevice;
}
public CifsShareACLUpdateParams getCifsShareACLUpdateParams() {
return cifsShareACLUpdateParams;
}
public List<ShareACL> getShareAclsToAdd() {
return shareAclsToAdd;
}
public List<ShareACL> getShareAclsToModify() {
return shareAclsToModify;
}
public List<ShareACL> getShareAclsToDelete() {
return shareAclsToDelete;
}
public List<ShareACL> getExistingShareAcls() {
return existingShareAcls;
}
public void setShareAclsToAdd(List<ShareACL> shareAclsToAdd) {
this.shareAclsToAdd = shareAclsToAdd;
}
public void setExistingShareAcls(List<ShareACL> existingShareAcls) {
this.existingShareAcls = existingShareAcls;
}
public VirtualNAS getvNAS() {
return vNAS;
}
public void setvNAS(VirtualNAS vNAS) {
this.vNAS = vNAS;
}
public PolicyStorageResource getPolicyStorageResource() {
return policyStorageResource;
}
public void setPolicyStorageResource(PolicyStorageResource policyStorageResource) {
this.policyStorageResource = policyStorageResource;
}
// TODO need to rename after cleanup sprint
public FilePolicy getFileProtectionPolicy() {
return fileProtectionPolicy;
}
public void setFileProtectionPolicy(FilePolicy fileProtectionPolicy) {
this.fileProtectionPolicy = fileProtectionPolicy;
}
public FilePolicyUpdateParam getFileProtectionPolicyUpdateParam() {
return fileProtectionPolicyUpdateParam;
}
public void setFileProtectionPolicyUpdateParam(FilePolicyUpdateParam fileProtectionPolicyUpdateParam) {
this.fileProtectionPolicyUpdateParam = fileProtectionPolicyUpdateParam;
}
public VirtualNAS getSourceVNAS() {
return sourceVNAS;
}
public void setSourceVNAS(VirtualNAS sourceVNAS) {
this.sourceVNAS = sourceVNAS;
}
public boolean isTarget() {
return isTarget;
}
public void setTarget(boolean isTarget) {
this.isTarget = isTarget;
}
public StorageSystem getSourceSystem() {
return sourceSystem;
}
public void setSourceSystem(StorageSystem sourceSystem) {
this.sourceSystem = sourceSystem;
}
public VirtualArray getVarray() {
return varray;
}
public void setVarray(VirtualArray varray) {
this.varray = varray;
}
public boolean getBypassDnsCheck() {
return bypassDnsCheck;
}
public void setBypassDnsCheck(boolean bypassDnsCheck) {
this.bypassDnsCheck = bypassDnsCheck;
}
}