Search in sources :

Example 11 with Writable

use of groovy.lang.Writable in project sling by apache.

the class GSPScriptEngine method eval.

public Object eval(Reader reader, ScriptContext ctx) throws ScriptException {
    Template template = null;
    try {
        template = templateEngine.createTemplate(reader);
    } catch (IOException e) {
        throw new ScriptException("Unable to compile GSP script: " + e.getMessage());
    } catch (ClassNotFoundException e) {
        throw new ScriptException("Unable to compile GSP script: " + e.getMessage());
    }
    Bindings bindings = ctx.getBindings(ScriptContext.ENGINE_SCOPE);
    Writable result = template.make(bindings);
    try {
        result.writeTo(ctx.getWriter());
    } catch (IOException e) {
        throw new ScriptException("Unable to write result of script execution: " + e.getMessage());
    }
    return null;
}
Also used : ScriptException(javax.script.ScriptException) Writable(groovy.lang.Writable) IOException(java.io.IOException) Bindings(javax.script.Bindings) Template(groovy.text.Template)

Example 12 with Writable

use of groovy.lang.Writable in project groovy-core by groovy.

the class EncodingGroovyMethods method encodeBase64.

/**
     * Produce a Writable object which writes the Base64 encoding of the byte array.
     * Calling toString() on the result returns the encoding as a String. For more
     * information on Base64 encoding and chunking see <code>RFC 4648</code>.
     *
     * @param data byte array to be encoded
     * @param chunked whether or not the Base64 encoded data should be MIME chunked
     * @return object which will write the Base64 encoding of the byte array
     * @since 1.5.7
     */
public static Writable encodeBase64(final byte[] data, final boolean chunked) {
    return new Writable() {

        public Writer writeTo(final Writer writer) throws IOException {
            int charCount = 0;
            final int dLimit = (data.length / 3) * 3;
            for (int dIndex = 0; dIndex != dLimit; dIndex += 3) {
                int d = ((data[dIndex] & 0XFF) << 16) | ((data[dIndex + 1] & 0XFF) << 8) | (data[dIndex + 2] & 0XFF);
                writer.write(T_TABLE[d >> 18]);
                writer.write(T_TABLE[(d >> 12) & 0X3F]);
                writer.write(T_TABLE[(d >> 6) & 0X3F]);
                writer.write(T_TABLE[d & 0X3F]);
                if (chunked && ++charCount == 19) {
                    writer.write(CHUNK_SEPARATOR);
                    charCount = 0;
                }
            }
            if (dLimit != data.length) {
                int d = (data[dLimit] & 0XFF) << 16;
                if (dLimit + 1 != data.length) {
                    d |= (data[dLimit + 1] & 0XFF) << 8;
                }
                writer.write(T_TABLE[d >> 18]);
                writer.write(T_TABLE[(d >> 12) & 0X3F]);
                writer.write((dLimit + 1 < data.length) ? T_TABLE[(d >> 6) & 0X3F] : '=');
                writer.write('=');
                if (chunked && charCount != 0) {
                    writer.write(CHUNK_SEPARATOR);
                }
            }
            return writer;
        }

        public String toString() {
            StringWriter buffer = new StringWriter();
            try {
                writeTo(buffer);
            } catch (IOException e) {
                throw new StringWriterIOException(e);
            }
            return buffer.toString();
        }
    };
}
Also used : StringWriter(java.io.StringWriter) StringWriterIOException(groovy.lang.StringWriterIOException) Writable(groovy.lang.Writable) StringWriterIOException(groovy.lang.StringWriterIOException) IOException(java.io.IOException) StringWriter(java.io.StringWriter) Writer(java.io.Writer)

Example 13 with Writable

use of groovy.lang.Writable in project groovy by apache.

the class IOGroovyMethods method filterLine.

/**
     * Filter the lines from this Reader, and return a Writable which can be
     * used to stream the filtered lines to a destination.  The closure should
     * return <code>true</code> if the line should be passed to the writer.
     *
     * @param reader  this reader
     * @param closure a closure used for filtering
     * @return a Writable which will use the closure to filter each line
     *         from the reader when the Writable#writeTo(Writer) is called.
     * @since 1.0
     */
