1d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/* 2d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2007-2008 Esmertec AG. 3d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Copyright (C) 2007-2008 The Android Open Source Project 4d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 5d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Licensed under the Apache License, Version 2.0 (the "License"); 6d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * you may not use this file except in compliance with the License. 7d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * You may obtain a copy of the License at 8d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 9d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * http://www.apache.org/licenses/LICENSE-2.0 10d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 11d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Unless required by applicable law or agreed to in writing, software 12d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * distributed under the License is distributed on an "AS IS" BASIS, 13d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * See the License for the specific language governing permissions and 15d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * limitations under the License. 16d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 17d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 18d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpackage android.support.v7.mms.pdu; 19d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 20d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport android.util.Log; 21d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 22d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.ByteArrayOutputStream; 23d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.IOException; 24d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.io.UnsupportedEncodingException; 25d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddimport java.util.ArrayList; 26d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 27d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd/** 28d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Encoded-string-value = Text-string | Value-length Char-set Text-string 29d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 30d3b009ae55651f1e60950342468e3c37fdeb0796Mike Doddpublic class EncodedStringValue implements Cloneable { 31d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final String TAG = "EncodedStringValue"; 32d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final boolean DEBUG = false; 33d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private static final boolean LOCAL_LOGV = false; 34d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 35d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 36d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * The Char-set value. 37d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 38d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private int mCharacterSet; 39d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 40d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 41d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * The Text-string value. 42d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 43d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd private byte[] mData; 44d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 45d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 46d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Constructor. 47d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 48d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param charset the Char-set value 49d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param data the Text-string value 50d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @throws NullPointerException if Text-string value is null. 51d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 52d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public EncodedStringValue(int charset, byte[] data) { 53d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // TODO: CharSet needs to be validated against MIBEnum. 54d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if(null == data) { 55d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd throw new NullPointerException("EncodedStringValue: Text-string is null."); 56d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 57d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 58d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mCharacterSet = charset; 59d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mData = new byte[data.length]; 60d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd System.arraycopy(data, 0, mData, 0, data.length); 61d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 62d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 63d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 64d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Constructor. 65d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 66d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param data the Text-string value 67d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @throws NullPointerException if Text-string value is null. 68d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 69d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public EncodedStringValue(byte[] data) { 70d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd this(CharacterSets.DEFAULT_CHARSET, data); 71d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 72d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 73d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public EncodedStringValue(String data) { 74d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 75d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mData = data.getBytes(CharacterSets.DEFAULT_CHARSET_NAME); 76d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mCharacterSet = CharacterSets.DEFAULT_CHARSET; 77d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (UnsupportedEncodingException e) { 78d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.e(TAG, "Default encoding must be supported.", e); 79d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 80d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 81d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 82d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 83d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Get Char-set value. 84d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 85d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return the value 86d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 87d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public int getCharacterSet() { 88d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return mCharacterSet; 89d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 90d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 91d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 92d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Set Char-set value. 93d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 94d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param charset the Char-set value 95d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 96d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setCharacterSet(int charset) { 97d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // TODO: CharSet needs to be validated against MIBEnum. 98d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mCharacterSet = charset; 99d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 100d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 101d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 102d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Get Text-string value. 103d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 104d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return the value 105d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 106d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public byte[] getTextString() { 107d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd byte[] byteArray = new byte[mData.length]; 108d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 109d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd System.arraycopy(mData, 0, byteArray, 0, mData.length); 110d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return byteArray; 111d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 112d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 113d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 114d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Set Text-string value. 115d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 116d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param textString the Text-string value 117d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @throws NullPointerException if Text-string value is null. 118d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 119d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void setTextString(byte[] textString) { 120d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if(null == textString) { 121d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd throw new NullPointerException("EncodedStringValue: Text-string is null."); 122d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 123d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 124d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mData = new byte[textString.length]; 125d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd System.arraycopy(textString, 0, mData, 0, textString.length); 126d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 127d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 128d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 129d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Convert this object to a {@link java.lang.String}. If the encoding of 130d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * the EncodedStringValue is null or unsupported, it will be 131d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * treated as iso-8859-1 encoding. 132d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 133d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return The decoded String. 134d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 135d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public String getString() { 136d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (CharacterSets.ANY_CHARSET == mCharacterSet) { 137d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new String(mData); // system default encoding. 138d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 139d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 140d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String name = CharacterSets.getMimeName(mCharacterSet); 141d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new String(mData, name); 142d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (UnsupportedEncodingException e) { 143d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (LOCAL_LOGV) { 144d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.v(TAG, e.getMessage(), e); 145d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 146d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 147d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new String(mData, CharacterSets.MIMENAME_ISO_8859_1); 148ec2fe3006b51e33505be8a4cb8366d8e03762df4Ye Wen } catch (UnsupportedEncodingException e2) { 149d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new String(mData); // system default encoding. 150d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 151d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 152d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 153d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 154d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 155d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 156d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Append to Text-string. 157d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 158d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param textString the textString to append 159d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @throws NullPointerException if the text String is null 160d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * or an IOException occured. 161d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 162d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public void appendTextString(byte[] textString) { 163d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if(null == textString) { 164d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd throw new NullPointerException("Text-string is null."); 165d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 166d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 167d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if(null == mData) { 168d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mData = new byte[textString.length]; 169d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd System.arraycopy(textString, 0, mData, 0, textString.length); 170d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 171d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ByteArrayOutputStream newTextString = new ByteArrayOutputStream(); 172d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 173d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd newTextString.write(mData); 174d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd newTextString.write(textString); 175d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (IOException e) { 176d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd e.printStackTrace(); 177d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd throw new NullPointerException( 178d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd "appendTextString: failed when write a new Text-string"); 179d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 180d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 181d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd mData = newTextString.toByteArray(); 182d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 183d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 184d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 185d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /* 186d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * (non-Javadoc) 187d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @see java.lang.Object#clone() 188d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 189d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd @Override 190d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public Object clone() throws CloneNotSupportedException { 191d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd super.clone(); 192d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int len = mData.length; 193d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd byte[] dstBytes = new byte[len]; 194d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd System.arraycopy(mData, 0, dstBytes, 0, len); 195d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 196d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 197d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new EncodedStringValue(mCharacterSet, dstBytes); 198d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } catch (Exception e) { 199d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd Log.e(TAG, "failed to clone an EncodedStringValue: " + this); 200d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd e.printStackTrace(); 201d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd throw new CloneNotSupportedException(e.getMessage()); 202d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 203d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 204d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 205d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 206d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Split this encoded string around matches of the given pattern. 207d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * 208d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @param pattern the delimiting pattern 209d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * @return the array of encoded strings computed by splitting this encoded 210d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * string around matches of the given pattern 211d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 212d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public EncodedStringValue[] split(String pattern) { 213d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String[] temp = getString().split(pattern); 214d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd EncodedStringValue[] ret = new EncodedStringValue[temp.length]; 215d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 0; i < ret.length; ++i) { 216d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd try { 217d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ret[i] = new EncodedStringValue(mCharacterSet, 218d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd temp[i].getBytes()); 219ec2fe3006b51e33505be8a4cb8366d8e03762df4Ye Wen } catch (NullPointerException e) { 220d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd // Can't arrive here 221d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 222d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 223d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 224d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return ret; 225d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 226d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 227d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 228d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Extract an EncodedStringValue[] from a given String. 229d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 230d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static EncodedStringValue[] extract(String src) { 231d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd String[] values = src.split(";"); 232d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 233d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd ArrayList<EncodedStringValue> list = new ArrayList<EncodedStringValue>(); 234d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 0; i < values.length; i++) { 235d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (values[i].length() > 0) { 236d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd list.add(new EncodedStringValue(values[i])); 237d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 238d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 239d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 240d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int len = list.size(); 241d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (len > 0) { 242d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return list.toArray(new EncodedStringValue[len]); 243d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } else { 244d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 245d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 246d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 247d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 248d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd /** 249d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd * Concatenate an EncodedStringValue[] into a single String. 250d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd */ 251d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static String concat(EncodedStringValue[] addr) { 252d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd StringBuilder sb = new StringBuilder(); 253d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int maxIndex = addr.length - 1; 254d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 0; i <= maxIndex; i++) { 255d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(addr[i].getString()); 256d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (i < maxIndex) { 257d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd sb.append(";"); 258d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 259d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 260d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 261d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return sb.toString(); 262d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 263d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 264d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static EncodedStringValue copy(EncodedStringValue value) { 265d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (value == null) { 266d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 267d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 268d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 269d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return new EncodedStringValue(value.mCharacterSet, value.mData); 270d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 271d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd 272d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd public static EncodedStringValue[] encodeStrings(String[] array) { 273d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd int count = array.length; 274d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd if (count > 0) { 275d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd EncodedStringValue[] encodedArray = new EncodedStringValue[count]; 276d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd for (int i = 0; i < count; i++) { 277d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd encodedArray[i] = new EncodedStringValue(array[i]); 278d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 279d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return encodedArray; 280d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 281d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd return null; 282d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd } 283d3b009ae55651f1e60950342468e3c37fdeb0796Mike Dodd} 284