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.
5 package org.xwalk.core.extension.api.messaging;
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;
13 import org.json.JSONException;
14 import org.json.JSONObject;
15 import org.xwalk.core.extension.api.messaging.MessagingSmsConstMaps;
16 import org.xwalk.core.extension.api.messaging.MessagingSmsConsts;
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);
25 public static String convertJsDateString2Long(String date) {
26 date = date.replace('T', ' ').replace('Z', ' ');
29 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
30 time = sf.parse(date).getTime();
31 } catch (ParseException e) {
35 return String.valueOf(time);
38 public static String convertDateLong2String(long time) {
43 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
44 return sf.format(new Date(time));
47 public static Object[] buildSqlFilterString(JSONObject filter) {
48 String filterString = "";
49 ArrayList<String> argsStringList = new ArrayList<String>();
52 boolean hasAnd = false;
54 if (filter.has("startDate")) {
55 filterString += buildSqlClause(hasAnd, "%s >= ?", MessagingSmsConsts.DATE);
56 argsStringList.add(convertJsDateString2Long(
57 filter.getString("startDate")));
61 if (filter.has("endDate")) {
62 filterString += buildSqlClause(hasAnd, "%s <= ?", MessagingSmsConsts.DATE);
63 argsStringList.add(convertJsDateString2Long(
64 filter.getString("endDate")));
68 if (filter.has("from")) {
69 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.ADDRESS);
70 argsStringList.add(filter.getString("from"));
74 String msgType = "sms";
75 if (filter.has("type")) {
76 msgType = filter.getString("type");
79 if (filter.has("state") && msgType.equals("sms")) {
80 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.TYPE);
82 MessagingSmsConstMaps.smsStateDictS2I.get(filter.getString("state"));
83 argsStringList.add(String.valueOf(stateNum));
87 if (filter.has("read")) {
88 filterString += buildSqlClause(hasAnd, "%s = ?", MessagingSmsConsts.READ);
89 argsStringList.add(filter.getBoolean("read") ? "1" : "0");
92 } catch (JSONException e) {
97 return new Object[]{filterString, argsStringList.toArray(new String[argsStringList.size()])};
100 public static String buildSqlFilterOptionString(JSONObject filterOption) {
101 String filterOptionString = "";
104 if (filterOption.has("sortBy")) {
105 filterOptionString += " " +
106 MessagingSmsConstMaps.smsTableColumnDict.get(filterOption.getString("sortBy"));
109 if (filterOption.has("sortOrder")) {
110 filterOptionString += " " +
111 MessagingSmsConstMaps.sortOrderDict.get(filterOption.getString("sortOrder"));
114 if (filterOption.has("limit")) {
115 filterOptionString += " LIMIT " + filterOption.getString("limit");
117 } catch (JSONException e) {
122 return filterOptionString;
125 public static JSONObject SmsMessageCursor2Json(Cursor c) {
126 JSONObject jsonMsg = null;
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", "");
147 } catch (JSONException e) {