All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.robolectric.res.ResourceTable Maven / Gradle / Ivy

package org.robolectric.res;

import org.jetbrains.annotations.NotNull;
import org.robolectric.res.builder.XmlBlock;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public abstract class ResourceTable {

  public abstract Integer getResourceId(ResName resName);

  public abstract ResName getResName(int resourceId);

  public abstract TypedResource getValue(int resId, String qualifiers);

  public abstract TypedResource getValue(@NotNull ResName resName, String qualifiers) ;

  public abstract XmlBlock getXml(ResName resName, String qualifiers);

  public abstract InputStream getRawValue(ResName resName, String qualifiers);

  public abstract InputStream getRawValue(int resId, String qualifiers);

  public abstract boolean hasValue(ResName resName, String qualifiers);

  public abstract void addResource(int resId, String type, String name);

  public abstract void receive(Visitor visitor);

  @NotNull
  public List grep(String regex) {
    return grep(Pattern.compile(regex));
  }

  @NotNull
  public List grep(final Pattern pattern) {
    final ArrayList matches = new ArrayList<>();
    receive(new Visitor() {
      @Override
      public void visit(ResName resName, Iterable items) {
        boolean match = pattern.matcher(resName.getFullyQualifiedName()).find();
        if (!match && resName.type.equals("style")) {
          for (TypedResource typedResource : items) {
            TypedResource style = (TypedResource) typedResource;
            if (style.getData().grep(pattern)) {
              match = true;
              break;
            }
          }
        }

        if (match) {
          for (TypedResource typedResource : items) {
            matches.add(typedResource);
          }
        }
      }
    });
    return matches;
  }

  interface Visitor {
    void visit(ResName key, Iterable values);
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy