package cn.bran.japid.util;
import java.io.IOException;
import java.io.Writer;
/**
* Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
/**
* <a href="StringBundler.java.html"><b><i>View Source</i></b></a>
*
* <p>
* See http://issues.liferay.com/browse/LPS-6072.
* </p>
*
* @author Shuyang Zhou
* @author Brian Wing Shun Chan
*/
public class StringBundler {
public StringBundler() {
_array = new String[_DEFAULT_ARRAY_CAPACITY];
}
public StringBundler(int initialCapacity) {
if (initialCapacity <= 0) {
throw new IllegalArgumentException();
}
_array = new String[initialCapacity];
}
public StringBundler(String s) {
_array = new String[_DEFAULT_ARRAY_CAPACITY];
_array[0] = s;
_arrayIndex = 1;
}
public StringBundler append(boolean b) {
if (b) {
return append(_TRUE);
} else {
return append(_FALSE);
}
}
public StringBundler append(double d) {
return append(Double.toString(d));
}
public StringBundler append(float f) {
return append(Float.toString(f));
}
public StringBundler append(int i) {
return append(Integer.toString(i));
}
public StringBundler append(long l) {
return append(Long.toString(l));
}
public StringBundler append(Object obj) {
return append(String.valueOf(obj));
}
public StringBundler append(String s) {
if (s == null) {
// bran: don't want to see the null
return this;
// s = "null";
}
if (_arrayIndex >= _array.length) {
expandCapacity();
}
_array[_arrayIndex++] = s;
return this;
}
public int capacity() {
return _array.length;
}
public int index() {
return _arrayIndex;
}
public void setIndex(int newIndex) {
if (newIndex < 0) {
throw new ArrayIndexOutOfBoundsException(newIndex);
}
if (newIndex > _array.length) {
String[] newArray = new String[newIndex];
System.arraycopy(_array, 0, newArray, 0, _arrayIndex);
_array = newArray;
}
if (_arrayIndex < newIndex) {
for (int i = _arrayIndex; i < newIndex; i++) {
_array[i] = "";
}
}
if (_arrayIndex > newIndex) {
for (int i = newIndex; i < _arrayIndex; i++) {
_array[i] = null;
}
}
_arrayIndex = newIndex;
}
public String stringAt(int index) {
if (index >= _arrayIndex) {
throw new ArrayIndexOutOfBoundsException();
}
return _array[index];
}
public String toString() {
if (_arrayIndex == 0) {
return "";
}
String s = null;
if (_arrayIndex <= 3) {
s = _array[0];
for (int i = 1; i < _arrayIndex; i++) {
s = s.concat(_array[i]);
}
} else {
int length = 0;
for (int i = 0; i < _arrayIndex; i++) {
length += _array[i].length();
}
StringBuilder sb = new StringBuilder(length);
for (int i = 0; i < _arrayIndex; i++) {
sb.append(_array[i]);
}
s = sb.toString();
}
return s;
}
public void print(Writer w) throws IOException {
if (_arrayIndex == 0) {
return;
}
for (int i = 0; i < _arrayIndex; i++) {
w.write(_array[i]);
}
}
protected void expandCapacity() {
String[] newArray = new String[_array.length << 1];
System.arraycopy(_array, 0, newArray, 0, _arrayIndex);
_array = newArray;
}
private static final int _DEFAULT_ARRAY_CAPACITY = 16;
private static final String _FALSE = "false";
private static final String _TRUE = "true";
private String[] _array;
private int _arrayIndex;
}