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