package org.jbehave.core.model;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class TableUtils
{
public static List<String> parseRow(String rowAsString, boolean header, ExamplesTableProperties properties) {
String separator = header ? properties.getHeaderSeparator() : properties.getValueSeparator();
return parseRow(rowAsString, separator, properties.getCommentSeparator(), properties.isTrim());
}
private static List<String> parseRow(String rowAsString, String separator, String commentSeparator,
boolean trimValues) {
StringBuilder regex = new StringBuilder();
for (char c : separator.toCharArray()) {
regex.append("\\").append(c);
}
List<String> values = new ArrayList<String>();
for (String value : rowAsString.split(regex.toString(), -1)) {
String stripped = StringUtils.substringBefore(value, commentSeparator);
String trimmed = trimValues ? stripped.trim() : stripped;
values.add(StringUtils.substringBefore(trimmed, commentSeparator));
}
// ignore a leading and a trailing empty value
if (StringUtils.isBlank(values.get(0))) {
values.remove(0);
}
int lastIndex = values.size() - 1;
if (lastIndex != -1 && StringUtils.isBlank(values.get(lastIndex))) {
values.remove(lastIndex);
}
return values;
}
}