StaxPluralsLoader.java revision 793ee1db287b053127b6e60891c3dbfd1ce4bc54
1package org.robolectric.res;
2
3import javax.xml.stream.XMLStreamException;
4import javax.xml.stream.XMLStreamReader;
5import java.util.ArrayList;
6import java.util.List;
7
8public class StaxPluralsLoader extends StaxLoader {
9  protected String name;
10  private String quantity;
11  private final List<Plural> plurals = new ArrayList<>();
12
13  public StaxPluralsLoader(PackageResourceTable resourceTable, String attrType, ResType charSequence) {
14    super(resourceTable, attrType, charSequence);
15
16    addHandler("item", new NodeHandler() {
17      private final StringBuilder buf = new StringBuilder();
18
19      @Override
20      public void onStart(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException {
21        quantity = xml.getAttributeValue(null, "quantity");
22        buf.setLength(0);
23      }
24
25      @Override
26      public void onCharacters(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException {
27        buf.append(xml.getText());
28      }
29
30      @Override
31      public void onEnd(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException {
32        plurals.add(new Plural(quantity, buf.toString()));
33      }
34
35      @Override
36      NodeHandler findMatchFor(XMLStreamReader xml) {
37        return new TextCollectingNodeHandler(buf);
38      }
39    });
40  }
41
42  @Override
43  public void onStart(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException {
44    name = xml.getAttributeValue(null, "name");
45  }
46
47  @Override
48  public void onEnd(XMLStreamReader xml, XmlContext xmlContext) throws XMLStreamException {
49    resourceTable.addResource(attrType, name, new PluralRules(new ArrayList<>(plurals), resType, xmlContext));
50    plurals.clear();
51  }
52}
53