/**
* 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.client.gui.panel;
import net.sf.freecol.client.gui.i18n.Messages;
import net.sf.freecol.common.model.AbstractGoods;
import net.sf.freecol.common.model.AbstractUnit;
import net.sf.freecol.common.model.Player;
/**
* Can be used as a single choice for the
* {@link FreeColDialog#createChoiceDialog(String, String, List) choice dialog}.
*/
public class ChoiceItem<T> {
private String text;
private T object;
private boolean enabled;
/**
* Creates a new <code>ChoiceItem</code> with the
* given object.
*
* @param text The text that should be used to represent
* this choice.
* @param object The <code>Object</code> contained by this
* choice.
* @param enable Sets if the option should be enabled or not
*/
public ChoiceItem(String text, T object, boolean enable) {
this.text = text;
this.object = object;
this.enabled = enable;
}
/**
* Creates a new <code>ChoiceItem</code> with the
* given object.
*
* @param text The text that should be used to represent
* this choice.
* @param object The <code>Object</code> contained by this
* choice.
*/
public ChoiceItem(String text, T object) {
this(text, object, true);
}
/**
* Creates a new <code>ChoiceItem</code> with the
* given object.
*
* @param object The <code>Object</code> contained by this
* choice.
*/
public ChoiceItem(T object) {
this(Messages.message(object.toString()), object, true);
// Check to see if we can improve upon object.toString()
if(object instanceof AbstractGoods) {
this.text = ((AbstractGoods)object).getAmount() + " " + Messages.message(((AbstractGoods)object).getNameKey());
} else if (object instanceof AbstractUnit) {
this.text = Messages.message(((AbstractUnit)object).getId());
} else if (object instanceof Player) {
this.text = Messages.message(((Player)object).getRulerNameKey()) + " (" + Messages.message(((Player)object).getNationName()) + ")";
}
}
/**
* Gets the <code>Object</code> contained by this choice.
* @return The <code>Object</code>.
*/
public T getObject() {
return object;
}
/**
* Gets the choice as an <code>int</code>.
*
* @return The number representing this object.
* @exception ClassCastException if the {@link #getObject object} is
* not an <code>Integer</code>.
*/
public int getChoice() {
return ((Integer) object).intValue();
}
/**
* Checks if the option should be enabled or not
* @return enable status
*/
public boolean isEnabled(){
return this.enabled;
}
/**
* Gets a textual presentation of this object.
* @return The <code>text</code> set in the constructor.
*/
@Override
public String toString() {
return text;
}
}