• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2007-2008 Esmertec AG.
3  * Copyright (C) 2007-2008 The Android Open Source Project
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.im.imps;
19 
20 import java.util.Collections;
21 import java.util.HashMap;
22 import java.util.Map;
23 import java.util.Random;
24 
25 import com.android.im.engine.ImErrorInfo;
26 
27 public class ImpsUtils {
28 
29     private static final HashMap<String, String> sClientInfo;
30     private static String sSessionCookie;
31     private static int sSessionCookieNumber;
32 
ImpsUtils()33     private ImpsUtils() {
34     }
35 
36     static {
37         // TODO: v1.2 doesn't support ClientContentLimit
38         sClientInfo = new HashMap<String, String>();
sClientInfo.put(ImpsTags.ClientType, ImpsClientCapability.getClientType())39         sClientInfo.put(ImpsTags.ClientType, ImpsClientCapability.getClientType());
sClientInfo.put(ImpsTags.ClientProducer, ImpsConstants.CLIENT_PRODUCER)40         sClientInfo.put(ImpsTags.ClientProducer, ImpsConstants.CLIENT_PRODUCER);
sClientInfo.put(ImpsTags.ClientVersion, ImpsConstants.CLIENT_VERSION)41         sClientInfo.put(ImpsTags.ClientVersion, ImpsConstants.CLIENT_VERSION);
42     }
43 
44     /**
45      * Checks if a string is a boolean value of true IMPS.
46      *
47      * @param value the string value.
48      * @return <code>true</code> if it's true in IMPS.
49      */
isTrue(String value)50     public static boolean isTrue(String value) {
51         return ImpsConstants.TRUE.equalsIgnoreCase(value);
52     }
53 
54     /**
55      * Checks if a string is a boolean value of false in IMPS.
56      *
57      * @param value the string value.
58      * @return true if it's false in IMPS
59      */
isFalse(String value)60     public static boolean isFalse(String value) {
61         return ImpsConstants.FALSE.equalsIgnoreCase(value);
62     }
63 
64     /**
65      * Return the IMPS String presentation of the boolean value
66      *
67      * @param isTrue the boolean value
68      * @return the String presentation
69      */
toImpsBool(boolean isTrue)70     public static String toImpsBool(boolean isTrue) {
71         if (isTrue) {
72             return ImpsConstants.TRUE;
73         }
74 
75         return ImpsConstants.FALSE;
76     }
77 
78     /**
79      * Checks if the response primitive indicates successful.
80      *
81      * @param response the response primitive.
82      * @returns <code>null</code> if the status code is 200 or an ImpsErrorInfo instance
83      */
checkResultError(Primitive response)84     public static ImpsErrorInfo checkResultError(Primitive response) {
85         PrimitiveElement result = response.getElement(ImpsTags.Result);
86         if (result == null) {
87             return null;
88         }
89 
90         String resultCode = result.getChild(ImpsTags.Code).getContents();
91         if (!ImpsConstants.SUCCESS_CODE.equals(resultCode)) {
92             PrimitiveElement descElem = result.getChild(ImpsTags.Description);
93             String errorDesc = (descElem == null) ? "" : descElem.getContents();
94             int statusCode = parseInt(resultCode, ImErrorInfo.ILLEGAL_SERVER_RESPONSE);
95             return new ImpsErrorInfo(statusCode, errorDesc, response);
96         }
97         return null;
98     }
99 
100     /**
101      * Returns a copy of the string, with leading and trailing whitespace
102      * omitted. Unlike the standard trim which just removes '\u0020'(the space
103      * character), it removes all possible leading and trailing whitespace
104      * character.
105      *
106      * @param str the string.
107      * @return a copy of the string, with leading and trailing whitespace
108      *         omitted.
109      */
trim(String str)110     public static String trim(String str) {
111         if (null == str || "".equals(str))
112             return str;
113 
114         int strLen = str.length();
115         int start = 0;
116         while (start < strLen && Character.isWhitespace(str.charAt(start)))
117             start++;
118         int end = strLen - 1;
119         while (end >= 0 && Character.isWhitespace(str.charAt(end)))
120             end--;
121         if (end < start)
122             return "";
123         str = str.substring(start, end + 1);
124         return str;
125     }
126 
127     /**
128      * Check whether the presence element has a qualified attribute value.
129      * An attribute value is invalid when:
130      *  1. An attribute is authorized but not yet updated for the first time
131      *  2. The user wants to indicate that the value of the attribute is unknown.
132      *
133      * @param elem the presence element
134      * @return <code>true</code> if the value of attribute is valid.
135      */
isQualifiedPresence(PrimitiveElement elem)136     public static boolean isQualifiedPresence(PrimitiveElement elem) {
137         if (null == elem || null == elem.getChild(ImpsTags.Qualifier)) {
138             return false;
139         }
140 
141         return ImpsUtils.isTrue(elem.getChildContents(ImpsTags.Qualifier));
142     }
143 
getClientInfo()144     public static Map<String, String> getClientInfo() {
145         return Collections.unmodifiableMap(sClientInfo);
146     }
147 
genSessionCookie()148     synchronized static String genSessionCookie() {
149         if(sSessionCookie == null) {
150             Random random = new Random();
151             sSessionCookie = System.currentTimeMillis() + "" + random.nextInt();
152         }
153         return sSessionCookie + (sSessionCookieNumber++);
154     }
155 
parseInt(String s, int defaultValue)156     public static int parseInt(String s, int defaultValue) {
157         try {
158             return Integer.parseInt(s);
159         } catch (NumberFormatException e) {
160             // ignore
161             return defaultValue;
162         }
163     }
164 
parseLong(String s, long defaultValue)165     public static long parseLong(String s, long defaultValue) {
166         try {
167             return Long.parseLong(s);
168         } catch (NumberFormatException e) {
169             // ignore
170             return defaultValue;
171         }
172     }
173 }
174