/** * Copyright (C) 2002-2012 The FreeCol Team * * This file is part of FreeCol. * * FreeCol is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * FreeCol is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FreeCol. If not, see <http://www.gnu.org/licenses/>. */ package net.sf.freecol.common.model; import org.freecolandroid.xml.stream.XMLStreamException; import org.freecolandroid.xml.stream.XMLStreamReader; import org.freecolandroid.xml.stream.XMLStreamWriter; import net.sf.freecol.common.model.Player.Stance; import org.w3c.dom.Element; /** * A summary of an enemy nation. */ public class NationSummary extends FreeColObject { /** * The number of settlements this player has. */ private String numberOfSettlements; /** * The number of units this (European) player has. */ private String numberOfUnits; /** * The military strength of this (European) player. */ private String militaryStrength; /** * The naval strength of this (European) player. */ private String navalStrength; /** * The stance of the player toward the requesting player. */ private String stance; /** * The gold this (European) player has. */ private String gold; /** * The (European) player SoL. */ private String soL; /** * The number of founding fathers this (European) player has. */ private String foundingFathers; /** * The tax rate of this (European) player. */ private String tax; /** * Creates a nation summary for the specified player. * * @param player The <code>Player</code> the player to create the * summary of. * @param requester The <code>Player</code> making the request. */ public NationSummary(Player player, Player requester) { setId(""); numberOfSettlements = Integer.toString(player.getSettlements().size()); Stance sta = player.getStance(requester); stance = ((sta == Stance.UNCONTACTED) ? Stance.PEACE : sta).toString(); if (player.isEuropean()) { CombatModel cm = player.getGame().getCombatModel(); int nUnits = 0, sMilitary = 0, sNaval = 0; for (Unit unit : player.getUnits()) { nUnits++; if (unit.isNaval()) { sNaval += cm.getOffencePower(unit, null); } else { sMilitary += cm.getOffencePower(unit, null); } } numberOfUnits = Integer.toString(nUnits); militaryStrength = Integer.toString(sMilitary); navalStrength = Integer.toString(sNaval); gold = Integer.toString(player.getGold()); if (player == requester || requester .hasAbility("model.ability.betterForeignAffairsReport")) { soL = Integer.toString(player.getSoL()); foundingFathers = Integer.toString(player.getFatherCount()); tax = String.valueOf(player.getTax()); } else { soL = null; foundingFathers = null; tax = null; } } else { numberOfUnits = militaryStrength = navalStrength = gold = "-1"; soL = foundingFathers = tax = null; } } /** * Creates a new <code>NationSummary</code> instance. * * @param element An <code>Element</code> value. */ public NationSummary(Element element) { readFromXMLElement(element); } // Trivial accessors public String getNumberOfSettlements() { return numberOfSettlements; } public String getNumberOfUnits() { return numberOfUnits; } public String getMilitaryStrength() { return militaryStrength; } public String getNavalStrength() { return navalStrength; } public Stance getStance() { return Enum.valueOf(Stance.class, stance); } public int getGold() { return Integer.parseInt(gold); } public String getFoundingFathers() { return foundingFathers; } public String getSoL() { return soL; } public String getTax() { return tax; } /** * This method writes an XML-representation of this object to the given * stream. * * @param out The target stream. * @throws XMLStreamException if there are any problems writing to the * stream. */ public void toXMLImpl(XMLStreamWriter out) throws XMLStreamException { super.toXML(out, getXMLElementTagName()); } /** * Write the attributes of this object to a stream. * * @param out The target stream. * @throws XMLStreamException if there are any problems writing * to the stream. */ @Override protected void writeAttributes(XMLStreamWriter out) throws XMLStreamException { super.writeAttributes(out); out.writeAttribute("numberOfSettlements", numberOfSettlements); out.writeAttribute("numberOfUnits", numberOfUnits); out.writeAttribute("militaryStrength", militaryStrength); out.writeAttribute("navalStrength", navalStrength); out.writeAttribute("stance", stance); out.writeAttribute("gold", gold); if (soL != null) { out.writeAttribute("SoL", soL); } if (foundingFathers != null) { out.writeAttribute("foundingFathers", foundingFathers); } if (tax != null) { out.writeAttribute("tax", tax); } } /** * Reads the attributes of this object from an XML stream. * * @param in The XML input stream. * @throws XMLStreamException if a problem was encountered * during parsing. */ @Override protected void readAttributes(XMLStreamReader in) throws XMLStreamException { super.readAttributes(in); numberOfSettlements = getAttribute(in, "numberOfSettlements", ""); numberOfUnits = getAttribute(in, "numberOfUnits", ""); militaryStrength = getAttribute(in, "militaryStrength", ""); navalStrength = getAttribute(in, "navalStrength", ""); stance = getAttribute(in, "stance", ""); gold = getAttribute(in, "gold", ""); soL = in.getAttributeValue(null, "SoL"); foundingFathers = in.getAttributeValue(null, "foundingFathers"); tax = in.getAttributeValue(null, "tax"); } /** * Gets the tag name of the root element representing this object. * * @return "nationSummary" */ public static String getXMLElementTagName() { return "nationSummary"; } }