package games.strategy.engine.data; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.Properties; import games.strategy.debug.ClientLogger; import games.strategy.engine.display.IDisplay; import games.strategy.engine.gamePlayer.IRemotePlayer; import games.strategy.engine.history.DelegateHistoryWriter; import games.strategy.engine.history.History; import games.strategy.engine.history.HistoryWriter; import games.strategy.engine.history.IDelegateHistoryWriter; import games.strategy.engine.message.ChannelMessenger; import games.strategy.engine.message.unifiedmessenger.UnifiedMessenger; import games.strategy.engine.random.IRandomSource; import games.strategy.engine.random.IRandomStats.DiceType; import games.strategy.net.IServerMessenger; import games.strategy.net.Node; import games.strategy.sound.ISound; import games.strategy.triplea.ui.display.ITripleADisplay; /** * Not for actual use, suitable for testing. Never returns messages, but can get * random and implements changes immediately. * * @deprecated Use mock objects instead. This TestDelegateBridge object has a substantial amount of implementation and * coupling to the rest of the system, do not build on it. */ @Deprecated public class TestDelegateBridge implements ITestDelegateBridge { private final GameData gameData; private PlayerID playerId; private String stepName = "no name specified"; private IDisplay dummyDisplay; private final ISound soundChannel = mock(ISound.class); private IRandomSource randomSource; private final IDelegateHistoryWriter delegateHistoryWriter; private IRemotePlayer remotePlayer; /** Creates new TestDelegateBridge. */ public TestDelegateBridge(final GameData data, final PlayerID id, final IDisplay dummyDisplay) { gameData = data; playerId = id; this.dummyDisplay = dummyDisplay; final History history = new History(gameData); final HistoryWriter historyWriter = new HistoryWriter(history); historyWriter.startNextStep("", "", PlayerID.NULL_PLAYERID, ""); final IServerMessenger messenger = mock(IServerMessenger.class); try { when(messenger.getLocalNode()).thenReturn(new Node("dummy", InetAddress.getLocalHost(), 0)); } catch (final UnknownHostException e) { ClientLogger.logQuietly(e); } when(messenger.isServer()).thenReturn(true); final ChannelMessenger channelMessenger = new ChannelMessenger(new UnifiedMessenger(messenger)); delegateHistoryWriter = new DelegateHistoryWriter(channelMessenger); } @Override public void setDisplay(final ITripleADisplay display) { dummyDisplay = display; } /** * Delegates should not use random data that comes from any other source. */ @Override public int getRandom(final int max, final PlayerID player, final DiceType diceType, final String annotation) { return randomSource.getRandom(max, annotation); } @Override public int[] getRandom(final int max, final int count, final PlayerID player, final DiceType diceType, final String annotation) { return randomSource.getRandom(max, count, annotation); } /** * Changing the player has the effect of commiting the current transaction. * Player is initialized to the player specified in the xml data. */ @Override public void setPlayerID(final PlayerID playerId) { this.playerId = playerId; } public boolean inTransaction() { return false; } @Override public PlayerID getPlayerID() { return playerId; } @Override public void addChange(final Change change) { gameData.performChange(change); } @Override public void setStepName(final String name) { setStepName(name, false); } @Override public void setStepName(final String name, final boolean doNotChangeSequence) { stepName = name; if (!doNotChangeSequence) { gameData.acquireWriteLock(); try { final int length = gameData.getSequence().size(); int i = 0; while (i < length && gameData.getSequence().getStep().getName().indexOf(name) == -1) { gameData.getSequence().next(); i++; } if (i > +length && gameData.getSequence().getStep().getName().indexOf(name) == -1) { throw new IllegalStateException("Step not found: " + name); } } finally { gameData.releaseWriteLock(); } } } @Override public String getStepName() { return stepName; } @Override public IDelegateHistoryWriter getHistoryWriter() { return delegateHistoryWriter; } @Override public IRemotePlayer getRemotePlayer() { return remotePlayer; } @Override public IRemotePlayer getRemotePlayer(final PlayerID id) { return remotePlayer; } @Override public IDisplay getDisplayChannelBroadcaster() { return dummyDisplay; } @Override public ISound getSoundChannelBroadcaster() { return soundChannel; } @Override public Properties getStepProperties() { return new Properties(); } @Override public void leaveDelegateExecution() {} @Override public void enterDelegateExecution() {} @Override public void setRandomSource(final IRandomSource randomSource) { this.randomSource = randomSource; } @Override public void setRemote(final IRemotePlayer remote) { remotePlayer = remote; } @Override public void stopGameSequence() {} @Override public GameData getData() { return gameData; } }