package cz.nkp.differ.compare.metadata.external;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author xrosecky
*/
public class RegexpTransformer implements ResultTransformer {
private List<String> listOfRegexp;
private Map<String, String> mapOfRegexp;
public List<String> getListOfRegexp() {
return listOfRegexp;
}
public void setListOfRegexp(List<String> listOfRegexp) {
this.listOfRegexp = listOfRegexp;
}
public Map<String, String> getMapOfRegexp() {
return mapOfRegexp;
}
public void setMapOfRegexp(Map<String, String> mapOfRegexp) {
this.mapOfRegexp = mapOfRegexp;
}
@Override
public List<Entry> transform(byte[] stdout, byte[] stderr) throws IOException {
List<Entry> result = new ArrayList<Entry>();
BufferedReader bf = new BufferedReader(new StringReader(new String(stdout)));
String str;
while ((str = bf.readLine()) != null) {
boolean skip = false;
if (mapOfRegexp != null) {
for (Map.Entry<String, String> entry : mapOfRegexp.entrySet()) {
Pattern pattern = Pattern.compile(entry.getValue());
Matcher matcher = pattern.matcher(str);
boolean matchFound = matcher.find();
if (matchFound && matcher.groupCount() == 1) {
String val = matcher.group(1).trim();
if (!val.isEmpty()) {
Entry metadataEntry = new Entry();
metadataEntry.setKey(entry.getKey());
metadataEntry.setValue(val);
result.add(metadataEntry);
}
skip = true;
}
}
}
if (skip) {
continue;
}
for (String regexp : listOfRegexp) {
Pattern pattern = Pattern.compile(regexp);
Matcher matcher = pattern.matcher(str);
boolean matchFound = matcher.find();
if (matchFound && matcher.groupCount() == 2) {
String key = matcher.group(1).trim();
String val = matcher.group(2).trim();
if (!(key.isEmpty() || val.isEmpty())) {
Entry entry = new Entry();
entry.setKey(key);
entry.setValue(matcher.group(2).trim());
result.add(entry);
}
}
}
}
return result;
}
}