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