/*
* Copyright (c) 2008-2013 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.utils;
import java.io.Serializable;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.emc.storageos.db.client.model.FileShare;
import com.emc.storageos.db.client.model.StorageSystem;
/**
* Wrapper for VirtualPoolParams HashMap
*
*/
public class VirtualPoolCapabilityValuesWrapper implements Serializable {
private static final long serialVersionUID = 1L;
public static final String AUTO_TIER__POLICY_NAME = "auto_tier_policy";
public static final String RAID_LEVEL = "raid_level";
public static final String SYSTEM_TYPE = "system_type";
public static final String VARRAYS = "varrays";
public static final String PROTOCOLS = "protocols";
public static final String SIZE = "size";
public static final String THIN_VOLUME_PRE_ALLOCATE_SIZE = "thinVolumePreAllocateSize";
public static final String RESOURCE_COUNT = "resource_count";
public static final String THIN_PROVISIONING = "thin_provisioning";
public static final String BLOCK_CONSISTENCY_GROUP = "block_consistency_group";
public static final String SRDF_SOURCE = "srdf_source";
public static final String SRDF_TARGET = "srdf_target";
public static final String PERSONALITY = "personality";
public static final String RP_RPO_VALUE = "rpRpoValue";
public static final String RP_RPO_TYPE = "rpRpoType";
public static final String RP_COPY_MODE = "rpCopyMode";
public static final String ADD_JOURNAL_CAPACITY = "add_journal_capacity";
public static final String RP_COPY_TYPE = "rp_copy_type";
public static final String RP_MAX_SNAPS = "rp_max_snaps";
public static final String SUPPORT_SOFT_LIMIT = "soft_limit";
public static final String SUPPORT_NOTIFICATION_LIMIT = "notification_limit";
public static final String QUOTA = "quota";
public static final String DEDUP = "dedup";
public static final String FILE_REPLICATION_RPO_VALUE = "fileReplicationRpoValue";
public static final String FILE_REPLICATION_RPO_TYPE = "fileReplicationRpoType";
public static final String FILE_REPLICATION_COPY_MODE = "fileReplicationCopyMode";
public static final String FILE_REPLICATION_TARGET_VARRAYS = "fileReplicationTargetVarrays";
public static final String FILE_REPLICATION_TARGET_VPOOL = "fileReplicationTargetVPool";
public static final String FILE_REPLICATION_TYPE = "fileReplicationType";
public static final String FILE_REPLICATION_APPLIED_AT = "fileReplicationAppliedAt";
// Not vpool params, but hints for volume descriptor creation
// TODO: Move to ControllerOperationValuesWrapper
public static final String FILE_REPLICATION_SOURCE = "file_replication_source";
public static final String FILE_REPLICATION_TARGET = "file_replication_target";
public static final String FILE_SYSTEM_CREATE_MIRROR_COPY = "file_system_create_mirror_copy";
public static final String EXISTING_SOURCE_FILE_SYSTEM = "existing_source_file_system";
public static final String SOURCE_STORAGE_SYSTEM = "source_storage_system";
public static final String FILE_PROTECTION_SOURCE_STORAGE_SYSTEM = "file_protection_source_storage_system";
public static final String EXCLUDED_STORAGE_SYSTEM = "excluded_storage_system";
public static final String FILE_TARGET_COPY_NAME = "file_target_copy_name";
public static final String CHANGE_VPOOL_VOLUME = "changeVpoolVolume";
public static final String SOURCE_VIRTUAL_NAS_SERVER = "source_virtual_nas_server";
public static final String TARGET_NAS_SERVER = "target_nas_server";
public static final String TARGET_STORAGE_SYSTEM = "target_storage_system";
// meta volume capabilities
public static final String IS_META_VOLUME = "isMetaVolume";
public static final String META_VOLUME_MEMBER_SIZE = "metaVolumeMemberSize";
public static final String META_VOLUME_MEMBER_COUNT = "metaVolumeMemberCount";
public static final String META_VOLUME_TYPE = "metaVolumeType";
// compute resource capabilities
public static final String COMPUTE = "compute";
public static final String ARRAY_AFFINITY = "array_affinity";
// replica options
public static final String REPLICA_CREATE_INACTIVE = "replicaActiveInactiveMode";
public static final String SNAPSHOT_SESSION_COPY_MODE = "snapshotSessionCopyMode";
public static final String VPOOL_PROJECT_POLICY_ASSIGN = "vpoolProjectPolicyAssign";
public static final String GET_ALL_SOURCE_RECOMMENDATIONS = "getallsourcerecommendations";
private final Map<String, Object> _vpoolCapabilities = new HashMap<String, Object>();
/**
* Default constructor
*/
public VirtualPoolCapabilityValuesWrapper() {
}
/**
* Copy the passed capabilities to a new instance.
*
* @param capabilities
* A reference to a VirtualPoolCapabilityValuesWrapper
*/
public VirtualPoolCapabilityValuesWrapper(VirtualPoolCapabilityValuesWrapper capabilities) {
// Copy the value set in the passed reference capabilities.
if (capabilities.contains(AUTO_TIER__POLICY_NAME)) {
_vpoolCapabilities.put(AUTO_TIER__POLICY_NAME, capabilities.getAutoTierPolicyName());
}
if (capabilities.contains(RAID_LEVEL)) {
_vpoolCapabilities.put(RAID_LEVEL, capabilities.getRaidLevel());
}
if (capabilities.contains(SYSTEM_TYPE)) {
_vpoolCapabilities.put(SYSTEM_TYPE, capabilities.getDeviceType());
}
if (capabilities.contains(VARRAYS)) {
_vpoolCapabilities.put(VARRAYS, capabilities.getVirtualArrays());
}
if (capabilities.contains(PROTOCOLS)) {
_vpoolCapabilities.put(PROTOCOLS, capabilities.getProtocols());
}
if (capabilities.contains(SIZE)) {
_vpoolCapabilities.put(SIZE, capabilities.getSize());
}
if (capabilities.contains(THIN_VOLUME_PRE_ALLOCATE_SIZE)) {
_vpoolCapabilities.put(THIN_VOLUME_PRE_ALLOCATE_SIZE, capabilities.getThinVolumePreAllocateSize());
}
if (capabilities.contains(RESOURCE_COUNT)) {
_vpoolCapabilities.put(RESOURCE_COUNT, capabilities.getResourceCount());
}
if (capabilities.contains(THIN_PROVISIONING)) {
_vpoolCapabilities.put(THIN_PROVISIONING, capabilities.getThinProvisioning());
}
if (capabilities.contains(BLOCK_CONSISTENCY_GROUP)) {
_vpoolCapabilities.put(BLOCK_CONSISTENCY_GROUP, capabilities.getBlockConsistencyGroup());
}
if (capabilities.contains(SRDF_SOURCE)) {
_vpoolCapabilities.put(SRDF_SOURCE, capabilities.getSrdfSource());
}
if (capabilities.contains(SRDF_TARGET)) {
_vpoolCapabilities.put(SRDF_TARGET, capabilities.getSrdfTarget());
}
if (capabilities.contains(PERSONALITY)) {
_vpoolCapabilities.put(PERSONALITY, capabilities.getPersonality());
}
if (capabilities.contains(RP_RPO_VALUE)) {
_vpoolCapabilities.put(RP_RPO_VALUE, capabilities.getRpRpoValue());
}
if (capabilities.contains(RP_RPO_TYPE)) {
_vpoolCapabilities.put(RP_RPO_TYPE, capabilities.getRpRpoType());
}
if (capabilities.contains(RP_COPY_MODE)) {
_vpoolCapabilities.put(RP_COPY_MODE, capabilities.getRpCopyMode());
}
if (capabilities.contains(ADD_JOURNAL_CAPACITY)) {
_vpoolCapabilities.put(ADD_JOURNAL_CAPACITY, capabilities.getAddJournalCapacity());
}
if (capabilities.contains(RP_COPY_TYPE)) {
_vpoolCapabilities.put(RP_COPY_TYPE, capabilities.getRPCopyType());
}
if (capabilities.contains(RP_MAX_SNAPS)) {
_vpoolCapabilities.put(RP_MAX_SNAPS, capabilities.getRPMaxSnaps());
}
if (capabilities.contains(IS_META_VOLUME)) {
_vpoolCapabilities.put(IS_META_VOLUME, capabilities.getIsMetaVolume());
}
if (capabilities.contains(META_VOLUME_MEMBER_SIZE)) {
_vpoolCapabilities.put(META_VOLUME_MEMBER_SIZE, capabilities.getMetaVolumeMemberSize());
}
if (capabilities.contains(META_VOLUME_MEMBER_COUNT)) {
_vpoolCapabilities.put(META_VOLUME_MEMBER_COUNT, capabilities.getMetaVolumeMemberCount());
}
if (capabilities.contains(META_VOLUME_TYPE)) {
_vpoolCapabilities.put(META_VOLUME_TYPE, capabilities.getMetaVolumeType());
}
if (capabilities.contains(SUPPORT_SOFT_LIMIT)) {
_vpoolCapabilities.put(SUPPORT_SOFT_LIMIT, capabilities.getSupportsSoftLimit());
}
if (capabilities.contains(SUPPORT_NOTIFICATION_LIMIT)) {
_vpoolCapabilities.put(SUPPORT_NOTIFICATION_LIMIT, capabilities.getSupportsNotificationLimit());
}
if (capabilities.contains(QUOTA)) {
_vpoolCapabilities.put(QUOTA, capabilities.getQuota());
}
if (capabilities.contains(DEDUP)) {
_vpoolCapabilities.put(DEDUP, capabilities.getDedupCapable());
}
if (capabilities.contains(FILE_REPLICATION_RPO_TYPE)) {
_vpoolCapabilities.put(FILE_REPLICATION_RPO_TYPE, capabilities.getFileRpRpoType());
}
if (capabilities.contains(FILE_REPLICATION_RPO_VALUE)) {
_vpoolCapabilities.put(FILE_REPLICATION_RPO_VALUE, capabilities.getFileRpRpoValue());
}
if (capabilities.contains(FILE_REPLICATION_COPY_MODE)) {
_vpoolCapabilities.put(FILE_REPLICATION_COPY_MODE, capabilities.getFileRpCopyMode());
}
if (capabilities.contains(FILE_REPLICATION_TARGET_VARRAYS)) {
_vpoolCapabilities.put(FILE_REPLICATION_TARGET_VARRAYS, capabilities.getFileReplicationTargetVArrays());
}
if (capabilities.contains(FILE_REPLICATION_TARGET_VPOOL)) {
_vpoolCapabilities.put(FILE_REPLICATION_TARGET_VPOOL, capabilities.getFileReplicationTargetVPool());
}
if (capabilities.contains(FILE_REPLICATION_TYPE)) {
_vpoolCapabilities.put(FILE_REPLICATION_TYPE, capabilities.getFileReplicationType());
}
if (capabilities.contains(FILE_REPLICATION_APPLIED_AT)) {
_vpoolCapabilities.put(FILE_REPLICATION_APPLIED_AT, capabilities.getFileReplicationAppliedAt());
}
if (capabilities.contains(COMPUTE)) {
_vpoolCapabilities.put(COMPUTE, capabilities.getCompute());
}
if (capabilities.contains(ARRAY_AFFINITY)) {
_vpoolCapabilities.put(ARRAY_AFFINITY, capabilities.getArrayAffinity());
}
if (capabilities.contains(CHANGE_VPOOL_VOLUME)) {
_vpoolCapabilities.put(CHANGE_VPOOL_VOLUME, capabilities.getChangeVpoolVolume());
}
}
public String getVirtualArrays() {
Object value = _vpoolCapabilities.get(VARRAYS);
return value != null ? (String) value : null;
}
public Set<String> getProtocols() {
Object value = _vpoolCapabilities.get(PROTOCOLS);
return value != null ? (Set<String>) value : null;
}
public String getAutoTierPolicyName() {
Object value = _vpoolCapabilities.get(AUTO_TIER__POLICY_NAME);
return value != null ? (String) value : null;
}
public String getRaidLevel() {
Object value = _vpoolCapabilities.get(RAID_LEVEL);
return value != null ? (String) value : null;
}
public String getDeviceType() {
Object value = _vpoolCapabilities.get(SYSTEM_TYPE);
return value != null ? (String) value : null;
}
public void put(String key, Object value) {
_vpoolCapabilities.put(key, value);
}
public boolean contains(String key) {
return _vpoolCapabilities.containsKey(key);
}
public long getSize() {
Object value = _vpoolCapabilities.get(SIZE);
return value != null ? (Long) value : 0L;
}
public long getThinVolumePreAllocateSize() {
Object value = _vpoolCapabilities.get(THIN_VOLUME_PRE_ALLOCATE_SIZE);
return value != null ? (Long) value : 0L;
}
public int getResourceCount() {
Object value = _vpoolCapabilities.get(RESOURCE_COUNT);
return value != null ? (Integer) value : 1;
}
public boolean getThinProvisioning() {
Object value = _vpoolCapabilities.get(THIN_PROVISIONING);
return value != null ? (Boolean) value : false;
}
public URI getBlockConsistencyGroup() {
Object value = _vpoolCapabilities.get(BLOCK_CONSISTENCY_GROUP);
return value != null ? (URI) value : null;
}
public String getPersonality() {
Object value = _vpoolCapabilities.get(PERSONALITY);
return value != null ? (String) value : null;
}
public Long getRpRpoValue() {
Object value = _vpoolCapabilities.get(RP_RPO_VALUE);
return value != null ? (Long) value : 0L;
}
public String getRpRpoType() {
Object value = _vpoolCapabilities.get(RP_RPO_TYPE);
return value != null ? (String) value : null;
}
public String getRpCopyMode() {
Object value = _vpoolCapabilities.get(RP_COPY_MODE);
return value != null ? (String) value : null;
}
public Set<String> getFileReplicationTargetVArrays() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_TARGET_VARRAYS);
return value != null ? (Set<String>) value : null;
}
public URI getFileReplicationTargetVPool() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_TARGET_VPOOL);
return value != null ? (URI) value : null;
}
public String getFileReplicationType() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_TYPE);
return value != null ? (String) value : null;
}
public String getFileReplicationAppliedAt() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_APPLIED_AT);
return value != null ? (String) value : null;
}
public boolean getAddJournalCapacity() {
Object value = _vpoolCapabilities.get(ADD_JOURNAL_CAPACITY);
return value != null ? (Boolean) value : false;
}
public int getRPCopyType() {
Object value = _vpoolCapabilities.get(RP_COPY_TYPE);
return value != null ? (int) value : 0;
}
public int getRPMaxSnaps() {
Object value = _vpoolCapabilities.get(RP_MAX_SNAPS);
return value != null ? (int) value : 0;
}
public String getSrdfSource() {
Object value = _vpoolCapabilities.get(SRDF_SOURCE);
return value != null ? (String) value : null;
}
public String getSrdfTarget() {
Object value = _vpoolCapabilities.get(SRDF_TARGET);
return value != null ? (String) value : null;
}
public boolean getIsMetaVolume() {
Object value = _vpoolCapabilities.get(IS_META_VOLUME);
return value != null ? (Boolean) value : false;
}
public long getMetaVolumeMemberSize() {
Object value = _vpoolCapabilities.get(META_VOLUME_MEMBER_SIZE);
return value != null ? (Long) value : 0L;
}
public int getMetaVolumeMemberCount() {
Object value = _vpoolCapabilities.get(META_VOLUME_MEMBER_COUNT);
return value != null ? (Integer) value : 0;
}
public String getMetaVolumeType() {
Object value = _vpoolCapabilities.get(META_VOLUME_TYPE);
return value != null ? (String) value : null;
}
public Boolean getSupportsSoftLimit() {
Object value = _vpoolCapabilities.get(SUPPORT_SOFT_LIMIT);
return value != null ? (boolean) value : false;
}
public Boolean getSupportsNotificationLimit() {
Object value = _vpoolCapabilities.get(SUPPORT_NOTIFICATION_LIMIT);
return value != null ? (boolean) value : false;
}
public String getQuota() {
Object value = _vpoolCapabilities.get(QUOTA);
return value != null ? (String) value : null;
}
public boolean getDedupCapable() {
Object value = _vpoolCapabilities.get(DEDUP);
return value != null ? (Boolean) value : false;
}
public Long getFileRpRpoValue() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_RPO_VALUE);
return value != null ? (Long) value : 0L;
}
public String getFileRpRpoType() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_RPO_TYPE);
return value != null ? (String) value : null;
}
public String getFileRpCopyMode() {
Object value = _vpoolCapabilities.get(FILE_REPLICATION_COPY_MODE);
return value != null ? (String) value : null;
}
public boolean createMirrorExistingFileSystem() {
Object value = _vpoolCapabilities.get(FILE_SYSTEM_CREATE_MIRROR_COPY);
return value != null ? (Boolean) value : false;
}
public FileShare getSourceFileSystem() {
Object value = _vpoolCapabilities.get(EXISTING_SOURCE_FILE_SYSTEM);
return value != null ? (FileShare) value : null;
}
public URI getSourceVirtualNasServer() {
Object value = _vpoolCapabilities.get(SOURCE_VIRTUAL_NAS_SERVER);
return value != null ? (URI) value : null;
}
public URI getTargetNasServer() {
Object value = _vpoolCapabilities.get(TARGET_NAS_SERVER);
return value != null ? (URI) value : null;
}
public URI getTargetStorageSystem() {
Object value = _vpoolCapabilities.get(TARGET_STORAGE_SYSTEM);
return value != null ? (URI) value : null;
}
public StorageSystem getSourceStorageDevice() {
Object value = _vpoolCapabilities.get(SOURCE_STORAGE_SYSTEM);
return value != null ? (StorageSystem) value : null;
}
public URI getFileProtectionSourceStorageDevice() {
Object value = _vpoolCapabilities.get(FILE_PROTECTION_SOURCE_STORAGE_SYSTEM);
return value != null ? (URI) value : null;
}
public StorageSystem getExcludedStorageDevice() {
Object value = _vpoolCapabilities.get(EXCLUDED_STORAGE_SYSTEM);
return value != null ? (StorageSystem) value : null;
}
public String getFileTargetCopyName() {
Object value = _vpoolCapabilities.get(FILE_TARGET_COPY_NAME);
return value != null ? (String) value : null;
}
public String getChangeVpoolVolume() {
Object value = _vpoolCapabilities.get(CHANGE_VPOOL_VOLUME);
return value != null ? (String) value : null;
}
public String getReplicaCreateInactive() {
Object value = _vpoolCapabilities.get(REPLICA_CREATE_INACTIVE);
return value != null ? (String) value : null;
}
public String getSnapshotSessionCopyMode() {
Object value = _vpoolCapabilities.get(SNAPSHOT_SESSION_COPY_MODE);
return value != null ? (String) value : null;
}
public String getCompute() {
Object value = _vpoolCapabilities.get(COMPUTE);
return value != null ? (String) value : null;
}
public boolean getArrayAffinity() {
Object value = _vpoolCapabilities.get(ARRAY_AFFINITY);
return value != null ? (Boolean) value : false;
}
public void removeCapabilityEntry(String keyEntry) {
if (_vpoolCapabilities.get(keyEntry) != null) {
_vpoolCapabilities.remove(keyEntry);
}
}
public boolean isVpoolProjectPolicyAssign() {
Object value = _vpoolCapabilities.get(VPOOL_PROJECT_POLICY_ASSIGN);
return value != null ? (Boolean) value : false;
}
public boolean getAllSourceRecommnedations() {
Object value = _vpoolCapabilities.get(GET_ALL_SOURCE_RECOMMENDATIONS);
return value != null ? (Boolean) value : false;
}
}