package mireka.transmission.queue.dataprop; import java.util.List; class ListFormatter { public final StringBuilder buffer = new StringBuilder(); private final List<?> list; public ListFormatter(List<?> list) { this.list = list; } public String format() { formatInner(); return buffer.toString(); } private void formatInner() { for (Object element : list) { if (buffer.length() != 0) buffer.append(", "); buffer.append(escapeListElementIfNecessary(element.toString())); } } private String escapeListElementIfNecessary(String element) { if (!containsSpecialListCharacters(element)) return element; StringBuilder buffer = new StringBuilder(); buffer.append('"'); for (int i = 0; i < element.length(); i++) { char ch = element.charAt(i); if (ch == '"') buffer.append("\\\""); else if (ch == '\\') buffer.append("\\\\"); else buffer.append(ch); } buffer.append('"'); return buffer.toString(); } private boolean containsSpecialListCharacters(String element) { for (int i = 0; i < element.length(); i++) { char ch = element.charAt(i); if (ch == '"' || ch == ',' || ch == '\\') return true; } return false; } }