KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > objectweb > celtix > tools > common > toolspec > parser > OptionGroup


1 package org.objectweb.celtix.tools.common.toolspec.parser;
2
3 import java.util.ArrayList JavaDoc;
4 import java.util.Iterator JavaDoc;
5 import java.util.List JavaDoc;
6 import java.util.logging.Level JavaDoc;
7 import java.util.logging.Logger JavaDoc;
8
9 import org.w3c.dom.Element JavaDoc;
10 import org.w3c.dom.NodeList JavaDoc;
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 JavaDoc LOG = LogUtils.getL7dLogger(OptionGroup.class);
18     private final Element JavaDoc element;
19
20     private final List JavaDoc<Object JavaDoc> options = new ArrayList JavaDoc<Object JavaDoc>();
21
22     public OptionGroup(Element JavaDoc el) {
23         this.element = el;
24         NodeList JavaDoc 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 JavaDoc)optionEls.item(i)));
28         }
29     }
30
31     public boolean accept(TokenInputStream args, Element JavaDoc 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         // Give all the options the chance to exclusively consume the given
37
// string:
38
boolean accepted = false;
39
40         for (Iterator JavaDoc 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         // Return conjunction of all isSatisfied results from every option
63
for (Iterator JavaDoc 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 JavaDoc getId() {
72         return element.getAttribute("id");
73     }
74
75     public String JavaDoc toString() {
76         if (element.hasAttribute("id")) {
77             return getId();
78         } else {
79             return super.toString();
80         }
81     }
82 }
83
Popular Tags