package plugin.exporttokens;
import java.util.Iterator;
import java.util.List;
import pcgen.cdom.enumeration.ObjectKey;
import pcgen.cdom.enumeration.SkillFilter;
import pcgen.cdom.reference.CDOMSingleRef;
import pcgen.core.PCStat;
import pcgen.core.PlayerCharacter;
import pcgen.core.Skill;
import pcgen.core.analysis.OutputNameFormatting;
import pcgen.core.analysis.SkillModifier;
import pcgen.core.analysis.SkillRankControl;
import pcgen.core.display.SkillDisplay;
import pcgen.io.ExportHandler;
import pcgen.io.exporttoken.Token;
/**
* @author karianna
* Class deals with SKILLLISTMODS Token
*/
public class SkillListModsToken extends Token
{
/** Token name */
public static final String TOKENNAME = "SKILLLISTMODS";
/**
* @see pcgen.io.exporttoken.Token#getTokenName()
*/
@Override
public String getTokenName()
{
return TOKENNAME;
}
/**
* @see pcgen.io.exporttoken.Token#getToken(java.lang.String, pcgen.core.PlayerCharacter, pcgen.io.ExportHandler)
*/
@Override
public String getToken(String tokenSource, PlayerCharacter pc,
ExportHandler eh)
{
StringBuilder returnString = new StringBuilder();
boolean needcomma = false;
final List<Skill> pcSkills = SkillDisplay.getSkillListInOutputOrder(pc);
Iterator<Skill> iter = pcSkills.iterator();
while (iter.hasNext())
{
Skill sk = iter.next();
if (!pc.includeSkill(sk, SkillFilter.Usable)
|| !sk.qualifies(pc, null))
{
iter.remove();
}
}
for (Skill aSkill : pcSkills)
{
int modSkill = -1;
CDOMSingleRef<PCStat> statref = aSkill.get(ObjectKey.KEY_STAT);
if (statref != null)
{
modSkill =
SkillModifier.modifier(aSkill, pc).intValue()
- pc.getStatModFor(statref.get());
}
if ((SkillRankControl.getTotalRank(pc, aSkill).intValue() > 0) || (modSkill > 0))
{
//final
int temp =
SkillModifier.modifier(aSkill, pc).intValue()
+ SkillRankControl.getTotalRank(pc, aSkill).intValue();
if (needcomma)
{
returnString.append(", ");
}
needcomma = true;
returnString.append(OutputNameFormatting.getOutputName(aSkill)).append(temp >= 0 ? " +" : " ")
.append(Integer.toString(temp));
}
}
return returnString.toString();
}
}