code: public String buildLine(T entity, boolean appendLineTermination) {
  		checkEntityConfig();
  		StringBuilder sb = new StringBuilder();
  		boolean first = true;
  		for (ColumnInfo<Object> columnInfo : allColumnInfos) {
  			if (first) {
  				first = false;
  			} else {
  				sb.append(columnSeparator);
  			}
  			Object value;
  			try {
  				value = columnInfo.getValue(entity);
  			} catch (Exception e) {
  				throw new IllegalStateException("Could not get value from entity field: " + columnInfo);
  			}
  			@SuppressWarnings("unchecked")
  			Converter<Object, Object> castConverter = (Converter<Object, Object>) columnInfo.getConverter();
  			String str = castConverter.javaToString(columnInfo, value);
  			boolean needsQuotes = columnInfo.isNeedsQuotes();
  			if (str == null) {
  				if (needsQuotes) {
  					sb.append(columnQuote).append(columnQuote);
  				}
  				continue;
  			}
  			// need to protect the column if it contains a quote
  			if (str.indexOf(columnQuote) >= 0) {
  				writeQuoted(sb, str);
  				continue;
  			}
  			if (!needsQuotes) {
  				for (int i = 0; i < str.length(); i++) {
  					char ch = str.charAt(i);
  					if (ch == columnSeparator || ch == '\r' || ch == '\n' || ch == '\t' || ch == '\b') {
  						needsQuotes = true;
  						break;
  					}
  				}
  			}
  			if (needsQuotes) {
  				sb.append(columnQuote);
  			}
  			sb.append(str);
  			if (needsQuotes) {
  				sb.append(columnQuote);
  			}
  		}
  		if (appendLineTermination) {
  			sb.append(lineTermination);
  		}
  		return sb.toString();
  	}
docs: Convert the entity into a string of column values.
  
  @param appendLineTermination
  Set to true to add the newline to the end of the line.