ImpsUtils.java
上传用户:szyujian
上传日期:2016-09-20
资源大小:320k
文件大小:6k
源码类别:

android开发

开发平台:

C/C++

  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. package com.android.im.imps;
  18. import java.util.Collections;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import java.util.Random;
  22. import com.android.im.engine.ImErrorInfo;
  23. public class ImpsUtils {
  24.     private static final HashMap<String, String> sClientInfo;
  25.     private static String sSessionCookie;
  26.     private static int sSessionCookieNumber;
  27.     private ImpsUtils() {
  28.     }
  29.     static {
  30.         // TODO: v1.2 doesn't support ClientContentLimit
  31.         sClientInfo = new HashMap<String, String>();
  32.         sClientInfo.put(ImpsTags.ClientType, ImpsClientCapability.getClientType());
  33.         sClientInfo.put(ImpsTags.ClientProducer, ImpsConstants.CLIENT_PRODUCER);
  34.         sClientInfo.put(ImpsTags.ClientVersion, ImpsConstants.CLIENT_VERSION);
  35.     }
  36.     /**
  37.      * Checks if a string is a boolean value of true IMPS.
  38.      *
  39.      * @param value the string value.
  40.      * @return <code>true</code> if it's true in IMPS.
  41.      */
  42.     public static boolean isTrue(String value) {
  43.         return ImpsConstants.TRUE.equalsIgnoreCase(value);
  44.     }
  45.     /**
  46.      * Checks if a string is a boolean value of false in IMPS.
  47.      *
  48.      * @param value the string value.
  49.      * @return true if it's false in IMPS
  50.      */
  51.     public static boolean isFalse(String value) {
  52.         return ImpsConstants.FALSE.equalsIgnoreCase(value);
  53.     }
  54.     /**
  55.      * Return the IMPS String presentation of the boolean value
  56.      *
  57.      * @param isTrue the boolean value
  58.      * @return the String presentation
  59.      */
  60.     public static String toImpsBool(boolean isTrue) {
  61.         if (isTrue) {
  62.             return ImpsConstants.TRUE;
  63.         }
  64.         return ImpsConstants.FALSE;
  65.     }
  66.     /**
  67.      * Checks if the response primitive indicates successful.
  68.      *
  69.      * @param response the response primitive.
  70.      * @returns <code>null</code> if the status code is 200 or an ImpsErrorInfo instance
  71.      */
  72.     public static ImpsErrorInfo checkResultError(Primitive response) {
  73.         PrimitiveElement result = response.getElement(ImpsTags.Result);
  74.         if (result == null) {
  75.             return null;
  76.         }
  77.         String resultCode = result.getChild(ImpsTags.Code).getContents();
  78.         if (!ImpsConstants.SUCCESS_CODE.equals(resultCode)) {
  79.             PrimitiveElement descElem = result.getChild(ImpsTags.Description);
  80.             String errorDesc = (descElem == null) ? "" : descElem.getContents();
  81.             int statusCode = parseInt(resultCode, ImErrorInfo.ILLEGAL_SERVER_RESPONSE);
  82.             return new ImpsErrorInfo(statusCode, errorDesc, response);
  83.         }
  84.         return null;
  85.     }
  86.     /**
  87.      * Returns a copy of the string, with leading and trailing whitespace
  88.      * omitted. Unlike the standard trim which just removes 'u0020'(the space
  89.      * character), it removes all possible leading and trailing whitespace
  90.      * character.
  91.      *
  92.      * @param str the string.
  93.      * @return a copy of the string, with leading and trailing whitespace
  94.      *         omitted.
  95.      */
  96.     public static String trim(String str) {
  97.         if (null == str || "".equals(str))
  98.             return str;
  99.         int strLen = str.length();
  100.         int start = 0;
  101.         while (start < strLen && Character.isWhitespace(str.charAt(start)))
  102.             start++;
  103.         int end = strLen - 1;
  104.         while (end >= 0 && Character.isWhitespace(str.charAt(end)))
  105.             end--;
  106.         if (end < start)
  107.             return "";
  108.         str = str.substring(start, end + 1);
  109.         return str;
  110.     }
  111.     /**
  112.      * Check whether the presence element has a qualified attribute value.
  113.      * An attribute value is invalid when:
  114.      *  1. An attribute is authorized but not yet updated for the first time
  115.      *  2. The user wants to indicate that the value of the attribute is unknown.
  116.      *
  117.      * @param elem the presence element
  118.      * @return <code>true</code> if the value of attribute is valid.
  119.      */
  120.     public static boolean isQualifiedPresence(PrimitiveElement elem) {
  121.         if (null == elem || null == elem.getChild(ImpsTags.Qualifier)) {
  122.             return false;
  123.         }
  124.         return ImpsUtils.isTrue(elem.getChildContents(ImpsTags.Qualifier));
  125.     }
  126.     public static Map<String, String> getClientInfo() {
  127.         return Collections.unmodifiableMap(sClientInfo);
  128.     }
  129.     synchronized static String genSessionCookie() {
  130.         if(sSessionCookie == null) {
  131.             Random random = new Random();
  132.             sSessionCookie = System.currentTimeMillis() + "" + random.nextInt();
  133.         }
  134.         return sSessionCookie + (sSessionCookieNumber++);
  135.     }
  136.     public static int parseInt(String s, int defaultValue) {
  137.         try {
  138.             return Integer.parseInt(s);
  139.         } catch (NumberFormatException e) {
  140.             // ignore
  141.             return defaultValue;
  142.         }
  143.     }
  144.     public static long parseLong(String s, long defaultValue) {
  145.         try {
  146.             return Long.parseLong(s);
  147.         } catch (NumberFormatException e) {
  148.             // ignore
  149.             return defaultValue;
  150.         }
  151.     }
  152. }