/* * Copyright (c) 2008-2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.detailedDiscovery; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.cim.CIMInstance; 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.plugins.AccessProfile; import com.emc.storageos.plugins.BaseCollectionException; import com.emc.storageos.plugins.common.Constants; import com.emc.storageos.plugins.common.domainmodel.Operation; import com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.PoolProcessor; /** * Processor responsible to process the result of the following CIM Call. * * ai(ref-pool, null, EMC_StoragePoolCapabilities...) => Instances of EMC_StorageCapabilities. * * and add the response to the KeyMap for further processing. * Currently this call is supported only for vmax3 systems. * */ public class PoolCapabilitiesProcessor extends PoolProcessor { private Logger _logger = LoggerFactory.getLogger(PoolCapabilitiesProcessor.class); private DbClient _dbClient; @Override public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap) throws BaseCollectionException { try { @SuppressWarnings("unchecked") final Iterator<CIMInstance> it = (Iterator<CIMInstance>) resultObj; _dbClient = (DbClient) keyMap.get(Constants.dbClient); AccessProfile profile = (AccessProfile) keyMap .get(Constants.ACCESSPROFILE); StorageSystem device = getStorageSystem(_dbClient, profile.getSystemId()); // Process the response only for vmax3 systems. if (device.checkIfVmax3()) { while (it.hasNext()) { CIMInstance capabilitiesInstance = null; try { capabilitiesInstance = it.next(); String instanceID = capabilitiesInstance.getPropertyValue( Constants.INSTANCEID).toString(); addPath(keyMap, operation.getResult(), capabilitiesInstance.getObjectPath()); } catch (Exception e) { _logger.warn( "Pool Capabilities detailed discovery failed for {}-->{}", capabilitiesInstance.getObjectPath(), getMessage(e)); } } } } catch (Exception e) { _logger.error("Pool Capabilities detailed discovery failed", e); } } @Override protected void setPrerequisiteObjects(List<Object> inputArgs) throws BaseCollectionException { // TODO Auto-generated method stub } }