FileDocCategorySizeDatePackage
PtsCodes.javaAPI DocAndroid 1.5 API15398Wed May 06 22:42:46 BST 2009com.android.im.imps

PtsCodes.java

/*
 * Copyright (C) 2007-2008 Esmertec AG.
 * Copyright (C) 2007-2008 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.im.imps;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map.Entry;

public class PtsCodes {

    private PtsCodes() {
    }

    private static HashMap<String, String> sCodeToTransaction = new HashMap<String, String>();
    private static HashMap<String, String> sCodeToElement = new HashMap<String, String>();
    private static HashMap<String, String> sCodeToCapElement = new HashMap<String, String>();
    private static HashMap<String, String> sCodeToCapValue= new HashMap<String, String>();
    private static HashMap<String, String> sCodeToServiceTree = new HashMap<String, String>();
    private static HashMap<String, String> sCodeToPresenceAttribute = new HashMap<String, String>();

    private static HashMap<String, String> sTransactionToCode = new HashMap<String, String>();
    private static HashMap<String, String> sElementToCode = new HashMap<String, String>();
    /*package*/ static HashMap<String, String> sCapElementToCode = new HashMap<String, String>();
    /*package*/ static HashMap<String, String> sCapValueToCode= new HashMap<String, String>();
    private static HashMap<String, String> sServiceTreeToCode = new HashMap<String, String>();
    static HashMap<String, String> sContactListPropsToCode = new HashMap<String, String>();
    private static HashMap<String, String> sPresenceAttributeToCode = new HashMap<String, String>();

    private static ArrayList<String> sServerRequestTransactionCode = new ArrayList<String>();
    private static HashMap<String, String> sCodeToPAValue = new HashMap<String, String>();
    private static HashMap<String, String> sPAValueToCode = new HashMap<String, String>();

    public static String getTransaction(String type) {
        // not case sensitive
        return sCodeToTransaction.get(type.toUpperCase());
    }

    public static String getElement(String type) {
        // not case sensitive
        return sCodeToElement.get(type.toUpperCase());
    }

    public static String getCapElement(String type) {
        // not case sensitive
        return sCodeToCapElement.get(type.toUpperCase());
    }

    public static String getCapValue(String type) {
        // not case sensitive
        return sCodeToCapValue.get(type.toUpperCase()) == null ?
                type : sCodeToCapValue.get(type.toUpperCase());
    }

    public static String getServiceTreeValue(String type) {
        // not case sensitive
        return sCodeToServiceTree.get(type.toUpperCase());
    }

    public static String getTxCode(String txType) {
        return sTransactionToCode.get(txType);
    }

    public static String getElementCode(String elemType, String transactionType) {
        if (ImpsTags.PresenceSubList.equals(elemType)) {
            return ImpsTags.UpdatePresence_Request.equals(transactionType) ? "UV" : "PS";
        }

        return sElementToCode.get(elemType);
    }

    public static String getCapElementCode(String elemType) {
        return sCapElementToCode.get(elemType);
    }

    public static String getCapValueCode(String value) {
        return sCapValueToCode.get(value);
    }

    public static String getServiceTreeCode(String elemType) {
        return sServiceTreeToCode.get(elemType);
    }

    public static String getPresenceAttributeCode(String elemType){
        return sPresenceAttributeToCode.get(elemType);
    }

    public static String getPresenceAttributeElement(String code) {
        // not case sensitive
        return sCodeToPresenceAttribute.get(code.toUpperCase());
    }

    public static String getPAValue(String code) {
        // not case sensitive
        String value = sCodeToPAValue.get(code.toUpperCase());

        return value == null ? code : value;
    }

    public static String getPAValueCode(String value) {
        // not case sensitive
        String code = sPAValueToCode.get(value.toUpperCase());
        return code == null ? value : code;
    }

    public static boolean isServerRequestCode(String type) {
        for (String code : sServerRequestTransactionCode) {
            if (code.equals(type)) {
                return true;
            }
        }

        return false;
    }

    // Fundamental primitives and transactions
    public static final String ClientCapability_Response    = "PC";
    public static final String Disconnect                   = "DI";
