1d02a064168ae5c916b977182b764580e601cb084Wink Saville/* 2d02a064168ae5c916b977182b764580e601cb084Wink Saville * Copyright (C) 2007 Esmertec AG. 3d02a064168ae5c916b977182b764580e601cb084Wink Saville * Copyright (C) 2007 The Android Open Source Project 4d02a064168ae5c916b977182b764580e601cb084Wink Saville * 5d02a064168ae5c916b977182b764580e601cb084Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 6d02a064168ae5c916b977182b764580e601cb084Wink Saville * you may not use this file except in compliance with the License. 7d02a064168ae5c916b977182b764580e601cb084Wink Saville * You may obtain a copy of the License at 8d02a064168ae5c916b977182b764580e601cb084Wink Saville * 9d02a064168ae5c916b977182b764580e601cb084Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 10d02a064168ae5c916b977182b764580e601cb084Wink Saville * 11d02a064168ae5c916b977182b764580e601cb084Wink Saville * Unless required by applicable law or agreed to in writing, software 12d02a064168ae5c916b977182b764580e601cb084Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 13d02a064168ae5c916b977182b764580e601cb084Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14d02a064168ae5c916b977182b764580e601cb084Wink Saville * See the License for the specific language governing permissions and 15d02a064168ae5c916b977182b764580e601cb084Wink Saville * limitations under the License. 16d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 17d02a064168ae5c916b977182b764580e601cb084Wink Saville 18d02a064168ae5c916b977182b764580e601cb084Wink Savillepackage com.google.android.mms.pdu; 19d02a064168ae5c916b977182b764580e601cb084Wink Saville 20d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.HashMap; 21d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.Map; 22d02a064168ae5c916b977182b764580e601cb084Wink Savilleimport java.util.Vector; 23d02a064168ae5c916b977182b764580e601cb084Wink Saville 24d02a064168ae5c916b977182b764580e601cb084Wink Savillepublic class PduBody { 25d02a064168ae5c916b977182b764580e601cb084Wink Saville private Vector<PduPart> mParts = null; 26d02a064168ae5c916b977182b764580e601cb084Wink Saville 27d02a064168ae5c916b977182b764580e601cb084Wink Saville private Map<String, PduPart> mPartMapByContentId = null; 28d02a064168ae5c916b977182b764580e601cb084Wink Saville private Map<String, PduPart> mPartMapByContentLocation = null; 29d02a064168ae5c916b977182b764580e601cb084Wink Saville private Map<String, PduPart> mPartMapByName = null; 30d02a064168ae5c916b977182b764580e601cb084Wink Saville private Map<String, PduPart> mPartMapByFileName = null; 31d02a064168ae5c916b977182b764580e601cb084Wink Saville 32d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 33d02a064168ae5c916b977182b764580e601cb084Wink Saville * Constructor. 34d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 35d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduBody() { 36d02a064168ae5c916b977182b764580e601cb084Wink Saville mParts = new Vector<PduPart>(); 37d02a064168ae5c916b977182b764580e601cb084Wink Saville 38d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByContentId = new HashMap<String, PduPart>(); 39d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByContentLocation = new HashMap<String, PduPart>(); 40d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByName = new HashMap<String, PduPart>(); 41d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByFileName = new HashMap<String, PduPart>(); 42d02a064168ae5c916b977182b764580e601cb084Wink Saville } 43d02a064168ae5c916b977182b764580e601cb084Wink Saville 44d02a064168ae5c916b977182b764580e601cb084Wink Saville private void putPartToMaps(PduPart part) { 45d02a064168ae5c916b977182b764580e601cb084Wink Saville // Put part to mPartMapByContentId. 46d02a064168ae5c916b977182b764580e601cb084Wink Saville byte[] contentId = part.getContentId(); 47d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null != contentId) { 48d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByContentId.put(new String(contentId), part); 49d02a064168ae5c916b977182b764580e601cb084Wink Saville } 50d02a064168ae5c916b977182b764580e601cb084Wink Saville 51d02a064168ae5c916b977182b764580e601cb084Wink Saville // Put part to mPartMapByContentLocation. 52d02a064168ae5c916b977182b764580e601cb084Wink Saville byte[] contentLocation = part.getContentLocation(); 53d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null != contentLocation) { 54d02a064168ae5c916b977182b764580e601cb084Wink Saville String clc = new String(contentLocation); 55d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByContentLocation.put(clc, part); 56d02a064168ae5c916b977182b764580e601cb084Wink Saville } 57d02a064168ae5c916b977182b764580e601cb084Wink Saville 58d02a064168ae5c916b977182b764580e601cb084Wink Saville // Put part to mPartMapByName. 59d02a064168ae5c916b977182b764580e601cb084Wink Saville byte[] name = part.getName(); 60d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null != name) { 61d02a064168ae5c916b977182b764580e601cb084Wink Saville String clc = new String(name); 62d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByName.put(clc, part); 63d02a064168ae5c916b977182b764580e601cb084Wink Saville } 64d02a064168ae5c916b977182b764580e601cb084Wink Saville 65d02a064168ae5c916b977182b764580e601cb084Wink Saville // Put part to mPartMapByFileName. 66d02a064168ae5c916b977182b764580e601cb084Wink Saville byte[] fileName = part.getFilename(); 67d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null != fileName) { 68d02a064168ae5c916b977182b764580e601cb084Wink Saville String clc = new String(fileName); 69d02a064168ae5c916b977182b764580e601cb084Wink Saville mPartMapByFileName.put(clc, part); 70d02a064168ae5c916b977182b764580e601cb084Wink Saville } 71d02a064168ae5c916b977182b764580e601cb084Wink Saville } 72d02a064168ae5c916b977182b764580e601cb084Wink Saville 73d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 74d02a064168ae5c916b977182b764580e601cb084Wink Saville * Appends the specified part to the end of this body. 75d02a064168ae5c916b977182b764580e601cb084Wink Saville * 76d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param part part to be appended 77d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return true when success, false when fail 78d02a064168ae5c916b977182b764580e601cb084Wink Saville * @throws NullPointerException when part is null 79d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 80d02a064168ae5c916b977182b764580e601cb084Wink Saville public boolean addPart(PduPart part) { 81d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null == part) { 82d02a064168ae5c916b977182b764580e601cb084Wink Saville throw new NullPointerException(); 83d02a064168ae5c916b977182b764580e601cb084Wink Saville } 84d02a064168ae5c916b977182b764580e601cb084Wink Saville 85d02a064168ae5c916b977182b764580e601cb084Wink Saville putPartToMaps(part); 86d02a064168ae5c916b977182b764580e601cb084Wink Saville return mParts.add(part); 87d02a064168ae5c916b977182b764580e601cb084Wink Saville } 88d02a064168ae5c916b977182b764580e601cb084Wink Saville 89d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 90d02a064168ae5c916b977182b764580e601cb084Wink Saville * Inserts the specified part at the specified position. 91d02a064168ae5c916b977182b764580e601cb084Wink Saville * 92d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param index index at which the specified part is to be inserted 93d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param part part to be inserted 94d02a064168ae5c916b977182b764580e601cb084Wink Saville * @throws NullPointerException when part is null 95d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 96d02a064168ae5c916b977182b764580e601cb084Wink Saville public void addPart(int index, PduPart part) { 97d02a064168ae5c916b977182b764580e601cb084Wink Saville if(null == part) { 98d02a064168ae5c916b977182b764580e601cb084Wink Saville throw new NullPointerException(); 99d02a064168ae5c916b977182b764580e601cb084Wink Saville } 100d02a064168ae5c916b977182b764580e601cb084Wink Saville 101d02a064168ae5c916b977182b764580e601cb084Wink Saville putPartToMaps(part); 102d02a064168ae5c916b977182b764580e601cb084Wink Saville mParts.add(index, part); 103d02a064168ae5c916b977182b764580e601cb084Wink Saville } 104d02a064168ae5c916b977182b764580e601cb084Wink Saville 105d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 106d02a064168ae5c916b977182b764580e601cb084Wink Saville * Removes the part at the specified position. 107d02a064168ae5c916b977182b764580e601cb084Wink Saville * 108d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param index index of the part to return 109d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return part at the specified index 110d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 111d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart removePart(int index) { 112d02a064168ae5c916b977182b764580e601cb084Wink Saville return mParts.remove(index); 113d02a064168ae5c916b977182b764580e601cb084Wink Saville } 114d02a064168ae5c916b977182b764580e601cb084Wink Saville 115d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 116d02a064168ae5c916b977182b764580e601cb084Wink Saville * Remove all of the parts. 117d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 118d02a064168ae5c916b977182b764580e601cb084Wink Saville public void removeAll() { 119d02a064168ae5c916b977182b764580e601cb084Wink Saville mParts.clear(); 120d02a064168ae5c916b977182b764580e601cb084Wink Saville } 121d02a064168ae5c916b977182b764580e601cb084Wink Saville 122d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 123d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get the part at the specified position. 124d02a064168ae5c916b977182b764580e601cb084Wink Saville * 125d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param index index of the part to return 126d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return part at the specified index 127d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 128d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart getPart(int index) { 129d02a064168ae5c916b977182b764580e601cb084Wink Saville return mParts.get(index); 130d02a064168ae5c916b977182b764580e601cb084Wink Saville } 131d02a064168ae5c916b977182b764580e601cb084Wink Saville 132d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 133d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get the index of the specified part. 134d02a064168ae5c916b977182b764580e601cb084Wink Saville * 135d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param part the part object 136d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return index the index of the first occurrence of the part in this body 137d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 138d02a064168ae5c916b977182b764580e601cb084Wink Saville public int getPartIndex(PduPart part) { 139d02a064168ae5c916b977182b764580e601cb084Wink Saville return mParts.indexOf(part); 140d02a064168ae5c916b977182b764580e601cb084Wink Saville } 141d02a064168ae5c916b977182b764580e601cb084Wink Saville 142d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 143d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get the number of parts. 144d02a064168ae5c916b977182b764580e601cb084Wink Saville * 145d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return the number of parts 146d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 147d02a064168ae5c916b977182b764580e601cb084Wink Saville public int getPartsNum() { 148d02a064168ae5c916b977182b764580e601cb084Wink Saville return mParts.size(); 149d02a064168ae5c916b977182b764580e601cb084Wink Saville } 150d02a064168ae5c916b977182b764580e601cb084Wink Saville 151d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 152d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get pdu part by content id. 153d02a064168ae5c916b977182b764580e601cb084Wink Saville * 154d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param cid the value of content id. 155d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return the pdu part. 156d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 157d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart getPartByContentId(String cid) { 158d02a064168ae5c916b977182b764580e601cb084Wink Saville return mPartMapByContentId.get(cid); 159d02a064168ae5c916b977182b764580e601cb084Wink Saville } 160d02a064168ae5c916b977182b764580e601cb084Wink Saville 161d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 162d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get pdu part by Content-Location. Content-Location of part is 163d02a064168ae5c916b977182b764580e601cb084Wink Saville * the same as filename and name(param of content-type). 164d02a064168ae5c916b977182b764580e601cb084Wink Saville * 165d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param fileName the value of filename. 166d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return the pdu part. 167d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 168d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart getPartByContentLocation(String contentLocation) { 169d02a064168ae5c916b977182b764580e601cb084Wink Saville return mPartMapByContentLocation.get(contentLocation); 170d02a064168ae5c916b977182b764580e601cb084Wink Saville } 171d02a064168ae5c916b977182b764580e601cb084Wink Saville 172d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 173d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get pdu part by name. 174d02a064168ae5c916b977182b764580e601cb084Wink Saville * 175d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param fileName the value of filename. 176d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return the pdu part. 177d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 178d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart getPartByName(String name) { 179d02a064168ae5c916b977182b764580e601cb084Wink Saville return mPartMapByName.get(name); 180d02a064168ae5c916b977182b764580e601cb084Wink Saville } 181d02a064168ae5c916b977182b764580e601cb084Wink Saville 182d02a064168ae5c916b977182b764580e601cb084Wink Saville /** 183d02a064168ae5c916b977182b764580e601cb084Wink Saville * Get pdu part by filename. 184d02a064168ae5c916b977182b764580e601cb084Wink Saville * 185d02a064168ae5c916b977182b764580e601cb084Wink Saville * @param fileName the value of filename. 186d02a064168ae5c916b977182b764580e601cb084Wink Saville * @return the pdu part. 187d02a064168ae5c916b977182b764580e601cb084Wink Saville */ 188d02a064168ae5c916b977182b764580e601cb084Wink Saville public PduPart getPartByFileName(String filename) { 189d02a064168ae5c916b977182b764580e601cb084Wink Saville return mPartMapByFileName.get(filename); 190d02a064168ae5c916b977182b764580e601cb084Wink Saville } 191d02a064168ae5c916b977182b764580e601cb084Wink Saville} 192