1package com.xtremelabs.robolectric.res;
2
3import org.w3c.dom.Node;
4public class DimenResourceLoader extends XpathResourceXmlLoader implements ResourceValueConverter {
5
6    private static final String[] UNITS = { "dp", "dip", "px", "sp", "mm" };
7
8    private ResourceReferenceResolver<Float> dimenResolver = new ResourceReferenceResolver<Float>("dimen");
9
10    public DimenResourceLoader(ResourceExtractor resourceExtractor) {
11        super(resourceExtractor, "/resources/dimen");
12    }
13
14    public float getValue(int resourceId) {
15        return dimenResolver.getValue(resourceExtractor.getResourceName(resourceId));
16    }
17
18    public float getValue(String resourceName, boolean isSystem) {
19        return getValue(resourceExtractor.getResourceId(resourceName, isSystem));
20    }
21
22    @Override
23    protected void processNode(Node node, String name, boolean isSystem) {
24        dimenResolver.processResource(name, node.getTextContent(), this, isSystem);
25    }
26
27    @Override
28    public Object convertRawValue(String rawValue) {
29    	int end = rawValue.length();
30    	for ( int i = 0; i < UNITS.length; i++ ) {
31    		int index = rawValue.indexOf(UNITS[i]);
32    		if ( index >= 0 && end > index ) {
33    			end = index;
34    		}
35    	}
36
37        return Float.parseFloat(rawValue.substring(0, end));
38    }
39}
40
41