1 package org.objectweb.celtix.tools.common.toolspec.parser; 2 3 import java.util.ArrayList ; 4 import java.util.Iterator ; 5 import java.util.List ; 6 import java.util.logging.Level ; 7 import java.util.logging.Logger ; 8 9 import org.w3c.dom.Element ; 10 import org.w3c.dom.NodeList ; 11 12 import org.objectweb.celtix.common.logging.LogUtils; 13 import org.objectweb.celtix.tools.common.toolspec.Tool; 14 15 public class OptionGroup implements TokenConsumer { 16 17 private static final Logger LOG = LogUtils.getL7dLogger(OptionGroup.class); 18 private final Element element; 19 20 private final List <Object > options = new ArrayList <Object >(); 21 22 public OptionGroup(Element el) { 23 this.element = el; 24 NodeList optionEls = element.getElementsByTagNameNS(Tool.TOOL_SPEC_PUBLIC_ID, "option"); 25 26 for (int i = 0; i < optionEls.getLength(); i++) { 27 options.add(new Option((Element )optionEls.item(i))); 28 } 29 } 30 31 public boolean accept(TokenInputStream args, Element result, ErrorVisitor errors) { 32 if (LOG.isLoggable(Level.INFO)) { 33 LOG.info("Accepting token stream for optionGroup: " + this + ", tokens are now " + args 34 + ", running through " + options.size() + " options"); 35 } 36 boolean accepted = false; 39 40 for (Iterator it = options.iterator(); it.hasNext();) { 41 Option option = (Option)it.next(); 42 43 if (option.accept(args, result, errors)) { 44 if (LOG.isLoggable(Level.INFO)) { 45 LOG.info("Option " + option + " accepted the token"); 46 } 47 accepted = true; 48 break; 49 } 50 } 51 if (!accepted) { 52 if (LOG.isLoggable(Level.INFO)) { 53 LOG.info("No option accepted the token, returning"); 54 } 55 return false; 56 } 57 58 return true; 59 } 60 61 public boolean isSatisfied(ErrorVisitor errors) { 62 for (Iterator it = options.iterator(); it.hasNext();) { 64 if (!((Option)it.next()).isSatisfied(errors)) { 65 return false; 66 } 67 } 68 return true; 69 } 70 71 public String getId() { 72 return element.getAttribute("id"); 73 } 74 75 public String toString() { 76 if (element.hasAttribute("id")) { 77 return getId(); 78 } else { 79 return super.toString(); 80 } 81 } 82 } 83 | Popular Tags |