/* * Copyright 2004-2011 H2 Group. * Copyright 2011 James Moger. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.iciql.util; /** * A utility class to build a statement. In addition to the methods supported by * StringBuilder, it allows to add a text only in the second iteration. This * simplified constructs such as: *

*

 * StringBuilder buff = new StringBuilder();
 * for (int i = 0; i < args.length; i++) {
 * 	if (i > 0) {
 * 		buff.append(", ");
 *    }
 * 	buff.append(args[i]);
 * }
 * 
*

* to *

*

 * StatementBuilder buff = new StatementBuilder();
 * for (String s : args) {
 * 	buff.appendExceptFirst(", ");
 * 	buff.append(a);
 * }
 * 
*/ public class StatementBuilder { private final StringBuilder builder = new StringBuilder(); private int index; /** * Create a new builder. */ public StatementBuilder() { // nothing to do } /** * Create a new builder. * * @param string the initial string */ public StatementBuilder(String string) { builder.append(string); } /** * Append a text. * * @param s the text to append * @return itself */ public StatementBuilder append(String s) { builder.append(s); return this; } /** * Append a character. * * @param c the character to append * @return itself */ public StatementBuilder append(char c) { builder.append(c); return this; } /** * Append a number. * * @param x the number to append * @return itself */ public StatementBuilder append(long x) { builder.append(x); return this; } /** * Returns the current value of the loop counter. * * @return the loop counter */ public int getCount() { return index; } /** * Reset the loop counter. * * @return itself */ public StatementBuilder resetCount() { index = 0; return this; } /** * Append a text, but only if appendExceptFirst was never called. * * @param s the text to append */ public void appendOnlyFirst(String s) { if (index == 0) { builder.append(s); } } /** * Append a text, except when this method is called the first time. * * @param s the text to append */ public void appendExceptFirst(String s) { if (index++ > 0) { builder.append(s); } } public void append(StatementBuilder sb) { builder.append(sb); } public void insert(int offset, char c) { builder.insert(offset, c); } public String toString() { return builder.toString(); } /** * Get the length. * * @return the length */ public int length() { return builder.length(); } }