/** * 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 * MERCHANTLIMIT 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.mission; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import net.sf.freecol.common.model.FreeColGameObject; import net.sf.freecol.common.model.Game; import net.sf.freecol.common.model.Player; import net.sf.freecol.common.model.Unit; import org.w3c.dom.Element; /** * The AbstractMission provides basic methods for building Missions. */ public abstract class AbstractMission extends FreeColGameObject implements Mission { /** * The Unit this mission was assigned to. Must not be null. */ private Unit unit; /** * The number of times this mission should be repeated. Defaults * to 1. */ private int repeatCount = 1; /** * The number of turns this mission will take to carry out. In * most cases, this will be zero, since most missions do not take * a fixed number of turns to carry out. Building TileImprovements * and learning in school would be exceptions, however. */ private int turnCount; /** * Returns the Unit this mission was assigned to. * * @return an <code>Unit</code> value */ public final Unit getUnit() { return unit; } /** * Creates a new <code>AbstractMission</code> instance. * * @param game a <code>Game</code> value */ public AbstractMission(Game game) { super(game); } /** * Creates a new <code>AbstractMission</code> instance. * * @param game a <code>Game</code> value * @param in a <code>XMLStreamReader</code> value * @exception XMLStreamException if an error occurs */ public AbstractMission(Game game, XMLStreamReader in) throws XMLStreamException { super(game, in); } /** * Creates a new <code>AbstractMission</code> instance. * * @param game a <code>Game</code> value * @param e an <code>Element</code> value */ public AbstractMission(Game game, Element e) { super(game, e); readFromXMLElement(e); } /** * Creates a new <code>AbstractMission</code> instance. * * @param game a <code>Game</code> value * @param id a <code>String</code> value */ public AbstractMission(Game game, String id) { super(game, id); } /** * Set the <code>Unit</code> value. * * @param newUnit The new Unit value. */ public final void setUnit(final Unit newUnit) { this.unit = newUnit; } /** * Get the <code>RepeatCount</code> value. * * @return an <code>int</code> value */ public final int getRepeatCount() { return repeatCount; } /** * Set the <code>RepeatCount</code> value. * * @param newRepeatCount The new RepeatCount value. */ public final void setRepeatCount(final int newRepeatCount) { this.repeatCount = newRepeatCount; } /** * Get the <code>TurnCount</code> value. * * @return an <code>int</code> value */ public final int getTurnCount() { return turnCount; } /** * Set the <code>TurnCount</code> value. * * @param newTurnCount The new TurnCount value. */ public final void setTurnCount(final int newTurnCount) { this.turnCount = newTurnCount; } /** * Returns true if the Unit this mission was assigned to is * neither null nor has been disposed, and the repeat count of the * mission is greater than zero. * * @return a <code>boolean</code> value */ public boolean isValid() { return unit != null && !unit.isDisposed() && repeatCount > 0; } /** * Returns true if this is a valid Mission for the given * Unit. This method always returns false and needs to be * overridden. * * @param unit an <code>Unit</code> value * @return false */ public static boolean isValidFor(Unit unit) { return false; } /** * {@inheritDoc} */ protected void toXMLImpl(XMLStreamWriter out, Player player, boolean showAll, boolean toSavedGame) throws XMLStreamException { toXML(out, getXMLElementTagName()); } /** * {@inheritDoc} */ protected void writeAttributes(XMLStreamWriter out) throws XMLStreamException { super.writeAttributes(out); out.writeAttribute("unit", unit.getId()); out.writeAttribute("turnCount", Integer.toString(turnCount)); out.writeAttribute("repeatCount", Integer.toString(repeatCount)); } /** * {@inheritDoc} */ protected void readAttributes(XMLStreamReader in) throws XMLStreamException { super.readAttributes(in); unit = getFreeColGameObject(in, "unit", Unit.class); turnCount = getAttribute(in, "turnCount", 0); repeatCount = getAttribute(in, "repeatCount", 1); } }