class CommonFormat {

	public ReportLine toReportLine(List<String> row) throws ParseException {
		if (row.size() < ColumnMeta.TAG_COLUMN_INDEX || row.size() > columnMeta.getTargetColumnNames().size()) {
			throw new ParseException("Invalid the number of columns in list: expected from " + ColumnMeta
					.TAG_COLUMN_INDEX +
					" to " + columnMeta.getTargetColumnNames().size() + ", actual " + row.size());
		}
		ReportLine line = new ReportLine();
		int i = 0;

		line.setDlabId(row.get(i));
		line.setUser(row.get(++i));
		line.setUsageDate(row.get(++i));
		line.setProduct(row.get(++i));
		line.setUsageType(row.get(++i));
		line.setUsage(parseDouble("usage", row.get(++i)));
		line.setCost(parseDouble("cost", row.get(++i)));
		line.setCurrencyCode(row.get(++i));
		line.setResourceTypeId(row.get(++i));

		if (row.size() >= ColumnMeta.TAG_COLUMN_INDEX) {
			LinkedHashMap<String, String> tags = new LinkedHashMap<>();
			i++;
			while (i < row.size()) {
				tags.put(columnMeta.getTargetColumnNames().get(i), row.get(i++));
			}
			line.setTags(tags);
		}

		return line;
	}

	public  CommonFormat(ColumnMeta columnMeta);
	public  CommonFormat(ColumnMeta columnMeta, char sourceDecimalSeparator, char sourceGroupingSeparator);

}