package com.ibm.nmon.data.matcher;
import java.util.List;
import java.util.Map;
import com.ibm.nmon.data.DataSet;
import com.ibm.nmon.data.DataType;
import com.ibm.nmon.data.Process;
import com.ibm.nmon.data.ProcessDataSet;
import com.ibm.nmon.util.DataHelper;
/**
* Matches processes via {@link ProcessDataType}. This matcher matches either:
* <ul>
* <li>Aggregated processes when there is more than one process by the same name in a dataset</li>
* <li>A single process instance when that process is the only one in the system</li>
* </ul>
* This class <em>does not </em> match a specific process by name or id.
*/
public final class ProcessMatcher implements TypeMatcher {
public static final ProcessMatcher INSTANCE = new ProcessMatcher();
private ProcessMatcher() {}
@Override
public List<DataType> getMatchingTypes(DataSet data) {
List<DataType> types = new java.util.ArrayList<DataType>();
Map<String, List<Process>> processNameToProcesses = DataHelper.getProcessesByName((ProcessDataSet) data, true);
for (String processName : processNameToProcesses.keySet()) {
List<Process> processes = processNameToProcesses.get(processName);
// processes list contains either 1 item or the first item will be the aggregate process
DataType type = ((ProcessDataSet) data).getType(processes.get(0));
types.add(type);
}
return types;
}
@Override
public String toString() {
return "$PROCESSES";
}
}