package tc.oc.pgm.eventrules; import java.util.logging.Logger; import org.jdom2.Document; import org.jdom2.Element; import tc.oc.pgm.map.MapModule; import tc.oc.pgm.map.MapModuleContext; import tc.oc.pgm.match.Match; import tc.oc.pgm.match.MatchModuleFactory; import tc.oc.pgm.module.ModuleDescription; import tc.oc.pgm.utils.XMLUtils; import tc.oc.pgm.xml.InvalidXMLException; import static tc.oc.commons.core.exception.LambdaExceptionUtils.rethrowConsumer; @ModuleDescription(name="Event Rules") public class EventRuleModule implements MapModule, MatchModuleFactory<EventRuleMatchModule> { protected final EventRuleContext eventRuleContext; public EventRuleModule(EventRuleContext eventRuleContext) { this.eventRuleContext = eventRuleContext; } public EventRuleContext eventRuleContext() { return eventRuleContext; } @Override public EventRuleMatchModule createMatchModule(Match match) { return new EventRuleMatchModule(match, this.eventRuleContext); } // --------------------- // ---- XML Parsing ---- // --------------------- public static EventRuleModule parse(MapModuleContext context, Logger logger, Document doc) throws InvalidXMLException { final EventRuleContext ruleContext = new EventRuleContext(); final EventRuleParser ruleParser = new EventRuleParser(context, ruleContext); for(Element regionRootElement : XMLUtils.getChildren(doc.getRootElement(), "filters", "regions")) { for(Element applyEl : regionRootElement.getChildren("apply")) { ruleParser.parse(applyEl); } } return new EventRuleModule(ruleContext); } @Override public void postParse(MapModuleContext context, Logger logger, Document doc) throws InvalidXMLException { context.features().all(EventRule.class).forEach(rethrowConsumer(rule -> { if(rule.lendKit() && !rule.kit().isRemovable()) { throw new InvalidXMLException("Specified lend-kit is not removable", context.features().definitionNode(rule)); } })); } }