1package autotest.tko;
2
3import autotest.common.JSONArrayList;
4import autotest.common.JsonRpcProxy;
5import autotest.common.StaticDataRepository;
6import autotest.common.Utils;
7import autotest.common.table.RpcDataSource;
8import autotest.common.table.DataSource.Query;
9
10import com.google.gwt.http.client.URL;
11import com.google.gwt.json.client.JSONArray;
12import com.google.gwt.json.client.JSONObject;
13import com.google.gwt.json.client.JSONString;
14import com.google.gwt.json.client.JSONValue;
15import com.google.gwt.user.client.DOM;
16import com.google.gwt.user.client.ui.FlexTable;
17import com.google.gwt.user.client.ui.Widget;
18
19import java.util.ArrayList;
20import java.util.Arrays;
21import java.util.List;
22
23public class TkoUtils {
24    private static StaticDataRepository staticData = StaticDataRepository.getRepository();
25    public static final ClassFactory factory = new SiteClassFactory();
26
27    public static class FieldInfo {
28        public String field;
29        public String name;
30
31        public FieldInfo(String field, String name) {
32            this.field = field;
33            this.name = name;
34        }
35    }
36
37    public static List<FieldInfo> getFieldList(String listName) {
38        JSONArray fieldArray = staticData.getData(listName).isArray();
39        List<FieldInfo> fields = new ArrayList<FieldInfo>();
40        for (JSONArray fieldTuple : new JSONArrayList<JSONArray>(fieldArray)) {
41            String fieldName = fieldTuple.get(0).isString().stringValue();
42            String field = fieldTuple.get(1).isString().stringValue();
43            fields.add(new FieldInfo(field, fieldName));
44        }
45        return fields;
46    }
47
48    protected static JSONObject getConditionParams(String condition) {
49        JSONObject params = new JSONObject();
50        params.put("extra_where", new JSONString(condition));
51        return params;
52    }
53
54    static void setElementVisible(String elementId, boolean visible) {
55        DOM.getElementById(elementId).getStyle().setProperty("display", visible ? "" : "none");
56    }
57
58    static String getSqlCondition(JSONObject args) {
59        final JSONValue condition = args.get("extra_where");
60        if (condition == null) {
61            return "";
62        }
63        return condition.isString().stringValue();
64    }
65
66    static String wrapWithParens(String string) {
67        if (string.equals("")) {
68            return string;
69        }
70        return "(" + string + ")";
71    }
72
73    static String joinWithParens(String joiner, String first, String second) {
74        first = wrapWithParens(first);
75        second = wrapWithParens(second);
76        return Utils.joinStrings(joiner, Arrays.asList(new String[] {first, second}));
77    }
78
79    static String escapeSqlValue(String value) {
80        return value.replace("\\", "\\\\").replace("'", "\\'");
81    }
82
83    static int addControlRow(FlexTable table, String text, Widget control) {
84        int row = table.getRowCount();
85        table.setText(row, 0, text);
86        table.getFlexCellFormatter().setStylePrimaryName(row, 0, "field-name");
87        table.setWidget(row, 1, control);
88        return row;
89    }
90
91    static void doCsvRequest(RpcDataSource dataSource, Query query, JSONObject extraParams) {
92        String rpcMethodName = dataSource.getDataMethodName();
93        JSONObject arguments = query.getParams();
94        // remove pagination arguments, since the user will want to export all results
95        arguments.put("query_start", null);
96        arguments.put("query_limit", null);
97
98        JSONObject request = JsonRpcProxy.buildRequestObject(rpcMethodName, arguments);
99        if (extraParams != null) {
100            Utils.updateObject(request, extraParams);
101        }
102
103        String url = JsonRpcProxy.TKO_BASE_URL + "csv/?" + URL.encode(request.toString());
104        Utils.openUrlInNewWindow(url);
105    }
106}
107