public static Writable filterLine(Reader reader, @ClosureParams(value = SimpleType.class, options = "java.lang.String") final Closure closure) {
    final BufferedReader br = new BufferedReader(reader);
    return new Writable() {

        public Writer writeTo(Writer out) throws IOException {
            BufferedWriter bw = new BufferedWriter(out);
            String line;
            BooleanClosureWrapper bcw = new BooleanClosureWrapper(closure);
            while ((line = br.readLine()) != null) {
                if (bcw.call(line)) {
                    bw.write(line);
                    bw.newLine();
                }
            }
            bw.flush();
            return out;
        }

        public String toString() {
            StringWriter buffer = new StringWriter();
            try {
                writeTo(buffer);
            } catch (IOException e) {
                throw new StringWriterIOException(e);
            }
            return buffer.toString();
        }
    };
}
Also used : BooleanClosureWrapper(org.codehaus.groovy.runtime.callsite.BooleanClosureWrapper) StringWriter(java.io.StringWriter) StringWriterIOException(groovy.lang.StringWriterIOException) BufferedReader(java.io.BufferedReader) Writable(groovy.lang.Writable) FromString(groovy.transform.stc.FromString) StringWriterIOException(groovy.lang.StringWriterIOException) IOException(java.io.IOException) GroovyPrintWriter(groovy.io.GroovyPrintWriter) OutputStreamWriter(java.io.OutputStreamWriter) PrintWriter(java.io.PrintWriter) BufferedWriter(java.io.BufferedWriter) StringWriter(java.io.StringWriter) Writer(java.io.Writer) BufferedWriter(java.io.BufferedWriter)

Example 14 with Writable

use of groovy.lang.Writable in project groovy by apache.

the class EncodingGroovyMethods method encodeBase64.

private static Writable encodeBase64(final byte[] data, final boolean chunked, final boolean urlSafe, final boolean pad) {
    return new Writable() {

        public Writer writeTo(final Writer writer) throws IOException {
            int charCount = 0;
            final int dLimit = (data.length / 3) * 3;
            final char[] table = urlSafe ? T_TABLE_URLSAFE : T_TABLE;
            for (int dIndex = 0; dIndex != dLimit; dIndex += 3) {
                int d = ((data[dIndex] & 0XFF) << 16) | ((data[dIndex + 1] & 0XFF) << 8) | (data[dIndex + 2] & 0XFF);
                writer.write(table[d >> 18]);
                writer.write(table[(d >> 12) & 0X3F]);
                writer.write(table[(d >> 6) & 0X3F]);
                writer.write(table[d & 0X3F]);
                if (chunked && ++charCount == 19) {
                    writer.write(CHUNK_SEPARATOR);
                    charCount = 0;
                }
            }
            if (dLimit != data.length) {
                int d = (data[dLimit] & 0XFF) << 16;
                if (dLimit + 1 != data.length) {
                    d |= (data[dLimit + 1] & 0XFF) << 8;
                }
                writer.write(table[d >> 18]);
                writer.write(table[(d >> 12) & 0X3F]);
                if (pad) {
                    writer.write((dLimit + 1 < data.length) ? table[(d >> 6) & 0X3F] : '=');
                    writer.write('=');
                } else {
                    if (dLimit + 1 < data.length) {
                        writer.write(table[(d >> 6) & 0X3F]);
                    }
                }
                if (chunked && charCount != 0) {
                    writer.write(CHUNK_SEPARATOR);
                }
            }
            return writer;
        }

        public String toString() {
            StringWriter buffer = new StringWriter();
            try {
                writeTo(buffer);
            } catch (IOException e) {
                throw new StringWriterIOException(e);
            }
            return buffer.toString();
        }
    };
}
Also used : StringWriter(java.io.StringWriter) StringWriterIOException(groovy.lang.StringWriterIOException) Writable(groovy.lang.Writable) StringWriterIOException(groovy.lang.StringWriterIOException) IOException(java.io.IOException) StringWriter(java.io.StringWriter) Writer(java.io.Writer)

Example 15 with Writable

use of groovy.lang.Writable in project spring-boot by spring-projects.

the class GroovyTemplate method template.

public static String template(TemplateEngine engine, String name, Map<String, ?> model) throws IOException, CompilationFailedException, ClassNotFoundException {
    Writable writable = getTemplate(engine, name).make(model);
    StringWriter result = new StringWriter();
    writable.writeTo(result);
    return result.toString();
}
Also used : StringWriter(java.io.StringWriter) Writable(groovy.lang.Writable)

Aggregations

Writable (groovy.lang.Writable)16 IOException (java.io.IOException)10 StringWriter (java.io.StringWriter)9 Writer (java.io.Writer)7 StringWriterIOException (groovy.lang.StringWriterIOException)6 Template (groovy.text.Template)3 OutputStreamWriter (java.io.OutputStreamWriter)3 GroovyPrintWriter (groovy.io.GroovyPrintWriter)2 GString (groovy.lang.GString)2 GroovyObject (groovy.lang.GroovyObject)2 GroovyRuntimeException (groovy.lang.GroovyRuntimeException)2 SpreadMap (groovy.lang.SpreadMap)2 FromString (groovy.transform.stc.FromString)2 BufferedReader (java.io.BufferedReader)2 BufferedWriter (java.io.BufferedWriter)2 InputStream (java.io.InputStream)2 InputStreamReader (java.io.InputStreamReader)2 PrintWriter (java.io.PrintWriter)2 Reader (java.io.Reader)2 Collection (java.util.Collection)2