package games.strategy.triplea.ui;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import games.strategy.engine.data.GameData;
import games.strategy.engine.data.PlayerID;
import games.strategy.engine.gamePlayer.IPlayerBridge;
import games.strategy.engine.history.HistoryNode;
import games.strategy.engine.history.Round;
import games.strategy.engine.pbem.ForumPosterComponent;
import games.strategy.engine.pbem.PBEMMessagePoster;
import games.strategy.triplea.delegate.GameStepPropertiesHelper;
import games.strategy.triplea.delegate.remote.IAbstractForumPosterDelegate;
public abstract class AbstractForumPosterPanel extends ActionPanel {
private static final long serialVersionUID = -5084680807785728744L;
protected JLabel m_actionLabel;
protected IPlayerBridge m_bridge;
protected PBEMMessagePoster m_poster;
protected TripleAFrame m_frame;
protected ForumPosterComponent m_forumPosterComponent;
public AbstractForumPosterPanel(final GameData data, final MapPanel map) {
super(data, map);
m_actionLabel = new JLabel();
}
private int getRound() {
int round = 0;
final Object[] pathFromRoot = getData().getHistory().getLastNode().getPath();
final Object[] arr$ = pathFromRoot;
final int len$ = arr$.length;
int i$ = 0;
do {
if (i$ >= len$) {
break;
}
final Object pathNode = arr$[i$];
final HistoryNode curNode = (HistoryNode) pathNode;
if (curNode instanceof Round) {
round = ((Round) curNode).getRoundNo();
break;
}
i$++;
} while (true);
return round;
}
@Override
public void display(final PlayerID id) {
super.display(id);
SwingUtilities.invokeLater(() -> {
m_actionLabel.setText(id.getName() + " " + getTitle());
// defer componenet layout until waitForEndTurn()
});
}
protected abstract boolean allowIncludeTerritorySummary();
protected abstract boolean allowIncludeTerritoryAllPlayersSummary();
protected abstract boolean allowIncludeProductionSummary();
protected abstract boolean allowDiceBattleDetails();
protected abstract boolean allowDiceStatistics();
protected abstract IAbstractForumPosterDelegate getForumPosterDelegate();
protected abstract boolean postTurnSummary(final PBEMMessagePoster poster, final boolean includeSaveGame);
protected abstract boolean getHasPostedTurnSummary();
protected abstract void setHasPostedTurnSummary(boolean posted);
protected abstract boolean skipPosting();
protected abstract String getTitle();
@Override
public abstract String toString();
protected void waitForDone(final TripleAFrame frame, final IPlayerBridge bridge) {
m_frame = frame;
m_bridge = bridge;
// Nothing to do if there are no PBEM messengers
m_poster = new PBEMMessagePoster(getData(), getCurrentPlayer(), getRound(), getTitle());
if (!m_poster.hasMessengers()) {
return;
}
if (skipPosting() || GameStepPropertiesHelper.isSkipPosting(getData())) {
return;
}
final boolean hasPosted = getHasPostedTurnSummary();
SwingUtilities.invokeLater(() -> {
removeAll();
add(m_actionLabel);
add(m_forumPosterComponent.layoutComponents(m_poster, getForumPosterDelegate(), m_bridge, m_frame, hasPosted,
allowIncludeTerritorySummary(), allowIncludeTerritoryAllPlayersSummary(), allowIncludeProductionSummary(),
allowDiceBattleDetails(), allowDiceStatistics()));
validate();
});
waitForRelease();
}
}