Upstream version 8.36.156.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / android / core_internal / src / org / xwalk / core / internal / extension / api / messaging / MessagingHelpers.java
1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.xwalk.core.internal.extension.api.messaging;
6
7 import android.database.Cursor;
8 import java.text.SimpleDateFormat;
9 import java.text.ParseException;
10 import java.util.ArrayList;
11 import java.util.Date;
12
13 import org.json.JSONException;
14 import org.json.JSONObject;
15 import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConstMaps;
16 import org.xwalk.core.internal.extension.api.messaging.MessagingSmsConsts;
17
18 public class MessagingHelpers {
19     private static String buildSqlClause(boolean hasAnd, String condition, String column) {
20         String clause = hasAnd ? " AND " : ""; 
21         clause += String.format(condition, column);
22         return clause;
23     }
24
25     public static String convertJsDateString2Long(String date) {
26         date = date.replace('T', ' ').replace('Z', ' ');
27         long time = 0l;
28         try {
29             SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
30             time = sf.parse(date).getTime();
31         } catch (ParseException e) {
32             e.printStackTrace();
33         }
34
35         return String.valueOf(time);
36     }
37
38     public static String convertDateLong2String(long time) {
39         if (time <= 0l) {
40             return "";
41         }
42
43         SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
44         return sf.format(new Date(time));
45     }
46
47     public static Object[] buildSqlFilterString(JSONObject filter) {
48         String filterString = "";
49         ArrayList<String> argsStringList = new ArrayList<String>();
50
51         try {
52             boolean hasAnd = false;
53             
54             if (filter.has("startDate")) {
55                 filterString += buildSqlClause(hasAnd, "%s >= ?", MessagingSmsConsts.DATE);
56                 argsStringList.add(convertJsDateString2Long(
57                         filter.getString("startDate")));
58                 hasAnd = true;
59             }
60
61             if (filter.has("endDate")) {
62                 filterString += buildSqlClause(hasAnd, "%s <= ?", MessagingSmsConsts.DATE);
63                 argsStringList.add(convertJsDateString2Long(
64                         filter.getString("endDate")));
65                 hasAnd = true;
66             }
67
68             if (filter.has("from")) {
69                 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.ADDRESS);
70                 argsStringList.add(filter.getString("from"));
71                 hasAnd = true;
72             }
73             
74             String msgType = "sms";
75             if (filter.has("type")) {
76                 msgType = filter.getString("type");
77             }
78
79             if (filter.has("state") && msgType.equals("sms")) {
80                 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.TYPE);
81                 Integer stateNum =
82                     MessagingSmsConstMaps.smsStateDictS2I.get(filter.getString("state"));
83                 argsStringList.add(String.valueOf(stateNum));
84                 hasAnd = true;
85             }
86
87             if (filter.has("read")) {
88                 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.READ);
89                 argsStringList.add(filter.getBoolean("read") ? "1" : "0");
90                 hasAnd = true;
91             }
92         } catch (JSONException e) {
93             e.printStackTrace();
94             return null;
95         }
96
97         return new Object[]{filterString, argsStringList.toArray(new String[argsStringList.size()])};
98     }
99
100     public static String buildSqlFilterOptionString(JSONObject filterOption) {
101         String filterOptionString = "";
102
103         try {
104             if (filterOption.has("sortBy")) {
105                 filterOptionString += " " +
106                     MessagingSmsConstMaps.smsTableColumnDict.get(filterOption.getString("sortBy"));
107             }
108
109             if (filterOption.has("sortOrder")) {
110                 filterOptionString += " " + 
111                     MessagingSmsConstMaps.sortOrderDict.get(filterOption.getString("sortOrder"));
112             }
113
114             if (filterOption.has("limit")) {
115                 filterOptionString += " LIMIT " + filterOption.getString("limit");
116             }
117         } catch (JSONException e) {
118             e.printStackTrace();
119             return "";
120         }
121
122         return filterOptionString;
123     }
124
125     public static JSONObject SmsMessageCursor2Json(Cursor c) {
126         JSONObject jsonMsg = null;
127
128         try {
129             jsonMsg = new JSONObject();
130             jsonMsg.put("messageID", c.getString(c.getColumnIndex(MessagingSmsConsts.ID)));
131             jsonMsg.put("conversationID", c.getString(c.getColumnIndex(MessagingSmsConsts.THREAD_ID)));
132             jsonMsg.put("type", "sms");
133             jsonMsg.put("serviceID", "");
134             jsonMsg.put("from", c.getString(c.getColumnIndex(MessagingSmsConsts.ADDRESS)));
135             jsonMsg.put("timestamp", convertDateLong2String(
136                     c.getLong(c.getColumnIndex(MessagingSmsConsts.DATE))));
137             jsonMsg.put("read", c.getString(c.getColumnIndex(MessagingSmsConsts.READ)));
138             jsonMsg.put("to", "");
139             jsonMsg.put("body", c.getString(c.getColumnIndex(MessagingSmsConsts.BODY)));
140             jsonMsg.put("state", MessagingSmsConstMaps.smsStateDictI2S.get(
141                     c.getInt(c.getColumnIndex(MessagingSmsConsts.TYPE))));
142             jsonMsg.put("deliveryStatus", MessagingSmsConstMaps.smsDiliveryStatusDictI2S.get(
143                     c.getInt(c.getColumnIndex(MessagingSmsConsts.STATUS))));
144             jsonMsg.put("deliveryTimestamp", "");
145             jsonMsg.put("messageClass", "");
146             return jsonMsg;
147         } catch (JSONException e) {
148             e.printStackTrace();
149             return null;
150         }
151     }
152 }