/*******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Jeff Briggs, Henry Hughes, Ryan Morse
*******************************************************************************/
package org.eclipse.linuxtools.systemtap.graphing.core.datasets.row;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataEntry;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IDataSetParser;
public class RowParser implements IDataSetParser {
public RowParser(String[] regEx) {
this.regEx = Arrays.copyOf(regEx, regEx.length);
buildPattern();
}
private void buildPattern() {
StringBuilder wholeRegExpr = new StringBuilder();
for(int i=0; i<regEx.length; i++) {
wholeRegExpr.append('(' + regEx[i] + ')');
}
wholePattern = Pattern.compile(wholeRegExpr.toString());
}
@Override
public IDataEntry parse(StringBuilder s) {
if(null == s) {
return null;
}
RowEntry e = null;
Matcher wholeMatcher = wholePattern.matcher(s);
if(wholeMatcher.find()) {
e = new RowEntry();
Object[] data = new Object[regEx.length>>1];
int group=0, j;
for(int i=0; i<regEx.length; i++) {
group++;
for(j=0; j<regEx[i].length(); j++) {
if(regEx[i].charAt(j) == ')') {
group++;
}
}
if(0 == (i&1)) {
data[i>>1] = wholeMatcher.group(group);
}
}
e.putRow(0, data);
s.delete(0, wholeMatcher.end());
}
return e;
}
private String[] regEx;
private Pattern wholePattern;
}