package games.strategy.triplea.ui;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.TreeSet;
import javax.swing.JPanel;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.data.Resource;
import games.strategy.engine.stats.AbstractStat;
import games.strategy.triplea.util.PlayerOrderComparator;
/**
* Hold some common things like GameData for stats panels and other tab panels.
*/
public abstract class AbstractStatPanel extends JPanel {
private static final long serialVersionUID = 1906611524937548809L;
protected GameData m_data;
/**
* Does not call initLayout() because initLayout may depend on some private tables being created with GameData first.
* So make sure you call initLayout() yourself.
*/
public AbstractStatPanel(final GameData data) {
m_data = data;
}
/**
* You will need to call this yourself.
*/
protected abstract void initLayout();
public abstract void setGameData(final GameData data);
/**
* @return all the alliances with more than one player.
*/
public Collection<String> getAlliances() {
final Collection<String> rVal = new TreeSet<>();
for (final String alliance : m_data.getAllianceTracker().getAlliances()) {
if (m_data.getAllianceTracker().getPlayersInAlliance(alliance).size() > 1) {
rVal.add(alliance);
}
}
return rVal;
}
public List<PlayerID> getPlayers() {
final List<PlayerID> players = new ArrayList<>(m_data.getPlayerList().getPlayers());
Collections.sort(players, new PlayerOrderComparator(m_data));
return players;
}
class ResourceStat extends AbstractStat {
final Resource m_resource;
public ResourceStat(final Resource resource) {
super();
m_resource = resource;
}
@Override
public String getName() {
return m_resource.getName();
}
@Override
public double getValue(final PlayerID player, final GameData data) {
return player.getResources().getQuantity(m_resource);
}
}
}