package com.googlecode.mycontainer.commons.regex;
import java.io.BufferedReader;
import java.io.CharArrayReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.regex.Pattern;
import com.googlecode.mycontainer.commons.lang.StringUtil;
public class RegexParser {
private final Map<String, RegexResult> patterns = new HashMap<String, RegexResult>();
public RegexResult getResult(String pattern) {
return patterns.get(pattern);
}
public void addPattern(String pattern) {
RegexResult result = new RegexResult();
result.setPattern(Pattern.compile(pattern));
patterns.put(pattern, result);
}
public Map<String, RegexResult> getPatterns() {
return patterns;
}
public void parse(CharSequence chars) {
char[] array = StringUtil.toCharArray(chars);
parse(array);
}
public void parse(char[] array) {
BufferedReader bf = new BufferedReader(new CharArrayReader(array));
parse(bf);
}
public void parse(BufferedReader reader) {
try {
while (true) {
String line = reader.readLine();
if (line == null) {
break;
}
parseLine(line);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void parseLine(String line) {
Set<Entry<String, RegexResult>> set = patterns.entrySet();
for (Entry<String, RegexResult> entry : set) {
RegexResult result = entry.getValue();
result.process(line);
}
}
public String getResult(String pattern, int row, int group) {
List<RegexResultRow> rows = getResult(pattern).getRows();
List<String> groups = rows.get(row).getGroups();
String ret = groups.get(group);
return ret;
}
@Override
public String toString() {
return "RegexParser [patterns=" + patterns + "]";
}
}