package magic.model.event; import magic.model.MagicSource; import magic.model.ARG; import java.util.regex.Matcher; import java.util.LinkedList; import java.util.List; public class MagicRegularCostEvent implements MagicMatchedCostEvent { private static final String COMMA = "\\s*,\\s*"; private final Matcher arg; private final MagicCostEvent costEvent; public MagicRegularCostEvent(final String aCost) { final String cost = capitalize( aCost.replaceAll("\\.$","") .replaceAll("\\b(T|t)his " + ARG.THING + "( |\\.|'s|\\b)" + ARG.EVENQUOTES, "SN$3") ); costEvent = MagicCostEvent.build(cost); arg = costEvent.matched(cost); } @Override public MagicEvent getEvent(final MagicSource source) { return costEvent.toEvent(arg, source); } @Override public boolean isIndependent() { return costEvent.isIndependent(); } public static List<MagicMatchedCostEvent> buildCast(final String costs) { final String costsWithMana = costs.matches(".*" + ARG.MANACOST + ".*") ? costs : costs + ", {0}"; return build(costsWithMana.replaceFirst(ARG.MANACOST, "alt mana cost $1")); } public static List<MagicMatchedCostEvent> build(final String costs) { final List<MagicMatchedCostEvent> matched = new LinkedList<MagicMatchedCostEvent>(); final String[] splitCosts = costs.split(COMMA); for (String cost : splitCosts) { matched.add(new MagicRegularCostEvent(cost)); } return matched; } private static String capitalize(final String text) { return Character.toUpperCase(text.charAt(0)) + text.substring(1); } public static final MagicRegularCostEvent NONE = new MagicRegularCostEvent("{0}"); }