/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package models;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Collections;
import org.apache.commons.lang.StringUtils;
import com.emc.storageos.model.storagesystem.type.StorageSystemTypeList;
import com.emc.storageos.model.storagesystem.type.StorageSystemTypeRestRep;
import util.EnumOption;
import util.StorageSystemTypeUtils;
import util.StringOption;
public class StorageProviderTypes {
private static final String OPTION_PREFIX = "storageProvider.interfaceType";
private static final String BLOCK_TYPE = "block";
private static final String FILE_TYPE = "file";
private static final String OBJECT_TYPE = "object";
private static final String ALL_TYPE = "all";
public static final String HITACHI = "hicommand";
public static final String SMIS = "smis";
public static final String VPLEX = "vplex";
public static final String CINDER = "cinder";
public static final String SCALEIO = "scaleio";
public static final String SCALEIOAPI = "scaleioapi";
public static final String DATA_DOMAIN = "ddmc";
public static final String IBMXIV = "ibmxiv";
public static final String XTREMIO = "xtremio";
public static final String CEPH = "ceph";
public static final String DELLPROVIDER = "dellscprovider";
public static final Map<String, String> fromStorageArrayTypeMap = new HashMap<String, String>() {
private static final long serialVersionUID = -8628274587467033626L;
{
for (String storageSystemType : StorageSystemTypes.STORAGE_PROVIDER_TYPES) {
put(storageSystemType, SMIS);
}
put(StorageSystemTypes.HITACHI, HITACHI);
put(StorageSystemTypes.VPLEX, VPLEX);
put(StorageSystemTypes.OPENSTACK, CINDER);
put(StorageSystemTypes.SCALEIO, SCALEIO);
put(StorageSystemTypes.SCALEIOAPI, SCALEIOAPI);
put(StorageSystemTypes.DATA_DOMAIN, DATA_DOMAIN);
put(StorageSystemTypes.IBMXIV, IBMXIV);
put(StorageSystemTypes.XTREMIO, XTREMIO);
put(StorageSystemTypes.CEPH, CEPH);
put(StorageSystemTypes.DELLSCSYSTEM, DELLPROVIDER);
}
};
public static boolean isXIV(String type) {
return IBMXIV.equals(type);
}
public static boolean isScaleIOApi(String type) {
return SCALEIOAPI.equals(type);
}
public static boolean isCeph(String type) {
return CEPH.equals(type);
}
public static String fromStorageArrayType(String storageArrayType) {
return fromStorageArrayTypeMap.get(storageArrayType);
}
public static String getDisplayValue(String type) {
return StringOption.getDisplayValue(type, OPTION_PREFIX);
}
public static List<StringOption> getProviderOption() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsSmiProvider()) {
if (!StringUtils.equals(SCALEIO, storagetypeRest.getStorageTypeName())) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
}
return allproviders;
}
public static List<StringOption> getAllFlashProviderOption() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsSmiProvider()) {
if (StringUtils.equals(SMIS, storagetypeRest.getStorageTypeName()) || StringUtils.equals(XTREMIO, storagetypeRest.getStorageTypeName()) ) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(), storagetypeRest.getStorageTypeDispName()));
}
}
}
Collections.sort(allproviders);
return allproviders;
}
public static List<StringOption> getProvidersWithSSL() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsDefaultSsl()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static List<StringOption> getProvidersWithoutSSL() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (!storagetypeRest.getIsDefaultSsl()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static List<StringOption> getProvidersWithMDM() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsDefaultMDM()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static List<StringOption> getProvidersWithOnlyMDM() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsOnlyMDM()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static List<StringOption> getProvidersWithEMS() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsElementMgr()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static Object getProvidersWithSecretKey() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getIsSecretKey()) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
public static List<EnumOption> getStoragePortMap() {
List<EnumOption> StorageProviderPortMap = new ArrayList<EnumOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
StorageProviderPortMap
.add(new EnumOption(storagetypeRest.getStorageTypeName(), storagetypeRest.getNonSslPort()));
StorageProviderPortMap.add(
new EnumOption(storagetypeRest.getStorageTypeName() + "_useSSL", storagetypeRest.getSslPort()));
}
return StorageProviderPortMap;
}
public static List<EnumOption> getSupportedStorageType() {
List<EnumOption> supportedStorageType = new ArrayList<EnumOption>();
supportedStorageType.add(new EnumOption(BLOCK_TYPE, BLOCK_TYPE));
supportedStorageType.add(new EnumOption(FILE_TYPE, FILE_TYPE));
supportedStorageType.add(new EnumOption(OBJECT_TYPE, OBJECT_TYPE));
supportedStorageType.add(new EnumOption(ALL_TYPE, ALL_TYPE));
return supportedStorageType;
}
public static List<StringOption> getScaleIoOption() {
List<StringOption> allproviders = new ArrayList<StringOption>();
StorageSystemTypeList storagetypelist = StorageSystemTypeUtils.getAllStorageSystemTypes(ALL_TYPE);
for (StorageSystemTypeRestRep storagetypeRest : storagetypelist.getStorageSystemTypes()) {
if (storagetypeRest.getStorageTypeName().equals(SCALEIO)) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
if (storagetypeRest.getStorageTypeName().equals(SCALEIOAPI)) {
allproviders.add(new StringOption(storagetypeRest.getStorageTypeName(),
storagetypeRest.getStorageTypeDispName()));
}
}
return allproviders;
}
}