/*
* PointBuyMethod.java
* Copyright 2002 (C) Greg Bingleman <byngl@hotmail.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Created on August 17, 2002, 11:45 PM
*
* $Id$
*/
package pcgen.core;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import pcgen.cdom.base.BonusContainer;
import pcgen.cdom.base.Loadable;
import pcgen.core.bonus.BonusObj;
/**
* {@code PointBuyMethod}.
*
* @author Greg Bingleman <byngl@hotmail.com>
*/
public final class PointBuyMethod implements BonusContainer, Loadable
{
private URI sourceURI;
private String methodName = "";
private String pointFormula = "0";
private List<BonusObj> bonusList;
@Override
public URI getSourceURI()
{
return sourceURI;
}
@Override
public void setSourceURI(URI source)
{
sourceURI = source;
}
public String getPointFormula()
{
return pointFormula;
}
public void setPointFormula(final String argFormula)
{
pointFormula = argFormula;
}
@Override
public String toString()
{
return methodName;
}
public String getDescription()
{
String desc = methodName;
if (!pointFormula.equals("0"))
{
desc += " (" + pointFormula + ')';
}
return desc;
}
public void addBonus(BonusObj bon)
{
if (bonusList == null)
{
bonusList = new ArrayList<>();
}
bonusList.add(bon);
}
public Collection<BonusObj> getBonuses()
{
if (bonusList == null)
{
return Collections.emptyList();
}
return Collections.unmodifiableList(bonusList);
}
/**
* returns all BonusObj's that are "active"
*
* @param pc
* TODO
* @return active bonuses
*/
@Override
public List<BonusObj> getActiveBonuses(PlayerCharacter pc)
{
final List<BonusObj> aList = new ArrayList<>();
for (BonusObj bonus : getBonuses())
{
if (pc.isApplied(bonus))
{
aList.add(bonus);
}
}
return aList;
}
/**
* Sets all the BonusObj's to "active"
*
* @param aPC
*/
@Override
public void activateBonuses(final PlayerCharacter aPC)
{
for (BonusObj bonus : getBonuses())
{
aPC.setApplied(bonus, bonus.qualifies(aPC, null));
}
}
@Override
public String getDisplayName()
{
return methodName;
}
@Override
public String getKeyName()
{
return getDisplayName();
}
@Override
public String getLSTformat()
{
return getDisplayName();
}
@Override
public boolean isInternal()
{
return false;
}
@Override
public boolean isType(String type)
{
return false;
}
@Override
public void setName(String name)
{
methodName = name;
}
}