package com.noticeditorteam.noticeditor.model; import java.util.ArrayList; import javafx.collections.FXCollections; import javafx.collections.ObservableList; /** * Collection of notice statuses * * @author Maximillian M. */ public class NoticeStatusList { private static ArrayList<NoticeStatus> list; private static int lastIndex; private static ArrayList<NoticeStatus> mementoList; private static int mementoLastIndex; static { list = new ArrayList<>(); lastIndex = -1; } /** * Saves status list */ public static void save() { mementoList = new ArrayList<>(list); mementoLastIndex = lastIndex; } /** * Restores statuses to saved state */ public static void restore() { list = mementoList; lastIndex = mementoLastIndex; } /** * Adds new status with next status code * * @param statusName Status name */ public static void add(String statusName) { ++lastIndex; NoticeStatus newStatus = new NoticeStatus(statusName, lastIndex); list.add(newStatus); } /** * Adds new status with specified status code * * @param statusName Status name * @param statusCode Status code */ public static void add(String statusName, int statusCode) { lastIndex = (lastIndex < statusCode) ? statusCode : lastIndex + 1; NoticeStatus newStatus = new NoticeStatus(statusName, statusCode); list.add(newStatus); } /** * Clears status list */ public static void clear() { list = new ArrayList<>(); } /** * Returns status by code * * @param statusCode Status code * @return Status */ public static NoticeStatus getStatus(int statusCode) { NoticeStatus foo = list.stream().filter(status -> status.getCode() == statusCode).findFirst().orElse(list.get(0)); return foo; } /** * Returns status code by name * * @param statusName Status name * @return Status code */ public static int getStatusCode(String statusName) { for (NoticeStatus status : list) { if (status.getName().equals(statusName)) { return status.getCode(); } } return 0; } public static ObservableList<NoticeStatus> asObservable() { return FXCollections.observableList(list); } }