package com.metservice.kanban.model; import static java.util.Arrays.asList; import java.util.AbstractList; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class KanbanBoardColumnList extends AbstractList<KanbanBoardColumn> { private final List<KanbanBoardColumn> columns; public KanbanBoardColumnList(KanbanBoardColumn... kanbanBoardColumn) { this(asList(kanbanBoardColumn)); } public KanbanBoardColumnList(List<KanbanBoardColumn> columns) { this.columns = new ArrayList<KanbanBoardColumn>(columns); } @Override public KanbanBoardColumn get(int index) { return columns.get(index); } @Override public int size() { return columns.size(); } public boolean containsPhase(String phase) { for (KanbanBoardColumn column : columns) { if (column.getPhase().equals(phase)) { return true; } } return false; } public int getIndexOfPhase(String phase) { for (int i = 0; i < columns.size(); i++) { if (columns.get(i).getPhase().equals(phase)) { return i; } } throw new IllegalArgumentException("phase not in list: " + phase); } public List<WorkItem> filter(List<WorkItem> workItems) { return filter(workItems, null); } public List<WorkItem> filter(List<WorkItem> workItems, Comparator<WorkItem> workItemComparator) { List<WorkItem> filteredWorkItems = new ArrayList<WorkItem>(); List<WorkItem> workItemsList = new ArrayList<WorkItem>(workItems); if (workItemComparator != null) { Collections.sort(workItemsList, workItemComparator); } for (WorkItem workItem : workItemsList) { if (containsPhase(workItem.getCurrentPhase())) { filteredWorkItems.add(workItem); } } return new ArrayList<WorkItem>(filteredWorkItems); } @Override public String toString() { return columns.toString(); } }