1 /* 2 * Copyright (C) 2007 Esmertec AG. 3 * Copyright (C) 2007 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 /** 21 * A primitive is the basic packet sent between the IMPS server and the IMPS 22 * client. Note that this class is not thread-safe. 23 */ 24 public final class Primitive { 25 private TransactionMode mTransactionMode = TransactionMode.Request; 26 private String mTransactionId; 27 28 private String mSessionId; 29 30 private String mPoll; 31 private String mCir; 32 33 private PrimitiveElement mContentElement; 34 35 /** 36 * Constructs a new Primitive with default value. 37 */ 38 public Primitive() { 39 } 40 41 /** 42 * Constructs a new Primitive with a type. 43 * 44 * @param type the type of the primitive. 45 */ 46 public Primitive(String type) { 47 mContentElement = new PrimitiveElement(type); 48 } 49 50 /** 51 * Gets the session type of this primitive. 52 * 53 * @return the session type . 54 */ 55 public SessionType getSessionType() { 56 return mSessionId == null ? SessionType.Outband : SessionType.Inband; 57 } 58 59 /** 60 * Gets the session ID of this primitive. 61 * 62 * @return the session ID. 63 */ 64 public String getSessionId() { 65 return mSessionId; 66 } 67 68 /** 69 * Sets the session ID of this primitive. 70 * 71 * @param sessionId the session ID. 72 */ 73 public void setSession(String sessionId) { 74 this.mSessionId = sessionId; 75 } 76 77 /** 78 * Gets the transaction mode of this primitive. 79 * 80 * @return the transaction mode. 81 */ 82 public TransactionMode getTransactionMode() { 83 return mTransactionMode; 84 } 85 86 /** 87 * Sets the transaction mode of this primitive. 88 * 89 * @param mode the transaction mode. 90 */ 91 public void setTransactionMode(TransactionMode mode) { 92 this.mTransactionMode = mode; 93 } 94 95 /** 96 * Gets the transaction ID of this primitive. 97 * 98 * @return the transaction ID. 99 */ 100 public String getTransactionID() { 101 return mTransactionId; 102 } 103 104 /** 105 * Sets the transaction ID of this primitive. 106 * @param transId the transaction ID. 107 */ 108 public void setTransactionId(String transId) { 109 this.mTransactionId = transId; 110 } 111 112 public void setTransaction(ImpsTransaction transaction) { 113 this.mTransactionId = transaction.getId(); 114 } 115 116 public String getCir() { 117 return mCir; 118 } 119 120 public void setCir(String cir) { 121 this.mCir = cir; 122 } 123 124 public String getPoll() { 125 return mPoll; 126 } 127 128 public void setPoll(String poll) { 129 this.mPoll = poll; 130 } 131 132 public String getType() { 133 return (mContentElement == null) ? null : mContentElement.getTagName(); 134 } 135 136 public PrimitiveElement getContentElement() { 137 return mContentElement; 138 } 139 140 public void setContentElement(String type) { 141 mContentElement = new PrimitiveElement(type); 142 } 143 144 public PrimitiveElement addElement(String tag) { 145 return mContentElement.addChild(tag); 146 } 147 148 public void addElement(String tag, String value) { 149 mContentElement.addChild(tag, value); 150 } 151 152 public void addElement(String tag, boolean value) { 153 mContentElement.addChild(tag, value); 154 } 155 156 public void addElement(PrimitiveElement elem) { 157 mContentElement.addChild(elem); 158 } 159 160 public PrimitiveElement getElement(String tag) { 161 return mContentElement.getChild(tag); 162 } 163 164 public String getElementContents(String tag) { 165 PrimitiveElement elem = getElement(tag); 166 return elem == null ? null : elem.getContents(); 167 } 168 169 PrimitiveElement createMessage(String versionUri, String transactUri) { 170 PrimitiveElement root = new PrimitiveElement(ImpsTags.WV_CSP_Message); 171 172 root.setAttribute(ImpsTags.XMLNS, versionUri); 173 PrimitiveElement sessionElem = root.addChild(ImpsTags.Session); 174 175 PrimitiveElement sessionDescElem = sessionElem.addChild( 176 ImpsTags.SessionDescriptor); 177 sessionDescElem.addChild(ImpsTags.SessionType, 178 getSessionType().toString()); 179 if (getSessionId() != null) { 180 sessionDescElem.addChild(ImpsTags.SessionID, getSessionId()); 181 } 182 183 PrimitiveElement transElem = sessionElem.addChild(ImpsTags.Transaction); 184 185 PrimitiveElement transDescElem = transElem.addChild( 186 ImpsTags.TransactionDescriptor); 187 transDescElem.addChild(ImpsTags.TransactionMode, 188 getTransactionMode().toString()); 189 if (getTransactionID() != null) { 190 transDescElem.addChild(ImpsTags.TransactionID, getTransactionID()); 191 } 192 193 PrimitiveElement transContentElem = transElem.addChild( 194 ImpsTags.TransactionContent); 195 transContentElem.setAttribute(ImpsTags.XMLNS, transactUri); 196 transContentElem.addChild(getContentElement()); 197 198 return root; 199 } 200 201 /** 202 * Represents the transaction mode of a primitive. 203 */ 204 public static enum TransactionMode { 205 /** 206 * Indicates the primitive is a request in a transaction. 207 */ 208 Request, 209 210 /** 211 * Indicates the primitive is a response in a transaction. 212 */ 213 Response 214 } 215 216 /** 217 * Represents the session type of a primitive. 218 */ 219 public static enum SessionType { 220 /** 221 * Indicates a primitive is sent within a session. 222 */ 223 Inband, 224 225 /** 226 * Indicates a primitive is sent without a session. 227 */ 228 Outband 229 } 230 } 231