19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 Esmertec AG. 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 18a87afd07c0093cab638e9ef9bc2c53c8200ca711Tom Taylorpackage com.google.android.mms.pdu; 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.HashMap; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Map; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Vector; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PduBody { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Vector<PduPart> mParts = null; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<String, PduPart> mPartMapByContentId = null; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<String, PduPart> mPartMapByContentLocation = null; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<String, PduPart> mPartMapByName = null; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Map<String, PduPart> mPartMapByFileName = null; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Constructor. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduBody() { 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParts = new Vector<PduPart>(); 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByContentId = new HashMap<String, PduPart>(); 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByContentLocation = new HashMap<String, PduPart>(); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByName = new HashMap<String, PduPart>(); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByFileName = new HashMap<String, PduPart>(); 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void putPartToMaps(PduPart part) { 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put part to mPartMapByContentId. 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] contentId = part.getContentId(); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null != contentId) { 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByContentId.put(new String(contentId), part); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put part to mPartMapByContentLocation. 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] contentLocation = part.getContentLocation(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null != contentLocation) { 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String clc = new String(contentLocation); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByContentLocation.put(clc, part); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put part to mPartMapByName. 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] name = part.getName(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null != name) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String clc = new String(name); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByName.put(clc, part); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Put part to mPartMapByFileName. 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] fileName = part.getFilename(); 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null != fileName) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String clc = new String(fileName); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPartMapByFileName.put(clc, part); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Appends the specified part to the end of this body. 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param part part to be appended 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true when success, false when fail 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException when part is null 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean addPart(PduPart part) { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == part) { 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project putPartToMaps(part); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParts.add(part); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Inserts the specified part at the specified position. 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index index at which the specified part is to be inserted 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param part part to be inserted 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws NullPointerException when part is null 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void addPart(int index, PduPart part) { 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if(null == part) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new NullPointerException(); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project putPartToMaps(part); 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParts.add(index, part); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Removes the part at the specified position. 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index index of the part to return 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return part at the specified index 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart removePart(int index) { 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParts.remove(index); 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Remove all of the parts. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void removeAll() { 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mParts.clear(); 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the part at the specified position. 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param index index of the part to return 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return part at the specified index 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart getPart(int index) { 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParts.get(index); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the index of the specified part. 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param part the part object 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return index the index of the first occurrence of the part in this body 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getPartIndex(PduPart part) { 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParts.indexOf(part); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the number of parts. 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the number of parts 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getPartsNum() { 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mParts.size(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get pdu part by content id. 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cid the value of content id. 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the pdu part. 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart getPartByContentId(String cid) { 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPartMapByContentId.get(cid); 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get pdu part by Content-Location. Content-Location of part is 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the same as filename and name(param of content-type). 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fileName the value of filename. 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the pdu part. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart getPartByContentLocation(String contentLocation) { 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPartMapByContentLocation.get(contentLocation); 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get pdu part by name. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fileName the value of filename. 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the pdu part. 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart getPartByName(String name) { 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPartMapByName.get(name); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get pdu part by filename. 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param fileName the value of filename. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return the pdu part. 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PduPart getPartByFileName(String filename) { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mPartMapByFileName.get(filename); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 192