/* * Copyright (C) 2007 Esmertec AG. * Copyright (C) 2007 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; /** * A primitive is the basic packet sent between the IMPS server and the IMPS * client. Note that this class is not thread-safe. */ public final class Primitive { private TransactionMode mTransactionMode = TransactionMode.Request; private String mTransactionId; private String mSessionId; private String mPoll; private String mCir; private PrimitiveElement mContentElement; /** * Constructs a new Primitive with default value. */ public Primitive() { } /** * Constructs a new Primitive with a type. * * @param type the type of the primitive. */ public Primitive(String type) { mContentElement = new PrimitiveElement(type); } /** * Gets the session type of this primitive. * * @return the session type . */ public SessionType getSessionType() { return mSessionId == null ? SessionType.Outband : SessionType.Inband; } /** * Gets the session ID of this primitive. * * @return the session ID. */ public String getSessionId() { return mSessionId; } /** * Sets the session ID of this primitive. * * @param sessionId the session ID. */ public void setSession(String sessionId) { this.mSessionId = sessionId; } /** * Gets the transaction mode of this primitive. * * @return the transaction mode. */ public TransactionMode getTransactionMode() { return mTransactionMode; } /** * Sets the transaction mode of this primitive. * * @param mode the transaction mode. */ public void setTransactionMode(TransactionMode mode) { this.mTransactionMode = mode; } /** * Gets the transaction ID of this primitive. * * @return the transaction ID. */ public String getTransactionID() { return mTransactionId; } /** * Sets the transaction ID of this primitive. * @param transId the transaction ID. */ public void setTransactionId(String transId) { this.mTransactionId = transId; } public void setTransaction(ImpsTransaction transaction) { this.mTransactionId = transaction.getId(); } public String getCir() { return mCir; } public void setCir(String cir) { this.mCir = cir; } public String getPoll() { return mPoll; } public void setPoll(String poll) { this.mPoll = poll; } public String getType() { return (mContentElement == null) ? null : mContentElement.getTagName(); } public PrimitiveElement getContentElement() { return mContentElement; } public void setContentElement(String type) { mContentElement = new PrimitiveElement(type); } public PrimitiveElement addElement(String tag) { return mContentElement.addChild(tag); } public void addElement(String tag, String value) { mContentElement.addChild(tag, value); } public void addElement(String tag, boolean value) { mContentElement.addChild(tag, value); } public void addElement(PrimitiveElement elem) { mContentElement.addChild(elem); } public PrimitiveElement getElement(String tag) { return mContentElement.getChild(tag); } public String getElementContents(String tag) { PrimitiveElement elem = getElement(tag); return elem == null ? null : elem.getContents(); } PrimitiveElement createMessage(String versionUri, String transactUri) { PrimitiveElement root = new PrimitiveElement(ImpsTags.WV_CSP_Message); root.setAttribute(ImpsTags.XMLNS, versionUri); PrimitiveElement sessionElem = root.addChild(ImpsTags.Session); PrimitiveElement sessionDescElem = sessionElem.addChild( ImpsTags.SessionDescriptor); sessionDescElem.addChild(ImpsTags.SessionType, getSessionType().toString()); if (getSessionId() != null) { sessionDescElem.addChild(ImpsTags.SessionID, getSessionId()); } PrimitiveElement transElem = sessionElem.addChild(ImpsTags.Transaction); PrimitiveElement transDescElem = transElem.addChild( ImpsTags.TransactionDescriptor); transDescElem.addChild(ImpsTags.TransactionMode, getTransactionMode().toString()); if (getTransactionID() != null) { transDescElem.addChild(ImpsTags.TransactionID, getTransactionID()); } PrimitiveElement transContentElem = transElem.addChild( ImpsTags.TransactionContent); transContentElem.setAttribute(ImpsTags.XMLNS, transactUri); transContentElem.addChild(getContentElement()); return root; } /** * Represents the transaction mode of a primitive. */ public static enum TransactionMode { /** * Indicates the primitive is a request in a transaction. */ Request, /** * Indicates the primitive is a response in a transaction. */ Response } /** * Represents the session type of a primitive. */ public static enum SessionType { /** * Indicates a primitive is sent within a session. */ Inband, /** * Indicates a primitive is sent without a session. */ Outband } }