/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.export;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.cim.CIMObjectPath;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;
import com.emc.storageos.volumecontroller.impl.smis.SmisConstants;
/**
* This processor is responsible for discovering VNX and VNAX lun masking paths.
*/
public class MaskingPathProcessor extends Processor {
private Logger log = LoggerFactory.getLogger(MaskingPathProcessor.class);
@Override
public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap)
throws BaseCollectionException {
try {
AccessProfile profile = (AccessProfile) keyMap.get(Constants.ACCESSPROFILE);
String serialIdsStr = profile.getProps().get(Constants.SYSTEM_SERIAL_IDS);
String[] serialIds = serialIdsStr.split(Constants.ID_DELIMITER);
Set<String> serialIdSet = new HashSet<String>(Arrays.asList(serialIds));
Iterator<CIMObjectPath> it = (Iterator<CIMObjectPath>) resultObj;
while (it.hasNext()) {
CIMObjectPath path = it.next();
String systemName = path.getKeyValue(SmisConstants.CP_SYSTEM_NAME).toString();
String serialId = systemName.split(Constants.PATH_DELIMITER_REGEX)[1];
if (serialIdSet.contains(serialId)) {
addPath(keyMap, operation.getResult(), path);
}
}
} catch (Exception e) {
log.error("Masking path discovery failed during array affinity discovery", e);
}
}
}