package co.forsaken.projectindigo.session; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import lombok.NonNull; import org.codehaus.jackson.annotate.JsonAutoDetect; import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonIgnoreProperties; import org.codehaus.jackson.annotate.JsonMethod; import org.codehaus.jackson.annotate.JsonProperty; @SuppressWarnings({ "serial", "rawtypes" }) public class AccountList extends AbstractListModel implements ComboBoxModel { private List<Account> accounts = new ArrayList<Account>(); private transient Account selected; public synchronized void add(@NonNull Account account) { if (!accounts.contains(account)) { accounts.add(account); Collections.sort(accounts); fireContentsChanged(this, 0, accounts.size()); } } public synchronized void remove(@NonNull Account account) { Iterator<Account> it = accounts.iterator(); while (it.hasNext()) { Account other = it.next(); if (other.equals(account)) { it.remove(); fireContentsChanged(this, 0, accounts.size() + 1); break; } } } @JsonProperty public synchronized List<Account> getAccounts() { return accounts; } public synchronized void setAccounts(@NonNull List<Account> accounts) { this.accounts = accounts; Collections.sort(accounts); } @JsonIgnore public synchronized int getSize() { return accounts.size(); } public synchronized Account getElementAt(int index) { try { return accounts.get(index); } catch (IndexOutOfBoundsException e) { return null; } } public void setSelectedItem(Object item) { if (item == null) { selected = null; return; } if (item instanceof Account) { this.selected = (Account) item; } else { String id = String.valueOf(item).trim(); Account account = new Account(id); for (Account test : accounts) { if (test.equals(account)) { account = test; break; } } selected = account; } if (selected.getId() == null || selected.getId().isEmpty()) { selected = null; } } @JsonIgnore public Account getSelectedItem() { return selected; } }