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