package org.araqne.log.api; import java.util.HashMap; import java.util.Map; public class FixedLengthLogParser extends V1LogParser { private String targetField; private boolean includeTargetField; private Integer[] fieldLength; private String[] columnHeaders; public FixedLengthLogParser(String targetField, boolean includeTargetField, Integer[] fieldLength, String[] columnHeaders) { this.fieldLength = fieldLength; this.columnHeaders = columnHeaders; this.targetField = targetField; this.includeTargetField = includeTargetField; } @Override public Map<String, Object> parse(Map<String, Object> params) { String line = (String) params.get(targetField); if (line == null) return params; int startIndex = 0; int endIndex = 0; Map<String, Object> m = new HashMap<String, Object>(); for (int i = 0; i < columnHeaders.length; i++) { if (i >= fieldLength.length) { m.put(columnHeaders[i], null); continue; } startIndex = endIndex; endIndex += fieldLength[i]; String value = null; if (startIndex < line.length()) { if (endIndex > line.length()) value = line.substring(startIndex).trim(); else value = line.substring(startIndex, endIndex).trim(); } else value = null; m.put(columnHeaders[i], value); } if (this.includeTargetField) m.put(targetField, line); return m; } }