blob: 5957a192cd381544813ccf716057238e11a1e56b [file] [log] [blame]
/*
* 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
}
}