package fr.lyrgard.hexScape.gui.desktop.view.common.newGame;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.swing.AbstractListModel;
import fr.lyrgard.hexScape.model.player.Player;
public class PlayerListModel extends AbstractListModel<Player> {
private static final long serialVersionUID = -4581991373186072190L;
private static final PlayerNameComparator comparator = new PlayerNameComparator();
private List<Player> players;
public PlayerListModel() {
this.players = new ArrayList<Player>();
}
public PlayerListModel(Collection<Player> placeholders) {
this.players = new ArrayList<Player>(placeholders);
}
@Override
public int getSize() {
return players.size();
}
@Override
public Player getElementAt(int index) {
return players.get(index);
}
public void setPlayers(Collection<Player> players) {
int oldSize = players.size();
this.players = new ArrayList<Player>(players);
Collections.sort(this.players, comparator);
fireContentsChanged(this, 0, Math.max(oldSize, players.size()));
}
public void removePlayer(Player player) {
players.remove(player);
setPlayers(players);
}
public void removeAllPlayers() {
players.clear();
setPlayers(players);
}
public void addPlayer(Player player) {
players.add(player);
setPlayers(players);
}
public void redraw() {
fireContentsChanged(this, 0, players.size());
}
private static class PlayerNameComparator implements Comparator<Player> {
public int compare(Player p1, Player p2) {
if (p1 == null) {
if (p2 == null) {
return 0;
} else {
return -1;
}
} else {
boolean p1Free = p1.getUserId() == null;
boolean p2Free = p2.getUserId() == null;
if (p1Free == p2Free) {
return p1.getName().compareTo(p2.getName());
} else {
if (p1Free) {
return 1;
} else {
return -1;
}
}
}
}
}
}