/* * Copyright (c) 2008-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.ibm.xiv; import java.util.Arrays; import java.util.Iterator; import java.util.Map; import javax.cim.CIMInstance; import javax.cim.UnsignedInteger16; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.emc.storageos.db.client.DbClient; import com.emc.storageos.db.client.model.StorageSystem; import com.emc.storageos.db.client.model.StorageSystem.SupportedProvisioningTypes; import com.emc.storageos.plugins.AccessProfile; import com.emc.storageos.plugins.BaseCollectionException; import com.emc.storageos.plugins.common.Constants; import com.emc.storageos.plugins.common.Processor; import com.emc.storageos.plugins.common.domainmodel.Operation; public class XIVStorageConfigurationCapabilitiesProcessor extends Processor { private Logger _logger = LoggerFactory .getLogger(XIVStorageConfigurationCapabilitiesProcessor.class); private static final String SUPPORTED_ELEMENT_TYPES = "SupportedStorageElementTypes"; private static final String THIN_VOLUME_SUPPORTED = "5"; private static final String THICK_VOLUME_SUPPORTED = "2"; private DbClient _dbClient; private AccessProfile _profile = null; @Override public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap) throws BaseCollectionException { @SuppressWarnings("unchecked") final Iterator<CIMInstance> it = (Iterator<CIMInstance>) resultObj; _profile = (AccessProfile) keyMap.get(Constants.ACCESSPROFILE); _dbClient = (DbClient) keyMap.get(Constants.dbClient); try { StorageSystem system = _dbClient.queryObject(StorageSystem.class, _profile.getSystemId()); while (it.hasNext()) { CIMInstance storageConfigurationInstance = it.next(); UnsignedInteger16[] supportedElementTypeArr = (UnsignedInteger16[]) storageConfigurationInstance .getPropertyValue(SUPPORTED_ELEMENT_TYPES); String supportedElementTypes = Arrays .toString(supportedElementTypeArr); if (_logger.isDebugEnabled()) { _logger.debug("Capability:" + supportedElementTypes); } if (supportedElementTypes.contains(THIN_VOLUME_SUPPORTED) && supportedElementTypes .contains(THICK_VOLUME_SUPPORTED)) { system.setSupportedProvisioningType(SupportedProvisioningTypes.THIN_AND_THICK .name()); } else if (supportedElementTypes .contains(THIN_VOLUME_SUPPORTED)) { system.setSupportedProvisioningType(SupportedProvisioningTypes.THIN .name()); } else if (supportedElementTypes .contains(THICK_VOLUME_SUPPORTED)) { system.setSupportedProvisioningType(SupportedProvisioningTypes.THICK .name()); } else { system.setSupportedProvisioningType(SupportedProvisioningTypes.NONE .name()); } break; // should have only one instance } _dbClient.persistObject(system); } catch (Exception e) { _logger.error( "Finding out Storage System Capability on Volume Creation failed: ", e); } } }