Example usage for org.springframework.core.io.support EncodedResource toString

List of usage examples for org.springframework.core.io.support EncodedResource toString

Introduction

In this page you can find the example usage for org.springframework.core.io.support EncodedResource toString.

Prototype

@Override
    public String toString() 

Source Link

Usage

From source file:be.jacobsvanroy.springsqlunit.util.ScriptUtils.java

/**
 * Split an SQL script into separate statements delimited by the provided
 * separator string. Each individual statement will be added to the provided
 * {@code List}.//from   www.  j  a va2s .c  om
 * <p>Within the script, the provided {@code commentPrefix} will be honored:
 * any text beginning with the comment prefix and extending to the end of the
 * line will be omitted from the output. Similarly, the provided
 * {@code blockCommentStartDelimiter} and {@code blockCommentEndDelimiter}
 * delimiters will be honored: any text enclosed in a block comment will be
 * omitted from the output. In addition, multiple adjacent whitespace characters
 * will be collapsed into a single space.
 *
 * @param resource                   the resource from which the script was read
 * @param script                     the SQL script; never {@code null} or empty
 * @param separator                  text separating each statement &mdash; typically a ';' or
 *                                   newline character; never {@code null}
 * @param commentPrefix              the prefix that identifies SQL line comments &mdash;
 *                                   typically "--"; never {@code null} or empty
 * @param blockCommentStartDelimiter the <em>start</em> block comment delimiter;
 *                                   never {@code null} or empty
 * @param blockCommentEndDelimiter   the <em>end</em> block comment delimiter;
 *                                   never {@code null} or empty
 * @param statements                 the list that will contain the individual statements
 */
public static void splitSqlScript(EncodedResource resource, String script, String separator,
        String commentPrefix, String blockCommentStartDelimiter, String blockCommentEndDelimiter,
        List<String> statements) {

    Assert.hasText(script, "script must not be null or empty");
    Assert.notNull(separator, "separator must not be null");
    Assert.hasText(commentPrefix, "commentPrefix must not be null or empty");
    Assert.hasText(blockCommentStartDelimiter, "blockCommentStartDelimiter must not be null or empty");
    Assert.hasText(blockCommentEndDelimiter, "blockCommentEndDelimiter must not be null or empty");

    StringBuilder sb = new StringBuilder();
    boolean inLiteral = false;
    boolean inEscape = false;
    char[] content = script.toCharArray();
    for (int i = 0; i < script.length(); i++) {
        char c = content[i];
        if (inEscape) {
            inEscape = false;
            sb.append(c);
            continue;
        }
        // MySQL style escapes
        if (c == '\\') {
            inEscape = true;
            sb.append(c);
            continue;
        }
        if (c == '\'') {
            inLiteral = !inLiteral;
        }
        if (!inLiteral) {
            if (script.startsWith(separator, i)) {
                // we've reached the end of the current statement
                if (sb.length() > 0) {
                    statements.add(sb.toString());
                    sb = new StringBuilder();
                }
                i += separator.length() - 1;
                continue;
            } else if (script.startsWith(commentPrefix, i)) {
                // skip over any content from the start of the comment to the EOL
                int indexOfNextNewline = script.indexOf("\n", i);
                if (indexOfNextNewline > i) {
                    i = indexOfNextNewline;
                    continue;
                } else {
                    // if there's no EOL, we must be at the end
                    // of the script, so stop here.
                    break;
                }
            } else if (script.startsWith(blockCommentStartDelimiter, i)) {
                // skip over any block comments
                int indexOfCommentEnd = script.indexOf(blockCommentEndDelimiter, i);
                if (indexOfCommentEnd > i) {
                    i = indexOfCommentEnd + blockCommentEndDelimiter.length() - 1;
                    continue;
                } else {
                    throw new RuntimeException(
                            String.format("Missing block comment end delimiter [%s] for resource [%s].",
                                    blockCommentEndDelimiter, resource.toString()));
                }
            } else if (c == ' ' || c == '\n' || c == '\t') {
                // avoid multiple adjacent whitespace characters
                if (sb.length() > 0 && sb.charAt(sb.length() - 1) != ' ') {
                    c = ' ';
                } else {
                    continue;
                }
            }
        }
        sb.append(c);
    }
    if (StringUtils.hasText(sb)) {
        statements.add(sb.toString());
    }
}