package com.metservice.kanban.csv; import static com.metservice.kanban.csv.CsvConstants.*; import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import com.metservice.kanban.model.WorkItem; import com.metservice.kanban.model.WorkItemType; public class DefaultWorkItemParser implements WorkItemParser { private final WorkItemType type; public DefaultWorkItemParser(WorkItemType type) { this.type = type; } @Override public WorkItem parseWorkItem(CsvColumnNames columnNames, String[] row) { CsvRow dataRow = new CsvRow(columnNames, row); int id = dataRow.getInt(ID_COLUMN_NAME); int parentId = dataRow.getInt(PARENT_ID_COLUMN_NAME); String name = dataRow.getString(NAME_COLUMN_NAME); int averageCaseEstimate = dataRow.getInt(AVERAGE_CASE_ESIMATE); int oldSize = dataRow.getInt(SIZE_COLUMN_NAME); // for backwards compatibility if (averageCaseEstimate == CsvRow.INTEGER_DEFAULT && oldSize != CsvRow.INTEGER_DEFAULT) { averageCaseEstimate = oldSize; } int importance = dataRow.getInt(IMPORTANCE_COLUMN_NAME); String notes = dataRow.getString(NOTES_COLUMN_NAME); boolean excluded = dataRow.getBoolean(EXCLUDED_COLUMN_NAME); boolean stopped = dataRow.getBoolean(STOPPED_COLUMN_NAME); String color = dataRow.getString(COLOR_COLUMN_NAME); int worstCaseEstimate = dataRow.getInt(WORST_CASE_ESIMATE); boolean mustHave = dataRow.getBoolean(MUST_HAVE); String workStreams = dataRow.getString(WORK_STREAMS); WorkItem workItem = new WorkItem(id, parentId, type); workItem.setName(name); workItem.setAverageCaseEstimate(averageCaseEstimate); workItem.setImportance(importance); workItem.setNotes(notes); workItem.setExcluded(excluded); if (StringUtils.isEmpty(color)) { color = "ffffff"; } workItem.setColour(color); workItem.setBlocked(stopped); workItem.setWorstCaseEstimate(worstCaseEstimate); workItem.setMustHave(mustHave); workItem.setWorkStreamsAsString(workStreams); for (String phase : type.getPhases()) { LocalDate date = dataRow.getDate(phase); workItem.setDate(phase, date); } return workItem; } }