
com.weaverplatform.util.IndentStringBuilder Maven / Gradle / Ivy
package com.weaverplatform.util;
import java.util.ArrayList;
import java.util.Iterator;
public class IndentStringBuilder {
public interface Serializable {
void buildString(IndentStringBuilder builder);
}
private final StringBuilder builder = new StringBuilder();
private int level = 0;
private final String indention = " ";
private final String newline = "\n";
private final char[] trimmable = new char[]{' ', '\n', '\t', '\r'};
private ArrayList list = null;
public void append(String str) {
builder.append(str);
}
public void appendLine(String str) {
appendLine(str, 0);
}
public void appendLine(String str, int increase) {
builder.append(str);
newline(increase);
}
public void appendJoin(String delimiter, Iterator iterator) {
appendJoin(delimiter, false, iterator);
}
public void appendJoin(String delimiter, boolean newline, Iterator iterator) {
while(iterator.hasNext()) {
Object next = iterator.next();
if(next instanceof IndentStringBuilder.Serializable) {
((IndentStringBuilder.Serializable)next).buildString(this);
} else {
append(next.toString());
}
if(iterator.hasNext()) {
append(delimiter);
if(newline) {
newline();
}
}
}
}
public void newline() {
newline(0);
}
public void newline(int increase) {
builder.append(newline);
updateLevel(increase);
indent(level);
}
public void updateLevel(int increase) {
level = Math.max(0, level + increase);
}
private void indent(int count) {
while(count-- > 0) {
builder.append(indention);
}
}
public void retract() {
while(builder.length() != 0) {
boolean didDelete = false;
for(char trim : trimmable) {
if(trim == builder.charAt(builder.length() - 1)) {
didDelete = true;
builder.deleteCharAt(builder.length() - 1);
break;
}
}
if(!didDelete) {
return;
}
}
}
public void recordList() {
if(list != null) {
throw new RuntimeException("Can not start list when already recording, first cancelList() or appendList().");
}
list = new ArrayList<>();
}
public void appendListItem(String item) {
if(list == null) {
throw new RuntimeException("First call recordList().");
}
list.add(item);
}
public void appendList(String delimiter, boolean newline) {
if(list == null) {
throw new RuntimeException("First call recordList().");
}
appendJoin(delimiter, newline, list.iterator());
list = null;
}
public void cancelList() {
list = null;
}
public int listSize() {
if(list == null) {
return 0;
}
return list.size();
}
@Override
public String toString() {
return builder.toString();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy