Class CsvRow
java.lang.Object
com.onenetwork.platform.integ.csv.CsvRow
public class CsvRow
extends java.lang.Object
Represents a row of values parsed from a CSV (comma-separated values) file.
During construction, zero-based index positions are mapped to logical column
names, and all access to values after construction is required to use the
logical column names. All column names are supplied to this class
externally - see such as
CsvTransformer
for column naming
conventions.-
Field Summary
Fields Modifier and Type Field Description static char
DEFAULT_COMMENT
static char
DEFAULT_DELIMITER
static char
DEFAULT_QUOTE
static java.util.regex.Pattern
FORMULA_INJECTION
static java.lang.String
NEWLINE
-
Constructor Summary
Constructors Constructor Description CsvRow(java.util.Map<java.lang.String,java.lang.Integer> positionByColumnName, java.util.List<java.lang.String> values)
CsvRow(java.util.Map<java.lang.String,java.lang.Integer> positionByColumnName, java.util.List<java.lang.String> values, java.lang.String delimiter)
-
Method Summary
Modifier and Type Method Description static java.lang.String
escapeValIfNecessary(java.lang.String val)
static java.lang.String
escapeValIfNecessary(java.lang.String val, java.lang.String delimiter, java.lang.String quote)
static java.lang.String
escapeValIfNecessary(java.lang.String val, java.lang.String delimiter, java.lang.String quote, boolean preventFormulaInjection)
java.lang.String
get(java.lang.String column)
java.util.List<java.lang.String>
getAllColumnNames()
static char
getDelimiterCharValue(java.lang.String delimiter)
Returns the char value for provided string delimiter.int
getPosition(java.lang.String column)
void
set(int position, java.lang.String value)
void
set(java.lang.String column, java.lang.String value)
void
set(java.util.List<java.lang.String> values)
Performance method to avoid creating CsvRow every time that in turn avoids constructing header metadata everytime.void
setLocalizedColumnNames(java.util.Map<java.lang.String,java.lang.String> localizedColumnNames)
Sets map of column name to localized column namesjava.lang.String
toCsvRowString(boolean preventFormulaInjection)
Returns CsvRow into delimiter separated string format.java.lang.String
toString()
void
write(java.io.Writer writer)
Writes this CSV row's data to a Writer.static void
write(java.util.Collection<? extends CsvRow> rows, java.io.Writer writer)
Writes a "header" row using the column names in the first CsvRow given, then writes all the given CsvRow data as string to the given Writer.static void
write(java.util.Collection<? extends CsvRow> rows, java.io.Writer writer, boolean includesHeader)
Writes all the given CsvRows as string to the given Writer; optionally, the column information in the first row can be written as a header row.void
writeHeader(java.io.Writer writer)
Writes a header representing this CSV's column names to a Writer.
-
Field Details
-
DEFAULT_DELIMITER
public static final char DEFAULT_DELIMITER- See Also:
- Constant Field Values
-
DEFAULT_QUOTE
public static final char DEFAULT_QUOTE- See Also:
- Constant Field Values
-
DEFAULT_COMMENT
public static final char DEFAULT_COMMENT- See Also:
- Constant Field Values
-
NEWLINE
public static final java.lang.String NEWLINE- See Also:
- Constant Field Values
-
FORMULA_INJECTION
public static final java.util.regex.Pattern FORMULA_INJECTION
-
-
Constructor Details
-
CsvRow
public CsvRow(java.util.Map<java.lang.String,java.lang.Integer> positionByColumnName, java.util.List<java.lang.String> values)- Parameters:
positionByColumnName
- lookup of column name to indexed position (zero-based) location in listvalues
- list of String values in the CSV row (uses comma as delimiter)
-
CsvRow
public CsvRow(java.util.Map<java.lang.String,java.lang.Integer> positionByColumnName, java.util.List<java.lang.String> values, java.lang.String delimiter)- Parameters:
positionByColumnName
- lookup of column name to indexed position (zero-based) location in listvalues
- list of String values in the CSV rowdelimiter
- delimiter to be used
-
-
Method Details
-
set
public void set(java.util.List<java.lang.String> values)Performance method to avoid creating CsvRow every time that in turn avoids constructing header metadata everytime.- Parameters:
values
- list of String values in the CSV row, the list should be contain any null values.
-
get
public java.lang.String get(java.lang.String column)- Parameters:
column
- column name- Returns:
- value
-
set
public void set(java.lang.String column, java.lang.String value)- Parameters:
column
- column namevalue
- new value; may not be null. If the value is unspecified, use the empty string ("")
-
set
public void set(int position, java.lang.String value)- Parameters:
position
-value
- new value; may not be null. If the value is unspecified, use the empty string ("")
-
getPosition
public int getPosition(java.lang.String column) -
getAllColumnNames
public java.util.List<java.lang.String> getAllColumnNames() -
setLocalizedColumnNames
public void setLocalizedColumnNames(java.util.Map<java.lang.String,java.lang.String> localizedColumnNames)Sets map of column name to localized column names -
toCsvRowString
public java.lang.String toCsvRowString(boolean preventFormulaInjection)Returns CsvRow into delimiter separated string format.- Parameters:
preventFormulaInjectionis
- If the flag is set/true then it prevent formula injection while creating CsvRow.
-
writeHeader
public void writeHeader(java.io.Writer writer) throws java.io.IOExceptionWrites a header representing this CSV's column names to a Writer.- Parameters:
writer
- destination- Throws:
java.io.IOException
-
write
public void write(java.io.Writer writer) throws java.io.IOExceptionWrites this CSV row's data to a Writer.- Parameters:
writer
- destination- Throws:
java.io.IOException
-
toString
public java.lang.String toString()- Overrides:
toString
in classjava.lang.Object
- See Also:
toString implementation useful for debugging only.
-
escapeValIfNecessary
public static java.lang.String escapeValIfNecessary(java.lang.String val)- Parameters:
val
- value to escape if required- Returns:
- escaped value, using default delimiter (comma) and quote (double-quote)
-
escapeValIfNecessary
public static java.lang.String escapeValIfNecessary(java.lang.String val, java.lang.String delimiter, java.lang.String quote)- Parameters:
val
- value to escape if requireddelimiter
- delimiter to escapequote
- quote character to use for escaping- Returns:
- escaped value
-
escapeValIfNecessary
public static java.lang.String escapeValIfNecessary(java.lang.String val, java.lang.String delimiter, java.lang.String quote, boolean preventFormulaInjection) -
write
public static void write(java.util.Collection<? extends CsvRow> rows, java.io.Writer writer) throws java.io.IOExceptionWrites a "header" row using the column names in the first CsvRow given, then writes all the given CsvRow data as string to the given Writer. User write(Collection rows, Writer writer, boolean includeHeader) with false flag instead if the first row is not the header row.- Parameters:
rows
- csv rows to be writtenwriter
- destination- Throws:
java.io.IOException
-
write
public static void write(java.util.Collection<? extends CsvRow> rows, java.io.Writer writer, boolean includesHeader) throws java.io.IOExceptionWrites all the given CsvRows as string to the given Writer; optionally, the column information in the first row can be written as a header row.- Parameters:
rows
- csvs to be writtenwriter
- destinationincludesHeader
- whether to write the first row's columns as a header row- Throws:
java.io.IOException
-
getDelimiterCharValue
public static char getDelimiterCharValue(java.lang.String delimiter)Returns the char value for provided string delimiter.
-