/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.coordinator.client.model; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.coordinator.common.Configuration; import com.emc.storageos.coordinator.common.impl.ConfigurationImpl; /** * This model has 2 usages: * - Store meta data in memory parsed from metadata.properties * - Hold meta data of new driver in ZK during upgrade */ public class StorageDriverMetaData { // key string definitions private static final String KEY_DRIVER_NAME = "driverName"; private static final String KEY_DRIVER_VERSION = "driverVersion"; private static final String KEY_STORAGE_NAME = "storageName"; private static final String KEY_STORAGE_DISPLAY_NAME = "storageDisplayName"; private static final String KEY_PROVIDER_NAME = "providerName"; private static final String KEY_PROVIDER_DISPLAY_NAME = "providerDisplayName"; private static final String KEY_META_TYPE = "metaType"; private static final String KEY_ENABLE_SSL = "enableSsl"; private static final String KEY_SSL_PORT = "sslPort"; private static final String KEY_NON_SSL_PORT = "nonSslPort"; private static final String KEY_DRIVER_CLASS_NAME = "driverClassName"; private static final String KEY_DRIVER_FILE_NAME = "driverFileName"; private static final String KEY_SUPPORT_AUTOTIER_POLICY = "supportAutoTierPolicy"; private static final Logger log = LoggerFactory.getLogger(StorageDriverMetaData.class); // kind public static final String KIND = "toUpgradeDriver"; // constructor public StorageDriverMetaData(Configuration cfg) { if (cfg != null) { fromConfiguration(cfg); } } public StorageDriverMetaData() { } // fields, getters, setters private String driverName; private String driverVersion; private String storageName; private String storageDisplayName; private String providerName; private String providerDisplayName; private String metaType; private boolean enableSsl; private long sslPort; private long nonSslPort; private String driverClassName; private String driverFileName; private boolean supportAutoTierPolicy; public String getDriverName() { return driverName; } public void setDriverName(String driverName) { this.driverName = driverName; } public String getDriverVersion() { return driverVersion; } public void setDriverVersion(String driverVersion) { this.driverVersion = driverVersion; } public String getStorageName() { return storageName; } public void setStorageName(String storageName) { this.storageName = storageName; } public String getStorageDisplayName() { return storageDisplayName; } public void setStorageDisplayName(String storageDisplayName) { this.storageDisplayName = storageDisplayName; } public String getProviderName() { return providerName; } public void setProviderName(String providerName) { this.providerName = providerName; } public String getProviderDisplayName() { return providerDisplayName; } public void setProviderDisplayName(String providerDisplayName) { this.providerDisplayName = providerDisplayName; } public String getMetaType() { return metaType; } public void setMetaType(String metaType) { this.metaType = metaType; } public boolean isEnableSsl() { return enableSsl; } public void setEnableSsl(boolean enableSsl) { this.enableSsl = enableSsl; } public long getSslPort() { return sslPort; } public void setSslPort(long sslPort) { this.sslPort = sslPort; } public long getNonSslPort() { return nonSslPort; } public void setNonSslPort(long nonSslPort) { this.nonSslPort = nonSslPort; } public String getDriverClassName() { return driverClassName; } public void setDriverClassName(String driverClassName) { this.driverClassName = driverClassName; } public String getDriverFileName() { return driverFileName; } public void setDriverFileName(String driverFileName) { this.driverFileName = driverFileName; } public boolean isSupportAutoTierPolicy() { return supportAutoTierPolicy; } public void setSupportAutoTierPolicy(boolean supportAutoTierPolicy) { this.supportAutoTierPolicy = supportAutoTierPolicy; } // configuration converters public Configuration toConfiguration() { ConfigurationImpl config = new ConfigurationImpl(); config.setKind(KIND); config.setId(driverName); if (driverName != null) { config.setConfig(KEY_DRIVER_NAME, driverName); } if (driverVersion != null) { config.setConfig(KEY_DRIVER_VERSION, driverVersion); } if (storageName != null) { config.setConfig(KEY_STORAGE_NAME, storageName); } if (storageDisplayName != null) { config.setConfig(KEY_STORAGE_DISPLAY_NAME, storageDisplayName); } if (providerName != null) { config.setConfig(KEY_PROVIDER_NAME, providerName); } if (providerDisplayName != null) { config.setConfig(KEY_PROVIDER_DISPLAY_NAME, providerDisplayName); } if (metaType != null) { config.setConfig(KEY_META_TYPE, metaType); } config.setConfig(KEY_ENABLE_SSL, String.valueOf(enableSsl)); config.setConfig(KEY_SSL_PORT, String.valueOf(sslPort)); config.setConfig(KEY_NON_SSL_PORT, String.valueOf(nonSslPort)); config.setConfig(KEY_SUPPORT_AUTOTIER_POLICY, String.valueOf(supportAutoTierPolicy)); if (driverClassName != null) { config.setConfig(KEY_DRIVER_CLASS_NAME, driverClassName); } if (driverFileName != null) { config.setConfig(KEY_DRIVER_FILE_NAME, driverFileName); } return config; } private void fromConfiguration(Configuration config) { if (!StringUtils.equals(KIND, config.getKind())) { log.error("Unexpected configuration kind for StorageDriverMetaData"); throw new IllegalArgumentException("Unexpected configuration kind for StorageDriverMetaData"); } try { driverName = config.getConfig(KEY_DRIVER_NAME); driverVersion = config.getConfig(KEY_DRIVER_VERSION); storageName = config.getConfig(KEY_STORAGE_NAME); storageDisplayName = config.getConfig(KEY_STORAGE_DISPLAY_NAME); providerName = config.getConfig(KEY_PROVIDER_NAME); providerDisplayName = config.getConfig(KEY_PROVIDER_DISPLAY_NAME); metaType = config.getConfig(KEY_META_TYPE); String enableSslStr = config.getConfig(KEY_ENABLE_SSL); if (enableSslStr != null) { enableSsl = Boolean.valueOf(enableSslStr); } String sslPortStr = config.getConfig(KEY_SSL_PORT); if (sslPortStr != null) { sslPort = Long.valueOf(sslPortStr); } String nonSslPortStr = config.getConfig(KEY_NON_SSL_PORT); if (nonSslPortStr != null) { nonSslPort = Long.valueOf(nonSslPortStr); } String supportAutoTierStr = config.getConfig(KEY_SUPPORT_AUTOTIER_POLICY); if (supportAutoTierStr != null) { supportAutoTierPolicy = Boolean.valueOf(supportAutoTierStr); } driverClassName = config.getConfig(KEY_DRIVER_CLASS_NAME); driverFileName = config.getConfig(KEY_DRIVER_FILE_NAME); } catch (Exception e) { log.error("Unrecognized configuration data for StorageDriverMetaData", e); throw new IllegalArgumentException("Unrecognized configuration data for StorageDriverMetaData", e); } } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("StorageDriverMetaData [driverName=").append(driverName) .append(", driverVersion=") .append(driverVersion) .append(", storageName=").append(storageName) .append(", storaeDisplayName=").append(storageDisplayName) .append(", providerName=").append(providerName) .append(", providerDisplayName=").append(providerDisplayName) .append(", metaType=").append(metaType) .append(", enableSsl=").append(enableSsl) .append(", sslPort=").append(sslPort) .append(", nonSslPort=").append(nonSslPort) .append(", supportAutoTierPolicy").append(supportAutoTierPolicy) .append(", driverClassName=").append(driverClassName) .append(", driverFileName=").append(driverFileName); return builder.toString(); } }