|
From: <mp...@us...> - 2012-01-25 08:56:35
|
Revision: 9580
http://freecol.svn.sourceforge.net/freecol/?rev=9580&view=rev
Author: mpope
Date: 2012-01-25 08:56:28 +0000 (Wed, 25 Jan 2012)
Log Message:
-----------
Fix BR#3477516 where new region naming failed for units that had moved on.
Modified Paths:
--------------
freecol/trunk/src/net/sf/freecol/client/control/InGameInputHandler.java
freecol/trunk/src/net/sf/freecol/common/networking/NewRegionNameMessage.java
freecol/trunk/src/net/sf/freecol/common/networking/ServerAPI.java
freecol/trunk/src/net/sf/freecol/server/control/InGameController.java
freecol/trunk/src/net/sf/freecol/server/model/ServerUnit.java
Modified: freecol/trunk/src/net/sf/freecol/client/control/InGameInputHandler.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/client/control/InGameInputHandler.java 2012-01-24 08:49:38 UTC (rev 9579)
+++ freecol/trunk/src/net/sf/freecol/client/control/InGameInputHandler.java 2012-01-25 08:56:28 UTC (rev 9580)
@@ -1046,11 +1046,11 @@
NewRegionNameMessage message = new NewRegionNameMessage(game, element);
String name = message.getNewRegionName();
Region region = message.getRegion(game);
- Unit unit = message.getUnit(game);
+ Tile tile = message.getTile(game);
if (name == null || region == null) return null;
// Offer to name the region.
- new NewRegionNameSwingTask(unit, region, message.getNewRegionName())
+ new NewRegionNameSwingTask(tile, region, message.getNewRegionName())
.invokeLater();
return null;
}
@@ -1436,7 +1436,7 @@
class NewRegionNameSwingTask extends NoResultCanvasSwingTask {
- private Unit unit;
+ private Tile tile;
private Region region;
private String defaultName;
@@ -1444,25 +1444,24 @@
/**
* Constructor.
*
- * @param unit The <code>Unit</code> that discovers the region.
+ * @param tile The <code>Tile</code> where the region is discovered.
* @param region The <code>Region</code> that is discovered.
* @param defaultName The default name of the new region.
*/
- public NewRegionNameSwingTask(Unit unit, Region region,
+ public NewRegionNameSwingTask(Tile tile, Region region,
String defaultName) {
- this.unit = unit;
+ this.tile = tile;
this.region = region;
this.defaultName = defaultName;
}
protected void doNoResultWork() {
- String name = gui.showInputDialog((unit == null) ? null
- : unit.getTile(),
+ String name = gui.showInputDialog(tile,
StringTemplate.template("nameRegion.text")
.addName("%type%", Messages.message(region.getLabel())),
defaultName, "ok", null, false);
if (name == null || "".equals(name)) name = defaultName;
- getFreeColClient().askServer().newRegionName(region, unit, name);
+ getFreeColClient().askServer().newRegionName(region, tile, name);
}
}
Modified: freecol/trunk/src/net/sf/freecol/common/networking/NewRegionNameMessage.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/common/networking/NewRegionNameMessage.java 2012-01-24 08:49:38 UTC (rev 9579)
+++ freecol/trunk/src/net/sf/freecol/common/networking/NewRegionNameMessage.java 2012-01-25 08:56:28 UTC (rev 9580)
@@ -23,7 +23,6 @@
import net.sf.freecol.common.model.Player;
import net.sf.freecol.common.model.Region;
import net.sf.freecol.common.model.Tile;
-import net.sf.freecol.common.model.Unit;
import net.sf.freecol.server.FreeColServer;
import net.sf.freecol.server.model.ServerPlayer;
@@ -41,9 +40,9 @@
private String regionId;
/**
- * The ID of the unit that discovered the region.
+ * The tile where the region is discovered.
*/
- private String unitId;
+ private String tileId;
/**
* The new name.
@@ -55,13 +54,13 @@
* supplied name.
*
* @param region The <code>Region</code> being discovered.
- * @param unit The <code>Unit</code> that is discovering.
+ * @param tile The <code>Tile</code> where the region is discovered.
* @param newRegionName The default new region name.
*/
- public NewRegionNameMessage(Region region, Unit unit,
+ public NewRegionNameMessage(Region region, Tile tile,
String newRegionName) {
this.regionId = region.getId();
- this.unitId = unit.getId();
+ this.tileId = tile.getId();
this.newRegionName = newRegionName;
}
@@ -74,7 +73,7 @@
*/
public NewRegionNameMessage(Game game, Element element) {
this.regionId = element.getAttribute("region");
- this.unitId = element.getAttribute("unit");
+ this.tileId = element.getAttribute("tile");
this.newRegionName = element.getAttribute("newRegionName");
}
@@ -90,14 +89,14 @@
}
/**
- * Public accessor for the unit.
+ * Public accessor for the tile.
*
- * @param game The <code>Game</code> to look for a unit in.
- * @return The unit of this message.
+ * @param game The <code>Game</code> to look for a tile in.
+ * @return The tile of this message.
*/
- public Unit getUnit(Game game) {
- Object o = game.getFreeColGameObjectSafely(unitId);
- return (o instanceof Unit) ? (Unit) o : null;
+ public Tile getTile(Game game) {
+ Object o = game.getFreeColGameObjectSafely(tileId);
+ return (o instanceof Tile) ? (Tile)o : null;
}
/**
@@ -120,21 +119,18 @@
*/
public Element handle(FreeColServer server, Player player,
Connection connection) {
+ Game game = server.getGame();
ServerPlayer serverPlayer = server.getPlayer(connection);
- Unit unit;
- try {
- unit = server.getUnitSafely(unitId, serverPlayer);
- } catch (Exception e) {
- return DOMMessage.clientError(e.getMessage());
+
+ Tile tile = getTile(game);
+ if (!tile.isExploredBy(player)) {
+ return DOMMessage.clientError("Can not claim discovery in unexplored tile: " + tileId);
}
- Tile tile = unit.getTile();
- if (tile == null) {
- return DOMMessage.clientError("Unit is not on the map: " + unitId);
- }
+
Region region = tile.getDiscoverableRegion();
if (region == null) {
- return DOMMessage.clientError("No discoverable region for: "
- + unitId);
+ return DOMMessage.clientError("No discoverable region in: "
+ + tileId);
}
if (region.isPacific()) {
return DOMMessage.clientError("Can not rename the Pacific!");
@@ -146,7 +142,7 @@
// Do the discovery
return server.getInGameController()
- .setNewRegionName(serverPlayer, unit, region, newRegionName);
+ .setNewRegionName(serverPlayer, region, newRegionName);
}
/**
@@ -157,7 +153,7 @@
public Element toXMLElement() {
Element result = createNewRootElement(getXMLElementTagName());
result.setAttribute("region", regionId);
- result.setAttribute("unit", unitId);
+ result.setAttribute("tile", tileId);
result.setAttribute("newRegionName", newRegionName);
return result;
}
Modified: freecol/trunk/src/net/sf/freecol/common/networking/ServerAPI.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/common/networking/ServerAPI.java 2012-01-24 08:49:38 UTC (rev 9579)
+++ freecol/trunk/src/net/sf/freecol/common/networking/ServerAPI.java 2012-01-25 08:56:28 UTC (rev 9580)
@@ -894,12 +894,12 @@
* Server query-response for naming a new region.
*
* @param region The <code>Region</code> that is being discovered.
- * @param unit The <code>Unit</code> that discovered the region.
+ * @param tile The <code>Tile</code> where the region is discovered.
* @param name The new region name.
* @return True if the server interaction succeeded.
*/
- public boolean newRegionName(Region region, Unit unit, String name) {
- return askHandling(new NewRegionNameMessage(region, unit, name),
+ public boolean newRegionName(Region region, Tile tile, String name) {
+ return askHandling(new NewRegionNameMessage(region, tile, name),
null, null);
}
Modified: freecol/trunk/src/net/sf/freecol/server/control/InGameController.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/server/control/InGameController.java 2012-01-24 08:49:38 UTC (rev 9579)
+++ freecol/trunk/src/net/sf/freecol/server/control/InGameController.java 2012-01-25 08:56:28 UTC (rev 9580)
@@ -1691,12 +1691,11 @@
* Set region name.
*
* @param serverPlayer The <code>ServerPlayer</code> discovering.
- * @param unit The <code>Unit</code> discovering the region.
* @param region The <code>Region</code> to discover.
* @param name The new region name.
* @return An <code>Element</code> encapsulating this action.
*/
- public Element setNewRegionName(ServerPlayer serverPlayer, Unit unit,
+ public Element setNewRegionName(ServerPlayer serverPlayer,
Region region, String name) {
ChangeSet cs = new ChangeSet();
cs.addRegion(serverPlayer, region, name);
Modified: freecol/trunk/src/net/sf/freecol/server/model/ServerUnit.java
===================================================================
--- freecol/trunk/src/net/sf/freecol/server/model/ServerUnit.java 2012-01-24 08:49:38 UTC (rev 9579)
+++ freecol/trunk/src/net/sf/freecol/server/model/ServerUnit.java 2012-01-25 08:56:28 UTC (rev 9580)
@@ -935,7 +935,7 @@
String defaultName = Messages.getDefaultRegionName(serverPlayer,
region.getType());
cs.add(See.only(serverPlayer), ChangePriority.CHANGE_LATE,
- new NewRegionNameMessage(region, this, defaultName));
+ new NewRegionNameMessage(region, newTile, defaultName));
// Set the default name to prevent multiple attempts.
region.setName(defaultName);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|