//    public static final String GetList_Request              = "GL";
    public static final String GetList_Response             = "LG";
//    public static final String KeepAlive_Request            = "KA";
    public static final String KeepAlive_Response           = "AK";
    public static final String Login_Response               = "RL";
//    public static final String Logout_Request               = "OR";
//    public static final String Polling_Request              = "PO";
//    public static final String Service_Request              = "SQ";
    public static final String Service_Response             = "QS";
    public static final String Status                       = "ST";   // the same for the element "Status"
    public static final String ListManage_Response          = "ML";
    public static final String PresenceNotification         = "PN";
    public static final String GetPresence_Response         = "PG";
//    public static final String Disconnect = "Disconnect";
//    public static final String KeepAlive_Request = "KeepAlive-Request";
//    public static final String KeepAlive_Response = "KeepAlive-Response";
//    public static final String Service_Request = "Service-Request";
//    public static final String Service_Response = "Service-Response";

    // Information elements
    public static final String AllFunctions          = "AF";
    public static final String CapabilityList        = "CA";
    public static final String AgreedCapabilityList  = "AP";
    public static final String CapabilityRequest     = "CR";
    public static final String ClientID              = "CI";
    public static final String ContactList           = "CL";
    public static final String DefaultContactList    = "DC";
    public static final String DigestSchema          = "DI";
    public static final String Nonce                 = "NO";
    public static final String NotAvailableFunctions = "NF";
    public static final String KeepAliveTime         = "KA";
    public static final String SessionID             = "SI";
    public static final String DefaultList           = "DL";
    public static final String UserNickList          = "UN";
    public static final String ContactListProps      = "CP";
    public static final String Presence              = "PR";

    // Contact list properties
    public static final String DisplayName = "DN";
    public static final String Default     = "DE";

    static {
        sTransactionToCode.put(ImpsTags.Login_Request, "LR");
        sTransactionToCode.put(ImpsTags.ClientCapability_Request, "CP");
        sTransactionToCode.put(ImpsTags.Service_Request, "SQ");
        sTransactionToCode.put(ImpsTags.Logout_Request, "OR");
        sTransactionToCode.put(ImpsTags.Status, "ST");
        sTransactionToCode.put(ImpsTags.GetList_Request, "GL");
        sTransactionToCode.put(ImpsTags.CreateList_Request, "CL");
        sTransactionToCode.put(ImpsTags.DeleteList_Request, "DL");
        sTransactionToCode.put(ImpsTags.ListManage_Request, "LM");
        sTransactionToCode.put(ImpsTags.GetPresence_Request, "GP");
        sTransactionToCode.put(ImpsTags.SubscribePresence_Request, "SB");
        sTransactionToCode.put(ImpsTags.GetBlockedList_Request, "GB");
        sTransactionToCode.put(ImpsTags.CreateAttributeList_Request, "CA");
        sTransactionToCode.put(ImpsTags.Polling_Request, "PO");
        sTransactionToCode.put(ImpsTags.UpdatePresence_Request, "UP");

        sElementToCode.put(ImpsTags.ClientID, ClientID);
        sElementToCode.put(ImpsTags.DigestSchema, "SH");
        sElementToCode.put(ImpsTags.DigestBytes, "DB");
        sElementToCode.put(ImpsTags.Password, "PW");
        sElementToCode.put(ImpsTags.SessionCookie, "SC");
        sElementToCode.put(ImpsTags.TimeToLive, "TL");
        sElementToCode.put(ImpsTags.UserID, "UI");
        sElementToCode.put(ImpsTags.CapabilityList, CapabilityList);
        sElementToCode.put(ImpsTags.Functions, "RF");
        sElementToCode.put(ImpsTags.AllFunctionsRequest, "AR");
        sElementToCode.put(ImpsTags.Result, "ST");
        sElementToCode.put(ImpsTags.ContactList, "CL");
        sElementToCode.put(ImpsTags.NickList, "UN");
        sElementToCode.put(ImpsTags.AddNickList, "AN");
        sElementToCode.put(ImpsTags.RemoveNickList, "RN");
        sElementToCode.put(ImpsTags.ContactListProperties, "CP");
        sElementToCode.put(ImpsTags.ReceiveList, "RL");
        sElementToCode.put(ImpsTags.PresenceSubList, "PS");
        sElementToCode.put(ImpsTags.DefaultList, DefaultList);
        sElementToCode.put(ImpsTags.AutoSubscribe, "AS");

        sCodeToTransaction.put(ClientCapability_Response, ImpsTags.ClientCapability_Response);
        sCodeToTransaction.put(Disconnect, ImpsTags.Disconnect);
        sCodeToTransaction.put(GetList_Response, ImpsTags.GetList_Response);
        sCodeToTransaction.put(KeepAlive_Response, ImpsTags.KeepAlive_Response);
        sCodeToTransaction.put(Login_Response, ImpsTags.Login_Response);
        sCodeToTransaction.put(Service_Response, ImpsTags.Service_Response);
        sCodeToTransaction.put(Status, ImpsTags.Status);
        sCodeToTransaction.put(ListManage_Response, ImpsTags.ListManage_Response);
        sCodeToTransaction.put(PresenceNotification, ImpsTags.PresenceNotification_Request);
        sCodeToTransaction.put(GetPresence_Response, ImpsTags.GetPresence_Response);

        sCodeToElement.put(AllFunctions, ImpsTags.AllFunctions);
        sCodeToElement.put(CapabilityList, ImpsTags.CapabilityList);
        sCodeToElement.put(CapabilityRequest, ImpsTags.CapabilityRequest);
        sCodeToElement.put(ClientID, ImpsTags.ClientID);
        sCodeToElement.put(ContactList, ImpsTags.ContactList);
        sCodeToElement.put(DigestSchema, ImpsTags.DigestSchema);
        sCodeToElement.put(Nonce, ImpsTags.Nonce);
        sCodeToElement.put(NotAvailableFunctions, ImpsTags.NotAvailableFunctions);
        sCodeToElement.put(KeepAliveTime, ImpsTags.KeepAliveTime);
        sCodeToElement.put(SessionID, ImpsTags.SessionID);
        sCodeToElement.put(Status, ImpsTags.Status);
        sCodeToElement.put(DefaultList, ImpsTags.DefaultContactList);
        sCodeToElement.put(UserNickList, ImpsTags.NickList);
        sCodeToElement.put(Presence, ImpsTags.Presence);

        // Capability element <=> code
        sCodeToCapElement.put("CT", ImpsTags.ClientType);
        sCodeToCapElement.put("CI", ImpsTags.CIRHTTPAddress);
        sCodeToCapElement.put("DL", ImpsTags.DefaultLanguage);
        sCodeToCapElement.put("ID", ImpsTags.InitialDeliveryMethod);
        sCodeToCapElement.put("MT", ImpsTags.MultiTrans);
        sCodeToCapElement.put("PS", ImpsTags.ParserSize);
        sCodeToCapElement.put("PM", ImpsTags.ServerPollMin);
        sCodeToCapElement.put("SB", ImpsTags.SupportedBearer);
        sCodeToCapElement.put("SC", ImpsTags.SupportedCIRMethod);
        sCodeToCapElement.put("TA", ImpsTags.TCPAddress);
        sCodeToCapElement.put("TP", ImpsTags.TCPPort);
        sCodeToCapElement.put("UP", ImpsTags.UDPPort);

        for (Entry<String, String> e : sCodeToCapElement.entrySet()) {
            sCapElementToCode.put(e.getValue(), e.getKey());
        }

        // Capability value <=> code
        sCodeToCapValue.put("SS", "SSMS");
        sCodeToCapValue.put("ST", "STCP");
        sCodeToCapValue.put("SU", "SUDP");
        sCodeToCapValue.put("WS", "WAPSMS");
        sCodeToCapValue.put("WU", "WAPUDP");
        // value of ClientType
        sCodeToCapValue.put("MP", ImpsConstants.PRESENCE_MOBILE_PHONE);
        sCodeToCapValue.put("CO", ImpsConstants.PRESENCE_COMPUTER);
        sCodeToCapValue.put("PD", ImpsConstants.PRESENCE_PDA);
        sCodeToCapValue.put("CL", ImpsConstants.PRESENCE_CLI);
        sCodeToCapValue.put("OT", ImpsConstants.PRESENCE_OTHER);

        for (Entry<String, String> e : sCodeToCapValue.entrySet()) {
            sCapValueToCode.put(e.getValue(), e.getKey());
        }

        // Service Tree <=> code
        sCodeToServiceTree.put("WV", ImpsTags.WVCSPFeat);
        sCodeToServiceTree.put("FF", ImpsTags.FundamentalFeat);
        sCodeToServiceTree.put("PF", ImpsTags.PresenceFeat);
        sCodeToServiceTree.put("IF", ImpsTags.IMFeat);
        sCodeToServiceTree.put("GE", ImpsTags.GroupFeat);

        for (Entry<String, String> e : sCodeToServiceTree.entrySet()) {
            sServiceTreeToCode.put(e.getValue(), e.getKey());
        }

        sContactListPropsToCode.put(ImpsConstants.DisplayName, "DN");
        sContactListPropsToCode.put(ImpsConstants.Default, "DE");

        // Presence Attribute <=> code. Only include the attributes our client supports
        sCodeToPresenceAttribute.put("OS", ImpsTags.OnlineStatus);
        sCodeToPresenceAttribute.put("CF", ImpsTags.ClientInfo);
        sCodeToPresenceAttribute.put("UA", ImpsTags.UserAvailability);
        sCodeToPresenceAttribute.put("ST", ImpsTags.StatusText);
        sCodeToPresenceAttribute.put("SC", ImpsTags.StatusContent);
        // sub-element of ClientInfo
        sCodeToPresenceAttribute.put("CT", ImpsTags.ClientType);
        sCodeToPresenceAttribute.put("CP", ImpsTags.ClientProducer);
        sCodeToPresenceAttribute.put("CV", ImpsTags.ClientVersion);
        // sub-element of StatusContent
        sCodeToPresenceAttribute.put("RC", ImpsTags.ReferredContent);
        sCodeToPresenceAttribute.put("CY", ImpsTags.ContentType);

        for (Entry<String, String> e : sCodeToPresenceAttribute.entrySet()) {
            sPresenceAttributeToCode.put(e.getValue(), e.getKey());
        }

        sServerRequestTransactionCode.add(PresenceNotification);

        // value of UserAvailability
        sCodeToPAValue.put("AV", ImpsConstants.PRESENCE_AVAILABLE);
        sCodeToPAValue.put("DI", ImpsConstants.PRESENCE_DISCREET);
        sCodeToPAValue.put("NA", ImpsConstants.PRESENCE_NOT_AVAILABLE);
        // value of ClientType
        sCodeToPAValue.put("MP", ImpsConstants.PRESENCE_MOBILE_PHONE);
        sCodeToPAValue.put("CO", ImpsConstants.PRESENCE_COMPUTER);
        sCodeToPAValue.put("PD", ImpsConstants.PRESENCE_PDA);
        sCodeToPAValue.put("CL", ImpsConstants.PRESENCE_CLI);
        sCodeToPAValue.put("OT", ImpsConstants.PRESENCE_OTHER);

        for (Entry<String, String> e : sCodeToPAValue.entrySet()) {
            sPAValueToCode.put(e.getValue(), e.getKey());
        }
    }
}