package games.strategy.engine.data; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; public class ProductionFrontier extends DefaultNamed implements Iterable<ProductionRule> { private static final long serialVersionUID = -5967251608158552892L; private final List<ProductionRule> m_rules = new ArrayList<>(); private List<ProductionRule> m_cachedRules; /** * Creates new ProductionFrontier. * * @param name * name of production frontier * @param data * game data */ public ProductionFrontier(final String name, final GameData data) { super(name, data); } public void addRule(final ProductionRule rule) { if (m_rules.contains(rule)) { throw new IllegalStateException("Rule already added:" + rule); } m_rules.add(rule); m_cachedRules = null; } public void removeRule(final ProductionRule rule) { if (!m_rules.contains(rule)) { throw new IllegalStateException("Rule not present:" + rule); } m_rules.remove(rule); m_cachedRules = null; } public List<ProductionRule> getRules() { if (m_cachedRules == null) { m_cachedRules = Collections.unmodifiableList(m_rules); } return m_cachedRules; } @Override public Iterator<ProductionRule> iterator() { return getRules().iterator(); } }