package com.thoughtworks.calabash.android; import org.codehaus.jackson.JsonNode; import java.util.HashMap; public class TreeNodeBuilder { private final CalabashWrapper calabashWrapper; public TreeNodeBuilder(CalabashWrapper calabashWrapper) { this.calabashWrapper = calabashWrapper; } public TreeNode buildFrom(JsonNode jsonNode, String query) { final HashMap<Object, Object> map = new HashMap<Object, Object>(); map.put("class", getProperty(jsonNode, "type")); map.put("id", getProperty(jsonNode, "id")); map.put("text", getProperty(jsonNode, "value")); map.put("enabled", getBooleanProperty(jsonNode, "enabled")); createRect(jsonNode, map); return new TreeNode(new UIElement(map, query, calabashWrapper)); } private void createRect(JsonNode jsonNode, HashMap<Object, Object> map) { final HashMap<String, String> rectMap = new HashMap<String, String>(); final JsonNode rectNode = jsonNode.get("rect"); if (rectNode == null) { return; } populateMap(rectMap, rectNode, "x"); populateMap(rectMap, rectNode, "y"); populateMap(rectMap, rectNode, "width"); populateMap(rectMap, rectNode, "height"); populateMap(rectMap, rectNode, "center_x"); populateMap(rectMap, rectNode, "center_y"); map.put("rect", rectMap); } private void populateMap(HashMap<String, String> rectMap, JsonNode node, String property) { rectMap.put(property, getPropertyAsDouble(node, property).toString()); } private String getProperty(JsonNode jsonNode, String property) { final JsonNode propertyNode = jsonNode.get(property); return propertyNode == null ? "null" : propertyNode.getTextValue(); } private Double getPropertyAsDouble(JsonNode jsonNode, String property) { final JsonNode propertyNode = jsonNode.get(property); return propertyNode == null ? null : propertyNode.getDoubleValue(); } private boolean getBooleanProperty(JsonNode jsonNode, String property) { final JsonNode propertyNode = jsonNode.get(property); return propertyNode == null ? false : propertyNode.getBooleanValue(); } }