/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.emc.sa.service.windows.tasks;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.iwave.ext.windows.model.wmi.FibreChannelHBA;
import com.iwave.ext.windows.model.wmi.FibreChannelTargetMapping;
public class FindFibreChannelTargetMappings extends
WindowsExecutionTask<Map<String, List<FibreChannelTargetMapping>>> {
private final String instanceName;
private final String portWWN;
private final Collection<String> targetWWNs;
public FindFibreChannelTargetMappings(FibreChannelHBA hba, Collection<String> targetWWNs) {
this(hba.getInstanceName(), hba.getPortWWN(), targetWWNs);
}
public FindFibreChannelTargetMappings(String instanceName, String portWWN,
Collection<String> targetWWNs) {
this.instanceName = instanceName;
this.portWWN = portWWN;
this.targetWWNs = targetWWNs;
provideDetailArgs(instanceName, portWWN, targetWWNs);
}
@Override
public Map<String, List<FibreChannelTargetMapping>> executeTask() throws Exception {
Map<String, List<FibreChannelTargetMapping>> results = Maps.newHashMap();
for (FibreChannelTargetMapping mapping : getTargetSystem().getTargetMapping(instanceName,
portWWN)) {
if (targetWWNs.contains(mapping.getPortWWN())) {
List<FibreChannelTargetMapping> mappings = results.get(mapping.getPortWWN());
if (mappings == null) {
mappings = Lists.newArrayList();
results.put(mapping.getPortWWN(), mappings);
}
mappings.add(mapping);
}
}
return results;
}
}