package com.redhat.qe.tools.abstraction;
import java.util.Hashtable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.logging.Logger;
public abstract class CLIAbstraction {
protected static Logger log = Logger.getLogger(CLIAbstraction.class.getName());
protected Hashtable<String, String> regexCriterion;
public CLIAbstraction() {
regexCriterion = new Hashtable<String, String>();
}
public void appendRegexCriterion(String name, String regex) {
regexCriterion.put(name, regex);
}
public void appendRegexCriterion(Hashtable<String, String> regex) {
regexCriterion.putAll(regex);
}
public ArrayList<Hashtable<String, String>> match(String input) throws NullPointerException{
ArrayList<Hashtable<String, String>> rtn = new ArrayList<Hashtable<String, String>>();
// TODO: Find a better way than O(n^2)
try {
for (String key : regexCriterion.keySet()) {
// Possible Issues:
// If therre's more than one regex match per group, this method
// will produce incorrect results.
Pattern pattern = Pattern.compile(regexCriterion.get(key), Pattern.MULTILINE);
Matcher matcher = pattern.matcher(input);
int elementNum = 0;
while (matcher.find()) {
if (rtn.size() < elementNum + 1) {
rtn.add(new Hashtable<String, String>());
}
if (matcher.groupCount() > 0) { // captured result from regex
rtn.get(elementNum).put(key, matcher.group(1).trim());
}
else {
rtn.get(elementNum).put(key, matcher.group(0).trim());
}
elementNum++;
}
}
}
catch (NullPointerException e) {
throw e;
}
return rtn;
}
}