/*
* Copyright (c) 2014-2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.plugins.discovery.smis.processor.detailedDiscovery;
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.plugins.discovery.smis.processor.fast.FASTPolicyProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.cim.CIMObjectPath;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* This processor is responsible for discovering VNX and VNAX fast policies.
*/
public class FastPolicyProcessor extends Processor {
private Logger log = LoggerFactory.getLogger(FastPolicyProcessor.class);
@Override
public void processResult(Operation operation, Object resultObj, Map<String, Object> keyMap)
throws BaseCollectionException {
try {
final Iterator<CIMObjectPath> it = (Iterator<CIMObjectPath>) resultObj;
while (it.hasNext()) {
final CIMObjectPath policyObjectPath = it.next();
String systemName = policyObjectPath.getKey(Constants.SYSTEMNAME).getValue().toString();
if (!systemName.contains((String) keyMap.get(Constants._serialID))) {
continue;
}
String[] array = systemName.split(Constants.PATH_DELIMITER_REGEX);
String policyRuleName = policyObjectPath.getKey(Constants.POLICYRULENAME)
.getValue().toString();
log.info("Policy Name {}", policyRuleName);
String policyKey = validateFastPolicy(array[0], policyRuleName);
if (null != policyKey) {
log.info("Adding Policy Object Path {}", policyObjectPath);
addPath(keyMap, policyKey, policyObjectPath);
}
}
} catch (Exception e) {
log.error("Fast Policy discovery failed during UnManaged Volume discovery", e);
}
}
public static String validateFastPolicy(String arrayType, String policyRuleName) {
if (Constants.CLARIION.equalsIgnoreCase(arrayType)) {
return Constants.VNXFASTPOLICIES;
}
if (Constants.SYMMETRIX.equalsIgnoreCase(arrayType)
&& !FASTPolicyProcessor.GlobalVMAXPolicies.contains(policyRuleName)) {
return Constants.VMAXFASTPOLICIES;
}
return null;
}
@Override
protected void setPrerequisiteObjects(List<Object> inputArgs) throws BaseCollectionException {
}
}