X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Futil%2FCsvParserWithLinesAsMap.java;fp=org.argeo.enterprise%2Fsrc%2Forg%2Fargeo%2Futil%2FCsvParserWithLinesAsMap.java;h=8eb6e94636a44146c2e5c37a5b8aa526d9efd9fe;hb=fba24f5ac520b99b3ac75781c95f11c48ac6252f;hp=0000000000000000000000000000000000000000;hpb=3fbd05aa39ef235128e134fde8fd24167208e781;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.enterprise/src/org/argeo/util/CsvParserWithLinesAsMap.java b/org.argeo.enterprise/src/org/argeo/util/CsvParserWithLinesAsMap.java new file mode 100644 index 000000000..8eb6e9463 --- /dev/null +++ b/org.argeo.enterprise/src/org/argeo/util/CsvParserWithLinesAsMap.java @@ -0,0 +1,36 @@ +package org.argeo.util; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * CSV parser allowing to process lines as maps whose keys are the header + * fields. + */ +public abstract class CsvParserWithLinesAsMap extends CsvParser { + + /** + * Actually processes a line. + * + * @param lineNumber the current line number, starts at 1 (the header, if header + * processing is enabled, the first lien otherwise) + * @param line the parsed tokens as a map whose keys are the header fields + */ + protected abstract void processLine(Integer lineNumber, Map line); + + protected final void processLine(Integer lineNumber, List header, List tokens) { + if (header == null) + throw new IllegalArgumentException("Only CSV with header is supported"); + Map line = new HashMap(); + for (int i = 0; i < header.size(); i++) { + String key = header.get(i); + String value = null; + if (i < tokens.size()) + value = tokens.get(i); + line.put(key, value); + } + processLine(lineNumber, line); + } + +}