blob: ca8157543bc6f1bb1f088a11af05d07460fdef63 [file] [log] [blame]
package org.robolectric.res;
import org.jetbrains.annotations.NotNull;
import org.robolectric.res.builder.XmlBlock;
import java.io.IOException;
import java.io.InputStream;
/**
* A {@link ResourceTable} for a single package, e.g: "android" / ox01
*/
public class PackageResourceTable implements ResourceTable {
final ResBunch data = new ResBunch();
final ResBundle xmlDocuments = new ResBundle();
final ResBundle rawResources = new ResBundle();
private final ResourceIndex resourceIndex;
PackageResourceTable(String packageName) {
this.resourceIndex = new ResourceIndex(packageName);;
}
public String getPackageName() {
return resourceIndex.getPackageName();
}
@Override
public Integer getResourceId(ResName resName) {
return resourceIndex.getResourceId(resName);
}
@Override
public ResName getResName(int resourceId) {
return resourceIndex.getResName(resourceId);
}
@Override
public TypedResource getValue(@NotNull ResName resName, String qualifiers) {
return data.get(resName, qualifiers);
}
@Override
public TypedResource getValue(int resId, String qualifiers) {
return data.get(getResName(resId), qualifiers);
}
public XmlBlock getXml(ResName resName, String qualifiers) {
TypedResource typedResource = xmlDocuments.get(resName, qualifiers);
return typedResource == null ? null : (XmlBlock) typedResource.getData();
}
public InputStream getRawValue(ResName resName, String qualifiers) {
TypedResource typedResource = rawResources.get(resName, qualifiers);
FsFile file = typedResource == null ? null : (FsFile) typedResource.getData();
try {
return file == null ? null : file.getInputStream();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public InputStream getRawValue(int resId, String qualifiers) {
return getRawValue(getResName(resId), qualifiers);
}
public int getPackageIdentifier() {
return resourceIndex.getPackageIdentifier();
}
@Override
public void addResource(int resId, String type, String name) {
resourceIndex.addResource(resId, type, name);
}
@Override
public void receive(Visitor visitor) {
}
@Override
public boolean hasValue(ResName resName, String qualifiers) {
return getValue(resName, qualifiers) != null
|| getXml(resName, qualifiers) != null
|| getRawValue(resName, qualifiers) != null;
}
}